diff --git a/Package.swift b/Package.swift index bb49aa8cbf0..8ec4f056aee 100644 --- a/Package.swift +++ b/Package.swift @@ -169,7 +169,7 @@ func addProtocolTests() { // MARK: - Generated addDependencies( - clientRuntimeVersion: "0.25.0", + clientRuntimeVersion: "0.26.0", crtVersion: "0.12.0" ) @@ -295,6 +295,7 @@ let serviceTargets: [String] = [ "AWSElasticLoadBalancingv2", "AWSElasticTranscoder", "AWSElasticsearchService", + "AWSEntityResolution", "AWSEventBridge", "AWSEvidently", "AWSFMS", @@ -380,6 +381,7 @@ let serviceTargets: [String] = [ "AWSMacie", "AWSMacie2", "AWSManagedBlockchain", + "AWSManagedBlockchainQuery", "AWSMarketplaceCatalog", "AWSMarketplaceCommerceAnalytics", "AWSMarketplaceEntitlementService", @@ -393,6 +395,7 @@ let serviceTargets: [String] = [ "AWSMediaStore", "AWSMediaStoreData", "AWSMediaTailor", + "AWSMedicalImaging", "AWSMemoryDB", "AWSMgn", "AWSMigrationHub", diff --git a/Package.version b/Package.version index 1db0edecc06..a7f3fc27a7a 100644 --- a/Package.version +++ b/Package.version @@ -1 +1 @@ -0.21.0 \ No newline at end of file +0.22.0 \ No newline at end of file diff --git a/Sources/Services/AWSAmplifyUIBuilder/AmplifyUIBuilderClient.swift b/Sources/Services/AWSAmplifyUIBuilder/AmplifyUIBuilderClient.swift index 1ec510943c2..18ad65e7d03 100644 --- a/Sources/Services/AWSAmplifyUIBuilder/AmplifyUIBuilderClient.swift +++ b/Sources/Services/AWSAmplifyUIBuilder/AmplifyUIBuilderClient.swift @@ -112,7 +112,7 @@ extension AmplifyUIBuilderClient: AmplifyUIBuilderClientProtocol { return result } - /// Creates a new form for an Amplify. + /// Creates a new form for an Amplify app. public func createForm(input: CreateFormInput) async throws -> CreateFormOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -812,7 +812,7 @@ extension AmplifyUIBuilderClient: AmplifyUIBuilderClientProtocol { return result } - /// Starts a code generation job for for a specified Amplify app and backend environment. + /// Starts a code generation job for a specified Amplify app and backend environment. public func startCodegenJob(input: StartCodegenJobInput) async throws -> StartCodegenJobOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSAmplifyUIBuilder/AmplifyUIBuilderClientProtocol.swift b/Sources/Services/AWSAmplifyUIBuilder/AmplifyUIBuilderClientProtocol.swift index 4d82f47ccb1..e5eaafb3ad7 100644 --- a/Sources/Services/AWSAmplifyUIBuilder/AmplifyUIBuilderClientProtocol.swift +++ b/Sources/Services/AWSAmplifyUIBuilder/AmplifyUIBuilderClientProtocol.swift @@ -6,7 +6,7 @@ import ClientRuntime public protocol AmplifyUIBuilderClientProtocol { /// Creates a new component for an Amplify app. func createComponent(input: CreateComponentInput) async throws -> CreateComponentOutputResponse - /// Creates a new form for an Amplify. + /// Creates a new form for an Amplify app. func createForm(input: CreateFormInput) async throws -> CreateFormOutputResponse /// Creates a theme to apply to the components in an Amplify app. func createTheme(input: CreateThemeInput) async throws -> CreateThemeOutputResponse @@ -46,7 +46,7 @@ public protocol AmplifyUIBuilderClientProtocol { func putMetadataFlag(input: PutMetadataFlagInput) async throws -> PutMetadataFlagOutputResponse /// Refreshes a previously issued access token that might have expired. func refreshToken(input: RefreshTokenInput) async throws -> RefreshTokenOutputResponse - /// Starts a code generation job for for a specified Amplify app and backend environment. + /// Starts a code generation job for a specified Amplify app and backend environment. func startCodegenJob(input: StartCodegenJobInput) async throws -> StartCodegenJobOutputResponse /// Updates an existing component. func updateComponent(input: UpdateComponentInput) async throws -> UpdateComponentOutputResponse diff --git a/Sources/Services/AWSAmplifyUIBuilder/EndpointResolver.swift b/Sources/Services/AWSAmplifyUIBuilder/EndpointResolver.swift index 799ac1bcee6..6acae174e4d 100644 --- a/Sources/Services/AWSAmplifyUIBuilder/EndpointResolver.swift +++ b/Sources/Services/AWSAmplifyUIBuilder/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://amplifyuibuilder-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://amplifyuibuilder-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://amplifyuibuilder.{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://amplifyuibuilder.{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\":[{\"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\":[{\"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\":[],\"endpoint\":{\"url\":\"https://amplifyuibuilder-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\":[],\"endpoint\":{\"url\":\"https://amplifyuibuilder-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\":[],\"endpoint\":{\"url\":\"https://amplifyuibuilder.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://amplifyuibuilder.{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/AWSAmplifyUIBuilder/models/Models.swift b/Sources/Services/AWSAmplifyUIBuilder/models/Models.swift index c672a3c3121..68d4f20bc33 100644 --- a/Sources/Services/AWSAmplifyUIBuilder/models/Models.swift +++ b/Sources/Services/AWSAmplifyUIBuilder/models/Models.swift @@ -129,6 +129,63 @@ extension AmplifyUIBuilderClientTypes { } +extension AmplifyUIBuilderClientTypes.ApiConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datastoreconfig = "dataStoreConfig" + case graphqlconfig = "graphQLConfig" + case noapiconfig = "noApiConfig" + case sdkUnknown + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + switch self { + case let .datastoreconfig(datastoreconfig): + try container.encode(datastoreconfig, forKey: .datastoreconfig) + case let .graphqlconfig(graphqlconfig): + try container.encode(graphqlconfig, forKey: .graphqlconfig) + case let .noapiconfig(noapiconfig): + try container.encode(noapiconfig, forKey: .noapiconfig) + case let .sdkUnknown(sdkUnknown): + try container.encode(sdkUnknown, forKey: .sdkUnknown) + } + } + + public init(from decoder: Swift.Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + let graphqlconfigDecoded = try values.decodeIfPresent(AmplifyUIBuilderClientTypes.GraphQLRenderConfig.self, forKey: .graphqlconfig) + if let graphqlconfig = graphqlconfigDecoded { + self = .graphqlconfig(graphqlconfig) + return + } + let datastoreconfigDecoded = try values.decodeIfPresent(AmplifyUIBuilderClientTypes.DataStoreRenderConfig.self, forKey: .datastoreconfig) + if let datastoreconfig = datastoreconfigDecoded { + self = .datastoreconfig(datastoreconfig) + return + } + let noapiconfigDecoded = try values.decodeIfPresent(AmplifyUIBuilderClientTypes.NoApiRenderConfig.self, forKey: .noapiconfig) + if let noapiconfig = noapiconfigDecoded { + self = .noapiconfig(noapiconfig) + return + } + self = .sdkUnknown("") + } +} + +extension AmplifyUIBuilderClientTypes { + /// Describes the API configuration for a code generation job. + public enum ApiConfiguration: Swift.Equatable { + /// The configuration for an application using GraphQL APIs. + case graphqlconfig(AmplifyUIBuilderClientTypes.GraphQLRenderConfig) + /// The configuration for an application using DataStore APIs. + case datastoreconfig(AmplifyUIBuilderClientTypes.DataStoreRenderConfig) + /// The configuration for an application with no API being used. + case noapiconfig(AmplifyUIBuilderClientTypes.NoApiRenderConfig) + case sdkUnknown(Swift.String) + } + +} + extension AmplifyUIBuilderClientTypes.CodegenFeatureFlags: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case isNonModelSupported @@ -786,7 +843,7 @@ extension AmplifyUIBuilderClientTypes { public var id: Swift.String? /// The time that the code generation job was modified. public var modifiedAt: ClientRuntime.Date? - /// Describes the configuration information for rendering the UI component associated the code generation job. + /// Describes the configuration information for rendering the UI component associated with the code generation job. public var renderConfig: AmplifyUIBuilderClientTypes.CodegenJobRenderConfig? /// The status of the code generation job. public var status: AmplifyUIBuilderClientTypes.CodegenJobStatus? @@ -1026,7 +1083,7 @@ extension AmplifyUIBuilderClientTypes.CodegenJobRenderConfig: Swift.Codable { } extension AmplifyUIBuilderClientTypes { - /// Describes the configuration information for rendering the UI component associated the code generation job. + /// Describes the configuration information for rendering the UI component associated with the code generation job. public enum CodegenJobRenderConfig: Swift.Equatable { /// The name of the ReactStartCodegenJobData object. case react(AmplifyUIBuilderClientTypes.ReactStartCodegenJobData) @@ -3443,6 +3500,26 @@ extension CreateThemeOutputResponseBody: Swift.Decodable { } } +extension AmplifyUIBuilderClientTypes.DataStoreRenderConfig: Swift.Codable { + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode([String:String]()) + } + + public init(from decoder: Swift.Decoder) throws { + } +} + +extension AmplifyUIBuilderClientTypes { + /// Describes the DataStore configuration for an API for a code generation job. + public struct DataStoreRenderConfig: Swift.Equatable { + + public init() { } + } + +} + extension DeleteComponentInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let appId = appId else { @@ -6255,6 +6332,86 @@ extension GetThemeOutputResponseBody: Swift.Decodable { } } +extension AmplifyUIBuilderClientTypes.GraphQLRenderConfig: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case fragmentsFilePath + case mutationsFilePath + case queriesFilePath + case subscriptionsFilePath + case typesFilePath + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let fragmentsFilePath = self.fragmentsFilePath { + try encodeContainer.encode(fragmentsFilePath, forKey: .fragmentsFilePath) + } + if let mutationsFilePath = self.mutationsFilePath { + try encodeContainer.encode(mutationsFilePath, forKey: .mutationsFilePath) + } + if let queriesFilePath = self.queriesFilePath { + try encodeContainer.encode(queriesFilePath, forKey: .queriesFilePath) + } + if let subscriptionsFilePath = self.subscriptionsFilePath { + try encodeContainer.encode(subscriptionsFilePath, forKey: .subscriptionsFilePath) + } + if let typesFilePath = self.typesFilePath { + try encodeContainer.encode(typesFilePath, forKey: .typesFilePath) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let typesFilePathDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .typesFilePath) + typesFilePath = typesFilePathDecoded + let queriesFilePathDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .queriesFilePath) + queriesFilePath = queriesFilePathDecoded + let mutationsFilePathDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mutationsFilePath) + mutationsFilePath = mutationsFilePathDecoded + let subscriptionsFilePathDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .subscriptionsFilePath) + subscriptionsFilePath = subscriptionsFilePathDecoded + let fragmentsFilePathDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .fragmentsFilePath) + fragmentsFilePath = fragmentsFilePathDecoded + } +} + +extension AmplifyUIBuilderClientTypes { + /// Describes the GraphQL configuration for an API for a code generation job. + public struct GraphQLRenderConfig: Swift.Equatable { + /// The path to the GraphQL fragments file, relative to the component output directory. + /// This member is required. + public var fragmentsFilePath: Swift.String? + /// The path to the GraphQL mutations file, relative to the component output directory. + /// This member is required. + public var mutationsFilePath: Swift.String? + /// The path to the GraphQL queries file, relative to the component output directory. + /// This member is required. + public var queriesFilePath: Swift.String? + /// The path to the GraphQL subscriptions file, relative to the component output directory. + /// This member is required. + public var subscriptionsFilePath: Swift.String? + /// The path to the GraphQL types file, relative to the component output directory. + /// This member is required. + public var typesFilePath: Swift.String? + + public init( + fragmentsFilePath: Swift.String? = nil, + mutationsFilePath: Swift.String? = nil, + queriesFilePath: Swift.String? = nil, + subscriptionsFilePath: Swift.String? = nil, + typesFilePath: Swift.String? = nil + ) + { + self.fragmentsFilePath = fragmentsFilePath + self.mutationsFilePath = mutationsFilePath + self.queriesFilePath = queriesFilePath + self.subscriptionsFilePath = subscriptionsFilePath + self.typesFilePath = typesFilePath + } + } + +} + extension InternalServerException { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -7102,6 +7259,26 @@ extension AmplifyUIBuilderClientTypes { } +extension AmplifyUIBuilderClientTypes.NoApiRenderConfig: Swift.Codable { + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode([String:String]()) + } + + public init(from decoder: Swift.Decoder) throws { + } +} + +extension AmplifyUIBuilderClientTypes { + /// Describes the configuration for an application with no API being used. + public struct NoApiRenderConfig: Swift.Equatable { + + public init() { } + } + +} + extension AmplifyUIBuilderClientTypes.Predicate: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case and @@ -7381,6 +7558,7 @@ public struct PutMetadataFlagOutputResponse: Swift.Equatable { extension AmplifyUIBuilderClientTypes.ReactStartCodegenJobData: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case apiConfiguration case inlineSourceMap case module case renderTypeDeclarations @@ -7390,6 +7568,9 @@ extension AmplifyUIBuilderClientTypes.ReactStartCodegenJobData: Swift.Codable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let apiConfiguration = self.apiConfiguration { + try encodeContainer.encode(apiConfiguration, forKey: .apiConfiguration) + } if inlineSourceMap != false { try encodeContainer.encode(inlineSourceMap, forKey: .inlineSourceMap) } @@ -7419,12 +7600,16 @@ extension AmplifyUIBuilderClientTypes.ReactStartCodegenJobData: Swift.Codable { renderTypeDeclarations = renderTypeDeclarationsDecoded let inlineSourceMapDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .inlineSourceMap) ?? false inlineSourceMap = inlineSourceMapDecoded + let apiConfigurationDecoded = try containerValues.decodeIfPresent(AmplifyUIBuilderClientTypes.ApiConfiguration.self, forKey: .apiConfiguration) + apiConfiguration = apiConfigurationDecoded } } extension AmplifyUIBuilderClientTypes { /// Describes the code generation job configuration for a React project. public struct ReactStartCodegenJobData: Swift.Equatable { + /// The API configuration for the code generation job. + public var apiConfiguration: AmplifyUIBuilderClientTypes.ApiConfiguration? /// Specifies whether the code generation job should render inline source maps. public var inlineSourceMap: Swift.Bool /// The JavaScript module type. @@ -7437,6 +7622,7 @@ extension AmplifyUIBuilderClientTypes { public var target: AmplifyUIBuilderClientTypes.JSTarget? public init( + apiConfiguration: AmplifyUIBuilderClientTypes.ApiConfiguration? = nil, inlineSourceMap: Swift.Bool = false, module: AmplifyUIBuilderClientTypes.JSModule? = nil, renderTypeDeclarations: Swift.Bool = false, @@ -7444,6 +7630,7 @@ extension AmplifyUIBuilderClientTypes { target: AmplifyUIBuilderClientTypes.JSTarget? = nil ) { + self.apiConfiguration = apiConfiguration self.inlineSourceMap = inlineSourceMap self.module = module self.renderTypeDeclarations = renderTypeDeclarations diff --git a/Sources/Services/AWSApiGatewayV2/ApiGatewayV2Client.swift b/Sources/Services/AWSApiGatewayV2/ApiGatewayV2Client.swift index c6e721325c1..89213221831 100644 --- a/Sources/Services/AWSApiGatewayV2/ApiGatewayV2Client.swift +++ b/Sources/Services/AWSApiGatewayV2/ApiGatewayV2Client.swift @@ -862,7 +862,7 @@ extension ApiGatewayV2Client: ApiGatewayV2ClientProtocol { return result } - /// Deletes a route request parameter. + /// Deletes a route request parameter. Supported only for WebSocket APIs. public func deleteRouteRequestParameter(input: DeleteRouteRequestParameterInput) async throws -> DeleteRouteRequestParameterOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSApiGatewayV2/ApiGatewayV2ClientProtocol.swift b/Sources/Services/AWSApiGatewayV2/ApiGatewayV2ClientProtocol.swift index 6d675df681e..ce3df21dfee 100644 --- a/Sources/Services/AWSApiGatewayV2/ApiGatewayV2ClientProtocol.swift +++ b/Sources/Services/AWSApiGatewayV2/ApiGatewayV2ClientProtocol.swift @@ -50,7 +50,7 @@ public protocol ApiGatewayV2ClientProtocol { func deleteModel(input: DeleteModelInput) async throws -> DeleteModelOutputResponse /// Deletes a Route. func deleteRoute(input: DeleteRouteInput) async throws -> DeleteRouteOutputResponse - /// Deletes a route request parameter. + /// Deletes a route request parameter. Supported only for WebSocket APIs. func deleteRouteRequestParameter(input: DeleteRouteRequestParameterInput) async throws -> DeleteRouteRequestParameterOutputResponse /// Deletes a RouteResponse. func deleteRouteResponse(input: DeleteRouteResponseInput) async throws -> DeleteRouteResponseOutputResponse diff --git a/Sources/Services/AWSApiGatewayV2/models/Models.swift b/Sources/Services/AWSApiGatewayV2/models/Models.swift index d997664d432..398264d7696 100644 --- a/Sources/Services/AWSApiGatewayV2/models/Models.swift +++ b/Sources/Services/AWSApiGatewayV2/models/Models.swift @@ -2650,7 +2650,7 @@ public struct CreateIntegrationOutputResponse: Swift.Equatable { public var passthroughBehavior: ApiGatewayV2ClientTypes.PassthroughBehavior? /// Specifies the format of the payload sent to an integration. Required for HTTP APIs. public var payloadFormatVersion: Swift.String? - /// For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.{location}.{name} , where {location} is querystring, path, or header; and {name} must be a valid and unique method request parameter name. For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Working with AWS service integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html). For HTTP API itegrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern :.. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html). + /// For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.{location}.{name} , where {location} is querystring, path, or header; and {name} must be a valid and unique method request parameter name. For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Working with AWS service integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html). For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern :.. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html). public var requestParameters: [Swift.String:Swift.String]? /// Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs. public var requestTemplates: [Swift.String:Swift.String]? @@ -7776,7 +7776,7 @@ public struct GetIntegrationOutputResponse: Swift.Equatable { public var passthroughBehavior: ApiGatewayV2ClientTypes.PassthroughBehavior? /// Specifies the format of the payload sent to an integration. Required for HTTP APIs. public var payloadFormatVersion: Swift.String? - /// For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.{location}.{name} , where {location} is querystring, path, or header; and {name} must be a valid and unique method request parameter name. For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Working with AWS service integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html). For HTTP API itegrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern :.. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html). + /// For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.{location}.{name} , where {location} is querystring, path, or header; and {name} must be a valid and unique method request parameter name. For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Working with AWS service integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html). For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern :.. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html). public var requestParameters: [Swift.String:Swift.String]? /// Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs. public var requestTemplates: [Swift.String:Swift.String]? @@ -10695,7 +10695,7 @@ extension ApiGatewayV2ClientTypes { public var passthroughBehavior: ApiGatewayV2ClientTypes.PassthroughBehavior? /// Specifies the format of the payload sent to an integration. Required for HTTP APIs. public var payloadFormatVersion: Swift.String? - /// For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.{location}.{name} , where {location} is querystring, path, or header; and {name} must be a valid and unique method request parameter name. For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Working with AWS service integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html). For HTTP API itegrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern :.. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html). + /// For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.{location}.{name} , where {location} is querystring, path, or header; and {name} must be a valid and unique method request parameter name. For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Working with AWS service integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html). For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern :.. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html). public var requestParameters: [Swift.String:Swift.String]? /// Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs. public var requestTemplates: [Swift.String:Swift.String]? @@ -14056,7 +14056,7 @@ public struct UpdateIntegrationInput: Swift.Equatable { public var passthroughBehavior: ApiGatewayV2ClientTypes.PassthroughBehavior? /// Specifies the format of the payload sent to an integration. Required for HTTP APIs. public var payloadFormatVersion: Swift.String? - /// For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.{location}.{name} , where {location} is querystring, path, or header; and {name} must be a valid and unique method request parameter name. For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Working with AWS service integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html). For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern :. where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.). + /// For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.{location}.{name} , where {location} is querystring, path, or header; and {name} must be a valid and unique method request parameter name. For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Working with AWS service integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html). For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to the backend. The key should follow the pattern :. where action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html). public var requestParameters: [Swift.String:Swift.String]? /// Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs. public var requestTemplates: [Swift.String:Swift.String]? @@ -14320,7 +14320,7 @@ public struct UpdateIntegrationOutputResponse: Swift.Equatable { public var passthroughBehavior: ApiGatewayV2ClientTypes.PassthroughBehavior? /// Specifies the format of the payload sent to an integration. Required for HTTP APIs. public var payloadFormatVersion: Swift.String? - /// For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.{location}.{name} , where {location} is querystring, path, or header; and {name} must be a valid and unique method request parameter name. For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Working with AWS service integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html). For HTTP API itegrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern :.. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html). + /// For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.{location}.{name} , where {location} is querystring, path, or header; and {name} must be a valid and unique method request parameter name. For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Working with AWS service integrations for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services.html). For HTTP API integrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern :.. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see [Transforming API requests and responses](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html). public var requestParameters: [Swift.String:Swift.String]? /// Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs. public var requestTemplates: [Swift.String:Swift.String]? diff --git a/Sources/Services/AWSApplicationInsights/ApplicationInsightsClient.swift b/Sources/Services/AWSApplicationInsights/ApplicationInsightsClient.swift index 37275c5d28b..cea82b2261e 100644 --- a/Sources/Services/AWSApplicationInsights/ApplicationInsightsClient.swift +++ b/Sources/Services/AWSApplicationInsights/ApplicationInsightsClient.swift @@ -67,6 +67,43 @@ public struct ApplicationInsightsClientLogHandlerFactory: ClientRuntime.SDKLogHa } extension ApplicationInsightsClient: ApplicationInsightsClientProtocol { + /// Adds a workload to a component. Each component can have at most five workloads. + public func addWorkload(input: AddWorkloadInput) async throws -> AddWorkloadOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "addWorkload") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "applicationinsights") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "addWorkload") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "EC2WindowsBarleyService.AddWorkload")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "AddWorkloadRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Adds an application that is created from a resource group. public func createApplication(input: CreateApplicationInput) async throws -> CreateApplicationOutputResponse { @@ -585,6 +622,43 @@ extension ApplicationInsightsClient: ApplicationInsightsClientProtocol { return result } + /// Describes a workload and its configuration. + public func describeWorkload(input: DescribeWorkloadInput) async throws -> DescribeWorkloadOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "describeWorkload") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "applicationinsights") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "describeWorkload") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "EC2WindowsBarleyService.DescribeWorkload")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "DescribeWorkloadRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Lists the IDs of the applications that you are monitoring. public func listApplications(input: ListApplicationsInput) async throws -> ListApplicationsOutputResponse { @@ -850,6 +924,80 @@ extension ApplicationInsightsClient: ApplicationInsightsClientProtocol { return result } + /// Lists the workloads that are configured on a given component. + public func listWorkloads(input: ListWorkloadsInput) async throws -> ListWorkloadsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listWorkloads") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "applicationinsights") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listWorkloads") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "EC2WindowsBarleyService.ListWorkloads")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "ListWorkloadsRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Remove workload from a component. + public func removeWorkload(input: RemoveWorkloadInput) async throws -> RemoveWorkloadOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "removeWorkload") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "applicationinsights") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "removeWorkload") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "EC2WindowsBarleyService.RemoveWorkload")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "RemoveWorkloadRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Add one or more tags (keys and values) to a specified application. A tag is a label that you optionally define and associate with an application. Tags can help you categorize and manage application in different ways, such as by purpose, owner, environment, or other criteria. Each tag consists of a required tag key and an associated tag value, both of which you define. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key. public func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse { @@ -1072,4 +1220,78 @@ extension ApplicationInsightsClient: ApplicationInsightsClientProtocol { return result } + /// Updates the visibility of the problem or specifies the problem as RESOLVED. + public func updateProblem(input: UpdateProblemInput) async throws -> UpdateProblemOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "updateProblem") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "applicationinsights") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateProblem") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "EC2WindowsBarleyService.UpdateProblem")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateProblemRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Adds a workload to a component. Each component can have at most five workloads. + public func updateWorkload(input: UpdateWorkloadInput) async throws -> UpdateWorkloadOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "updateWorkload") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "applicationinsights") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateWorkload") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "EC2WindowsBarleyService.UpdateWorkload")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateWorkloadRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + } diff --git a/Sources/Services/AWSApplicationInsights/ApplicationInsightsClientProtocol.swift b/Sources/Services/AWSApplicationInsights/ApplicationInsightsClientProtocol.swift index 875eb25d0dd..3431cae9b15 100644 --- a/Sources/Services/AWSApplicationInsights/ApplicationInsightsClientProtocol.swift +++ b/Sources/Services/AWSApplicationInsights/ApplicationInsightsClientProtocol.swift @@ -4,6 +4,8 @@ import ClientRuntime /// Amazon CloudWatch Application Insights Amazon CloudWatch Application Insights is a service that helps you detect common problems with your applications. It enables you to pinpoint the source of issues in your applications (built with technologies such as Microsoft IIS, .NET, and Microsoft SQL Server), by providing key insights into detected problems. After you onboard your application, CloudWatch Application Insights identifies, recommends, and sets up metrics and logs. It continuously analyzes and correlates your metrics and logs for unusual behavior to surface actionable problems with your application. For example, if your application is slow and unresponsive and leading to HTTP 500 errors in your Application Load Balancer (ALB), Application Insights informs you that a memory pressure problem with your SQL Server database is occurring. It bases this analysis on impactful metrics and log errors. public protocol ApplicationInsightsClientProtocol { + /// Adds a workload to a component. Each component can have at most five workloads. + func addWorkload(input: AddWorkloadInput) async throws -> AddWorkloadOutputResponse /// Adds an application that is created from a resource group. func createApplication(input: CreateApplicationInput) async throws -> CreateApplicationOutputResponse /// Creates a custom component by grouping similar standalone instances to monitor. @@ -32,6 +34,8 @@ public protocol ApplicationInsightsClientProtocol { func describeProblem(input: DescribeProblemInput) async throws -> DescribeProblemOutputResponse /// Describes the anomalies or errors associated with the problem. func describeProblemObservations(input: DescribeProblemObservationsInput) async throws -> DescribeProblemObservationsOutputResponse + /// Describes a workload and its configuration. + func describeWorkload(input: DescribeWorkloadInput) async throws -> DescribeWorkloadOutputResponse /// Lists the IDs of the applications that you are monitoring. func listApplications(input: ListApplicationsInput) async throws -> ListApplicationsOutputResponse /// Lists the auto-grouped, standalone, and custom components of the application. @@ -52,6 +56,10 @@ public protocol ApplicationInsightsClientProtocol { func listProblems(input: ListProblemsInput) async throws -> ListProblemsOutputResponse /// Retrieve a list of the tags (keys and values) that are associated with a specified application. A tag is a label that you optionally define and associate with an application. Each tag consists of a required tag key and an optional associated tag value. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key. func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse + /// Lists the workloads that are configured on a given component. + func listWorkloads(input: ListWorkloadsInput) async throws -> ListWorkloadsOutputResponse + /// Remove workload from a component. + func removeWorkload(input: RemoveWorkloadInput) async throws -> RemoveWorkloadOutputResponse /// Add one or more tags (keys and values) to a specified application. A tag is a label that you optionally define and associate with an application. Tags can help you categorize and manage application in different ways, such as by purpose, owner, environment, or other criteria. Each tag consists of a required tag key and an associated tag value, both of which you define. A tag key is a general label that acts as a category for more specific tag values. A tag value acts as a descriptor within a tag key. func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse /// Remove one or more tags (keys and values) from a specified application. @@ -64,6 +72,10 @@ public protocol ApplicationInsightsClientProtocol { func updateComponentConfiguration(input: UpdateComponentConfigurationInput) async throws -> UpdateComponentConfigurationOutputResponse /// Adds a log pattern to a LogPatternSet. func updateLogPattern(input: UpdateLogPatternInput) async throws -> UpdateLogPatternOutputResponse + /// Updates the visibility of the problem or specifies the problem as RESOLVED. + func updateProblem(input: UpdateProblemInput) async throws -> UpdateProblemOutputResponse + /// Adds a workload to a component. Each component can have at most five workloads. + func updateWorkload(input: UpdateWorkloadInput) async throws -> UpdateWorkloadOutputResponse } public enum ApplicationInsightsClientTypes {} diff --git a/Sources/Services/AWSApplicationInsights/Paginators.swift b/Sources/Services/AWSApplicationInsights/Paginators.swift index fb0df5d1af0..bf0599c49b9 100644 --- a/Sources/Services/AWSApplicationInsights/Paginators.swift +++ b/Sources/Services/AWSApplicationInsights/Paginators.swift @@ -19,6 +19,7 @@ extension ApplicationInsightsClient { extension ListApplicationsInput: ClientRuntime.PaginateToken { public func usingPaginationToken(_ token: Swift.String) -> ListApplicationsInput { return ListApplicationsInput( + accountId: self.accountId, maxResults: self.maxResults, nextToken: token )} @@ -40,6 +41,7 @@ extension ApplicationInsightsClient { extension ListComponentsInput: ClientRuntime.PaginateToken { public func usingPaginationToken(_ token: Swift.String) -> ListComponentsInput { return ListComponentsInput( + accountId: self.accountId, maxResults: self.maxResults, nextToken: token, resourceGroupName: self.resourceGroupName @@ -62,6 +64,7 @@ extension ApplicationInsightsClient { extension ListConfigurationHistoryInput: ClientRuntime.PaginateToken { public func usingPaginationToken(_ token: Swift.String) -> ListConfigurationHistoryInput { return ListConfigurationHistoryInput( + accountId: self.accountId, endTime: self.endTime, eventStatus: self.eventStatus, maxResults: self.maxResults, @@ -87,6 +90,7 @@ extension ApplicationInsightsClient { extension ListLogPatternsInput: ClientRuntime.PaginateToken { public func usingPaginationToken(_ token: Swift.String) -> ListLogPatternsInput { return ListLogPatternsInput( + accountId: self.accountId, maxResults: self.maxResults, nextToken: token, patternSetName: self.patternSetName, @@ -110,6 +114,7 @@ extension ApplicationInsightsClient { extension ListLogPatternSetsInput: ClientRuntime.PaginateToken { public func usingPaginationToken(_ token: Swift.String) -> ListLogPatternSetsInput { return ListLogPatternSetsInput( + accountId: self.accountId, maxResults: self.maxResults, nextToken: token, resourceGroupName: self.resourceGroupName @@ -132,11 +137,37 @@ extension ApplicationInsightsClient { extension ListProblemsInput: ClientRuntime.PaginateToken { public func usingPaginationToken(_ token: Swift.String) -> ListProblemsInput { return ListProblemsInput( + accountId: self.accountId, componentName: self.componentName, endTime: self.endTime, maxResults: self.maxResults, nextToken: token, resourceGroupName: self.resourceGroupName, - startTime: self.startTime + startTime: self.startTime, + visibility: self.visibility + )} +} +extension ApplicationInsightsClient { + /// Paginate over `[ListWorkloadsOutputResponse]` 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 `[ListWorkloadsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListWorkloadsOutputResponse` + public func listWorkloadsPaginated(input: ListWorkloadsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListWorkloadsInput.nextToken, outputKey: \ListWorkloadsOutputResponse.nextToken, paginationFunction: self.listWorkloads(input:)) + } +} + +extension ListWorkloadsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListWorkloadsInput { + return ListWorkloadsInput( + accountId: self.accountId, + componentName: self.componentName, + maxResults: self.maxResults, + nextToken: token, + resourceGroupName: self.resourceGroupName )} } diff --git a/Sources/Services/AWSApplicationInsights/models/Models.swift b/Sources/Services/AWSApplicationInsights/models/Models.swift index 5504c7082c7..33bc2f09c5b 100644 --- a/Sources/Services/AWSApplicationInsights/models/Models.swift +++ b/Sources/Services/AWSApplicationInsights/models/Models.swift @@ -57,6 +57,144 @@ extension AccessDeniedExceptionBody: Swift.Decodable { } } +extension AddWorkloadInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case componentName = "ComponentName" + case resourceGroupName = "ResourceGroupName" + case workloadConfiguration = "WorkloadConfiguration" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let componentName = self.componentName { + try encodeContainer.encode(componentName, forKey: .componentName) + } + if let resourceGroupName = self.resourceGroupName { + try encodeContainer.encode(resourceGroupName, forKey: .resourceGroupName) + } + if let workloadConfiguration = self.workloadConfiguration { + try encodeContainer.encode(workloadConfiguration, forKey: .workloadConfiguration) + } + } +} + +extension AddWorkloadInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct AddWorkloadInput: Swift.Equatable { + /// The name of the component. + /// This member is required. + public var componentName: Swift.String? + /// The name of the resource group. + /// This member is required. + public var resourceGroupName: Swift.String? + /// The configuration settings of the workload. The value is the escaped JSON of the configuration. + /// This member is required. + public var workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? + + public init( + componentName: Swift.String? = nil, + resourceGroupName: Swift.String? = nil, + workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? = nil + ) + { + self.componentName = componentName + self.resourceGroupName = resourceGroupName + self.workloadConfiguration = workloadConfiguration + } +} + +struct AddWorkloadInputBody: Swift.Equatable { + let resourceGroupName: Swift.String? + let componentName: Swift.String? + let workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? +} + +extension AddWorkloadInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case componentName = "ComponentName" + case resourceGroupName = "ResourceGroupName" + case workloadConfiguration = "WorkloadConfiguration" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) + resourceGroupName = resourceGroupNameDecoded + let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) + componentName = componentNameDecoded + let workloadConfigurationDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.WorkloadConfiguration.self, forKey: .workloadConfiguration) + workloadConfiguration = workloadConfigurationDecoded + } +} + +public enum AddWorkloadOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceInUseException": return try await ResourceInUseException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension AddWorkloadOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: AddWorkloadOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.workloadConfiguration = output.workloadConfiguration + self.workloadId = output.workloadId + } else { + self.workloadConfiguration = nil + self.workloadId = nil + } + } +} + +public struct AddWorkloadOutputResponse: Swift.Equatable { + /// The configuration settings of the workload. The value is the escaped JSON of the configuration. + public var workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? + /// The ID of the workload. + public var workloadId: Swift.String? + + public init( + workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? = nil, + workloadId: Swift.String? = nil + ) + { + self.workloadConfiguration = workloadConfiguration + self.workloadId = workloadId + } +} + +struct AddWorkloadOutputResponseBody: Swift.Equatable { + let workloadId: Swift.String? + let workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? +} + +extension AddWorkloadOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case workloadConfiguration = "WorkloadConfiguration" + case workloadId = "WorkloadId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workloadIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workloadId) + workloadId = workloadIdDecoded + let workloadConfigurationDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.WorkloadConfiguration.self, forKey: .workloadConfiguration) + workloadConfiguration = workloadConfigurationDecoded + } +} + extension ApplicationInsightsClientTypes.ApplicationComponent: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case componentName = "ComponentName" @@ -176,6 +314,7 @@ extension ApplicationInsightsClientTypes { extension ApplicationInsightsClientTypes.ApplicationInfo: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case autoConfigEnabled = "AutoConfigEnabled" case cweMonitorEnabled = "CWEMonitorEnabled" case discoveryType = "DiscoveryType" @@ -188,6 +327,9 @@ extension ApplicationInsightsClientTypes.ApplicationInfo: Swift.Codable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let autoConfigEnabled = self.autoConfigEnabled { try encodeContainer.encode(autoConfigEnabled, forKey: .autoConfigEnabled) } @@ -216,6 +358,8 @@ extension ApplicationInsightsClientTypes.ApplicationInfo: Swift.Codable { public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) resourceGroupName = resourceGroupNameDecoded let lifeCycleDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lifeCycle) @@ -238,6 +382,8 @@ extension ApplicationInsightsClientTypes.ApplicationInfo: Swift.Codable { extension ApplicationInsightsClientTypes { /// Describes the status of the application. public struct ApplicationInfo: Swift.Equatable { + /// The AWS account ID for the owner of the application. + public var accountId: Swift.String? /// Indicates whether auto-configuration is turned on for this application. public var autoConfigEnabled: Swift.Bool? /// Indicates whether Application Insights can listen to CloudWatch events for the application resources, such as instance terminated, failed deployment, and others. @@ -260,6 +406,7 @@ extension ApplicationInsightsClientTypes { public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, autoConfigEnabled: Swift.Bool? = nil, cweMonitorEnabled: Swift.Bool? = nil, discoveryType: ApplicationInsightsClientTypes.DiscoveryType? = nil, @@ -270,6 +417,7 @@ extension ApplicationInsightsClientTypes { resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.autoConfigEnabled = autoConfigEnabled self.cweMonitorEnabled = cweMonitorEnabled self.discoveryType = discoveryType @@ -378,16 +526,21 @@ extension ApplicationInsightsClientTypes { extension ApplicationInsightsClientTypes.ConfigurationEvent: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case eventDetail = "EventDetail" case eventResourceName = "EventResourceName" case eventResourceType = "EventResourceType" case eventStatus = "EventStatus" case eventTime = "EventTime" case monitoredResourceARN = "MonitoredResourceARN" + case resourceGroupName = "ResourceGroupName" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let eventDetail = self.eventDetail { try encodeContainer.encode(eventDetail, forKey: .eventDetail) } @@ -406,10 +559,17 @@ extension ApplicationInsightsClientTypes.ConfigurationEvent: Swift.Codable { if let monitoredResourceARN = self.monitoredResourceARN { try encodeContainer.encode(monitoredResourceARN, forKey: .monitoredResourceARN) } + if let resourceGroupName = self.resourceGroupName { + try encodeContainer.encode(resourceGroupName, forKey: .resourceGroupName) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) + resourceGroupName = resourceGroupNameDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded let monitoredResourceARNDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .monitoredResourceARN) monitoredResourceARN = monitoredResourceARNDecoded let eventStatusDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.ConfigurationEventStatus.self, forKey: .eventStatus) @@ -428,6 +588,8 @@ extension ApplicationInsightsClientTypes.ConfigurationEvent: Swift.Codable { extension ApplicationInsightsClientTypes { /// The event information. public struct ConfigurationEvent: Swift.Equatable { + /// The AWS account ID for the owner of the application to which the configuration event belongs. + public var accountId: Swift.String? /// The details of the event in plain text. public var eventDetail: Swift.String? /// The name of the resource Application Insights attempted to configure. @@ -440,22 +602,28 @@ extension ApplicationInsightsClientTypes { public var eventTime: ClientRuntime.Date? /// The resource monitored by Application Insights. public var monitoredResourceARN: Swift.String? + /// The name of the resource group of the application to which the configuration event belongs. + public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, eventDetail: Swift.String? = nil, eventResourceName: Swift.String? = nil, eventResourceType: ApplicationInsightsClientTypes.ConfigurationEventResourceType? = nil, eventStatus: ApplicationInsightsClientTypes.ConfigurationEventStatus? = nil, eventTime: ClientRuntime.Date? = nil, - monitoredResourceARN: Swift.String? = nil + monitoredResourceARN: Swift.String? = nil, + resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.eventDetail = eventDetail self.eventResourceName = eventResourceName self.eventResourceType = eventResourceType self.eventStatus = eventStatus self.eventTime = eventTime self.monitoredResourceARN = monitoredResourceARN + self.resourceGroupName = resourceGroupName } } @@ -863,7 +1031,7 @@ extension CreateLogPatternInput: Swift.Encodable { if let patternSetName = self.patternSetName { try encodeContainer.encode(patternSetName, forKey: .patternSetName) } - if rank != 0 { + if let rank = self.rank { try encodeContainer.encode(rank, forKey: .rank) } if let resourceGroupName = self.resourceGroupName { @@ -890,7 +1058,7 @@ public struct CreateLogPatternInput: Swift.Equatable { public var patternSetName: Swift.String? /// Rank of the log pattern. Must be a value between 1 and 1,000,000. The patterns are sorted by rank, so we recommend that you set your highest priority patterns with the lowest rank. A pattern of rank 1 will be the first to get matched to a log line. A pattern of rank 1,000,000 will be last to get matched. When you configure custom log patterns from the console, a Low severity pattern translates to a 750,000 rank. A Medium severity pattern translates to a 500,000 rank. And a High severity pattern translates to a 250,000 rank. Rank values less than 1 or greater than 1,000,000 are reserved for AWS-provided patterns. /// This member is required. - public var rank: Swift.Int + public var rank: Swift.Int? /// The name of the resource group. /// This member is required. public var resourceGroupName: Swift.String? @@ -899,7 +1067,7 @@ public struct CreateLogPatternInput: Swift.Equatable { pattern: Swift.String? = nil, patternName: Swift.String? = nil, patternSetName: Swift.String? = nil, - rank: Swift.Int = 0, + rank: Swift.Int? = nil, resourceGroupName: Swift.String? = nil ) { @@ -916,7 +1084,7 @@ struct CreateLogPatternInputBody: Swift.Equatable { let patternSetName: Swift.String? let patternName: Swift.String? let pattern: Swift.String? - let rank: Swift.Int + let rank: Swift.Int? } extension CreateLogPatternInputBody: Swift.Decodable { @@ -938,7 +1106,7 @@ extension CreateLogPatternInputBody: Swift.Decodable { patternName = patternNameDecoded let patternDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .pattern) pattern = patternDecoded - let rankDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .rank) ?? 0 + let rankDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .rank) rank = rankDecoded } } @@ -1263,11 +1431,15 @@ public struct DeleteLogPatternOutputResponse: Swift.Equatable { extension DescribeApplicationInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case resourceGroupName = "ResourceGroupName" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let resourceGroupName = self.resourceGroupName { try encodeContainer.encode(resourceGroupName, forKey: .resourceGroupName) } @@ -1281,24 +1453,30 @@ extension DescribeApplicationInput: ClientRuntime.URLPathProvider { } public struct DescribeApplicationInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The name of the resource group. /// This member is required. public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.resourceGroupName = resourceGroupName } } struct DescribeApplicationInputBody: Swift.Equatable { let resourceGroupName: Swift.String? + let accountId: Swift.String? } extension DescribeApplicationInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case resourceGroupName = "ResourceGroupName" } @@ -1306,6 +1484,8 @@ extension DescribeApplicationInputBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) resourceGroupName = resourceGroupNameDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -1364,12 +1544,16 @@ extension DescribeApplicationOutputResponseBody: Swift.Decodable { extension DescribeComponentConfigurationInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case componentName = "ComponentName" case resourceGroupName = "ResourceGroupName" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let componentName = self.componentName { try encodeContainer.encode(componentName, forKey: .componentName) } @@ -1386,6 +1570,8 @@ extension DescribeComponentConfigurationInput: ClientRuntime.URLPathProvider { } public struct DescribeComponentConfigurationInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The name of the component. /// This member is required. public var componentName: Swift.String? @@ -1394,10 +1580,12 @@ public struct DescribeComponentConfigurationInput: Swift.Equatable { public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, componentName: Swift.String? = nil, resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.componentName = componentName self.resourceGroupName = resourceGroupName } @@ -1406,10 +1594,12 @@ public struct DescribeComponentConfigurationInput: Swift.Equatable { struct DescribeComponentConfigurationInputBody: Swift.Equatable { let resourceGroupName: Swift.String? let componentName: Swift.String? + let accountId: Swift.String? } extension DescribeComponentConfigurationInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case componentName = "ComponentName" case resourceGroupName = "ResourceGroupName" } @@ -1420,6 +1610,8 @@ extension DescribeComponentConfigurationInputBody: Swift.Decodable { resourceGroupName = resourceGroupNameDecoded let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) componentName = componentNameDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -1499,6 +1691,7 @@ extension DescribeComponentConfigurationOutputResponseBody: Swift.Decodable { extension DescribeComponentConfigurationRecommendationInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case componentName = "ComponentName" + case recommendationType = "RecommendationType" case resourceGroupName = "ResourceGroupName" case tier = "Tier" } @@ -1508,6 +1701,9 @@ extension DescribeComponentConfigurationRecommendationInput: Swift.Encodable { if let componentName = self.componentName { try encodeContainer.encode(componentName, forKey: .componentName) } + if let recommendationType = self.recommendationType { + try encodeContainer.encode(recommendationType.rawValue, forKey: .recommendationType) + } if let resourceGroupName = self.resourceGroupName { try encodeContainer.encode(resourceGroupName, forKey: .resourceGroupName) } @@ -1527,6 +1723,8 @@ public struct DescribeComponentConfigurationRecommendationInput: Swift.Equatable /// The name of the component. /// This member is required. public var componentName: Swift.String? + /// The recommended configuration type. + public var recommendationType: ApplicationInsightsClientTypes.RecommendationType? /// The name of the resource group. /// This member is required. public var resourceGroupName: Swift.String? @@ -1536,11 +1734,13 @@ public struct DescribeComponentConfigurationRecommendationInput: Swift.Equatable public init( componentName: Swift.String? = nil, + recommendationType: ApplicationInsightsClientTypes.RecommendationType? = nil, resourceGroupName: Swift.String? = nil, tier: ApplicationInsightsClientTypes.Tier? = nil ) { self.componentName = componentName + self.recommendationType = recommendationType self.resourceGroupName = resourceGroupName self.tier = tier } @@ -1550,11 +1750,13 @@ struct DescribeComponentConfigurationRecommendationInputBody: Swift.Equatable { let resourceGroupName: Swift.String? let componentName: Swift.String? let tier: ApplicationInsightsClientTypes.Tier? + let recommendationType: ApplicationInsightsClientTypes.RecommendationType? } extension DescribeComponentConfigurationRecommendationInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case componentName = "ComponentName" + case recommendationType = "RecommendationType" case resourceGroupName = "ResourceGroupName" case tier = "Tier" } @@ -1567,6 +1769,8 @@ extension DescribeComponentConfigurationRecommendationInputBody: Swift.Decodable componentName = componentNameDecoded let tierDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.Tier.self, forKey: .tier) tier = tierDecoded + let recommendationTypeDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.RecommendationType.self, forKey: .recommendationType) + recommendationType = recommendationTypeDecoded } } @@ -1625,12 +1829,16 @@ extension DescribeComponentConfigurationRecommendationOutputResponseBody: Swift. extension DescribeComponentInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case componentName = "ComponentName" case resourceGroupName = "ResourceGroupName" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let componentName = self.componentName { try encodeContainer.encode(componentName, forKey: .componentName) } @@ -1647,6 +1855,8 @@ extension DescribeComponentInput: ClientRuntime.URLPathProvider { } public struct DescribeComponentInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The name of the component. /// This member is required. public var componentName: Swift.String? @@ -1655,10 +1865,12 @@ public struct DescribeComponentInput: Swift.Equatable { public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, componentName: Swift.String? = nil, resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.componentName = componentName self.resourceGroupName = resourceGroupName } @@ -1667,10 +1879,12 @@ public struct DescribeComponentInput: Swift.Equatable { struct DescribeComponentInputBody: Swift.Equatable { let resourceGroupName: Swift.String? let componentName: Swift.String? + let accountId: Swift.String? } extension DescribeComponentInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case componentName = "ComponentName" case resourceGroupName = "ResourceGroupName" } @@ -1681,6 +1895,8 @@ extension DescribeComponentInputBody: Swift.Decodable { resourceGroupName = resourceGroupNameDecoded let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) componentName = componentNameDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -1758,6 +1974,7 @@ extension DescribeComponentOutputResponseBody: Swift.Decodable { extension DescribeLogPatternInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case patternName = "PatternName" case patternSetName = "PatternSetName" case resourceGroupName = "ResourceGroupName" @@ -1765,6 +1982,9 @@ extension DescribeLogPatternInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let patternName = self.patternName { try encodeContainer.encode(patternName, forKey: .patternName) } @@ -1784,6 +2004,8 @@ extension DescribeLogPatternInput: ClientRuntime.URLPathProvider { } public struct DescribeLogPatternInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The name of the log pattern. /// This member is required. public var patternName: Swift.String? @@ -1795,11 +2017,13 @@ public struct DescribeLogPatternInput: Swift.Equatable { public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, patternName: Swift.String? = nil, patternSetName: Swift.String? = nil, resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.patternName = patternName self.patternSetName = patternSetName self.resourceGroupName = resourceGroupName @@ -1810,10 +2034,12 @@ struct DescribeLogPatternInputBody: Swift.Equatable { let resourceGroupName: Swift.String? let patternSetName: Swift.String? let patternName: Swift.String? + let accountId: Swift.String? } extension DescribeLogPatternInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case patternName = "PatternName" case patternSetName = "PatternSetName" case resourceGroupName = "ResourceGroupName" @@ -1827,6 +2053,8 @@ extension DescribeLogPatternInputBody: Swift.Decodable { patternSetName = patternSetNameDecoded let patternNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .patternName) patternName = patternNameDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -1848,9 +2076,11 @@ extension DescribeLogPatternOutputResponse: ClientRuntime.HttpResponseBinding { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { let output: DescribeLogPatternOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.accountId = output.accountId self.logPattern = output.logPattern self.resourceGroupName = output.resourceGroupName } else { + self.accountId = nil self.logPattern = nil self.resourceGroupName = nil } @@ -1858,16 +2088,20 @@ extension DescribeLogPatternOutputResponse: ClientRuntime.HttpResponseBinding { } public struct DescribeLogPatternOutputResponse: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The successfully created log pattern. public var logPattern: ApplicationInsightsClientTypes.LogPattern? /// The name of the resource group. public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, logPattern: ApplicationInsightsClientTypes.LogPattern? = nil, resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.logPattern = logPattern self.resourceGroupName = resourceGroupName } @@ -1875,11 +2109,13 @@ public struct DescribeLogPatternOutputResponse: Swift.Equatable { struct DescribeLogPatternOutputResponseBody: Swift.Equatable { let resourceGroupName: Swift.String? + let accountId: Swift.String? let logPattern: ApplicationInsightsClientTypes.LogPattern? } extension DescribeLogPatternOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case logPattern = "LogPattern" case resourceGroupName = "ResourceGroupName" } @@ -1888,6 +2124,8 @@ extension DescribeLogPatternOutputResponseBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) resourceGroupName = resourceGroupNameDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded let logPatternDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.LogPattern.self, forKey: .logPattern) logPattern = logPatternDecoded } @@ -1895,11 +2133,15 @@ extension DescribeLogPatternOutputResponseBody: Swift.Decodable { extension DescribeObservationInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case observationId = "ObservationId" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let observationId = self.observationId { try encodeContainer.encode(observationId, forKey: .observationId) } @@ -1913,24 +2155,30 @@ extension DescribeObservationInput: ClientRuntime.URLPathProvider { } public struct DescribeObservationInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The ID of the observation. /// This member is required. public var observationId: Swift.String? public init( + accountId: Swift.String? = nil, observationId: Swift.String? = nil ) { + self.accountId = accountId self.observationId = observationId } } struct DescribeObservationInputBody: Swift.Equatable { let observationId: Swift.String? + let accountId: Swift.String? } extension DescribeObservationInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case observationId = "ObservationId" } @@ -1938,6 +2186,8 @@ extension DescribeObservationInputBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let observationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .observationId) observationId = observationIdDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -1996,11 +2246,15 @@ extension DescribeObservationOutputResponseBody: Swift.Decodable { extension DescribeProblemInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case problemId = "ProblemId" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let problemId = self.problemId { try encodeContainer.encode(problemId, forKey: .problemId) } @@ -2014,24 +2268,30 @@ extension DescribeProblemInput: ClientRuntime.URLPathProvider { } public struct DescribeProblemInput: Swift.Equatable { + /// The AWS account ID for the owner of the resource group affected by the problem. + public var accountId: Swift.String? /// The ID of the problem. /// This member is required. public var problemId: Swift.String? public init( + accountId: Swift.String? = nil, problemId: Swift.String? = nil ) { + self.accountId = accountId self.problemId = problemId } } struct DescribeProblemInputBody: Swift.Equatable { let problemId: Swift.String? + let accountId: Swift.String? } extension DescribeProblemInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case problemId = "ProblemId" } @@ -2039,16 +2299,22 @@ extension DescribeProblemInputBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let problemIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .problemId) problemId = problemIdDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } extension DescribeProblemObservationsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case problemId = "ProblemId" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let problemId = self.problemId { try encodeContainer.encode(problemId, forKey: .problemId) } @@ -2062,24 +2328,30 @@ extension DescribeProblemObservationsInput: ClientRuntime.URLPathProvider { } public struct DescribeProblemObservationsInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The ID of the problem. /// This member is required. public var problemId: Swift.String? public init( + accountId: Swift.String? = nil, problemId: Swift.String? = nil ) { + self.accountId = accountId self.problemId = problemId } } struct DescribeProblemObservationsInputBody: Swift.Equatable { let problemId: Swift.String? + let accountId: Swift.String? } extension DescribeProblemObservationsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case problemId = "ProblemId" } @@ -2087,6 +2359,8 @@ extension DescribeProblemObservationsInputBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let problemIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .problemId) problemId = problemIdDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -2196,6 +2470,165 @@ extension DescribeProblemOutputResponseBody: Swift.Decodable { } } +extension DescribeWorkloadInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" + case componentName = "ComponentName" + case resourceGroupName = "ResourceGroupName" + case workloadId = "WorkloadId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } + if let componentName = self.componentName { + try encodeContainer.encode(componentName, forKey: .componentName) + } + if let resourceGroupName = self.resourceGroupName { + try encodeContainer.encode(resourceGroupName, forKey: .resourceGroupName) + } + if let workloadId = self.workloadId { + try encodeContainer.encode(workloadId, forKey: .workloadId) + } + } +} + +extension DescribeWorkloadInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct DescribeWorkloadInput: Swift.Equatable { + /// The AWS account ID for the workload owner. + public var accountId: Swift.String? + /// The name of the component. + /// This member is required. + public var componentName: Swift.String? + /// The name of the resource group. + /// This member is required. + public var resourceGroupName: Swift.String? + /// The ID of the workload. + /// This member is required. + public var workloadId: Swift.String? + + public init( + accountId: Swift.String? = nil, + componentName: Swift.String? = nil, + resourceGroupName: Swift.String? = nil, + workloadId: Swift.String? = nil + ) + { + self.accountId = accountId + self.componentName = componentName + self.resourceGroupName = resourceGroupName + self.workloadId = workloadId + } +} + +struct DescribeWorkloadInputBody: Swift.Equatable { + let resourceGroupName: Swift.String? + let componentName: Swift.String? + let workloadId: Swift.String? + let accountId: Swift.String? +} + +extension DescribeWorkloadInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" + case componentName = "ComponentName" + case resourceGroupName = "ResourceGroupName" + case workloadId = "WorkloadId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) + resourceGroupName = resourceGroupNameDecoded + let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) + componentName = componentNameDecoded + let workloadIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workloadId) + workloadId = workloadIdDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded + } +} + +public enum DescribeWorkloadOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DescribeWorkloadOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeWorkloadOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.workloadConfiguration = output.workloadConfiguration + self.workloadId = output.workloadId + self.workloadRemarks = output.workloadRemarks + } else { + self.workloadConfiguration = nil + self.workloadId = nil + self.workloadRemarks = nil + } + } +} + +public struct DescribeWorkloadOutputResponse: Swift.Equatable { + /// The configuration settings of the workload. The value is the escaped JSON of the configuration. + public var workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? + /// The ID of the workload. + public var workloadId: Swift.String? + /// If logging is supported for the resource type, shows whether the component has configured logs to be monitored. + public var workloadRemarks: Swift.String? + + public init( + workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? = nil, + workloadId: Swift.String? = nil, + workloadRemarks: Swift.String? = nil + ) + { + self.workloadConfiguration = workloadConfiguration + self.workloadId = workloadId + self.workloadRemarks = workloadRemarks + } +} + +struct DescribeWorkloadOutputResponseBody: Swift.Equatable { + let workloadId: Swift.String? + let workloadRemarks: Swift.String? + let workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? +} + +extension DescribeWorkloadOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case workloadConfiguration = "WorkloadConfiguration" + case workloadId = "WorkloadId" + case workloadRemarks = "WorkloadRemarks" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workloadIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workloadId) + workloadId = workloadIdDecoded + let workloadRemarksDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workloadRemarks) + workloadRemarks = workloadRemarksDecoded + let workloadConfigurationDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.WorkloadConfiguration.self, forKey: .workloadConfiguration) + workloadConfiguration = workloadConfigurationDecoded + } +} + extension ApplicationInsightsClientTypes { public enum DiscoveryType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case accountBased @@ -2378,12 +2811,16 @@ extension InternalServerExceptionBody: Swift.Decodable { extension ListApplicationsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case maxResults = "MaxResults" case nextToken = "NextToken" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } @@ -2400,16 +2837,20 @@ extension ListApplicationsInput: ClientRuntime.URLPathProvider { } public struct ListApplicationsInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned NextToken value. public var maxResults: Swift.Int? /// The token to request the next page of results. public var nextToken: Swift.String? public init( + accountId: Swift.String? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil ) { + self.accountId = accountId self.maxResults = maxResults self.nextToken = nextToken } @@ -2418,10 +2859,12 @@ public struct ListApplicationsInput: Swift.Equatable { struct ListApplicationsInputBody: Swift.Equatable { let maxResults: Swift.Int? let nextToken: Swift.String? + let accountId: Swift.String? } extension ListApplicationsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case maxResults = "MaxResults" case nextToken = "NextToken" } @@ -2432,6 +2875,8 @@ extension ListApplicationsInputBody: Swift.Decodable { maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -2508,6 +2953,7 @@ extension ListApplicationsOutputResponseBody: Swift.Decodable { extension ListComponentsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case maxResults = "MaxResults" case nextToken = "NextToken" case resourceGroupName = "ResourceGroupName" @@ -2515,6 +2961,9 @@ extension ListComponentsInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } @@ -2534,6 +2983,8 @@ extension ListComponentsInput: ClientRuntime.URLPathProvider { } public struct ListComponentsInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned NextToken value. public var maxResults: Swift.Int? /// The token to request the next page of results. @@ -2543,11 +2994,13 @@ public struct ListComponentsInput: Swift.Equatable { public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.maxResults = maxResults self.nextToken = nextToken self.resourceGroupName = resourceGroupName @@ -2558,10 +3011,12 @@ struct ListComponentsInputBody: Swift.Equatable { let resourceGroupName: Swift.String? let maxResults: Swift.Int? let nextToken: Swift.String? + let accountId: Swift.String? } extension ListComponentsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case maxResults = "MaxResults" case nextToken = "NextToken" case resourceGroupName = "ResourceGroupName" @@ -2575,6 +3030,8 @@ extension ListComponentsInputBody: Swift.Decodable { maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -2652,6 +3109,7 @@ extension ListComponentsOutputResponseBody: Swift.Decodable { extension ListConfigurationHistoryInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case endTime = "EndTime" case eventStatus = "EventStatus" case maxResults = "MaxResults" @@ -2662,6 +3120,9 @@ extension ListConfigurationHistoryInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let endTime = self.endTime { try encodeContainer.encodeTimestamp(endTime, format: .epochSeconds, forKey: .endTime) } @@ -2690,6 +3151,8 @@ extension ListConfigurationHistoryInput: ClientRuntime.URLPathProvider { } public struct ListConfigurationHistoryInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The end time of the event. public var endTime: ClientRuntime.Date? /// The status of the configuration update event. Possible values include INFO, WARN, and ERROR. @@ -2704,6 +3167,7 @@ public struct ListConfigurationHistoryInput: Swift.Equatable { public var startTime: ClientRuntime.Date? public init( + accountId: Swift.String? = nil, endTime: ClientRuntime.Date? = nil, eventStatus: ApplicationInsightsClientTypes.ConfigurationEventStatus? = nil, maxResults: Swift.Int? = nil, @@ -2712,6 +3176,7 @@ public struct ListConfigurationHistoryInput: Swift.Equatable { startTime: ClientRuntime.Date? = nil ) { + self.accountId = accountId self.endTime = endTime self.eventStatus = eventStatus self.maxResults = maxResults @@ -2728,10 +3193,12 @@ struct ListConfigurationHistoryInputBody: Swift.Equatable { let eventStatus: ApplicationInsightsClientTypes.ConfigurationEventStatus? let maxResults: Swift.Int? let nextToken: Swift.String? + let accountId: Swift.String? } extension ListConfigurationHistoryInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case endTime = "EndTime" case eventStatus = "EventStatus" case maxResults = "MaxResults" @@ -2754,6 +3221,8 @@ extension ListConfigurationHistoryInputBody: Swift.Decodable { maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -2831,6 +3300,7 @@ extension ListConfigurationHistoryOutputResponseBody: Swift.Decodable { extension ListLogPatternSetsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case maxResults = "MaxResults" case nextToken = "NextToken" case resourceGroupName = "ResourceGroupName" @@ -2838,6 +3308,9 @@ extension ListLogPatternSetsInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } @@ -2857,6 +3330,8 @@ extension ListLogPatternSetsInput: ClientRuntime.URLPathProvider { } public struct ListLogPatternSetsInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned NextToken value. public var maxResults: Swift.Int? /// The token to request the next page of results. @@ -2866,11 +3341,13 @@ public struct ListLogPatternSetsInput: Swift.Equatable { public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.maxResults = maxResults self.nextToken = nextToken self.resourceGroupName = resourceGroupName @@ -2881,10 +3358,12 @@ struct ListLogPatternSetsInputBody: Swift.Equatable { let resourceGroupName: Swift.String? let maxResults: Swift.Int? let nextToken: Swift.String? + let accountId: Swift.String? } extension ListLogPatternSetsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case maxResults = "MaxResults" case nextToken = "NextToken" case resourceGroupName = "ResourceGroupName" @@ -2898,6 +3377,8 @@ extension ListLogPatternSetsInputBody: Swift.Decodable { maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -2919,10 +3400,12 @@ extension ListLogPatternSetsOutputResponse: ClientRuntime.HttpResponseBinding { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { let output: ListLogPatternSetsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.accountId = output.accountId self.logPatternSets = output.logPatternSets self.nextToken = output.nextToken self.resourceGroupName = output.resourceGroupName } else { + self.accountId = nil self.logPatternSets = nil self.nextToken = nil self.resourceGroupName = nil @@ -2931,6 +3414,8 @@ extension ListLogPatternSetsOutputResponse: ClientRuntime.HttpResponseBinding { } public struct ListLogPatternSetsOutputResponse: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The list of log pattern sets. public var logPatternSets: [Swift.String]? /// The token used to retrieve the next page of results. This value is null when there are no more results to return. @@ -2939,11 +3424,13 @@ public struct ListLogPatternSetsOutputResponse: Swift.Equatable { public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, logPatternSets: [Swift.String]? = nil, nextToken: Swift.String? = nil, resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.logPatternSets = logPatternSets self.nextToken = nextToken self.resourceGroupName = resourceGroupName @@ -2952,12 +3439,14 @@ public struct ListLogPatternSetsOutputResponse: Swift.Equatable { struct ListLogPatternSetsOutputResponseBody: Swift.Equatable { let resourceGroupName: Swift.String? + let accountId: Swift.String? let logPatternSets: [Swift.String]? let nextToken: Swift.String? } extension ListLogPatternSetsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case logPatternSets = "LogPatternSets" case nextToken = "NextToken" case resourceGroupName = "ResourceGroupName" @@ -2967,6 +3456,8 @@ extension ListLogPatternSetsOutputResponseBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) resourceGroupName = resourceGroupNameDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded let logPatternSetsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .logPatternSets) var logPatternSetsDecoded0:[Swift.String]? = nil if let logPatternSetsContainer = logPatternSetsContainer { @@ -2985,6 +3476,7 @@ extension ListLogPatternSetsOutputResponseBody: Swift.Decodable { extension ListLogPatternsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case maxResults = "MaxResults" case nextToken = "NextToken" case patternSetName = "PatternSetName" @@ -2993,6 +3485,9 @@ extension ListLogPatternsInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } @@ -3015,6 +3510,8 @@ extension ListLogPatternsInput: ClientRuntime.URLPathProvider { } public struct ListLogPatternsInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned NextToken value. public var maxResults: Swift.Int? /// The token to request the next page of results. @@ -3026,12 +3523,14 @@ public struct ListLogPatternsInput: Swift.Equatable { public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, patternSetName: Swift.String? = nil, resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.maxResults = maxResults self.nextToken = nextToken self.patternSetName = patternSetName @@ -3044,10 +3543,12 @@ struct ListLogPatternsInputBody: Swift.Equatable { let patternSetName: Swift.String? let maxResults: Swift.Int? let nextToken: Swift.String? + let accountId: Swift.String? } extension ListLogPatternsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case maxResults = "MaxResults" case nextToken = "NextToken" case patternSetName = "PatternSetName" @@ -3064,6 +3565,8 @@ extension ListLogPatternsInputBody: Swift.Decodable { maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -3085,10 +3588,12 @@ extension ListLogPatternsOutputResponse: ClientRuntime.HttpResponseBinding { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { let output: ListLogPatternsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.accountId = output.accountId self.logPatterns = output.logPatterns self.nextToken = output.nextToken self.resourceGroupName = output.resourceGroupName } else { + self.accountId = nil self.logPatterns = nil self.nextToken = nil self.resourceGroupName = nil @@ -3097,6 +3602,8 @@ extension ListLogPatternsOutputResponse: ClientRuntime.HttpResponseBinding { } public struct ListLogPatternsOutputResponse: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The list of log patterns. public var logPatterns: [ApplicationInsightsClientTypes.LogPattern]? /// The token used to retrieve the next page of results. This value is null when there are no more results to return. @@ -3105,11 +3612,13 @@ public struct ListLogPatternsOutputResponse: Swift.Equatable { public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, logPatterns: [ApplicationInsightsClientTypes.LogPattern]? = nil, nextToken: Swift.String? = nil, resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.logPatterns = logPatterns self.nextToken = nextToken self.resourceGroupName = resourceGroupName @@ -3118,12 +3627,14 @@ public struct ListLogPatternsOutputResponse: Swift.Equatable { struct ListLogPatternsOutputResponseBody: Swift.Equatable { let resourceGroupName: Swift.String? + let accountId: Swift.String? let logPatterns: [ApplicationInsightsClientTypes.LogPattern]? let nextToken: Swift.String? } extension ListLogPatternsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case logPatterns = "LogPatterns" case nextToken = "NextToken" case resourceGroupName = "ResourceGroupName" @@ -3133,6 +3644,8 @@ extension ListLogPatternsOutputResponseBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) resourceGroupName = resourceGroupNameDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded let logPatternsContainer = try containerValues.decodeIfPresent([ApplicationInsightsClientTypes.LogPattern?].self, forKey: .logPatterns) var logPatternsDecoded0:[ApplicationInsightsClientTypes.LogPattern]? = nil if let logPatternsContainer = logPatternsContainer { @@ -3151,16 +3664,21 @@ extension ListLogPatternsOutputResponseBody: Swift.Decodable { extension ListProblemsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case componentName = "ComponentName" case endTime = "EndTime" case maxResults = "MaxResults" case nextToken = "NextToken" case resourceGroupName = "ResourceGroupName" case startTime = "StartTime" + case visibility = "Visibility" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let componentName = self.componentName { try encodeContainer.encode(componentName, forKey: .componentName) } @@ -3179,6 +3697,9 @@ extension ListProblemsInput: Swift.Encodable { if let startTime = self.startTime { try encodeContainer.encodeTimestamp(startTime, format: .epochSeconds, forKey: .startTime) } + if let visibility = self.visibility { + try encodeContainer.encode(visibility.rawValue, forKey: .visibility) + } } } @@ -3189,6 +3710,8 @@ extension ListProblemsInput: ClientRuntime.URLPathProvider { } public struct ListProblemsInput: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The name of the component. public var componentName: Swift.String? /// The time when the problem ended, in epoch seconds. If not specified, problems within the past seven days are returned. @@ -3201,46 +3724,58 @@ public struct ListProblemsInput: Swift.Equatable { public var resourceGroupName: Swift.String? /// The time when the problem was detected, in epoch seconds. If you don't specify a time frame for the request, problems within the past seven days are returned. public var startTime: ClientRuntime.Date? + /// Specifies whether or not you can view the problem. If not specified, visible and ignored problems are returned. + public var visibility: ApplicationInsightsClientTypes.Visibility? public init( + accountId: Swift.String? = nil, componentName: Swift.String? = nil, endTime: ClientRuntime.Date? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, resourceGroupName: Swift.String? = nil, - startTime: ClientRuntime.Date? = nil + startTime: ClientRuntime.Date? = nil, + visibility: ApplicationInsightsClientTypes.Visibility? = nil ) { + self.accountId = accountId self.componentName = componentName self.endTime = endTime self.maxResults = maxResults self.nextToken = nextToken self.resourceGroupName = resourceGroupName self.startTime = startTime + self.visibility = visibility } } struct ListProblemsInputBody: Swift.Equatable { + let accountId: Swift.String? let resourceGroupName: Swift.String? let startTime: ClientRuntime.Date? let endTime: ClientRuntime.Date? let maxResults: Swift.Int? let nextToken: Swift.String? let componentName: Swift.String? + let visibility: ApplicationInsightsClientTypes.Visibility? } extension ListProblemsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case componentName = "ComponentName" case endTime = "EndTime" case maxResults = "MaxResults" case nextToken = "NextToken" case resourceGroupName = "ResourceGroupName" case startTime = "StartTime" + case visibility = "Visibility" } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) resourceGroupName = resourceGroupNameDecoded let startTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startTime) @@ -3253,6 +3788,8 @@ extension ListProblemsInputBody: Swift.Decodable { nextToken = nextTokenDecoded let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) componentName = componentNameDecoded + let visibilityDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.Visibility.self, forKey: .visibility) + visibility = visibilityDecoded } } @@ -3274,10 +3811,12 @@ extension ListProblemsOutputResponse: ClientRuntime.HttpResponseBinding { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { let output: ListProblemsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.accountId = output.accountId self.nextToken = output.nextToken self.problemList = output.problemList self.resourceGroupName = output.resourceGroupName } else { + self.accountId = nil self.nextToken = nil self.problemList = nil self.resourceGroupName = nil @@ -3286,6 +3825,8 @@ extension ListProblemsOutputResponse: ClientRuntime.HttpResponseBinding { } public struct ListProblemsOutputResponse: Swift.Equatable { + /// The AWS account ID for the resource group owner. + public var accountId: Swift.String? /// The token used to retrieve the next page of results. This value is null when there are no more results to return. public var nextToken: Swift.String? /// The list of problems. @@ -3294,11 +3835,13 @@ public struct ListProblemsOutputResponse: Swift.Equatable { public var resourceGroupName: Swift.String? public init( + accountId: Swift.String? = nil, nextToken: Swift.String? = nil, problemList: [ApplicationInsightsClientTypes.Problem]? = nil, resourceGroupName: Swift.String? = nil ) { + self.accountId = accountId self.nextToken = nextToken self.problemList = problemList self.resourceGroupName = resourceGroupName @@ -3309,10 +3852,12 @@ struct ListProblemsOutputResponseBody: Swift.Equatable { let problemList: [ApplicationInsightsClientTypes.Problem]? let nextToken: Swift.String? let resourceGroupName: Swift.String? + let accountId: Swift.String? } extension ListProblemsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case nextToken = "NextToken" case problemList = "ProblemList" case resourceGroupName = "ResourceGroupName" @@ -3335,6 +3880,8 @@ extension ListProblemsOutputResponseBody: Swift.Decodable { nextToken = nextTokenDecoded let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) resourceGroupName = resourceGroupNameDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded } } @@ -3447,32 +3994,201 @@ extension ListTagsForResourceOutputResponseBody: Swift.Decodable { } } -extension ApplicationInsightsClientTypes { - public enum LogFilter: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case error - case info - case warn - case sdkUnknown(Swift.String) +extension ListWorkloadsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" + case componentName = "ComponentName" + case maxResults = "MaxResults" + case nextToken = "NextToken" + case resourceGroupName = "ResourceGroupName" + } - public static var allCases: [LogFilter] { - return [ - .error, - .info, - .warn, - .sdkUnknown("") - ] + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + if let componentName = self.componentName { + try encodeContainer.encode(componentName, forKey: .componentName) } - public var rawValue: Swift.String { - switch self { - case .error: return "ERROR" - case .info: return "INFO" - case .warn: return "WARN" - case let .sdkUnknown(s): return s - } + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + if let resourceGroupName = self.resourceGroupName { + try encodeContainer.encode(resourceGroupName, forKey: .resourceGroupName) + } + } +} + +extension ListWorkloadsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct ListWorkloadsInput: Swift.Equatable { + /// The AWS account ID of the owner of the workload. + public var accountId: Swift.String? + /// The name of the component. + /// This member is required. + public var componentName: Swift.String? + /// The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned NextToken value. + public var maxResults: Swift.Int? + /// The token to request the next page of results. + public var nextToken: Swift.String? + /// The name of the resource group. + /// This member is required. + public var resourceGroupName: Swift.String? + + public init( + accountId: Swift.String? = nil, + componentName: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + resourceGroupName: Swift.String? = nil + ) + { + self.accountId = accountId + self.componentName = componentName + self.maxResults = maxResults + self.nextToken = nextToken + self.resourceGroupName = resourceGroupName + } +} + +struct ListWorkloadsInputBody: Swift.Equatable { + let resourceGroupName: Swift.String? + let componentName: Swift.String? + let maxResults: Swift.Int? + let nextToken: Swift.String? + let accountId: Swift.String? +} + +extension ListWorkloadsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" + case componentName = "ComponentName" + case maxResults = "MaxResults" + case nextToken = "NextToken" + case resourceGroupName = "ResourceGroupName" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) + resourceGroupName = resourceGroupNameDecoded + let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) + componentName = componentNameDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded + } +} + +public enum ListWorkloadsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListWorkloadsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListWorkloadsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nextToken = output.nextToken + self.workloadList = output.workloadList + } else { + self.nextToken = nil + self.workloadList = nil + } + } +} + +public struct ListWorkloadsOutputResponse: Swift.Equatable { + /// The token to request the next page of results. + public var nextToken: Swift.String? + /// The list of workloads. + public var workloadList: [ApplicationInsightsClientTypes.Workload]? + + public init( + nextToken: Swift.String? = nil, + workloadList: [ApplicationInsightsClientTypes.Workload]? = nil + ) + { + self.nextToken = nextToken + self.workloadList = workloadList + } +} + +struct ListWorkloadsOutputResponseBody: Swift.Equatable { + let workloadList: [ApplicationInsightsClientTypes.Workload]? + let nextToken: Swift.String? +} + +extension ListWorkloadsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextToken = "NextToken" + case workloadList = "WorkloadList" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workloadListContainer = try containerValues.decodeIfPresent([ApplicationInsightsClientTypes.Workload?].self, forKey: .workloadList) + var workloadListDecoded0:[ApplicationInsightsClientTypes.Workload]? = nil + if let workloadListContainer = workloadListContainer { + workloadListDecoded0 = [ApplicationInsightsClientTypes.Workload]() + for structure0 in workloadListContainer { + if let structure0 = structure0 { + workloadListDecoded0?.append(structure0) + } + } + } + workloadList = workloadListDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ApplicationInsightsClientTypes { + public enum LogFilter: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case error + case info + case warn + case sdkUnknown(Swift.String) + + public static var allCases: [LogFilter] { + return [ + .error, + .info, + .warn, + .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 .error: return "ERROR" + case .info: return "INFO" + case .warn: return "WARN" + case let .sdkUnknown(s): return s + } } public init(from decoder: Swift.Decoder) throws { let container = try decoder.singleValueContainer() @@ -4056,6 +4772,7 @@ extension ApplicationInsightsClientTypes { extension ApplicationInsightsClientTypes.Problem: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" case affectedResource = "AffectedResource" case endTime = "EndTime" case feedback = "Feedback" @@ -4063,15 +4780,20 @@ extension ApplicationInsightsClientTypes.Problem: Swift.Codable { case insights = "Insights" case lastRecurrenceTime = "LastRecurrenceTime" case recurringCount = "RecurringCount" + case resolutionMethod = "ResolutionMethod" case resourceGroupName = "ResourceGroupName" case severityLevel = "SeverityLevel" case startTime = "StartTime" case status = "Status" case title = "Title" + case visibility = "Visibility" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } if let affectedResource = self.affectedResource { try encodeContainer.encode(affectedResource, forKey: .affectedResource) } @@ -4096,6 +4818,9 @@ extension ApplicationInsightsClientTypes.Problem: Swift.Codable { if let recurringCount = self.recurringCount { try encodeContainer.encode(recurringCount, forKey: .recurringCount) } + if let resolutionMethod = self.resolutionMethod { + try encodeContainer.encode(resolutionMethod.rawValue, forKey: .resolutionMethod) + } if let resourceGroupName = self.resourceGroupName { try encodeContainer.encode(resourceGroupName, forKey: .resourceGroupName) } @@ -4111,6 +4836,9 @@ extension ApplicationInsightsClientTypes.Problem: Swift.Codable { if let title = self.title { try encodeContainer.encode(title, forKey: .title) } + if let visibility = self.visibility { + try encodeContainer.encode(visibility.rawValue, forKey: .visibility) + } } public init(from decoder: Swift.Decoder) throws { @@ -4131,6 +4859,8 @@ extension ApplicationInsightsClientTypes.Problem: Swift.Codable { endTime = endTimeDecoded let severityLevelDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.SeverityLevel.self, forKey: .severityLevel) severityLevel = severityLevelDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) resourceGroupName = resourceGroupNameDecoded let feedbackContainer = try containerValues.decodeIfPresent([Swift.String: ApplicationInsightsClientTypes.FeedbackValue?].self, forKey: .feedback) @@ -4148,12 +4878,18 @@ extension ApplicationInsightsClientTypes.Problem: Swift.Codable { recurringCount = recurringCountDecoded let lastRecurrenceTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastRecurrenceTime) lastRecurrenceTime = lastRecurrenceTimeDecoded + let visibilityDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.Visibility.self, forKey: .visibility) + visibility = visibilityDecoded + let resolutionMethodDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.ResolutionMethod.self, forKey: .resolutionMethod) + resolutionMethod = resolutionMethodDecoded } } extension ApplicationInsightsClientTypes { /// Describes a problem that is detected by correlating observations. public struct Problem: Swift.Equatable { + /// The AWS account ID for the owner of the resource group affected by the problem. + public var accountId: Swift.String? /// The resource affected by the problem. public var affectedResource: Swift.String? /// The time when the problem ended, in epoch seconds. @@ -4168,6 +4904,8 @@ extension ApplicationInsightsClientTypes { public var lastRecurrenceTime: ClientRuntime.Date? /// The number of times that the same problem reoccurred after the first time it was resolved. public var recurringCount: Swift.Int? + /// Specifies how the problem was resolved. If the value is AUTOMATIC, the system resolved the problem. If the value is MANUAL, the user resolved the problem. If the value is UNRESOLVED, then the problem is not resolved. + public var resolutionMethod: ApplicationInsightsClientTypes.ResolutionMethod? /// The name of the resource group affected by the problem. public var resourceGroupName: Swift.String? /// A measure of the level of impact of the problem. @@ -4178,8 +4916,11 @@ extension ApplicationInsightsClientTypes { public var status: ApplicationInsightsClientTypes.Status? /// The name of the problem. public var title: Swift.String? + /// Specifies whether or not you can view the problem. Updates to ignored problems do not generate notifications. + public var visibility: ApplicationInsightsClientTypes.Visibility? public init( + accountId: Swift.String? = nil, affectedResource: Swift.String? = nil, endTime: ClientRuntime.Date? = nil, feedback: [Swift.String:ApplicationInsightsClientTypes.FeedbackValue]? = nil, @@ -4187,13 +4928,16 @@ extension ApplicationInsightsClientTypes { insights: Swift.String? = nil, lastRecurrenceTime: ClientRuntime.Date? = nil, recurringCount: Swift.Int? = nil, + resolutionMethod: ApplicationInsightsClientTypes.ResolutionMethod? = nil, resourceGroupName: Swift.String? = nil, severityLevel: ApplicationInsightsClientTypes.SeverityLevel? = nil, startTime: ClientRuntime.Date? = nil, status: ApplicationInsightsClientTypes.Status? = nil, - title: Swift.String? = nil + title: Swift.String? = nil, + visibility: ApplicationInsightsClientTypes.Visibility? = nil ) { + self.accountId = accountId self.affectedResource = affectedResource self.endTime = endTime self.feedback = feedback @@ -4201,16 +4945,53 @@ extension ApplicationInsightsClientTypes { self.insights = insights self.lastRecurrenceTime = lastRecurrenceTime self.recurringCount = recurringCount + self.resolutionMethod = resolutionMethod self.resourceGroupName = resourceGroupName self.severityLevel = severityLevel self.startTime = startTime self.status = status self.title = title + self.visibility = visibility } } } +extension ApplicationInsightsClientTypes { + public enum RecommendationType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case all + case infraOnly + case workloadOnly + case sdkUnknown(Swift.String) + + public static var allCases: [RecommendationType] { + return [ + .all, + .infraOnly, + .workloadOnly, + .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 .all: return "ALL" + case .infraOnly: return "INFRA_ONLY" + case .workloadOnly: return "WORKLOAD_ONLY" + 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 = RecommendationType(rawValue: rawValue) ?? RecommendationType.sdkUnknown(rawValue) + } + } +} + extension ApplicationInsightsClientTypes.RelatedObservations: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case observationList = "ObservationList" @@ -4258,77 +5039,209 @@ extension ApplicationInsightsClientTypes { } -extension ResourceInUseException { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: ResourceInUseExceptionBody = try responseDecoder.decode(responseBody: data) - self.properties.message = output.message - } else { - self.properties.message = nil +extension RemoveWorkloadInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case componentName = "ComponentName" + case resourceGroupName = "ResourceGroupName" + case workloadId = "WorkloadId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let componentName = self.componentName { + try encodeContainer.encode(componentName, forKey: .componentName) + } + if let resourceGroupName = self.resourceGroupName { + try encodeContainer.encode(resourceGroupName, forKey: .resourceGroupName) + } + if let workloadId = self.workloadId { + try encodeContainer.encode(workloadId, forKey: .workloadId) } - self.httpResponse = httpResponse - self.requestID = requestID - self.message = message } } -/// The resource is already created or in use. -public struct ResourceInUseException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil +extension RemoveWorkloadInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" } +} - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ResourceInUseException" } - public static var fault: ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? +public struct RemoveWorkloadInput: Swift.Equatable { + /// The name of the component. + /// This member is required. + public var componentName: Swift.String? + /// The name of the resource group. + /// This member is required. + public var resourceGroupName: Swift.String? + /// The ID of the workload. + /// This member is required. + public var workloadId: Swift.String? public init( - message: Swift.String? = nil + componentName: Swift.String? = nil, + resourceGroupName: Swift.String? = nil, + workloadId: Swift.String? = nil ) { - self.properties.message = message + self.componentName = componentName + self.resourceGroupName = resourceGroupName + self.workloadId = workloadId } } -struct ResourceInUseExceptionBody: Swift.Equatable { - let message: Swift.String? +struct RemoveWorkloadInputBody: Swift.Equatable { + let resourceGroupName: Swift.String? + let componentName: Swift.String? + let workloadId: Swift.String? } -extension ResourceInUseExceptionBody: Swift.Decodable { +extension RemoveWorkloadInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message = "Message" + case componentName = "ComponentName" + case resourceGroupName = "ResourceGroupName" + case workloadId = "WorkloadId" } 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 resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) + resourceGroupName = resourceGroupNameDecoded + let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) + componentName = componentNameDecoded + let workloadIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workloadId) + workloadId = workloadIdDecoded } } -extension ResourceNotFoundException { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: ResourceNotFoundExceptionBody = try responseDecoder.decode(responseBody: data) - self.properties.message = output.message - } else { - self.properties.message = nil +public enum RemoveWorkloadOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } - self.httpResponse = httpResponse - self.requestID = requestID - self.message = message } } -/// The resource does not exist in the customer account. +extension RemoveWorkloadOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct RemoveWorkloadOutputResponse: Swift.Equatable { + + public init() { } +} + +extension ApplicationInsightsClientTypes { + public enum ResolutionMethod: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case automatic + case manual + case unresolved + case sdkUnknown(Swift.String) + + public static var allCases: [ResolutionMethod] { + return [ + .automatic, + .manual, + .unresolved, + .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 .automatic: return "AUTOMATIC" + case .manual: return "MANUAL" + case .unresolved: return "UNRESOLVED" + 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 = ResolutionMethod(rawValue: rawValue) ?? ResolutionMethod.sdkUnknown(rawValue) + } + } +} + +extension ResourceInUseException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ResourceInUseExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The resource is already created or in use. +public struct ResourceInUseException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ResourceInUseException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ResourceInUseExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ResourceInUseExceptionBody: 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 ResourceNotFoundException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ResourceNotFoundExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The resource does not exist in the customer account. public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { @@ -4410,6 +5323,7 @@ extension ApplicationInsightsClientTypes { public enum Status: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case ignore case pending + case recovering case recurring case resolved case sdkUnknown(Swift.String) @@ -4418,6 +5332,7 @@ extension ApplicationInsightsClientTypes { return [ .ignore, .pending, + .recovering, .recurring, .resolved, .sdkUnknown("") @@ -4431,6 +5346,7 @@ extension ApplicationInsightsClientTypes { switch self { case .ignore: return "IGNORE" case .pending: return "PENDING" + case .recovering: return "RECOVERING" case .recurring: return "RECURRING" case .resolved: return "RESOLVED" case let .sdkUnknown(s): return s @@ -4664,6 +5580,9 @@ extension ApplicationInsightsClientTypes { case sapHanaHighAvailability case sapHanaMultiNode case sapHanaSingleNode + case sapNetweaverDistributed + case sapNetweaverHighAvailability + case sapNetweaverStandard case sharepoint case sqlServer case sqlServerAlwaysonAvailabilityGroup @@ -4686,6 +5605,9 @@ extension ApplicationInsightsClientTypes { .sapHanaHighAvailability, .sapHanaMultiNode, .sapHanaSingleNode, + .sapNetweaverDistributed, + .sapNetweaverHighAvailability, + .sapNetweaverStandard, .sharepoint, .sqlServer, .sqlServerAlwaysonAvailabilityGroup, @@ -4713,6 +5635,9 @@ extension ApplicationInsightsClientTypes { case .sapHanaHighAvailability: return "SAP_HANA_HIGH_AVAILABILITY" case .sapHanaMultiNode: return "SAP_HANA_MULTI_NODE" case .sapHanaSingleNode: return "SAP_HANA_SINGLE_NODE" + case .sapNetweaverDistributed: return "SAP_NETWEAVER_DISTRIBUTED" + case .sapNetweaverHighAvailability: return "SAP_NETWEAVER_HIGH_AVAILABILITY" + case .sapNetweaverStandard: return "SAP_NETWEAVER_STANDARD" case .sharepoint: return "SHAREPOINT" case .sqlServer: return "SQL_SERVER" case .sqlServerAlwaysonAvailabilityGroup: return "SQL_SERVER_ALWAYSON_AVAILABILITY_GROUP" @@ -5322,7 +6247,7 @@ extension UpdateLogPatternInput: Swift.Encodable { if let patternSetName = self.patternSetName { try encodeContainer.encode(patternSetName, forKey: .patternSetName) } - if rank != 0 { + if let rank = self.rank { try encodeContainer.encode(rank, forKey: .rank) } if let resourceGroupName = self.resourceGroupName { @@ -5347,7 +6272,7 @@ public struct UpdateLogPatternInput: Swift.Equatable { /// This member is required. public var patternSetName: Swift.String? /// Rank of the log pattern. Must be a value between 1 and 1,000,000. The patterns are sorted by rank, so we recommend that you set your highest priority patterns with the lowest rank. A pattern of rank 1 will be the first to get matched to a log line. A pattern of rank 1,000,000 will be last to get matched. When you configure custom log patterns from the console, a Low severity pattern translates to a 750,000 rank. A Medium severity pattern translates to a 500,000 rank. And a High severity pattern translates to a 250,000 rank. Rank values less than 1 or greater than 1,000,000 are reserved for AWS-provided patterns. - public var rank: Swift.Int + public var rank: Swift.Int? /// The name of the resource group. /// This member is required. public var resourceGroupName: Swift.String? @@ -5356,7 +6281,7 @@ public struct UpdateLogPatternInput: Swift.Equatable { pattern: Swift.String? = nil, patternName: Swift.String? = nil, patternSetName: Swift.String? = nil, - rank: Swift.Int = 0, + rank: Swift.Int? = nil, resourceGroupName: Swift.String? = nil ) { @@ -5373,7 +6298,7 @@ struct UpdateLogPatternInputBody: Swift.Equatable { let patternSetName: Swift.String? let patternName: Swift.String? let pattern: Swift.String? - let rank: Swift.Int + let rank: Swift.Int? } extension UpdateLogPatternInputBody: Swift.Decodable { @@ -5395,7 +6320,7 @@ extension UpdateLogPatternInputBody: Swift.Decodable { patternName = patternNameDecoded let patternDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .pattern) pattern = patternDecoded - let rankDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .rank) ?? 0 + let rankDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .rank) rank = rankDecoded } } @@ -5464,6 +6389,279 @@ extension UpdateLogPatternOutputResponseBody: Swift.Decodable { } } +extension UpdateProblemInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case problemId = "ProblemId" + case updateStatus = "UpdateStatus" + case visibility = "Visibility" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let problemId = self.problemId { + try encodeContainer.encode(problemId, forKey: .problemId) + } + if let updateStatus = self.updateStatus { + try encodeContainer.encode(updateStatus.rawValue, forKey: .updateStatus) + } + if let visibility = self.visibility { + try encodeContainer.encode(visibility.rawValue, forKey: .visibility) + } + } +} + +extension UpdateProblemInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct UpdateProblemInput: Swift.Equatable { + /// The ID of the problem. + /// This member is required. + public var problemId: Swift.String? + /// The status of the problem. Arguments can be passed for only problems that show a status of RECOVERING. + public var updateStatus: ApplicationInsightsClientTypes.UpdateStatus? + /// The visibility of a problem. When you pass a value of IGNORED, the problem is removed from the default view, and all notifications for the problem are suspended. When VISIBLE is passed, the IGNORED action is reversed. + public var visibility: ApplicationInsightsClientTypes.Visibility? + + public init( + problemId: Swift.String? = nil, + updateStatus: ApplicationInsightsClientTypes.UpdateStatus? = nil, + visibility: ApplicationInsightsClientTypes.Visibility? = nil + ) + { + self.problemId = problemId + self.updateStatus = updateStatus + self.visibility = visibility + } +} + +struct UpdateProblemInputBody: Swift.Equatable { + let problemId: Swift.String? + let updateStatus: ApplicationInsightsClientTypes.UpdateStatus? + let visibility: ApplicationInsightsClientTypes.Visibility? +} + +extension UpdateProblemInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case problemId = "ProblemId" + case updateStatus = "UpdateStatus" + case visibility = "Visibility" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let problemIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .problemId) + problemId = problemIdDecoded + let updateStatusDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.UpdateStatus.self, forKey: .updateStatus) + updateStatus = updateStatusDecoded + let visibilityDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.Visibility.self, forKey: .visibility) + visibility = visibilityDecoded + } +} + +public enum UpdateProblemOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UpdateProblemOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct UpdateProblemOutputResponse: Swift.Equatable { + + public init() { } +} + +extension ApplicationInsightsClientTypes { + public enum UpdateStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case resolved + case sdkUnknown(Swift.String) + + public static var allCases: [UpdateStatus] { + return [ + .resolved, + .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 .resolved: return "RESOLVED" + 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 = UpdateStatus(rawValue: rawValue) ?? UpdateStatus.sdkUnknown(rawValue) + } + } +} + +extension UpdateWorkloadInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case componentName = "ComponentName" + case resourceGroupName = "ResourceGroupName" + case workloadConfiguration = "WorkloadConfiguration" + case workloadId = "WorkloadId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let componentName = self.componentName { + try encodeContainer.encode(componentName, forKey: .componentName) + } + if let resourceGroupName = self.resourceGroupName { + try encodeContainer.encode(resourceGroupName, forKey: .resourceGroupName) + } + if let workloadConfiguration = self.workloadConfiguration { + try encodeContainer.encode(workloadConfiguration, forKey: .workloadConfiguration) + } + if let workloadId = self.workloadId { + try encodeContainer.encode(workloadId, forKey: .workloadId) + } + } +} + +extension UpdateWorkloadInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct UpdateWorkloadInput: Swift.Equatable { + /// The name of the component. + /// This member is required. + public var componentName: Swift.String? + /// The name of the resource group. + /// This member is required. + public var resourceGroupName: Swift.String? + /// The configuration settings of the workload. The value is the escaped JSON of the configuration. + /// This member is required. + public var workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? + /// The ID of the workload. + public var workloadId: Swift.String? + + public init( + componentName: Swift.String? = nil, + resourceGroupName: Swift.String? = nil, + workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? = nil, + workloadId: Swift.String? = nil + ) + { + self.componentName = componentName + self.resourceGroupName = resourceGroupName + self.workloadConfiguration = workloadConfiguration + self.workloadId = workloadId + } +} + +struct UpdateWorkloadInputBody: Swift.Equatable { + let resourceGroupName: Swift.String? + let componentName: Swift.String? + let workloadId: Swift.String? + let workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? +} + +extension UpdateWorkloadInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case componentName = "ComponentName" + case resourceGroupName = "ResourceGroupName" + case workloadConfiguration = "WorkloadConfiguration" + case workloadId = "WorkloadId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceGroupName) + resourceGroupName = resourceGroupNameDecoded + let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) + componentName = componentNameDecoded + let workloadIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workloadId) + workloadId = workloadIdDecoded + let workloadConfigurationDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.WorkloadConfiguration.self, forKey: .workloadConfiguration) + workloadConfiguration = workloadConfigurationDecoded + } +} + +public enum UpdateWorkloadOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UpdateWorkloadOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: UpdateWorkloadOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.workloadConfiguration = output.workloadConfiguration + self.workloadId = output.workloadId + } else { + self.workloadConfiguration = nil + self.workloadId = nil + } + } +} + +public struct UpdateWorkloadOutputResponse: Swift.Equatable { + /// The configuration settings of the workload. The value is the escaped JSON of the configuration. + public var workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? + /// The ID of the workload. + public var workloadId: Swift.String? + + public init( + workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? = nil, + workloadId: Swift.String? = nil + ) + { + self.workloadConfiguration = workloadConfiguration + self.workloadId = workloadId + } +} + +struct UpdateWorkloadOutputResponseBody: Swift.Equatable { + let workloadId: Swift.String? + let workloadConfiguration: ApplicationInsightsClientTypes.WorkloadConfiguration? +} + +extension UpdateWorkloadOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case workloadConfiguration = "WorkloadConfiguration" + case workloadId = "WorkloadId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workloadIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workloadId) + workloadId = workloadIdDecoded + let workloadConfigurationDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.WorkloadConfiguration.self, forKey: .workloadConfiguration) + workloadConfiguration = workloadConfigurationDecoded + } +} + extension ValidationException { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -5518,3 +6716,165 @@ extension ValidationExceptionBody: Swift.Decodable { message = messageDecoded } } + +extension ApplicationInsightsClientTypes { + public enum Visibility: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case ignored + case visible + case sdkUnknown(Swift.String) + + public static var allCases: [Visibility] { + return [ + .ignored, + .visible, + .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 .ignored: return "IGNORED" + case .visible: return "VISIBLE" + 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 = Visibility(rawValue: rawValue) ?? Visibility.sdkUnknown(rawValue) + } + } +} + +extension ApplicationInsightsClientTypes.Workload: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case componentName = "ComponentName" + case tier = "Tier" + case workloadId = "WorkloadId" + case workloadName = "WorkloadName" + case workloadRemarks = "WorkloadRemarks" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let componentName = self.componentName { + try encodeContainer.encode(componentName, forKey: .componentName) + } + if let tier = self.tier { + try encodeContainer.encode(tier.rawValue, forKey: .tier) + } + if let workloadId = self.workloadId { + try encodeContainer.encode(workloadId, forKey: .workloadId) + } + if let workloadName = self.workloadName { + try encodeContainer.encode(workloadName, forKey: .workloadName) + } + if let workloadRemarks = self.workloadRemarks { + try encodeContainer.encode(workloadRemarks, forKey: .workloadRemarks) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workloadIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workloadId) + workloadId = workloadIdDecoded + let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) + componentName = componentNameDecoded + let workloadNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workloadName) + workloadName = workloadNameDecoded + let tierDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.Tier.self, forKey: .tier) + tier = tierDecoded + let workloadRemarksDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workloadRemarks) + workloadRemarks = workloadRemarksDecoded + } +} + +extension ApplicationInsightsClientTypes { + /// Describes the workloads on a component. + public struct Workload: Swift.Equatable { + /// The name of the component. + public var componentName: Swift.String? + /// The tier of the workload. + public var tier: ApplicationInsightsClientTypes.Tier? + /// The ID of the workload. + public var workloadId: Swift.String? + /// The name of the workload. + public var workloadName: Swift.String? + /// If logging is supported for the resource type, shows whether the component has configured logs to be monitored. + public var workloadRemarks: Swift.String? + + public init( + componentName: Swift.String? = nil, + tier: ApplicationInsightsClientTypes.Tier? = nil, + workloadId: Swift.String? = nil, + workloadName: Swift.String? = nil, + workloadRemarks: Swift.String? = nil + ) + { + self.componentName = componentName + self.tier = tier + self.workloadId = workloadId + self.workloadName = workloadName + self.workloadRemarks = workloadRemarks + } + } + +} + +extension ApplicationInsightsClientTypes.WorkloadConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case configuration = "Configuration" + case tier = "Tier" + case workloadName = "WorkloadName" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let configuration = self.configuration { + try encodeContainer.encode(configuration, forKey: .configuration) + } + if let tier = self.tier { + try encodeContainer.encode(tier.rawValue, forKey: .tier) + } + if let workloadName = self.workloadName { + try encodeContainer.encode(workloadName, forKey: .workloadName) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workloadNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workloadName) + workloadName = workloadNameDecoded + let tierDecoded = try containerValues.decodeIfPresent(ApplicationInsightsClientTypes.Tier.self, forKey: .tier) + tier = tierDecoded + let configurationDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .configuration) + configuration = configurationDecoded + } +} + +extension ApplicationInsightsClientTypes { + /// The configuration of the workload. + public struct WorkloadConfiguration: Swift.Equatable { + /// The configuration settings of the workload. + public var configuration: Swift.String? + /// The configuration of the workload tier. + public var tier: ApplicationInsightsClientTypes.Tier? + /// The name of the workload. + public var workloadName: Swift.String? + + public init( + configuration: Swift.String? = nil, + tier: ApplicationInsightsClientTypes.Tier? = nil, + workloadName: Swift.String? = nil + ) + { + self.configuration = configuration + self.tier = tier + self.workloadName = workloadName + } + } + +} diff --git a/Sources/Services/AWSAutoScaling/AutoScalingClient.swift b/Sources/Services/AWSAutoScaling/AutoScalingClient.swift index b225115650e..4b4d0ee4635 100644 --- a/Sources/Services/AWSAutoScaling/AutoScalingClient.swift +++ b/Sources/Services/AWSAutoScaling/AutoScalingClient.swift @@ -352,7 +352,7 @@ extension AutoScalingClient: AutoScalingClientProtocol { /// * If you finish before the timeout period ends, send a callback by using the [CompleteLifecycleAction] API call. /// /// - /// For more information, see [Amazon EC2 Auto Scaling lifecycle hooks](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html) in the Amazon EC2 Auto Scaling User Guide. + /// For more information, see [Complete a lifecycle action](https://docs.aws.amazon.com/autoscaling/ec2/userguide/completing-lifecycle-hooks.html) in the Amazon EC2 Auto Scaling User Guide. public func completeLifecycleAction(input: CompleteLifecycleActionInput) async throws -> CompleteLifecycleActionOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1658,7 +1658,7 @@ extension AutoScalingClient: AutoScalingClientProtocol { return result } - /// Detaches one or more traffic sources from the specified Auto Scaling group. When you detach a taffic, it enters the Removing state while deregistering the instances in the group. When all instances are deregistered, then you can no longer describe the traffic source using the [DescribeTrafficSources] API call. The instances continue to run. + /// Detaches one or more traffic sources from the specified Auto Scaling group. When you detach a traffic source, it enters the Removing state while deregistering the instances in the group. When all instances are deregistered, then you can no longer describe the traffic source using the [DescribeTrafficSources] API call. The instances continue to run. public func detachTrafficSources(input: DetachTrafficSourcesInput) async throws -> DetachTrafficSourcesOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSAutoScaling/AutoScalingClientProtocol.swift b/Sources/Services/AWSAutoScaling/AutoScalingClientProtocol.swift index e82bd047ae6..e8376805811 100644 --- a/Sources/Services/AWSAutoScaling/AutoScalingClientProtocol.swift +++ b/Sources/Services/AWSAutoScaling/AutoScalingClientProtocol.swift @@ -55,7 +55,7 @@ public protocol AutoScalingClientProtocol { /// * If you finish before the timeout period ends, send a callback by using the [CompleteLifecycleAction] API call. /// /// - /// For more information, see [Amazon EC2 Auto Scaling lifecycle hooks](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html) in the Amazon EC2 Auto Scaling User Guide. + /// For more information, see [Complete a lifecycle action](https://docs.aws.amazon.com/autoscaling/ec2/userguide/completing-lifecycle-hooks.html) in the Amazon EC2 Auto Scaling User Guide. func completeLifecycleAction(input: CompleteLifecycleActionInput) async throws -> CompleteLifecycleActionOutputResponse /// We strongly recommend using a launch template when calling this operation to ensure full functionality for Amazon EC2 Auto Scaling and Amazon EC2. Creates an Auto Scaling group with the specified name and attributes. If you exceed your maximum limit of Auto Scaling groups, the call fails. To query this limit, call the [DescribeAccountLimits] API. For information about updating this limit, see [Quotas for Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-quotas.html) in the Amazon EC2 Auto Scaling User Guide. For introductory exercises for creating an Auto Scaling group, see [Getting started with Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/GettingStartedTutorial.html) and [Tutorial: Set up a scaled and load-balanced application](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-register-lbs-with-asg.html) in the Amazon EC2 Auto Scaling User Guide. For more information, see [Auto Scaling groups](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html) in the Amazon EC2 Auto Scaling User Guide. Every Auto Scaling group has three size properties (DesiredCapacity, MaxSize, and MinSize). Usually, you set these sizes based on a specific number of instances. However, if you configure a mixed instances policy that defines weights for the instance types, you must specify these sizes with the same units that you use for weighting instances. func createAutoScalingGroup(input: CreateAutoScalingGroupInput) async throws -> CreateAutoScalingGroupOutputResponse @@ -137,7 +137,7 @@ public protocol AutoScalingClientProtocol { func detachLoadBalancers(input: DetachLoadBalancersInput) async throws -> DetachLoadBalancersOutputResponse /// This API operation is superseded by [DetachTrafficSources], which can detach multiple traffic sources types. We recommend using DetachTrafficSources to simplify how you manage traffic sources. However, we continue to support DetachLoadBalancerTargetGroups. You can use both the original DetachLoadBalancerTargetGroups API operation and DetachTrafficSources on the same Auto Scaling group. Detaches one or more target groups from the specified Auto Scaling group. When you detach a target group, it enters the Removing state while deregistering the instances in the group. When all instances are deregistered, then you can no longer describe the target group using the [DescribeLoadBalancerTargetGroups] API call. The instances remain running. You can use this operation to detach target groups that were attached by using [AttachLoadBalancerTargetGroups], but not for target groups that were attached by using [AttachTrafficSources]. func detachLoadBalancerTargetGroups(input: DetachLoadBalancerTargetGroupsInput) async throws -> DetachLoadBalancerTargetGroupsOutputResponse - /// Detaches one or more traffic sources from the specified Auto Scaling group. When you detach a taffic, it enters the Removing state while deregistering the instances in the group. When all instances are deregistered, then you can no longer describe the traffic source using the [DescribeTrafficSources] API call. The instances continue to run. + /// Detaches one or more traffic sources from the specified Auto Scaling group. When you detach a traffic source, it enters the Removing state while deregistering the instances in the group. When all instances are deregistered, then you can no longer describe the traffic source using the [DescribeTrafficSources] API call. The instances continue to run. func detachTrafficSources(input: DetachTrafficSourcesInput) async throws -> DetachTrafficSourcesOutputResponse /// Disables group metrics collection for the specified Auto Scaling group. func disableMetricsCollection(input: DisableMetricsCollectionInput) async throws -> DisableMetricsCollectionOutputResponse diff --git a/Sources/Services/AWSAutoScaling/EndpointResolver.swift b/Sources/Services/AWSAutoScaling/EndpointResolver.swift index 5b2696bca8d..4cb646f3705 100644 --- a/Sources/Services/AWSAutoScaling/EndpointResolver.swift +++ b/Sources/Services/AWSAutoScaling/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://autoscaling-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://autoscaling.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://autoscaling-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://autoscaling.{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://autoscaling.{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\":[{\"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\":[{\"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\":[],\"endpoint\":{\"url\":\"https://autoscaling-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\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://autoscaling.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://autoscaling-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\":[],\"endpoint\":{\"url\":\"https://autoscaling.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://autoscaling.{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/AWSAutoScaling/Paginators.swift b/Sources/Services/AWSAutoScaling/Paginators.swift index b1bc501973c..0da602f3ae3 100644 --- a/Sources/Services/AWSAutoScaling/Paginators.swift +++ b/Sources/Services/AWSAutoScaling/Paginators.swift @@ -281,3 +281,34 @@ extension DescribeTrafficSourcesInput: ClientRuntime.PaginateToken { trafficSourceType: self.trafficSourceType )} } +extension AutoScalingClient { + /// Paginate over `[DescribeWarmPoolOutputResponse]` 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 `[DescribeWarmPoolInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `DescribeWarmPoolOutputResponse` + public func describeWarmPoolPaginated(input: DescribeWarmPoolInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \DescribeWarmPoolInput.nextToken, outputKey: \DescribeWarmPoolOutputResponse.nextToken, paginationFunction: self.describeWarmPool(input:)) + } +} + +extension DescribeWarmPoolInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> DescribeWarmPoolInput { + return DescribeWarmPoolInput( + autoScalingGroupName: self.autoScalingGroupName, + maxRecords: self.maxRecords, + nextToken: token + )} +} + +extension PaginatorSequence where Input == DescribeWarmPoolInput, Output == DescribeWarmPoolOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `describeWarmPoolPaginated` + /// to access the nested member `[AutoScalingClientTypes.Instance]` + /// - Returns: `[AutoScalingClientTypes.Instance]` + public func instances() async throws -> [AutoScalingClientTypes.Instance] { + return try await self.asyncCompactMap { item in item.instances } + } +} diff --git a/Sources/Services/AWSAutoScaling/models/Models.swift b/Sources/Services/AWSAutoScaling/models/Models.swift index 20f2a6ade57..65bdd52cd3e 100644 --- a/Sources/Services/AWSAutoScaling/models/Models.swift +++ b/Sources/Services/AWSAutoScaling/models/Models.swift @@ -496,6 +496,67 @@ extension AutoScalingClientTypes { } +extension AutoScalingClientTypes.AlarmSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case alarms = "Alarms" + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let alarms = alarms { + if !alarms.isEmpty { + var alarmsContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("Alarms")) + for (index0, xmlstringmaxlen2550) in alarms.enumerated() { + try alarmsContainer.encode(xmlstringmaxlen2550, forKey: ClientRuntime.Key("member.\(index0.advanced(by: 1))")) + } + } + else { + var alarmsContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("Alarms")) + try alarmsContainer.encode("", forKey: ClientRuntime.Key("")) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + if containerValues.contains(.alarms) { + struct KeyVal0{struct member{}} + let alarmsWrappedContainer = containerValues.nestedContainerNonThrowable(keyedBy: CollectionMemberCodingKey.CodingKeys.self, forKey: .alarms) + if let alarmsWrappedContainer = alarmsWrappedContainer { + let alarmsContainer = try alarmsWrappedContainer.decodeIfPresent([Swift.String].self, forKey: .member) + var alarmsBuffer:[Swift.String]? = nil + if let alarmsContainer = alarmsContainer { + alarmsBuffer = [Swift.String]() + for stringContainer0 in alarmsContainer { + alarmsBuffer?.append(stringContainer0) + } + } + alarms = alarmsBuffer + } else { + alarms = [] + } + } else { + alarms = nil + } + } +} + +extension AutoScalingClientTypes { + /// Specifies the CloudWatch alarm specification to use in an instance refresh. + public struct AlarmSpecification: Swift.Equatable { + /// The names of one or more CloudWatch alarms to monitor for the instance refresh. + public var alarms: [Swift.String]? + + public init( + alarms: [Swift.String]? = nil + ) + { + self.alarms = alarms + } + } + +} + extension AlreadyExistsFault { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { @@ -13776,7 +13837,7 @@ public struct PutScalingPolicyInput: Swift.Equatable { public var policyType: Swift.String? /// A predictive scaling policy. Provides support for predefined and custom metrics. Predefined metrics include CPU utilization, network in/out, and the Application Load Balancer request count. For more information, see [PredictiveScalingConfiguration](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_PredictiveScalingConfiguration.html) in the Amazon EC2 Auto Scaling API Reference. Required if the policy type is PredictiveScaling. public var predictiveScalingConfiguration: AutoScalingClientTypes.PredictiveScalingConfiguration? - /// The amount by which to scale, based on the specified adjustment type. A positive value adds to the current capacity while a negative number removes from the current capacity. For exact capacity, you must specify a positive value. Required if the policy type is SimpleScaling. (Not used with any other policy type.) + /// The amount by which to scale, based on the specified adjustment type. A positive value adds to the current capacity while a negative number removes from the current capacity. For exact capacity, you must specify a non-negative value. Required if the policy type is SimpleScaling. (Not used with any other policy type.) public var scalingAdjustment: Swift.Int? /// A set of adjustments that enable you to scale based on the size of the alarm breach. Required if the policy type is StepScaling. (Not used with any other policy type.) public var stepAdjustments: [AutoScalingClientTypes.StepAdjustment]? @@ -14375,6 +14436,7 @@ public struct RecordLifecycleActionHeartbeatOutputResponse: Swift.Equatable { extension AutoScalingClientTypes.RefreshPreferences: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case alarmSpecification = "AlarmSpecification" case autoRollback = "AutoRollback" case checkpointDelay = "CheckpointDelay" case checkpointPercentages = "CheckpointPercentages" @@ -14387,6 +14449,9 @@ extension AutoScalingClientTypes.RefreshPreferences: Swift.Codable { public func encode(to encoder: Swift.Encoder) throws { var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let alarmSpecification = alarmSpecification { + try container.encode(alarmSpecification, forKey: ClientRuntime.Key("AlarmSpecification")) + } if let autoRollback = autoRollback { try container.encode(autoRollback, forKey: ClientRuntime.Key("AutoRollback")) } @@ -14457,19 +14522,26 @@ extension AutoScalingClientTypes.RefreshPreferences: Swift.Codable { scaleInProtectedInstances = scaleInProtectedInstancesDecoded let standbyInstancesDecoded = try containerValues.decodeIfPresent(AutoScalingClientTypes.StandbyInstances.self, forKey: .standbyInstances) standbyInstances = standbyInstancesDecoded + let alarmSpecificationDecoded = try containerValues.decodeIfPresent(AutoScalingClientTypes.AlarmSpecification.self, forKey: .alarmSpecification) + alarmSpecification = alarmSpecificationDecoded } } extension AutoScalingClientTypes { /// Describes the preferences for an instance refresh. public struct RefreshPreferences: Swift.Equatable { - /// (Optional) Indicates whether to roll back the Auto Scaling group to its previous configuration if the instance refresh fails. The default is false. A rollback is not supported in the following situations: + /// (Optional) The CloudWatch alarm specification. CloudWatch alarms can be used to identify any issues and fail the operation if an alarm threshold is met. + public var alarmSpecification: AutoScalingClientTypes.AlarmSpecification? + /// (Optional) Indicates whether to roll back the Auto Scaling group to its previous configuration if the instance refresh fails or a CloudWatch alarm threshold is met. The default is false. A rollback is not supported in the following situations: /// /// * There is no desired configuration specified for the instance refresh. /// /// * The Auto Scaling group has a launch template that uses an Amazon Web Services Systems Manager parameter instead of an AMI ID for the ImageId property. /// /// * The Auto Scaling group uses the launch template's $Latest or $Default version. + /// + /// + /// For more information, see [Undo changes with a rollback](https://docs.aws.amazon.com/autoscaling/ec2/userguide/instance-refresh-rollback.html) in the Amazon EC2 Auto Scaling User Guide. public var autoRollback: Swift.Bool? /// (Optional) The amount of time, in seconds, to wait after a checkpoint before continuing. This property is optional, but if you specify a value for it, you must also specify a value for CheckpointPercentages. If you specify a value for CheckpointPercentages and not for CheckpointDelay, the CheckpointDelay defaults to 3600 (1 hour). public var checkpointDelay: Swift.Int? @@ -14487,6 +14559,7 @@ extension AutoScalingClientTypes { public var standbyInstances: AutoScalingClientTypes.StandbyInstances? public init( + alarmSpecification: AutoScalingClientTypes.AlarmSpecification? = nil, autoRollback: Swift.Bool? = nil, checkpointDelay: Swift.Int? = nil, checkpointPercentages: [Swift.Int]? = nil, @@ -14497,6 +14570,7 @@ extension AutoScalingClientTypes { standbyInstances: AutoScalingClientTypes.StandbyInstances? = nil ) { + self.alarmSpecification = alarmSpecification self.autoRollback = autoRollback self.checkpointDelay = checkpointDelay self.checkpointPercentages = checkpointPercentages @@ -14868,6 +14942,7 @@ extension RollbackInstanceRefreshInput: ClientRuntime.URLPathProvider { public struct RollbackInstanceRefreshInput: Swift.Equatable { /// The name of the Auto Scaling group. + /// This member is required. public var autoScalingGroupName: Swift.String? public init( @@ -16016,6 +16091,8 @@ public struct StartInstanceRefreshInput: Swift.Equatable { /// /// * Checkpoints /// + /// * CloudWatch alarms + /// /// * Skip matching public var preferences: AutoScalingClientTypes.RefreshPreferences? /// The strategy to use for the instance refresh. The only valid value is Rolling. @@ -16172,7 +16249,7 @@ extension AutoScalingClientTypes { public var metricIntervalLowerBound: Swift.Double? /// The upper bound for the difference between the alarm threshold and the CloudWatch metric. If the metric value is above the breach threshold, the upper bound is exclusive (the metric must be less than the threshold plus the upper bound). Otherwise, it is inclusive (the metric must be less than or equal to the threshold plus the upper bound). A null value indicates positive infinity. The upper bound must be greater than the lower bound. public var metricIntervalUpperBound: Swift.Double? - /// The amount by which to scale, based on the specified adjustment type. A positive value adds to the current capacity while a negative number removes from the current capacity. The amount by which to scale. The adjustment is based on the value that you specified in the AdjustmentType property (either an absolute number or a percentage). A positive value adds to the current capacity and a negative number subtracts from the current capacity. + /// The amount by which to scale, based on the specified adjustment type. A positive value adds to the current capacity while a negative number removes from the current capacity. For exact capacity, you must specify a non-negative value. /// This member is required. public var scalingAdjustment: Swift.Int? diff --git a/Sources/Services/AWSBatch/BatchClient.swift b/Sources/Services/AWSBatch/BatchClient.swift index f496d72a6a9..c24bd5866d4 100644 --- a/Sources/Services/AWSBatch/BatchClient.swift +++ b/Sources/Services/AWSBatch/BatchClient.swift @@ -118,7 +118,7 @@ extension BatchClient: BatchClientProtocol { /// /// * Either don't set the service role (serviceRole) parameter or set it to the AWSBatchServiceRole service-linked role. /// - /// * Set the allocation strategy (allocationStrategy) parameter to BEST_FIT_PROGRESSIVE or SPOT_CAPACITY_OPTIMIZED. + /// * Set the allocation strategy (allocationStrategy) parameter to BEST_FIT_PROGRESSIVE, SPOT_CAPACITY_OPTIMIZED, or SPOT_PRICE_CAPACITY_OPTIMIZED. /// /// * Set the update to latest image version (updateToLatestImageVersion) parameter to true. The updateToLatestImageVersion parameter is used when you update a compute environment. This parameter is ignored when you create a compute environment. /// diff --git a/Sources/Services/AWSBatch/BatchClientProtocol.swift b/Sources/Services/AWSBatch/BatchClientProtocol.swift index c74c4bbf4a4..d76e5a50d99 100644 --- a/Sources/Services/AWSBatch/BatchClientProtocol.swift +++ b/Sources/Services/AWSBatch/BatchClientProtocol.swift @@ -21,7 +21,7 @@ public protocol BatchClientProtocol { /// /// * Either don't set the service role (serviceRole) parameter or set it to the AWSBatchServiceRole service-linked role. /// - /// * Set the allocation strategy (allocationStrategy) parameter to BEST_FIT_PROGRESSIVE or SPOT_CAPACITY_OPTIMIZED. + /// * Set the allocation strategy (allocationStrategy) parameter to BEST_FIT_PROGRESSIVE, SPOT_CAPACITY_OPTIMIZED, or SPOT_PRICE_CAPACITY_OPTIMIZED. /// /// * Set the update to latest image version (updateToLatestImageVersion) parameter to true. The updateToLatestImageVersion parameter is used when you update a compute environment. This parameter is ignored when you create a compute environment. /// diff --git a/Sources/Services/AWSBatch/models/Models.swift b/Sources/Services/AWSBatch/models/Models.swift index 874a546e65a..518d4c93751 100644 --- a/Sources/Services/AWSBatch/models/Models.swift +++ b/Sources/Services/AWSBatch/models/Models.swift @@ -488,6 +488,7 @@ extension BatchClientTypes { case bestFit case bestFitProgressive case spotCapacityOptimized + case spotPriceCapacityOptimized case sdkUnknown(Swift.String) public static var allCases: [CRAllocationStrategy] { @@ -495,6 +496,7 @@ extension BatchClientTypes { .bestFit, .bestFitProgressive, .spotCapacityOptimized, + .spotPriceCapacityOptimized, .sdkUnknown("") ] } @@ -507,6 +509,7 @@ extension BatchClientTypes { case .bestFit: return "BEST_FIT" case .bestFitProgressive: return "BEST_FIT_PROGRESSIVE" case .spotCapacityOptimized: return "SPOT_CAPACITY_OPTIMIZED" + case .spotPriceCapacityOptimized: return "SPOT_PRICE_CAPACITY_OPTIMIZED" case let .sdkUnknown(s): return s } } @@ -560,12 +563,14 @@ extension BatchClientTypes { public enum CRUpdateAllocationStrategy: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bestFitProgressive case spotCapacityOptimized + case spotPriceCapacityOptimized case sdkUnknown(Swift.String) public static var allCases: [CRUpdateAllocationStrategy] { return [ .bestFitProgressive, .spotCapacityOptimized, + .spotPriceCapacityOptimized, .sdkUnknown("") ] } @@ -577,6 +582,7 @@ extension BatchClientTypes { switch self { case .bestFitProgressive: return "BEST_FIT_PROGRESSIVE" case .spotCapacityOptimized: return "SPOT_CAPACITY_OPTIMIZED" + case .spotPriceCapacityOptimized: return "SPOT_PRICE_CAPACITY_OPTIMIZED" case let .sdkUnknown(s): return s } } @@ -1141,7 +1147,7 @@ extension BatchClientTypes.ComputeResource: Swift.Codable { extension BatchClientTypes { /// An object that represents an Batch compute resource. For more information, see [Compute environments](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) in the Batch User Guide. public struct ComputeResource: Swift.Equatable { - /// The allocation strategy to use for the compute resource if not enough instances of the best fitting instance type can be allocated. This might be because of availability of the instance type in the Region or [Amazon EC2 service limits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html). For more information, see [Allocation strategies](https://docs.aws.amazon.com/batch/latest/userguide/allocation-strategies.html) in the Batch User Guide. This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it. BEST_FIT (default) Batch selects an instance type that best fits the needs of the jobs with a preference for the lowest-cost instance type. If additional instances of the selected instance type aren't available, Batch waits for the additional instances to be available. If there aren't enough instances available or the user is reaching [Amazon EC2 service limits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html), additional jobs aren't run until the currently running jobs are completed. This allocation strategy keeps costs lower but can limit scaling. If you're using Spot Fleets with BEST_FIT, the Spot Fleet IAM Role must be specified. Compute resources that use a BEST_FIT allocation strategy don't support infrastructure updates and can't update some parameters. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the Batch User Guide. BEST_FIT_PROGRESSIVE Batch selects additional instance types that are large enough to meet the requirements of the jobs in the queue. Its preference is for instance types with lower cost vCPUs. If additional instances of the previously selected instance types aren't available, Batch selects new instance types. SPOT_CAPACITY_OPTIMIZED Batch selects one or more instance types that are large enough to meet the requirements of the jobs in the queue. Its preference is for instance types that are less likely to be interrupted. This allocation strategy is only available for Spot Instance compute resources. With both BEST_FIT_PROGRESSIVE and SPOT_CAPACITY_OPTIMIZED strategies using On-Demand or Spot Instances, and the BEST_FIT strategy using Spot Instances, Batch might need to exceed maxvCpus to meet your capacity requirements. In this event, Batch never exceeds maxvCpus by more than a single instance. + /// The allocation strategy to use for the compute resource if not enough instances of the best fitting instance type can be allocated. This might be because of availability of the instance type in the Region or [Amazon EC2 service limits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html). For more information, see [Allocation strategies](https://docs.aws.amazon.com/batch/latest/userguide/allocation-strategies.html) in the Batch User Guide. This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it. BEST_FIT (default) Batch selects an instance type that best fits the needs of the jobs with a preference for the lowest-cost instance type. If additional instances of the selected instance type aren't available, Batch waits for the additional instances to be available. If there aren't enough instances available or the user is reaching [Amazon EC2 service limits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html), additional jobs aren't run until the currently running jobs are completed. This allocation strategy keeps costs lower but can limit scaling. If you're using Spot Fleets with BEST_FIT, the Spot Fleet IAM Role must be specified. Compute resources that use a BEST_FIT allocation strategy don't support infrastructure updates and can't update some parameters. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the Batch User Guide. BEST_FIT_PROGRESSIVE Batch selects additional instance types that are large enough to meet the requirements of the jobs in the queue. Its preference is for instance types with lower cost vCPUs. If additional instances of the previously selected instance types aren't available, Batch selects new instance types. SPOT_CAPACITY_OPTIMIZED Batch selects one or more instance types that are large enough to meet the requirements of the jobs in the queue. Its preference is for instance types that are less likely to be interrupted. This allocation strategy is only available for Spot Instance compute resources. SPOT_PRICE_CAPACITY_OPTIMIZED The price and capacity optimized allocation strategy looks at both price and capacity to select the Spot Instance pools that are the least likely to be interrupted and have the lowest possible price. This allocation strategy is only available for Spot Instance compute resources. With BEST_FIT_PROGRESSIVE,SPOT_CAPACITY_OPTIMIZED and SPOT_PRICE_CAPACITY_OPTIMIZED strategies using On-Demand or Spot Instances, and the BEST_FIT strategy using Spot Instances, Batch might need to exceed maxvCpus to meet your capacity requirements. In this event, Batch never exceeds maxvCpus by more than a single instance. public var allocationStrategy: BatchClientTypes.CRAllocationStrategy? /// The maximum percentage that a Spot Instance price can be when compared with the On-Demand price for that instance type before instances are launched. For example, if your maximum percentage is 20%, then the Spot price must be less than 20% of the current On-Demand price for that Amazon EC2 instance. You always pay the lowest (market) price and never more than your maximum percentage. If you leave this field empty, the default value is 100% of the On-Demand price. For most use cases, we recommend leaving this field empty. This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it. public var bidPercentage: Swift.Int? @@ -1160,7 +1166,7 @@ extension BatchClientTypes { public var instanceTypes: [Swift.String]? /// The launch template to use for your compute resources. Any other compute resource parameters that you specify in a [CreateComputeEnvironment] API operation override the same parameters in the launch template. You must specify either the launch template ID or launch template name in the request, but not both. For more information, see [Launch template support](https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html) in the Batch User Guide. This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it. public var launchTemplate: BatchClientTypes.LaunchTemplateSpecification? - /// The maximum number of vCPUs that a compute environment can support. With both BEST_FIT_PROGRESSIVE and SPOT_CAPACITY_OPTIMIZED allocation strategies using On-Demand or Spot Instances, and the BEST_FIT strategy using Spot Instances, Batch might need to exceed maxvCpus to meet your capacity requirements. In this event, Batch never exceeds maxvCpus by more than a single instance. For example, no more than a single instance from among those specified in your compute environment is allocated. + /// The maximum number of vCPUs that a compute environment can support. With BEST_FIT_PROGRESSIVE, SPOT_CAPACITY_OPTIMIZED and SPOT_PRICE_CAPACITY_OPTIMIZED allocation strategies using On-Demand or Spot Instances, and the BEST_FIT strategy using Spot Instances, Batch might need to exceed maxvCpus to meet your capacity requirements. In this event, Batch never exceeds maxvCpus by more than a single instance. For example, no more than a single instance from among those specified in your compute environment is allocated. /// This member is required. public var maxvCpus: Swift.Int? /// The minimum number of vCPUs that a compute environment should maintain (even if the compute environment is DISABLED). This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it. @@ -1400,7 +1406,7 @@ extension BatchClientTypes.ComputeResourceUpdate: Swift.Codable { extension BatchClientTypes { /// An object that represents the attributes of a compute environment that can be updated. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the Batch User Guide. public struct ComputeResourceUpdate: Swift.Equatable { - /// The allocation strategy to use for the compute resource if there's not enough instances of the best fitting instance type that can be allocated. This might be because of availability of the instance type in the Region or [Amazon EC2 service limits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html). For more information, see [Allocation strategies](https://docs.aws.amazon.com/batch/latest/userguide/allocation-strategies.html) in the Batch User Guide. When updating a compute environment, changing the allocation strategy requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the Batch User Guide. BEST_FIT isn't supported when updating a compute environment. This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it. BEST_FIT_PROGRESSIVE Batch selects additional instance types that are large enough to meet the requirements of the jobs in the queue. Its preference is for instance types with lower cost vCPUs. If additional instances of the previously selected instance types aren't available, Batch selects new instance types. SPOT_CAPACITY_OPTIMIZED Batch selects one or more instance types that are large enough to meet the requirements of the jobs in the queue. Its preference is for instance types that are less likely to be interrupted. This allocation strategy is only available for Spot Instance compute resources. With both BEST_FIT_PROGRESSIVE and SPOT_CAPACITY_OPTIMIZED strategies using On-Demand or Spot Instances, and the BEST_FIT strategy using Spot Instances, Batch might need to exceed maxvCpus to meet your capacity requirements. In this event, Batch never exceeds maxvCpus by more than a single instance. + /// The allocation strategy to use for the compute resource if there's not enough instances of the best fitting instance type that can be allocated. This might be because of availability of the instance type in the Region or [Amazon EC2 service limits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html). For more information, see [Allocation strategies](https://docs.aws.amazon.com/batch/latest/userguide/allocation-strategies.html) in the Batch User Guide. When updating a compute environment, changing the allocation strategy requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the Batch User Guide. BEST_FIT isn't supported when updating a compute environment. This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it. BEST_FIT_PROGRESSIVE Batch selects additional instance types that are large enough to meet the requirements of the jobs in the queue. Its preference is for instance types with lower cost vCPUs. If additional instances of the previously selected instance types aren't available, Batch selects new instance types. SPOT_CAPACITY_OPTIMIZED Batch selects one or more instance types that are large enough to meet the requirements of the jobs in the queue. Its preference is for instance types that are less likely to be interrupted. This allocation strategy is only available for Spot Instance compute resources. SPOT_PRICE_CAPACITY_OPTIMIZED The price and capacity optimized allocation strategy looks at both price and capacity to select the Spot Instance pools that are the least likely to be interrupted and have the lowest possible price. This allocation strategy is only available for Spot Instance compute resources. With both BEST_FIT_PROGRESSIVE, SPOT_CAPACITY_OPTIMIZED, and SPOT_PRICE_CAPACITY_OPTIMIZED strategies using On-Demand or Spot Instances, and the BEST_FIT strategy using Spot Instances, Batch might need to exceed maxvCpus to meet your capacity requirements. In this event, Batch never exceeds maxvCpus by more than a single instance. public var allocationStrategy: BatchClientTypes.CRUpdateAllocationStrategy? /// The maximum percentage that a Spot Instance price can be when compared with the On-Demand price for that instance type before instances are launched. For example, if your maximum percentage is 20%, the Spot price must be less than 20% of the current On-Demand price for that Amazon EC2 instance. You always pay the lowest (market) price and never more than your maximum percentage. For most use cases, we recommend leaving this field empty. When updating a compute environment, changing the bid percentage requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the Batch User Guide. This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it. public var bidPercentage: Swift.Int? @@ -1418,7 +1424,7 @@ extension BatchClientTypes { public var instanceTypes: [Swift.String]? /// The updated launch template to use for your compute resources. You must specify either the launch template ID or launch template name in the request, but not both. For more information, see [Launch template support](https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html) in the Batch User Guide. To remove the custom launch template and use the default launch template, set launchTemplateId or launchTemplateName member of the launch template specification to an empty string. Removing the launch template from a compute environment will not remove the AMI specified in the launch template. In order to update the AMI specified in a launch template, the updateToLatestImageVersion parameter must be set to true. When updating a compute environment, changing the launch template requires an infrastructure update of the compute environment. For more information, see [Updating compute environments](https://docs.aws.amazon.com/batch/latest/userguide/updating-compute-environments.html) in the Batch User Guide. This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it. public var launchTemplate: BatchClientTypes.LaunchTemplateSpecification? - /// The maximum number of Amazon EC2 vCPUs that an environment can reach. With both BEST_FIT_PROGRESSIVE and SPOT_CAPACITY_OPTIMIZED allocation strategies using On-Demand or Spot Instances, and the BEST_FIT strategy using Spot Instances, Batch might need to exceed maxvCpus to meet your capacity requirements. In this event, Batch never exceeds maxvCpus by more than a single instance. That is, no more than a single instance from among those specified in your compute environment. + /// The maximum number of Amazon EC2 vCPUs that an environment can reach. With BEST_FIT_PROGRESSIVE, SPOT_CAPACITY_OPTIMIZED, and SPOT_PRICE_CAPACITY_OPTIMIZED allocation strategies using On-Demand or Spot Instances, and the BEST_FIT strategy using Spot Instances, Batch might need to exceed maxvCpus to meet your capacity requirements. In this event, Batch never exceeds maxvCpus by more than a single instance. That is, no more than a single instance from among those specified in your compute environment. public var maxvCpus: Swift.Int? /// The minimum number of vCPUs that an environment should maintain (even if the compute environment is DISABLED). This parameter isn't applicable to jobs that are running on Fargate resources. Don't specify it. public var minvCpus: Swift.Int? @@ -9063,7 +9069,7 @@ extension BatchClientTypes.RuntimePlatform: Swift.Codable { extension BatchClientTypes { /// An object that represents the compute environment architecture for Batch jobs on Fargate. public struct RuntimePlatform: Swift.Equatable { - /// The vCPU architecture. The default value is X86_64. Valid values are X86_64 and ARM64. This parameter must be set to X86_64 for Windows containers. + /// The vCPU architecture. The default value is X86_64. Valid values are X86_64 and ARM64. This parameter must be set to X86_64 for Windows containers. public var cpuArchitecture: Swift.String? /// The operating system for the compute environment. Valid values are: LINUX (default), WINDOWS_SERVER_2019_CORE, WINDOWS_SERVER_2019_FULL, WINDOWS_SERVER_2022_CORE, and WINDOWS_SERVER_2022_FULL. The following parameters can’t be set for Windows containers: linuxParameters, privileged, user, ulimits, readonlyRootFilesystem, and efsVolumeConfiguration. The Batch Scheduler checks before registering a task definition with Fargate. If the job requires a Windows container and the first compute environment is LINUX, the compute environment is skipped and the next is checked until a Windows-based compute environment is found. Fargate Spot is not supported for Windows-based containers on Fargate. A job queue will be blocked if a Fargate Windows job is submitted to a job queue with only Fargate Spot compute environments. However, you can attach both FARGATE and FARGATE_SPOT compute environments to the same job queue. public var operatingSystemFamily: Swift.String? diff --git a/Sources/Services/AWSBillingconductor/models/Models.swift b/Sources/Services/AWSBillingconductor/models/Models.swift index 1f54a2fedd0..682d31bd822 100644 --- a/Sources/Services/AWSBillingconductor/models/Models.swift +++ b/Sources/Services/AWSBillingconductor/models/Models.swift @@ -130,11 +130,15 @@ extension BillingconductorClientTypes { extension BillingconductorClientTypes.AccountGrouping: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case autoAssociate = "AutoAssociate" case linkedAccountIds = "LinkedAccountIds" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let autoAssociate = self.autoAssociate { + try encodeContainer.encode(autoAssociate, forKey: .autoAssociate) + } if let linkedAccountIds = linkedAccountIds { var linkedAccountIdsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .linkedAccountIds) for accountid0 in linkedAccountIds { @@ -156,20 +160,26 @@ extension BillingconductorClientTypes.AccountGrouping: Swift.Codable { } } linkedAccountIds = linkedAccountIdsDecoded0 + let autoAssociateDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .autoAssociate) + autoAssociate = autoAssociateDecoded } } extension BillingconductorClientTypes { - /// The set of accounts that will be under the billing group. The set of accounts resemble the linked accounts in a consolidated family. + /// The set of accounts that will be under the billing group. The set of accounts resemble the linked accounts in a consolidated billing family. public struct AccountGrouping: Swift.Equatable { + /// Specifies if this billing group will automatically associate newly added Amazon Web Services accounts that join your consolidated billing family. + public var autoAssociate: Swift.Bool? /// The account IDs that make up the billing group. Account IDs must be a part of the consolidated billing family, and not associated with another billing group. /// This member is required. public var linkedAccountIds: [Swift.String]? public init( + autoAssociate: Swift.Bool? = nil, linkedAccountIds: [Swift.String]? = nil ) { + self.autoAssociate = autoAssociate self.linkedAccountIds = linkedAccountIds } } @@ -993,6 +1003,7 @@ extension BillingconductorClientTypes { extension BillingconductorClientTypes.BillingGroupListElement: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountGrouping = "AccountGrouping" case arn = "Arn" case computationPreference = "ComputationPreference" case creationTime = "CreationTime" @@ -1007,6 +1018,9 @@ extension BillingconductorClientTypes.BillingGroupListElement: Swift.Codable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountGrouping = self.accountGrouping { + try encodeContainer.encode(accountGrouping, forKey: .accountGrouping) + } if let arn = self.arn { try encodeContainer.encode(arn, forKey: .arn) } @@ -1061,17 +1075,21 @@ extension BillingconductorClientTypes.BillingGroupListElement: Swift.Codable { status = statusDecoded let statusReasonDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .statusReason) statusReason = statusReasonDecoded + let accountGroupingDecoded = try containerValues.decodeIfPresent(BillingconductorClientTypes.ListBillingGroupAccountGrouping.self, forKey: .accountGrouping) + accountGrouping = accountGroupingDecoded } } extension BillingconductorClientTypes.BillingGroupListElement: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "BillingGroupListElement(arn: \(Swift.String(describing: arn)), computationPreference: \(Swift.String(describing: computationPreference)), creationTime: \(Swift.String(describing: creationTime)), lastModifiedTime: \(Swift.String(describing: lastModifiedTime)), primaryAccountId: \(Swift.String(describing: primaryAccountId)), size: \(Swift.String(describing: size)), status: \(Swift.String(describing: status)), statusReason: \(Swift.String(describing: statusReason)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\")"} + "BillingGroupListElement(accountGrouping: \(Swift.String(describing: accountGrouping)), arn: \(Swift.String(describing: arn)), computationPreference: \(Swift.String(describing: computationPreference)), creationTime: \(Swift.String(describing: creationTime)), lastModifiedTime: \(Swift.String(describing: lastModifiedTime)), primaryAccountId: \(Swift.String(describing: primaryAccountId)), size: \(Swift.String(describing: size)), status: \(Swift.String(describing: status)), statusReason: \(Swift.String(describing: statusReason)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\")"} } extension BillingconductorClientTypes { /// A representation of a billing group. public struct BillingGroupListElement: Swift.Equatable { + /// Specifies if the billing group has automatic account association (AutoAssociate) enabled. + public var accountGrouping: BillingconductorClientTypes.ListBillingGroupAccountGrouping? /// The Amazon Resource Number (ARN) that can be used to uniquely identify the billing group. public var arn: Swift.String? /// The preferences and settings that will be used to compute the Amazon Web Services charges for a billing group. @@ -1094,6 +1112,7 @@ extension BillingconductorClientTypes { public var statusReason: Swift.String? public init( + accountGrouping: BillingconductorClientTypes.ListBillingGroupAccountGrouping? = nil, arn: Swift.String? = nil, computationPreference: BillingconductorClientTypes.ComputationPreference? = nil, creationTime: Swift.Int = 0, @@ -1106,6 +1125,7 @@ extension BillingconductorClientTypes { statusReason: Swift.String? = nil ) { + self.accountGrouping = accountGrouping self.arn = arn self.computationPreference = computationPreference self.creationTime = creationTime @@ -1376,7 +1396,7 @@ extension CreateBillingGroupInput: ClientRuntime.URLPathProvider { } public struct CreateBillingGroupInput: Swift.Equatable { - /// The set of accounts that will be under the billing group. The set of accounts resemble the linked accounts in a consolidated family. + /// The set of accounts that will be under the billing group. The set of accounts resemble the linked accounts in a consolidated billing family. /// This member is required. public var accountGrouping: BillingconductorClientTypes.AccountGrouping? /// The token that is needed to support idempotency. Idempotency isn't currently supported, but will be implemented in a future update. @@ -3847,6 +3867,41 @@ extension ListAccountAssociationsOutputResponseBody: Swift.Decodable { } } +extension BillingconductorClientTypes.ListBillingGroupAccountGrouping: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case autoAssociate = "AutoAssociate" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let autoAssociate = self.autoAssociate { + try encodeContainer.encode(autoAssociate, forKey: .autoAssociate) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let autoAssociateDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .autoAssociate) + autoAssociate = autoAssociateDecoded + } +} + +extension BillingconductorClientTypes { + /// Specifies if the billing group has the following features enabled. + public struct ListBillingGroupAccountGrouping: Swift.Equatable { + /// Specifies if this billing group will automatically associate newly added Amazon Web Services accounts that join your consolidated billing family. + public var autoAssociate: Swift.Bool? + + public init( + autoAssociate: Swift.Bool? = nil + ) + { + self.autoAssociate = autoAssociate + } + } + +} + extension BillingconductorClientTypes.ListBillingGroupCostReportsFilter: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case billingGroupArns = "BillingGroupArns" @@ -4054,6 +4109,7 @@ extension ListBillingGroupCostReportsOutputResponseBody: Swift.Decodable { extension BillingconductorClientTypes.ListBillingGroupsFilter: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case arns = "Arns" + case autoAssociate = "AutoAssociate" case pricingPlan = "PricingPlan" case statuses = "Statuses" } @@ -4066,6 +4122,9 @@ extension BillingconductorClientTypes.ListBillingGroupsFilter: Swift.Codable { try arnsContainer.encode(billinggrouparn0) } } + if let autoAssociate = self.autoAssociate { + try encodeContainer.encode(autoAssociate, forKey: .autoAssociate) + } if let pricingPlan = self.pricingPlan { try encodeContainer.encode(pricingPlan, forKey: .pricingPlan) } @@ -4103,6 +4162,8 @@ extension BillingconductorClientTypes.ListBillingGroupsFilter: Swift.Codable { } } statuses = statusesDecoded0 + let autoAssociateDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .autoAssociate) + autoAssociate = autoAssociateDecoded } } @@ -4111,6 +4172,8 @@ extension BillingconductorClientTypes { public struct ListBillingGroupsFilter: Swift.Equatable { /// The list of billing group Amazon Resource Names (ARNs) to retrieve information. public var arns: [Swift.String]? + /// Specifies if this billing group will automatically associate newly added Amazon Web Services accounts that join your consolidated billing family. + public var autoAssociate: Swift.Bool? /// The pricing plan Amazon Resource Names (ARNs) to retrieve information. public var pricingPlan: Swift.String? /// A list of billing groups to retrieve their current status for a specific time range @@ -4118,11 +4181,13 @@ extension BillingconductorClientTypes { public init( arns: [Swift.String]? = nil, + autoAssociate: Swift.Bool? = nil, pricingPlan: Swift.String? = nil, statuses: [BillingconductorClientTypes.BillingGroupStatus]? = nil ) { self.arns = arns + self.autoAssociate = autoAssociate self.pricingPlan = pricingPlan self.statuses = statuses } @@ -6828,13 +6893,49 @@ public struct UntagResourceOutputResponse: Swift.Equatable { public init() { } } +extension BillingconductorClientTypes.UpdateBillingGroupAccountGrouping: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case autoAssociate = "AutoAssociate" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let autoAssociate = self.autoAssociate { + try encodeContainer.encode(autoAssociate, forKey: .autoAssociate) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let autoAssociateDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .autoAssociate) + autoAssociate = autoAssociateDecoded + } +} + +extension BillingconductorClientTypes { + /// Specifies if the billing group has the following features enabled. + public struct UpdateBillingGroupAccountGrouping: Swift.Equatable { + /// Specifies if this billing group will automatically associate newly added Amazon Web Services accounts that join your consolidated billing family. + public var autoAssociate: Swift.Bool? + + public init( + autoAssociate: Swift.Bool? = nil + ) + { + self.autoAssociate = autoAssociate + } + } + +} + extension UpdateBillingGroupInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "UpdateBillingGroupInput(arn: \(Swift.String(describing: arn)), computationPreference: \(Swift.String(describing: computationPreference)), status: \(Swift.String(describing: status)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\")"} + "UpdateBillingGroupInput(accountGrouping: \(Swift.String(describing: accountGrouping)), arn: \(Swift.String(describing: arn)), computationPreference: \(Swift.String(describing: computationPreference)), status: \(Swift.String(describing: status)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\")"} } extension UpdateBillingGroupInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountGrouping = "AccountGrouping" case arn = "Arn" case computationPreference = "ComputationPreference" case description = "Description" @@ -6844,6 +6945,9 @@ extension UpdateBillingGroupInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountGrouping = self.accountGrouping { + try encodeContainer.encode(accountGrouping, forKey: .accountGrouping) + } if let arn = self.arn { try encodeContainer.encode(arn, forKey: .arn) } @@ -6869,6 +6973,8 @@ extension UpdateBillingGroupInput: ClientRuntime.URLPathProvider { } public struct UpdateBillingGroupInput: Swift.Equatable { + /// Specifies if the billing group has automatic account association (AutoAssociate) enabled. + public var accountGrouping: BillingconductorClientTypes.UpdateBillingGroupAccountGrouping? /// The Amazon Resource Name (ARN) of the billing group being updated. /// This member is required. public var arn: Swift.String? @@ -6882,6 +6988,7 @@ public struct UpdateBillingGroupInput: Swift.Equatable { public var status: BillingconductorClientTypes.BillingGroupStatus? public init( + accountGrouping: BillingconductorClientTypes.UpdateBillingGroupAccountGrouping? = nil, arn: Swift.String? = nil, computationPreference: BillingconductorClientTypes.ComputationPreference? = nil, description: Swift.String? = nil, @@ -6889,6 +6996,7 @@ public struct UpdateBillingGroupInput: Swift.Equatable { status: BillingconductorClientTypes.BillingGroupStatus? = nil ) { + self.accountGrouping = accountGrouping self.arn = arn self.computationPreference = computationPreference self.description = description @@ -6903,10 +7011,12 @@ struct UpdateBillingGroupInputBody: Swift.Equatable { let status: BillingconductorClientTypes.BillingGroupStatus? let computationPreference: BillingconductorClientTypes.ComputationPreference? let description: Swift.String? + let accountGrouping: BillingconductorClientTypes.UpdateBillingGroupAccountGrouping? } extension UpdateBillingGroupInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountGrouping = "AccountGrouping" case arn = "Arn" case computationPreference = "ComputationPreference" case description = "Description" @@ -6926,6 +7036,8 @@ extension UpdateBillingGroupInputBody: Swift.Decodable { computationPreference = computationPreferenceDecoded let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) description = descriptionDecoded + let accountGroupingDecoded = try containerValues.decodeIfPresent(BillingconductorClientTypes.UpdateBillingGroupAccountGrouping.self, forKey: .accountGrouping) + accountGrouping = accountGroupingDecoded } } @@ -6947,7 +7059,7 @@ public enum UpdateBillingGroupOutputError: ClientRuntime.HttpResponseErrorBindin extension UpdateBillingGroupOutputResponse: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "UpdateBillingGroupOutputResponse(arn: \(Swift.String(describing: arn)), lastModifiedTime: \(Swift.String(describing: lastModifiedTime)), pricingPlanArn: \(Swift.String(describing: pricingPlanArn)), primaryAccountId: \(Swift.String(describing: primaryAccountId)), size: \(Swift.String(describing: size)), status: \(Swift.String(describing: status)), statusReason: \(Swift.String(describing: statusReason)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\")"} + "UpdateBillingGroupOutputResponse(accountGrouping: \(Swift.String(describing: accountGrouping)), arn: \(Swift.String(describing: arn)), lastModifiedTime: \(Swift.String(describing: lastModifiedTime)), pricingPlanArn: \(Swift.String(describing: pricingPlanArn)), primaryAccountId: \(Swift.String(describing: primaryAccountId)), size: \(Swift.String(describing: size)), status: \(Swift.String(describing: status)), statusReason: \(Swift.String(describing: statusReason)), description: \"CONTENT_REDACTED\", name: \"CONTENT_REDACTED\")"} } extension UpdateBillingGroupOutputResponse: ClientRuntime.HttpResponseBinding { @@ -6955,6 +7067,7 @@ extension UpdateBillingGroupOutputResponse: ClientRuntime.HttpResponseBinding { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { let output: UpdateBillingGroupOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.accountGrouping = output.accountGrouping self.arn = output.arn self.description = output.description self.lastModifiedTime = output.lastModifiedTime @@ -6965,6 +7078,7 @@ extension UpdateBillingGroupOutputResponse: ClientRuntime.HttpResponseBinding { self.status = output.status self.statusReason = output.statusReason } else { + self.accountGrouping = nil self.arn = nil self.description = nil self.lastModifiedTime = 0 @@ -6979,6 +7093,8 @@ extension UpdateBillingGroupOutputResponse: ClientRuntime.HttpResponseBinding { } public struct UpdateBillingGroupOutputResponse: Swift.Equatable { + /// Specifies if the billing group has automatic account association (AutoAssociate) enabled. + public var accountGrouping: BillingconductorClientTypes.UpdateBillingGroupAccountGrouping? /// The Amazon Resource Name (ARN) of the billing group that was updated. public var arn: Swift.String? /// A description of the billing group. @@ -6999,6 +7115,7 @@ public struct UpdateBillingGroupOutputResponse: Swift.Equatable { public var statusReason: Swift.String? public init( + accountGrouping: BillingconductorClientTypes.UpdateBillingGroupAccountGrouping? = nil, arn: Swift.String? = nil, description: Swift.String? = nil, lastModifiedTime: Swift.Int = 0, @@ -7010,6 +7127,7 @@ public struct UpdateBillingGroupOutputResponse: Swift.Equatable { statusReason: Swift.String? = nil ) { + self.accountGrouping = accountGrouping self.arn = arn self.description = description self.lastModifiedTime = lastModifiedTime @@ -7032,10 +7150,12 @@ struct UpdateBillingGroupOutputResponseBody: Swift.Equatable { let lastModifiedTime: Swift.Int let status: BillingconductorClientTypes.BillingGroupStatus? let statusReason: Swift.String? + let accountGrouping: BillingconductorClientTypes.UpdateBillingGroupAccountGrouping? } extension UpdateBillingGroupOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case accountGrouping = "AccountGrouping" case arn = "Arn" case description = "Description" case lastModifiedTime = "LastModifiedTime" @@ -7067,6 +7187,8 @@ extension UpdateBillingGroupOutputResponseBody: Swift.Decodable { status = statusDecoded let statusReasonDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .statusReason) statusReason = statusReasonDecoded + let accountGroupingDecoded = try containerValues.decodeIfPresent(BillingconductorClientTypes.UpdateBillingGroupAccountGrouping.self, forKey: .accountGrouping) + accountGrouping = accountGroupingDecoded } } @@ -7971,7 +8093,7 @@ extension ValidationException { } } -/// The input doesn't match with the constraints specified by Amazon Web Services services. +/// The input doesn't match with the constraints specified by Amazon Web Services. public struct ValidationException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { @@ -8088,6 +8210,7 @@ extension BillingconductorClientTypes { public enum ValidationExceptionReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case accountsAlreadyAssociated case accountsNotAssociated + case cannotDeleteAutoAssociateBillingGroup case cannotParse case customLineItemAssociationExists case duplicateAccount @@ -8141,6 +8264,7 @@ extension BillingconductorClientTypes { case primaryCannotDisassociate case primaryNotAssociated case tooManyAccountsInRequest + case tooManyAutoAssociateBillingGroups case tooManyCustomlineitemsInRequest case unknownOperation case sdkUnknown(Swift.String) @@ -8149,6 +8273,7 @@ extension BillingconductorClientTypes { return [ .accountsAlreadyAssociated, .accountsNotAssociated, + .cannotDeleteAutoAssociateBillingGroup, .cannotParse, .customLineItemAssociationExists, .duplicateAccount, @@ -8202,6 +8327,7 @@ extension BillingconductorClientTypes { .primaryCannotDisassociate, .primaryNotAssociated, .tooManyAccountsInRequest, + .tooManyAutoAssociateBillingGroups, .tooManyCustomlineitemsInRequest, .unknownOperation, .sdkUnknown("") @@ -8215,6 +8341,7 @@ extension BillingconductorClientTypes { switch self { case .accountsAlreadyAssociated: return "ACCOUNTS_ALREADY_ASSOCIATED" case .accountsNotAssociated: return "ACCOUNTS_NOT_ASSOCIATED" + case .cannotDeleteAutoAssociateBillingGroup: return "CANNOT_DELETE_AUTO_ASSOCIATE_BILLING_GROUP" case .cannotParse: return "CANNOT_PARSE" case .customLineItemAssociationExists: return "CUSTOM_LINE_ITEM_ASSOCIATION_EXISTS" case .duplicateAccount: return "DUPLICATE_ACCOUNT" @@ -8268,6 +8395,7 @@ extension BillingconductorClientTypes { case .primaryCannotDisassociate: return "PRIMARY_CANNOT_DISASSOCIATE" case .primaryNotAssociated: return "PRIMARY_NOT_ASSOCIATED" case .tooManyAccountsInRequest: return "TOO_MANY_ACCOUNTS_IN_REQUEST" + case .tooManyAutoAssociateBillingGroups: return "TOO_MANY_AUTO_ASSOCIATE_BILLING_GROUPS" case .tooManyCustomlineitemsInRequest: return "TOO_MANY_CUSTOMLINEITEMS_IN_REQUEST" case .unknownOperation: return "UNKNOWN_OPERATION" case let .sdkUnknown(s): return s diff --git a/Sources/Services/AWSBudgets/EndpointResolver.swift b/Sources/Services/AWSBudgets/EndpointResolver.swift index 8080b9ad663..eea9fe98d14 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\",\"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\"}]}]}" + 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\":[{\"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\":[{\"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\":[],\"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\":[],\"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\":[],\"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\":[],\"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/AWSBudgets/models/Models.swift b/Sources/Services/AWSBudgets/models/Models.swift index c3c7e97fc28..8ef00dd265a 100644 --- a/Sources/Services/AWSBudgets/models/Models.swift +++ b/Sources/Services/AWSBudgets/models/Models.swift @@ -158,7 +158,7 @@ extension BudgetsClientTypes { /// This specifies if the action needs manual or automatic approval. /// This member is required. public var approvalModel: BudgetsClientTypes.ApprovalModel? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? /// Where you specify all of the type-specific parameters. @@ -731,7 +731,7 @@ extension BudgetsClientTypes { public var autoAdjustData: BudgetsClientTypes.AutoAdjustData? /// The total amount of cost, usage, RI utilization, RI coverage, Savings Plans utilization, or Savings Plans coverage that you want to track with your budget. BudgetLimit is required for cost or usage budgets, but optional for RI or Savings Plans utilization or coverage budgets. RI and Savings Plans utilization or coverage budgets default to 100. This is the only valid value for RI or Savings Plans utilization or coverage budgets. You can't use BudgetLimit with PlannedBudgetLimits for CreateBudget and UpdateBudget actions. public var budgetLimit: BudgetsClientTypes.Spend? - /// The name of a budget. The name must be unique within an account. The : and \ characters aren't allowed in BudgetName. + /// The name of a budget. The name must be unique within an account. The : and \ characters, and the "/action/" substring, aren't allowed in BudgetName. /// This member is required. public var budgetName: Swift.String? /// Specifies whether this budget tracks costs, usage, RI utilization, RI coverage, Savings Plans utilization, or Savings Plans coverage. @@ -833,7 +833,7 @@ extension BudgetsClientTypes.BudgetNotificationsForAccount: Swift.Codable { extension BudgetsClientTypes { /// The budget name and associated notifications for an account. public struct BudgetNotificationsForAccount: Swift.Equatable { - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. public var budgetName: Swift.String? /// A list of notifications. public var notifications: [BudgetsClientTypes.Notification]? @@ -936,7 +936,7 @@ extension BudgetsClientTypes.BudgetPerformanceHistory: Swift.Codable { extension BudgetsClientTypes { /// A history of the state of a budget at the end of the budget's specified time period. public struct BudgetPerformanceHistory: Swift.Equatable { - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. public var budgetName: Swift.String? /// The type of a budget. It must be one of the following types: COST, USAGE, RI_UTILIZATION, RI_COVERAGE, SAVINGS_PLANS_UTILIZATION, or SAVINGS_PLANS_COVERAGE. public var budgetType: BudgetsClientTypes.BudgetType? @@ -1353,7 +1353,7 @@ public struct CreateBudgetActionInput: Swift.Equatable { /// This specifies if the action needs manual or automatic approval. /// This member is required. public var approvalModel: BudgetsClientTypes.ApprovalModel? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? /// Specifies all of the type-specific parameters. @@ -1490,7 +1490,7 @@ public struct CreateBudgetActionOutputResponse: Swift.Equatable { /// A system-generated universally unique identifier (UUID) for the action. /// This member is required. public var actionId: Swift.String? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? @@ -2032,7 +2032,7 @@ public struct DeleteBudgetActionInput: Swift.Equatable { /// A system-generated universally unique identifier (UUID) for the action. /// This member is required. public var actionId: Swift.String? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? @@ -2111,7 +2111,7 @@ public struct DeleteBudgetActionOutputResponse: Swift.Equatable { /// A budget action resource. /// This member is required. public var action: BudgetsClientTypes.Action? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? @@ -2500,7 +2500,7 @@ public struct DescribeBudgetActionHistoriesInput: Swift.Equatable { /// A system-generated universally unique identifier (UUID) for the action. /// This member is required. public var actionId: Swift.String? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? /// An integer that represents how many entries a paginated response contains. The maximum is 100. @@ -2674,7 +2674,7 @@ public struct DescribeBudgetActionInput: Swift.Equatable { /// A system-generated universally unique identifier (UUID) for the action. /// This member is required. public var actionId: Swift.String? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? @@ -2752,7 +2752,7 @@ public struct DescribeBudgetActionOutputResponse: Swift.Equatable { /// A budget action resource. /// This member is required. public var action: BudgetsClientTypes.Action? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? @@ -2974,7 +2974,7 @@ public struct DescribeBudgetActionsForBudgetInput: Swift.Equatable { /// The account ID of the user. It's a 12-digit number. /// This member is required. public var accountId: Swift.String? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? /// An integer that represents how many entries a paginated response contains. The maximum is 100. @@ -3405,7 +3405,7 @@ public struct DescribeBudgetPerformanceHistoryInput: Swift.Equatable { /// The account ID of the user. It's a 12-digit number. /// This member is required. public var accountId: Swift.String? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? /// An integer that represents how many entries a paginated response contains. The maximum is 100. @@ -4154,7 +4154,7 @@ public struct ExecuteBudgetActionInput: Swift.Equatable { /// A system-generated universally unique identifier (UUID) for the action. /// This member is required. public var actionId: Swift.String? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? /// The type of execution. @@ -4244,7 +4244,7 @@ public struct ExecuteBudgetActionOutputResponse: Swift.Equatable { /// A system-generated universally unique identifier (UUID) for the action. /// This member is required. public var actionId: Swift.String? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? /// The type of execution. @@ -5540,7 +5540,7 @@ public struct UpdateBudgetActionInput: Swift.Equatable { public var actionThreshold: BudgetsClientTypes.ActionThreshold? /// This specifies if the action needs manual or automatic approval. public var approvalModel: BudgetsClientTypes.ApprovalModel? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? /// Specifies all of the type-specific parameters. @@ -5671,7 +5671,7 @@ public struct UpdateBudgetActionOutputResponse: Swift.Equatable { /// The account ID of the user. It's a 12-digit number. /// This member is required. public var accountId: Swift.String? - /// A string that represents the budget name. The ":" and "\" characters aren't allowed. + /// A string that represents the budget name. The ":" and "\" characters, and the "/action/" substring, aren't allowed. /// This member is required. public var budgetName: Swift.String? /// The updated action resource information. diff --git a/Sources/Services/AWSChimeSDKMediaPipelines/models/Models.swift b/Sources/Services/AWSChimeSDKMediaPipelines/models/Models.swift index 7345a64889a..934313403d6 100644 --- a/Sources/Services/AWSChimeSDKMediaPipelines/models/Models.swift +++ b/Sources/Services/AWSChimeSDKMediaPipelines/models/Models.swift @@ -2,6 +2,79 @@ import AWSClientRuntime import ClientRuntime +extension ChimeSDKMediaPipelinesClientTypes.ActiveSpeakerOnlyConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case activeSpeakerPosition = "ActiveSpeakerPosition" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let activeSpeakerPosition = self.activeSpeakerPosition { + try encodeContainer.encode(activeSpeakerPosition.rawValue, forKey: .activeSpeakerPosition) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let activeSpeakerPositionDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.ActiveSpeakerPosition.self, forKey: .activeSpeakerPosition) + activeSpeakerPosition = activeSpeakerPositionDecoded + } +} + +extension ChimeSDKMediaPipelinesClientTypes { + /// Defines the configuration for an ActiveSpeakerOnly video tile. + public struct ActiveSpeakerOnlyConfiguration: Swift.Equatable { + /// The position of the ActiveSpeakerOnly video tile. + public var activeSpeakerPosition: ChimeSDKMediaPipelinesClientTypes.ActiveSpeakerPosition? + + public init( + activeSpeakerPosition: ChimeSDKMediaPipelinesClientTypes.ActiveSpeakerPosition? = nil + ) + { + self.activeSpeakerPosition = activeSpeakerPosition + } + } + +} + +extension ChimeSDKMediaPipelinesClientTypes { + public enum ActiveSpeakerPosition: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case bottomleft + case bottomright + case topleft + case topright + case sdkUnknown(Swift.String) + + public static var allCases: [ActiveSpeakerPosition] { + return [ + .bottomleft, + .bottomright, + .topleft, + .topright, + .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 .bottomleft: return "BottomLeft" + case .bottomright: return "BottomRight" + case .topleft: return "TopLeft" + case .topright: return "TopRight" + 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 = ActiveSpeakerPosition(rawValue: rawValue) ?? ActiveSpeakerPosition.sdkUnknown(rawValue) + } + } +} + extension ChimeSDKMediaPipelinesClientTypes.AmazonTranscribeCallAnalyticsProcessorConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case callAnalyticsStreamCategories = "CallAnalyticsStreamCategories" @@ -176,14 +249,19 @@ extension ChimeSDKMediaPipelinesClientTypes.AmazonTranscribeProcessorConfigurati case contentRedactionType = "ContentRedactionType" case enablePartialResultsStabilization = "EnablePartialResultsStabilization" case filterPartialResults = "FilterPartialResults" + case identifyLanguage = "IdentifyLanguage" case languageCode = "LanguageCode" case languageModelName = "LanguageModelName" + case languageOptions = "LanguageOptions" case partialResultsStability = "PartialResultsStability" case piiEntityTypes = "PiiEntityTypes" + case preferredLanguage = "PreferredLanguage" case showSpeakerLabel = "ShowSpeakerLabel" case vocabularyFilterMethod = "VocabularyFilterMethod" case vocabularyFilterName = "VocabularyFilterName" + case vocabularyFilterNames = "VocabularyFilterNames" case vocabularyName = "VocabularyName" + case vocabularyNames = "VocabularyNames" } public func encode(to encoder: Swift.Encoder) throws { @@ -200,18 +278,27 @@ extension ChimeSDKMediaPipelinesClientTypes.AmazonTranscribeProcessorConfigurati if filterPartialResults != false { try encodeContainer.encode(filterPartialResults, forKey: .filterPartialResults) } + if identifyLanguage != false { + try encodeContainer.encode(identifyLanguage, forKey: .identifyLanguage) + } if let languageCode = self.languageCode { try encodeContainer.encode(languageCode.rawValue, forKey: .languageCode) } if let languageModelName = self.languageModelName { try encodeContainer.encode(languageModelName, forKey: .languageModelName) } + if let languageOptions = self.languageOptions { + try encodeContainer.encode(languageOptions, forKey: .languageOptions) + } if let partialResultsStability = self.partialResultsStability { try encodeContainer.encode(partialResultsStability.rawValue, forKey: .partialResultsStability) } if let piiEntityTypes = self.piiEntityTypes { try encodeContainer.encode(piiEntityTypes, forKey: .piiEntityTypes) } + if let preferredLanguage = self.preferredLanguage { + try encodeContainer.encode(preferredLanguage.rawValue, forKey: .preferredLanguage) + } if showSpeakerLabel != false { try encodeContainer.encode(showSpeakerLabel, forKey: .showSpeakerLabel) } @@ -221,9 +308,15 @@ extension ChimeSDKMediaPipelinesClientTypes.AmazonTranscribeProcessorConfigurati if let vocabularyFilterName = self.vocabularyFilterName { try encodeContainer.encode(vocabularyFilterName, forKey: .vocabularyFilterName) } + if let vocabularyFilterNames = self.vocabularyFilterNames { + try encodeContainer.encode(vocabularyFilterNames, forKey: .vocabularyFilterNames) + } if let vocabularyName = self.vocabularyName { try encodeContainer.encode(vocabularyName, forKey: .vocabularyName) } + if let vocabularyNames = self.vocabularyNames { + try encodeContainer.encode(vocabularyNames, forKey: .vocabularyNames) + } } public init(from decoder: Swift.Decoder) throws { @@ -252,6 +345,16 @@ extension ChimeSDKMediaPipelinesClientTypes.AmazonTranscribeProcessorConfigurati languageModelName = languageModelNameDecoded let filterPartialResultsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .filterPartialResults) ?? false filterPartialResults = filterPartialResultsDecoded + let identifyLanguageDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .identifyLanguage) ?? false + identifyLanguage = identifyLanguageDecoded + let languageOptionsDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .languageOptions) + languageOptions = languageOptionsDecoded + let preferredLanguageDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.CallAnalyticsLanguageCode.self, forKey: .preferredLanguage) + preferredLanguage = preferredLanguageDecoded + let vocabularyNamesDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .vocabularyNames) + vocabularyNames = vocabularyNamesDecoded + let vocabularyFilterNamesDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .vocabularyFilterNames) + vocabularyFilterNames = vocabularyFilterNamesDecoded } } @@ -266,51 +369,70 @@ extension ChimeSDKMediaPipelinesClientTypes { public var enablePartialResultsStabilization: Swift.Bool /// If true, TranscriptEvents with IsPartial: true are filtered out of the insights target. public var filterPartialResults: Swift.Bool + /// Turns language identification on or off. + public var identifyLanguage: Swift.Bool /// The language code that represents the language spoken in your audio. If you're unsure of the language spoken in your audio, consider using IdentifyLanguage to enable automatic language identification. For a list of languages that real-time Call Analytics supports, see the [Supported languages table](https://docs.aws.amazon.com/transcribe/latest/dg/supported-languages.html) in the Amazon Transcribe Developer Guide. - /// This member is required. public var languageCode: ChimeSDKMediaPipelinesClientTypes.CallAnalyticsLanguageCode? /// The name of the custom language model that you want to use when processing your transcription. Note that language model names are case sensitive. The language of the specified language model must match the language code you specify in your transcription request. If the languages don't match, the custom language model isn't applied. There are no errors or warnings associated with a language mismatch. For more information, see [Custom language models](https://docs.aws.amazon.com/transcribe/latest/dg/custom-language-models.html) in the Amazon Transcribe Developer Guide. public var languageModelName: Swift.String? + /// The language options for the transcription, such as automatic language detection. + public var languageOptions: Swift.String? /// The level of stability to use when you enable partial results stabilization (EnablePartialResultsStabilization). Low stability provides the highest accuracy. High stability transcribes faster, but with slightly lower accuracy. For more information, see [Partial-result stabilization](https://docs.aws.amazon.com/transcribe/latest/dg/streaming.html#streaming-partial-result-stabilization) in the Amazon Transcribe Developer Guide. public var partialResultsStability: ChimeSDKMediaPipelinesClientTypes.PartialResultsStability? /// The types of personally identifiable information (PII) to redact from a transcript. You can include as many types as you'd like, or you can select ALL. To include PiiEntityTypes in your Call Analytics request, you must also include ContentIdentificationType or ContentRedactionType, but you can't include both. Values must be comma-separated and can include: ADDRESS, BANK_ACCOUNT_NUMBER, BANK_ROUTING, CREDIT_DEBIT_CVV, CREDIT_DEBIT_EXPIRY, CREDIT_DEBIT_NUMBER, EMAIL, NAME, PHONE, PIN, SSN, or ALL. If you leave this parameter empty, the default behavior is equivalent to ALL. public var piiEntityTypes: Swift.String? + /// The preferred language for the transcription. + public var preferredLanguage: ChimeSDKMediaPipelinesClientTypes.CallAnalyticsLanguageCode? /// Enables speaker partitioning (diarization) in your transcription output. Speaker partitioning labels the speech from individual speakers in your media file. For more information, see [Partitioning speakers (diarization)](https://docs.aws.amazon.com/transcribe/latest/dg/diarization.html) in the Amazon Transcribe Developer Guide. public var showSpeakerLabel: Swift.Bool /// The vocabulary filtering method used in your Call Analytics transcription. public var vocabularyFilterMethod: ChimeSDKMediaPipelinesClientTypes.VocabularyFilterMethod? /// The name of the custom vocabulary filter that you specified in your Call Analytics request. Length Constraints: Minimum length of 1. Maximum length of 200. public var vocabularyFilterName: Swift.String? + /// The names of the custom vocabulary filter or filters using during transcription. + public var vocabularyFilterNames: Swift.String? /// The name of the custom vocabulary that you specified in your Call Analytics request. Length Constraints: Minimum length of 1. Maximum length of 200. public var vocabularyName: Swift.String? + /// The names of the custom vocabulary or vocabularies used during transcription. + public var vocabularyNames: Swift.String? public init( contentIdentificationType: ChimeSDKMediaPipelinesClientTypes.ContentType? = nil, contentRedactionType: ChimeSDKMediaPipelinesClientTypes.ContentType? = nil, enablePartialResultsStabilization: Swift.Bool = false, filterPartialResults: Swift.Bool = false, + identifyLanguage: Swift.Bool = false, languageCode: ChimeSDKMediaPipelinesClientTypes.CallAnalyticsLanguageCode? = nil, languageModelName: Swift.String? = nil, + languageOptions: Swift.String? = nil, partialResultsStability: ChimeSDKMediaPipelinesClientTypes.PartialResultsStability? = nil, piiEntityTypes: Swift.String? = nil, + preferredLanguage: ChimeSDKMediaPipelinesClientTypes.CallAnalyticsLanguageCode? = nil, showSpeakerLabel: Swift.Bool = false, vocabularyFilterMethod: ChimeSDKMediaPipelinesClientTypes.VocabularyFilterMethod? = nil, vocabularyFilterName: Swift.String? = nil, - vocabularyName: Swift.String? = nil + vocabularyFilterNames: Swift.String? = nil, + vocabularyName: Swift.String? = nil, + vocabularyNames: Swift.String? = nil ) { self.contentIdentificationType = contentIdentificationType self.contentRedactionType = contentRedactionType self.enablePartialResultsStabilization = enablePartialResultsStabilization self.filterPartialResults = filterPartialResults + self.identifyLanguage = identifyLanguage self.languageCode = languageCode self.languageModelName = languageModelName + self.languageOptions = languageOptions self.partialResultsStability = partialResultsStability self.piiEntityTypes = piiEntityTypes + self.preferredLanguage = preferredLanguage self.showSpeakerLabel = showSpeakerLabel self.vocabularyFilterMethod = vocabularyFilterMethod self.vocabularyFilterName = vocabularyFilterName + self.vocabularyFilterNames = vocabularyFilterNames self.vocabularyName = vocabularyName + self.vocabularyNames = vocabularyNames } } @@ -792,6 +914,50 @@ extension BadRequestExceptionBody: Swift.Decodable { } } +extension ChimeSDKMediaPipelinesClientTypes { + public enum BorderColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case black + case blue + case green + case red + case white + case yellow + case sdkUnknown(Swift.String) + + public static var allCases: [BorderColor] { + return [ + .black, + .blue, + .green, + .red, + .white, + .yellow, + .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 .black: return "Black" + case .blue: return "Blue" + case .green: return "Green" + case .red: return "Red" + case .white: return "White" + case .yellow: return "Yellow" + 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 = BorderColor(rawValue: rawValue) ?? BorderColor.sdkUnknown(rawValue) + } + } +} + extension ChimeSDKMediaPipelinesClientTypes { public enum CallAnalyticsLanguageCode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case deDe @@ -845,6 +1011,38 @@ extension ChimeSDKMediaPipelinesClientTypes { } } +extension ChimeSDKMediaPipelinesClientTypes { + public enum CanvasOrientation: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case landscape + case portrait + case sdkUnknown(Swift.String) + + public static var allCases: [CanvasOrientation] { + return [ + .landscape, + .portrait, + .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 .landscape: return "Landscape" + case .portrait: return "Portrait" + 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 = CanvasOrientation(rawValue: rawValue) ?? CanvasOrientation.sdkUnknown(rawValue) + } + } +} + extension ChimeSDKMediaPipelinesClientTypes.ChannelDefinition: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case channelId = "ChannelId" @@ -1507,6 +1705,7 @@ extension ChimeSDKMediaPipelinesClientTypes { extension ChimeSDKMediaPipelinesClientTypes { public enum ContentShareLayoutOption: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case activespeakeronly case horizontal case presenteronly case vertical @@ -1514,6 +1713,7 @@ extension ChimeSDKMediaPipelinesClientTypes { public static var allCases: [ContentShareLayoutOption] { return [ + .activespeakeronly, .horizontal, .presenteronly, .vertical, @@ -1526,6 +1726,7 @@ extension ChimeSDKMediaPipelinesClientTypes { } public var rawValue: Swift.String { switch self { + case .activespeakeronly: return "ActiveSpeakerOnly" case .horizontal: return "Horizontal" case .presenteronly: return "PresenterOnly" case .vertical: return "Vertical" @@ -2212,7 +2413,7 @@ public struct CreateMediaInsightsPipelineInput: Swift.Equatable { public var mediaInsightsPipelineConfigurationArn: Swift.String? /// The runtime metadata for the media insights pipeline. Consists of a key-value map of strings. public var mediaInsightsRuntimeMetadata: [Swift.String:Swift.String]? - /// The runtime configuration for the S3 recording sink. + /// The runtime configuration for the S3 recording sink. If specified, the settings in this structure override any settings in S3RecordingSinkConfiguration. public var s3RecordingSinkRuntimeConfiguration: ChimeSDKMediaPipelinesClientTypes.S3RecordingSinkRuntimeConfiguration? /// The tags assigned to the media insights pipeline. public var tags: [ChimeSDKMediaPipelinesClientTypes.Tag]? @@ -3225,18 +3426,38 @@ extension GetMediaPipelineOutputResponseBody: Swift.Decodable { extension ChimeSDKMediaPipelinesClientTypes.GridViewConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case activeSpeakerOnlyConfiguration = "ActiveSpeakerOnlyConfiguration" + case canvasOrientation = "CanvasOrientation" case contentShareLayout = "ContentShareLayout" + case horizontalLayoutConfiguration = "HorizontalLayoutConfiguration" case presenterOnlyConfiguration = "PresenterOnlyConfiguration" + case verticalLayoutConfiguration = "VerticalLayoutConfiguration" + case videoAttribute = "VideoAttribute" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let activeSpeakerOnlyConfiguration = self.activeSpeakerOnlyConfiguration { + try encodeContainer.encode(activeSpeakerOnlyConfiguration, forKey: .activeSpeakerOnlyConfiguration) + } + if let canvasOrientation = self.canvasOrientation { + try encodeContainer.encode(canvasOrientation.rawValue, forKey: .canvasOrientation) + } if let contentShareLayout = self.contentShareLayout { try encodeContainer.encode(contentShareLayout.rawValue, forKey: .contentShareLayout) } + if let horizontalLayoutConfiguration = self.horizontalLayoutConfiguration { + try encodeContainer.encode(horizontalLayoutConfiguration, forKey: .horizontalLayoutConfiguration) + } if let presenterOnlyConfiguration = self.presenterOnlyConfiguration { try encodeContainer.encode(presenterOnlyConfiguration, forKey: .presenterOnlyConfiguration) } + if let verticalLayoutConfiguration = self.verticalLayoutConfiguration { + try encodeContainer.encode(verticalLayoutConfiguration, forKey: .verticalLayoutConfiguration) + } + if let videoAttribute = self.videoAttribute { + try encodeContainer.encode(videoAttribute, forKey: .videoAttribute) + } } public init(from decoder: Swift.Decoder) throws { @@ -3245,30 +3466,201 @@ extension ChimeSDKMediaPipelinesClientTypes.GridViewConfiguration: Swift.Codable contentShareLayout = contentShareLayoutDecoded let presenterOnlyConfigurationDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.PresenterOnlyConfiguration.self, forKey: .presenterOnlyConfiguration) presenterOnlyConfiguration = presenterOnlyConfigurationDecoded + let activeSpeakerOnlyConfigurationDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.ActiveSpeakerOnlyConfiguration.self, forKey: .activeSpeakerOnlyConfiguration) + activeSpeakerOnlyConfiguration = activeSpeakerOnlyConfigurationDecoded + let horizontalLayoutConfigurationDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.HorizontalLayoutConfiguration.self, forKey: .horizontalLayoutConfiguration) + horizontalLayoutConfiguration = horizontalLayoutConfigurationDecoded + let verticalLayoutConfigurationDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.VerticalLayoutConfiguration.self, forKey: .verticalLayoutConfiguration) + verticalLayoutConfiguration = verticalLayoutConfigurationDecoded + let videoAttributeDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.VideoAttribute.self, forKey: .videoAttribute) + videoAttribute = videoAttributeDecoded + let canvasOrientationDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.CanvasOrientation.self, forKey: .canvasOrientation) + canvasOrientation = canvasOrientationDecoded } } extension ChimeSDKMediaPipelinesClientTypes { /// Specifies the type of grid layout. public struct GridViewConfiguration: Swift.Equatable { + /// The configuration settings for an ActiveSpeakerOnly video tile. + public var activeSpeakerOnlyConfiguration: ChimeSDKMediaPipelinesClientTypes.ActiveSpeakerOnlyConfiguration? + /// The orientation setting, horizontal or vertical. + public var canvasOrientation: ChimeSDKMediaPipelinesClientTypes.CanvasOrientation? /// Defines the layout of the video tiles when content sharing is enabled. /// This member is required. public var contentShareLayout: ChimeSDKMediaPipelinesClientTypes.ContentShareLayoutOption? + /// The configuration settings for a horizontal layout. + public var horizontalLayoutConfiguration: ChimeSDKMediaPipelinesClientTypes.HorizontalLayoutConfiguration? /// Defines the configuration options for a presenter only video tile. public var presenterOnlyConfiguration: ChimeSDKMediaPipelinesClientTypes.PresenterOnlyConfiguration? + /// The configuration settings for a vertical layout. + public var verticalLayoutConfiguration: ChimeSDKMediaPipelinesClientTypes.VerticalLayoutConfiguration? + /// The attribute settings for the video tiles. + public var videoAttribute: ChimeSDKMediaPipelinesClientTypes.VideoAttribute? public init( + activeSpeakerOnlyConfiguration: ChimeSDKMediaPipelinesClientTypes.ActiveSpeakerOnlyConfiguration? = nil, + canvasOrientation: ChimeSDKMediaPipelinesClientTypes.CanvasOrientation? = nil, contentShareLayout: ChimeSDKMediaPipelinesClientTypes.ContentShareLayoutOption? = nil, - presenterOnlyConfiguration: ChimeSDKMediaPipelinesClientTypes.PresenterOnlyConfiguration? = nil + horizontalLayoutConfiguration: ChimeSDKMediaPipelinesClientTypes.HorizontalLayoutConfiguration? = nil, + presenterOnlyConfiguration: ChimeSDKMediaPipelinesClientTypes.PresenterOnlyConfiguration? = nil, + verticalLayoutConfiguration: ChimeSDKMediaPipelinesClientTypes.VerticalLayoutConfiguration? = nil, + videoAttribute: ChimeSDKMediaPipelinesClientTypes.VideoAttribute? = nil ) { + self.activeSpeakerOnlyConfiguration = activeSpeakerOnlyConfiguration + self.canvasOrientation = canvasOrientation self.contentShareLayout = contentShareLayout + self.horizontalLayoutConfiguration = horizontalLayoutConfiguration self.presenterOnlyConfiguration = presenterOnlyConfiguration + self.verticalLayoutConfiguration = verticalLayoutConfiguration + self.videoAttribute = videoAttribute + } + } + +} + +extension ChimeSDKMediaPipelinesClientTypes { + public enum HighlightColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case black + case blue + case green + case red + case white + case yellow + case sdkUnknown(Swift.String) + + public static var allCases: [HighlightColor] { + return [ + .black, + .blue, + .green, + .red, + .white, + .yellow, + .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 .black: return "Black" + case .blue: return "Blue" + case .green: return "Green" + case .red: return "Red" + case .white: return "White" + case .yellow: return "Yellow" + 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 = HighlightColor(rawValue: rawValue) ?? HighlightColor.sdkUnknown(rawValue) + } + } +} + +extension ChimeSDKMediaPipelinesClientTypes.HorizontalLayoutConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case tileAspectRatio = "TileAspectRatio" + case tileCount = "TileCount" + case tileOrder = "TileOrder" + case tilePosition = "TilePosition" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let tileAspectRatio = self.tileAspectRatio { + try encodeContainer.encode(tileAspectRatio, forKey: .tileAspectRatio) + } + if let tileCount = self.tileCount { + try encodeContainer.encode(tileCount, forKey: .tileCount) + } + if let tileOrder = self.tileOrder { + try encodeContainer.encode(tileOrder.rawValue, forKey: .tileOrder) + } + if let tilePosition = self.tilePosition { + try encodeContainer.encode(tilePosition.rawValue, forKey: .tilePosition) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tileOrderDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.TileOrder.self, forKey: .tileOrder) + tileOrder = tileOrderDecoded + let tilePositionDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.HorizontalTilePosition.self, forKey: .tilePosition) + tilePosition = tilePositionDecoded + let tileCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .tileCount) + tileCount = tileCountDecoded + let tileAspectRatioDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .tileAspectRatio) + tileAspectRatio = tileAspectRatioDecoded + } +} + +extension ChimeSDKMediaPipelinesClientTypes { + /// Defines the configuration settings for the horizontal layout. + public struct HorizontalLayoutConfiguration: Swift.Equatable { + /// Sets the aspect ratio of the video tiles, such as 16:9. + public var tileAspectRatio: Swift.String? + /// The maximum number of video tiles to display. + public var tileCount: Swift.Int? + /// Sets the automatic ordering of the video tiles. + public var tileOrder: ChimeSDKMediaPipelinesClientTypes.TileOrder? + /// Sets the position of horizontal tiles. + public var tilePosition: ChimeSDKMediaPipelinesClientTypes.HorizontalTilePosition? + + public init( + tileAspectRatio: Swift.String? = nil, + tileCount: Swift.Int? = nil, + tileOrder: ChimeSDKMediaPipelinesClientTypes.TileOrder? = nil, + tilePosition: ChimeSDKMediaPipelinesClientTypes.HorizontalTilePosition? = nil + ) + { + self.tileAspectRatio = tileAspectRatio + self.tileCount = tileCount + self.tileOrder = tileOrder + self.tilePosition = tilePosition } } } +extension ChimeSDKMediaPipelinesClientTypes { + public enum HorizontalTilePosition: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case bottom + case top + case sdkUnknown(Swift.String) + + public static var allCases: [HorizontalTilePosition] { + return [ + .bottom, + .top, + .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 .bottom: return "Bottom" + case .top: return "Top" + 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 = HorizontalTilePosition(rawValue: rawValue) ?? HorizontalTilePosition.sdkUnknown(rawValue) + } + } +} + extension ChimeSDKMediaPipelinesClientTypes.IssueDetectionConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case ruleName = "RuleName" @@ -7112,6 +7504,38 @@ extension ThrottledClientExceptionBody: Swift.Decodable { } } +extension ChimeSDKMediaPipelinesClientTypes { + public enum TileOrder: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case joinsequence + case speakersequence + case sdkUnknown(Swift.String) + + public static var allCases: [TileOrder] { + return [ + .joinsequence, + .speakersequence, + .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 .joinsequence: return "JoinSequence" + case .speakersequence: return "SpeakerSequence" + 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 = TileOrder(rawValue: rawValue) ?? TileOrder.sdkUnknown(rawValue) + } + } +} + extension ChimeSDKMediaPipelinesClientTypes.TimestampRange: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case endTimestamp = "EndTimestamp" @@ -7619,6 +8043,103 @@ public struct UpdateMediaInsightsPipelineStatusOutputResponse: Swift.Equatable { public init() { } } +extension ChimeSDKMediaPipelinesClientTypes.VerticalLayoutConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case tileAspectRatio = "TileAspectRatio" + case tileCount = "TileCount" + case tileOrder = "TileOrder" + case tilePosition = "TilePosition" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let tileAspectRatio = self.tileAspectRatio { + try encodeContainer.encode(tileAspectRatio, forKey: .tileAspectRatio) + } + if let tileCount = self.tileCount { + try encodeContainer.encode(tileCount, forKey: .tileCount) + } + if let tileOrder = self.tileOrder { + try encodeContainer.encode(tileOrder.rawValue, forKey: .tileOrder) + } + if let tilePosition = self.tilePosition { + try encodeContainer.encode(tilePosition.rawValue, forKey: .tilePosition) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tileOrderDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.TileOrder.self, forKey: .tileOrder) + tileOrder = tileOrderDecoded + let tilePositionDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.VerticalTilePosition.self, forKey: .tilePosition) + tilePosition = tilePositionDecoded + let tileCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .tileCount) + tileCount = tileCountDecoded + let tileAspectRatioDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .tileAspectRatio) + tileAspectRatio = tileAspectRatioDecoded + } +} + +extension ChimeSDKMediaPipelinesClientTypes { + /// Defines the configuration settings for a vertial layout. + public struct VerticalLayoutConfiguration: Swift.Equatable { + /// Sets the aspect ratio of the video tiles, such as 16:9. + public var tileAspectRatio: Swift.String? + /// The maximum number of tiles to display. + public var tileCount: Swift.Int? + /// Sets the automatic ordering of the video tiles. + public var tileOrder: ChimeSDKMediaPipelinesClientTypes.TileOrder? + /// Sets the position of vertical tiles. + public var tilePosition: ChimeSDKMediaPipelinesClientTypes.VerticalTilePosition? + + public init( + tileAspectRatio: Swift.String? = nil, + tileCount: Swift.Int? = nil, + tileOrder: ChimeSDKMediaPipelinesClientTypes.TileOrder? = nil, + tilePosition: ChimeSDKMediaPipelinesClientTypes.VerticalTilePosition? = nil + ) + { + self.tileAspectRatio = tileAspectRatio + self.tileCount = tileCount + self.tileOrder = tileOrder + self.tilePosition = tilePosition + } + } + +} + +extension ChimeSDKMediaPipelinesClientTypes { + public enum VerticalTilePosition: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case `left` + case `right` + case sdkUnknown(Swift.String) + + public static var allCases: [VerticalTilePosition] { + return [ + .left, + .right, + .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 .left: return "Left" + case .right: return "Right" + 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 = VerticalTilePosition(rawValue: rawValue) ?? VerticalTilePosition.sdkUnknown(rawValue) + } + } +} + extension ChimeSDKMediaPipelinesClientTypes.VideoArtifactsConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case muxType = "MuxType" @@ -7665,6 +8186,71 @@ extension ChimeSDKMediaPipelinesClientTypes { } +extension ChimeSDKMediaPipelinesClientTypes.VideoAttribute: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case borderColor = "BorderColor" + case borderThickness = "BorderThickness" + case cornerRadius = "CornerRadius" + case highlightColor = "HighlightColor" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let borderColor = self.borderColor { + try encodeContainer.encode(borderColor.rawValue, forKey: .borderColor) + } + if let borderThickness = self.borderThickness { + try encodeContainer.encode(borderThickness, forKey: .borderThickness) + } + if let cornerRadius = self.cornerRadius { + try encodeContainer.encode(cornerRadius, forKey: .cornerRadius) + } + if let highlightColor = self.highlightColor { + try encodeContainer.encode(highlightColor.rawValue, forKey: .highlightColor) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let cornerRadiusDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .cornerRadius) + cornerRadius = cornerRadiusDecoded + let borderColorDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.BorderColor.self, forKey: .borderColor) + borderColor = borderColorDecoded + let highlightColorDecoded = try containerValues.decodeIfPresent(ChimeSDKMediaPipelinesClientTypes.HighlightColor.self, forKey: .highlightColor) + highlightColor = highlightColorDecoded + let borderThicknessDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .borderThickness) + borderThickness = borderThicknessDecoded + } +} + +extension ChimeSDKMediaPipelinesClientTypes { + /// Defines the settings for a video tile. + public struct VideoAttribute: Swift.Equatable { + /// Defines the border color of all video tiles. + public var borderColor: ChimeSDKMediaPipelinesClientTypes.BorderColor? + /// Defines the border thickness for all video tiles. + public var borderThickness: Swift.Int? + /// Sets the corner radius of all video tiles. + public var cornerRadius: Swift.Int? + /// Defines the highlight color for the active video tile. + public var highlightColor: ChimeSDKMediaPipelinesClientTypes.HighlightColor? + + public init( + borderColor: ChimeSDKMediaPipelinesClientTypes.BorderColor? = nil, + borderThickness: Swift.Int? = nil, + cornerRadius: Swift.Int? = nil, + highlightColor: ChimeSDKMediaPipelinesClientTypes.HighlightColor? = nil + ) + { + self.borderColor = borderColor + self.borderThickness = borderThickness + self.cornerRadius = cornerRadius + self.highlightColor = highlightColor + } + } + +} + extension ChimeSDKMediaPipelinesClientTypes.VideoConcatenationConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case state = "State" diff --git a/Sources/Services/AWSCleanRooms/CleanRoomsClient.swift b/Sources/Services/AWSCleanRooms/CleanRoomsClient.swift index 91ccae2ed86..c00fc084392 100644 --- a/Sources/Services/AWSCleanRooms/CleanRoomsClient.swift +++ b/Sources/Services/AWSCleanRooms/CleanRoomsClient.swift @@ -67,6 +67,42 @@ public struct CleanRoomsClientLogHandlerFactory: ClientRuntime.SDKLogHandlerFact } extension CleanRoomsClient: CleanRoomsClientProtocol { + /// Retrieves multiple analysis templates within a collaboration by their Amazon Resource Names (ARNs). + public func batchGetCollaborationAnalysisTemplate(input: BatchGetCollaborationAnalysisTemplateInput) async throws -> BatchGetCollaborationAnalysisTemplateOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "batchGetCollaborationAnalysisTemplate") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "cleanrooms") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "batchGetCollaborationAnalysisTemplate") + 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.serviceSpecific.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: "BatchGetCollaborationAnalysisTemplateInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Retrieves multiple schemas by their identifiers. public func batchGetSchema(input: BatchGetSchemaInput) async throws -> BatchGetSchemaOutputResponse { @@ -103,6 +139,42 @@ extension CleanRoomsClient: CleanRoomsClientProtocol { return result } + /// Creates a new analysis template. + public func createAnalysisTemplate(input: CreateAnalysisTemplateInput) async throws -> CreateAnalysisTemplateOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createAnalysisTemplate") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "cleanrooms") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createAnalysisTemplate") + 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.serviceSpecific.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: "CreateAnalysisTemplateInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Creates a new collaboration. public func createCollaboration(input: CreateCollaborationInput) async throws -> CreateCollaborationOutputResponse { @@ -283,6 +355,39 @@ extension CleanRoomsClient: CleanRoomsClientProtocol { return result } + /// Deletes an analysis template. + public func deleteAnalysisTemplate(input: DeleteAnalysisTemplateInput) async throws -> DeleteAnalysisTemplateOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteAnalysisTemplate") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "cleanrooms") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteAnalysisTemplate") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Deletes a collaboration. It can only be called by the collaboration owner. public func deleteCollaboration(input: DeleteCollaborationInput) async throws -> DeleteCollaborationOutputResponse { @@ -481,6 +586,39 @@ extension CleanRoomsClient: CleanRoomsClientProtocol { return result } + /// Retrieves an analysis template. + public func getAnalysisTemplate(input: GetAnalysisTemplateInput) async throws -> GetAnalysisTemplateOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getAnalysisTemplate") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "cleanrooms") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getAnalysisTemplate") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Returns metadata about a collaboration. public func getCollaboration(input: GetCollaborationInput) async throws -> GetCollaborationOutputResponse { @@ -514,6 +652,39 @@ extension CleanRoomsClient: CleanRoomsClientProtocol { return result } + /// Retrieves an analysis template within a collaboration. + public func getCollaborationAnalysisTemplate(input: GetCollaborationAnalysisTemplateInput) async throws -> GetCollaborationAnalysisTemplateOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getCollaborationAnalysisTemplate") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "cleanrooms") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getCollaborationAnalysisTemplate") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Retrieves a configured table. public func getConfiguredTable(input: GetConfiguredTableInput) async throws -> GetConfiguredTableOutputResponse { @@ -745,6 +916,74 @@ extension CleanRoomsClient: CleanRoomsClientProtocol { return result } + /// Lists analysis templates that the caller owns. + public func listAnalysisTemplates(input: ListAnalysisTemplatesInput) async throws -> ListAnalysisTemplatesOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listAnalysisTemplates") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "cleanrooms") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listAnalysisTemplates") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Lists analysis templates within a collaboration. + public func listCollaborationAnalysisTemplates(input: ListCollaborationAnalysisTemplatesInput) async throws -> ListCollaborationAnalysisTemplatesOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listCollaborationAnalysisTemplates") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "cleanrooms") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listCollaborationAnalysisTemplates") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Lists collaborations the caller owns, is active in, or has been invited to. public func listCollaborations(input: ListCollaborationsInput) async throws -> ListCollaborationsOutputResponse { @@ -1122,6 +1361,42 @@ extension CleanRoomsClient: CleanRoomsClientProtocol { return result } + /// Updates the analysis template metadata. + public func updateAnalysisTemplate(input: UpdateAnalysisTemplateInput) async throws -> UpdateAnalysisTemplateOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .patch) + .withServiceName(value: serviceName) + .withOperation(value: "updateAnalysisTemplate") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "cleanrooms") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateAnalysisTemplate") + 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.serviceSpecific.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: "UpdateAnalysisTemplateInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Updates collaboration metadata and can only be called by the collaboration owner. public func updateCollaboration(input: UpdateCollaborationInput) async throws -> UpdateCollaborationOutputResponse { diff --git a/Sources/Services/AWSCleanRooms/CleanRoomsClientProtocol.swift b/Sources/Services/AWSCleanRooms/CleanRoomsClientProtocol.swift index ae500ad0acf..e5afa206d9a 100644 --- a/Sources/Services/AWSCleanRooms/CleanRoomsClientProtocol.swift +++ b/Sources/Services/AWSCleanRooms/CleanRoomsClientProtocol.swift @@ -4,8 +4,12 @@ import ClientRuntime /// Welcome to the Clean Rooms API Reference. Clean Rooms is an Amazon Web Services service that helps multiple parties to join their data together in a secure collaboration workspace. In the collaboration, members who can query and receive results can get insights into the collective datasets without either party getting access to the other party's raw data. To learn more about Clean Rooms concepts, procedures, and best practices, see the [Clean Rooms User Guide](https://docs.aws.amazon.com/clean-rooms/latest/userguide/what-is.html). public protocol CleanRoomsClientProtocol { + /// Retrieves multiple analysis templates within a collaboration by their Amazon Resource Names (ARNs). + func batchGetCollaborationAnalysisTemplate(input: BatchGetCollaborationAnalysisTemplateInput) async throws -> BatchGetCollaborationAnalysisTemplateOutputResponse /// Retrieves multiple schemas by their identifiers. func batchGetSchema(input: BatchGetSchemaInput) async throws -> BatchGetSchemaOutputResponse + /// Creates a new analysis template. + func createAnalysisTemplate(input: CreateAnalysisTemplateInput) async throws -> CreateAnalysisTemplateOutputResponse /// Creates a new collaboration. func createCollaboration(input: CreateCollaborationInput) async throws -> CreateCollaborationOutputResponse /// Creates a new configured table resource. @@ -16,6 +20,8 @@ public protocol CleanRoomsClientProtocol { func createConfiguredTableAssociation(input: CreateConfiguredTableAssociationInput) async throws -> CreateConfiguredTableAssociationOutputResponse /// Creates a membership for a specific collaboration identifier and joins the collaboration. func createMembership(input: CreateMembershipInput) async throws -> CreateMembershipOutputResponse + /// Deletes an analysis template. + func deleteAnalysisTemplate(input: DeleteAnalysisTemplateInput) async throws -> DeleteAnalysisTemplateOutputResponse /// Deletes a collaboration. It can only be called by the collaboration owner. func deleteCollaboration(input: DeleteCollaborationInput) async throws -> DeleteCollaborationOutputResponse /// Deletes a configured table. @@ -28,8 +34,12 @@ public protocol CleanRoomsClientProtocol { func deleteMember(input: DeleteMemberInput) async throws -> DeleteMemberOutputResponse /// Deletes a specified membership. All resources under a membership must be deleted. func deleteMembership(input: DeleteMembershipInput) async throws -> DeleteMembershipOutputResponse + /// Retrieves an analysis template. + func getAnalysisTemplate(input: GetAnalysisTemplateInput) async throws -> GetAnalysisTemplateOutputResponse /// Returns metadata about a collaboration. func getCollaboration(input: GetCollaborationInput) async throws -> GetCollaborationOutputResponse + /// Retrieves an analysis template within a collaboration. + func getCollaborationAnalysisTemplate(input: GetCollaborationAnalysisTemplateInput) async throws -> GetCollaborationAnalysisTemplateOutputResponse /// Retrieves a configured table. func getConfiguredTable(input: GetConfiguredTableInput) async throws -> GetConfiguredTableOutputResponse /// Retrieves a configured table analysis rule. @@ -44,6 +54,10 @@ public protocol CleanRoomsClientProtocol { func getSchema(input: GetSchemaInput) async throws -> GetSchemaOutputResponse /// Retrieves a schema analysis rule. func getSchemaAnalysisRule(input: GetSchemaAnalysisRuleInput) async throws -> GetSchemaAnalysisRuleOutputResponse + /// Lists analysis templates that the caller owns. + func listAnalysisTemplates(input: ListAnalysisTemplatesInput) async throws -> ListAnalysisTemplatesOutputResponse + /// Lists analysis templates within a collaboration. + func listCollaborationAnalysisTemplates(input: ListCollaborationAnalysisTemplatesInput) async throws -> ListCollaborationAnalysisTemplatesOutputResponse /// Lists collaborations the caller owns, is active in, or has been invited to. func listCollaborations(input: ListCollaborationsInput) async throws -> ListCollaborationsOutputResponse /// Lists configured table associations for a membership. @@ -66,6 +80,8 @@ public protocol CleanRoomsClientProtocol { func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse /// Removes a tag or list of tags from a resource. func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse + /// Updates the analysis template metadata. + func updateAnalysisTemplate(input: UpdateAnalysisTemplateInput) async throws -> UpdateAnalysisTemplateOutputResponse /// Updates collaboration metadata and can only be called by the collaboration owner. func updateCollaboration(input: UpdateCollaborationInput) async throws -> UpdateCollaborationOutputResponse /// Updates a configured table. diff --git a/Sources/Services/AWSCleanRooms/models/Models.swift b/Sources/Services/AWSCleanRooms/models/Models.swift index 1a6d0510d3b..1b4f22830c7 100644 --- a/Sources/Services/AWSCleanRooms/models/Models.swift +++ b/Sources/Services/AWSCleanRooms/models/Models.swift @@ -283,6 +283,35 @@ extension CleanRoomsClientTypes { } } +extension CleanRoomsClientTypes { + public enum AnalysisFormat: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case sql + case sdkUnknown(Swift.String) + + public static var allCases: [AnalysisFormat] { + return [ + .sql, + .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 .sql: return "SQL" + 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 = AnalysisFormat(rawValue: rawValue) ?? AnalysisFormat.sdkUnknown(rawValue) + } + } +} + extension CleanRoomsClientTypes { public enum AnalysisMethod: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case directQuery @@ -312,6 +341,69 @@ extension CleanRoomsClientTypes { } } +extension CleanRoomsClientTypes.AnalysisParameter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case defaultValue + case name + case type + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let defaultValue = self.defaultValue { + try encodeContainer.encode(defaultValue, forKey: .defaultValue) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let type = self.type { + try encodeContainer.encode(type.rawValue, forKey: .type) + } + } + + 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 typeDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.ParameterType.self, forKey: .type) + type = typeDecoded + let defaultValueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .defaultValue) + defaultValue = defaultValueDecoded + } +} + +extension CleanRoomsClientTypes.AnalysisParameter: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "CONTENT_REDACTED" + } +} + +extension CleanRoomsClientTypes { + /// Optional. The member who can query can provide this placeholder for a literal data value in an analysis template. + public struct AnalysisParameter: Swift.Equatable { + /// Optional. The default value that is applied in the analysis template. The member who can query can override this value in the query editor. + public var defaultValue: Swift.String? + /// The name of the parameter. The name must use only alphanumeric, underscore (_), or hyphen (-) characters but cannot start or end with a hyphen. + /// This member is required. + public var name: Swift.String? + /// The type of parameter. + /// This member is required. + public var type: CleanRoomsClientTypes.ParameterType? + + public init( + defaultValue: Swift.String? = nil, + name: Swift.String? = nil, + type: CleanRoomsClientTypes.ParameterType? = nil + ) + { + self.defaultValue = defaultValue + self.name = name + self.type = type + } + } + +} + extension CleanRoomsClientTypes.AnalysisRule: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case collaborationId @@ -376,7 +468,7 @@ extension CleanRoomsClientTypes { /// A policy that describes the associated data usage limitations. /// This member is required. public var policy: CleanRoomsClientTypes.AnalysisRulePolicy? - /// The type of analysis rule. Valid values are `AGGREGATION` and `LIST`. + /// The type of analysis rule. /// This member is required. public var type: CleanRoomsClientTypes.AnalysisRuleType? /// The time the analysis rule was last updated. @@ -531,7 +623,7 @@ extension CleanRoomsClientTypes.AnalysisRuleAggregation: Swift.Codable { } extension CleanRoomsClientTypes { - /// Enables query structure and specified queries that produce aggregate statistics. + /// A type of analysis rule that enables query structure and specified queries that produce aggregate statistics. public struct AnalysisRuleAggregation: Swift.Equatable { /// The columns that query runners are allowed to use in aggregation queries. /// This member is required. @@ -575,6 +667,76 @@ extension CleanRoomsClientTypes { } +extension CleanRoomsClientTypes.AnalysisRuleCustom: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case allowedAnalyses + case allowedAnalysisProviders + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let allowedAnalyses = allowedAnalyses { + var allowedAnalysesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .allowedAnalyses) + for analysistemplatearnorquerywildcard0 in allowedAnalyses { + try allowedAnalysesContainer.encode(analysistemplatearnorquerywildcard0) + } + } + if let allowedAnalysisProviders = allowedAnalysisProviders { + var allowedAnalysisProvidersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .allowedAnalysisProviders) + for accountid0 in allowedAnalysisProviders { + try allowedAnalysisProvidersContainer.encode(accountid0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let allowedAnalysesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .allowedAnalyses) + var allowedAnalysesDecoded0:[Swift.String]? = nil + if let allowedAnalysesContainer = allowedAnalysesContainer { + allowedAnalysesDecoded0 = [Swift.String]() + for string0 in allowedAnalysesContainer { + if let string0 = string0 { + allowedAnalysesDecoded0?.append(string0) + } + } + } + allowedAnalyses = allowedAnalysesDecoded0 + let allowedAnalysisProvidersContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .allowedAnalysisProviders) + var allowedAnalysisProvidersDecoded0:[Swift.String]? = nil + if let allowedAnalysisProvidersContainer = allowedAnalysisProvidersContainer { + allowedAnalysisProvidersDecoded0 = [Swift.String]() + for string0 in allowedAnalysisProvidersContainer { + if let string0 = string0 { + allowedAnalysisProvidersDecoded0?.append(string0) + } + } + } + allowedAnalysisProviders = allowedAnalysisProvidersDecoded0 + } +} + +extension CleanRoomsClientTypes { + /// A type of analysis rule that enables the table owner to approve custom SQL queries on their configured tables. + public struct AnalysisRuleCustom: Swift.Equatable { + /// The analysis templates that are allowed by the custom analysis rule. + /// This member is required. + public var allowedAnalyses: [Swift.String]? + /// The Amazon Web Services accounts that are allowed to query by the custom analysis rule. Required when allowedAnalyses is ANY_QUERY. + public var allowedAnalysisProviders: [Swift.String]? + + public init( + allowedAnalyses: [Swift.String]? = nil, + allowedAnalysisProviders: [Swift.String]? = nil + ) + { + self.allowedAnalyses = allowedAnalyses + self.allowedAnalysisProviders = allowedAnalysisProviders + } + } + +} + extension CleanRoomsClientTypes.AnalysisRuleList: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case allowedJoinOperators @@ -645,7 +807,7 @@ extension CleanRoomsClientTypes.AnalysisRuleList: Swift.Codable { extension CleanRoomsClientTypes { /// A type of analysis rule that enables row-level analysis. public struct AnalysisRuleList: Swift.Equatable { - /// Which logical operators (if any) are to be used in an INNER JOIN match condition. Default is AND. + /// The logical operators (if any) that are to be used in an INNER JOIN match condition. Default is AND. public var allowedJoinOperators: [CleanRoomsClientTypes.JoinOperator]? /// Columns that can be used to join a configured table with the table of the member who can query and other members' configured tables. /// This member is required. @@ -696,9 +858,9 @@ extension CleanRoomsClientTypes.AnalysisRulePolicy: Swift.Codable { } extension CleanRoomsClientTypes { - /// Controls on the query specifications that can be run on configured table.. + /// Controls on the query specifications that can be run on configured table. public enum AnalysisRulePolicy: Swift.Equatable { - /// Controls on the query specifications that can be run on configured table.. + /// Controls on the query specifications that can be run on configured table. case v1(CleanRoomsClientTypes.AnalysisRulePolicyV1) case sdkUnknown(Swift.String) } @@ -708,6 +870,7 @@ extension CleanRoomsClientTypes { extension CleanRoomsClientTypes.AnalysisRulePolicyV1: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case aggregation + case custom case list case sdkUnknown } @@ -717,6 +880,8 @@ extension CleanRoomsClientTypes.AnalysisRulePolicyV1: Swift.Codable { switch self { case let .aggregation(aggregation): try container.encode(aggregation, forKey: .aggregation) + case let .custom(custom): + try container.encode(custom, forKey: .custom) case let .list(list): try container.encode(list, forKey: .list) case let .sdkUnknown(sdkUnknown): @@ -736,17 +901,24 @@ extension CleanRoomsClientTypes.AnalysisRulePolicyV1: Swift.Codable { self = .aggregation(aggregation) return } + let customDecoded = try values.decodeIfPresent(CleanRoomsClientTypes.AnalysisRuleCustom.self, forKey: .custom) + if let custom = customDecoded { + self = .custom(custom) + return + } self = .sdkUnknown("") } } extension CleanRoomsClientTypes { - /// Controls on the query specifications that can be run on configured table.. + /// Controls on the query specifications that can be run on configured table. public enum AnalysisRulePolicyV1: Swift.Equatable { /// Analysis rule type that enables only list queries on a configured table. case list(CleanRoomsClientTypes.AnalysisRuleList) /// Analysis rule type that enables only aggregation queries on a configured table. case aggregation(CleanRoomsClientTypes.AnalysisRuleAggregation) + /// Analysis rule type that enables custom SQL queries on a configured table. + case custom(CleanRoomsClientTypes.AnalysisRuleCustom) case sdkUnknown(Swift.String) } @@ -755,12 +927,14 @@ extension CleanRoomsClientTypes { extension CleanRoomsClientTypes { public enum AnalysisRuleType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case aggregation + case custom case list case sdkUnknown(Swift.String) public static var allCases: [AnalysisRuleType] { return [ .aggregation, + .custom, .list, .sdkUnknown("") ] @@ -772,6 +946,7 @@ extension CleanRoomsClientTypes { public var rawValue: Swift.String { switch self { case .aggregation: return "AGGREGATION" + case .custom: return "CUSTOM" case .list: return "LIST" case let .sdkUnknown(s): return s } @@ -784,260 +959,137 @@ extension CleanRoomsClientTypes { } } -extension CleanRoomsClientTypes.BatchGetSchemaError: Swift.Codable { +extension CleanRoomsClientTypes.AnalysisSchema: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case code - case message - case name + case referencedTables } 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 name = self.name { - try encodeContainer.encode(name, forKey: .name) + if let referencedTables = referencedTables { + var referencedTablesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .referencedTables) + for tablealias0 in referencedTables { + try referencedTablesContainer.encode(tablealias0) + } } } 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 codeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .code) - code = codeDecoded - let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) - message = messageDecoded + let referencedTablesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .referencedTables) + var referencedTablesDecoded0:[Swift.String]? = nil + if let referencedTablesContainer = referencedTablesContainer { + referencedTablesDecoded0 = [Swift.String]() + for string0 in referencedTablesContainer { + if let string0 = string0 { + referencedTablesDecoded0?.append(string0) + } + } + } + referencedTables = referencedTablesDecoded0 } } extension CleanRoomsClientTypes { - /// An error describing why a schema could not be fetched. - public struct BatchGetSchemaError: Swift.Equatable { - /// An error code for the error. - /// This member is required. - public var code: Swift.String? - /// An error message for the error. - /// This member is required. - public var message: Swift.String? - /// An error name for the error. - /// This member is required. - public var name: Swift.String? + /// A relation within an analysis. + public struct AnalysisSchema: Swift.Equatable { + /// The tables referenced in the analysis schema. + public var referencedTables: [Swift.String]? public init( - code: Swift.String? = nil, - message: Swift.String? = nil, - name: Swift.String? = nil + referencedTables: [Swift.String]? = nil ) { - self.code = code - self.message = message - self.name = name + self.referencedTables = referencedTables } } } -extension BatchGetSchemaInput: Swift.Encodable { +extension CleanRoomsClientTypes.AnalysisSource: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case names + case sdkUnknown + case text } public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let names = names { - var namesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .names) - for tablealias0 in names { - try namesContainer.encode(tablealias0) - } + var container = encoder.container(keyedBy: CodingKeys.self) + switch self { + case let .text(text): + try container.encode(text, forKey: .text) + case let .sdkUnknown(sdkUnknown): + try container.encode(sdkUnknown, forKey: .sdkUnknown) } } -} -extension BatchGetSchemaInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let collaborationIdentifier = collaborationIdentifier else { - return nil + public init(from decoder: Swift.Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + let textDecoded = try values.decodeIfPresent(Swift.String.self, forKey: .text) + if let text = textDecoded { + self = .text(text) + return } - return "/collaborations/\(collaborationIdentifier.urlPercentEncoding())/batch-schema" + self = .sdkUnknown("") } } -public struct BatchGetSchemaInput: Swift.Equatable { - /// A unique identifier for the collaboration that the schemas belong to. Currently accepts collaboration ID. - /// This member is required. - public var collaborationIdentifier: Swift.String? - /// The names for the schema objects to retrieve.> - /// This member is required. - public var names: [Swift.String]? - - public init( - collaborationIdentifier: Swift.String? = nil, - names: [Swift.String]? = nil - ) - { - self.collaborationIdentifier = collaborationIdentifier - self.names = names +extension CleanRoomsClientTypes { + /// The structure that defines the body of the analysis template. + public enum AnalysisSource: Swift.Equatable { + /// The query text. + case text(Swift.String) + case sdkUnknown(Swift.String) } -} -struct BatchGetSchemaInputBody: Swift.Equatable { - let names: [Swift.String]? } -extension BatchGetSchemaInputBody: Swift.Decodable { +extension CleanRoomsClientTypes.AnalysisTemplate: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case names + case analysisParameters + case arn + case collaborationArn + case collaborationId + case createTime + case description + case format + case id + case membershipArn + case membershipId + case name + case schema + case source + case updateTime } - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let namesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .names) - var namesDecoded0:[Swift.String]? = nil - if let namesContainer = namesContainer { - namesDecoded0 = [Swift.String]() - for string0 in namesContainer { - if let string0 = string0 { - namesDecoded0?.append(string0) - } + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let analysisParameters = analysisParameters { + var analysisParametersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .analysisParameters) + for analysisparameter0 in analysisParameters { + try analysisParametersContainer.encode(analysisparameter0) } } - names = namesDecoded0 - } -} - -public enum BatchGetSchemaOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + if let arn = self.arn { + try encodeContainer.encode(arn, forKey: .arn) } - } -} - -extension BatchGetSchemaOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: BatchGetSchemaOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.errors = output.errors - self.schemas = output.schemas - } else { - self.errors = nil - self.schemas = nil + if let collaborationArn = self.collaborationArn { + try encodeContainer.encode(collaborationArn, forKey: .collaborationArn) } - } -} - -public struct BatchGetSchemaOutputResponse: Swift.Equatable { - /// Error reasons for schemas that could not be retrieved. One error is returned for every schema that could not be retrieved. - /// This member is required. - public var errors: [CleanRoomsClientTypes.BatchGetSchemaError]? - /// The retrieved list of schemas. - /// This member is required. - public var schemas: [CleanRoomsClientTypes.Schema]? - - public init( - errors: [CleanRoomsClientTypes.BatchGetSchemaError]? = nil, - schemas: [CleanRoomsClientTypes.Schema]? = nil - ) - { - self.errors = errors - self.schemas = schemas - } -} - -struct BatchGetSchemaOutputResponseBody: Swift.Equatable { - let schemas: [CleanRoomsClientTypes.Schema]? - let errors: [CleanRoomsClientTypes.BatchGetSchemaError]? -} - -extension BatchGetSchemaOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case errors - case schemas - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let schemasContainer = try containerValues.decodeIfPresent([CleanRoomsClientTypes.Schema?].self, forKey: .schemas) - var schemasDecoded0:[CleanRoomsClientTypes.Schema]? = nil - if let schemasContainer = schemasContainer { - schemasDecoded0 = [CleanRoomsClientTypes.Schema]() - for structure0 in schemasContainer { - if let structure0 = structure0 { - schemasDecoded0?.append(structure0) - } - } - } - schemas = schemasDecoded0 - let errorsContainer = try containerValues.decodeIfPresent([CleanRoomsClientTypes.BatchGetSchemaError?].self, forKey: .errors) - var errorsDecoded0:[CleanRoomsClientTypes.BatchGetSchemaError]? = nil - if let errorsContainer = errorsContainer { - errorsDecoded0 = [CleanRoomsClientTypes.BatchGetSchemaError]() - for structure0 in errorsContainer { - if let structure0 = structure0 { - errorsDecoded0?.append(structure0) - } - } - } - errors = errorsDecoded0 - } -} - -extension CleanRoomsClientTypes.Collaboration: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case arn - case createTime - case creatorAccountId - case creatorDisplayName - case dataEncryptionMetadata - case description - case id - case memberStatus - case membershipArn - case membershipId - case name - case queryLogStatus - case updateTime - } - - 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 collaborationId = self.collaborationId { + try encodeContainer.encode(collaborationId, forKey: .collaborationId) } if let createTime = self.createTime { try encodeContainer.encodeTimestamp(createTime, format: .epochSeconds, forKey: .createTime) } - if let creatorAccountId = self.creatorAccountId { - try encodeContainer.encode(creatorAccountId, forKey: .creatorAccountId) - } - if let creatorDisplayName = self.creatorDisplayName { - try encodeContainer.encode(creatorDisplayName, forKey: .creatorDisplayName) - } - if let dataEncryptionMetadata = self.dataEncryptionMetadata { - try encodeContainer.encode(dataEncryptionMetadata, forKey: .dataEncryptionMetadata) - } if let description = self.description { try encodeContainer.encode(description, forKey: .description) } + if let format = self.format { + try encodeContainer.encode(format.rawValue, forKey: .format) + } if let id = self.id { try encodeContainer.encode(id, forKey: .id) } - if let memberStatus = self.memberStatus { - try encodeContainer.encode(memberStatus.rawValue, forKey: .memberStatus) - } if let membershipArn = self.membershipArn { try encodeContainer.encode(membershipArn, forKey: .membershipArn) } @@ -1047,8 +1099,11 @@ extension CleanRoomsClientTypes.Collaboration: Swift.Codable { if let name = self.name { try encodeContainer.encode(name, forKey: .name) } - if let queryLogStatus = self.queryLogStatus { - try encodeContainer.encode(queryLogStatus.rawValue, forKey: .queryLogStatus) + if let schema = self.schema { + try encodeContainer.encode(schema, forKey: .schema) + } + if let source = self.source { + try encodeContainer.encode(source, forKey: .source) } if let updateTime = self.updateTime { try encodeContainer.encodeTimestamp(updateTime, format: .epochSeconds, forKey: .updateTime) @@ -1061,144 +1116,135 @@ extension CleanRoomsClientTypes.Collaboration: Swift.Codable { id = idDecoded let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) arn = arnDecoded - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded + let collaborationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .collaborationId) + collaborationId = collaborationIdDecoded + let collaborationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .collaborationArn) + collaborationArn = collaborationArnDecoded + let membershipIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .membershipId) + membershipId = membershipIdDecoded + let membershipArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .membershipArn) + membershipArn = membershipArnDecoded let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) description = descriptionDecoded - let creatorAccountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorAccountId) - creatorAccountId = creatorAccountIdDecoded - let creatorDisplayNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorDisplayName) - creatorDisplayName = creatorDisplayNameDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded let createTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createTime) createTime = createTimeDecoded let updateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updateTime) updateTime = updateTimeDecoded - let memberStatusDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.MemberStatus.self, forKey: .memberStatus) - memberStatus = memberStatusDecoded - let membershipIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .membershipId) - membershipId = membershipIdDecoded - let membershipArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .membershipArn) - membershipArn = membershipArnDecoded - let dataEncryptionMetadataDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.DataEncryptionMetadata.self, forKey: .dataEncryptionMetadata) - dataEncryptionMetadata = dataEncryptionMetadataDecoded - let queryLogStatusDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.CollaborationQueryLogStatus.self, forKey: .queryLogStatus) - queryLogStatus = queryLogStatusDecoded + let schemaDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisSchema.self, forKey: .schema) + schema = schemaDecoded + let formatDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisFormat.self, forKey: .format) + format = formatDecoded + let sourceDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisSource.self, forKey: .source) + source = sourceDecoded + let analysisParametersContainer = try containerValues.decodeIfPresent([CleanRoomsClientTypes.AnalysisParameter?].self, forKey: .analysisParameters) + var analysisParametersDecoded0:[CleanRoomsClientTypes.AnalysisParameter]? = nil + if let analysisParametersContainer = analysisParametersContainer { + analysisParametersDecoded0 = [CleanRoomsClientTypes.AnalysisParameter]() + for structure0 in analysisParametersContainer { + if let structure0 = structure0 { + analysisParametersDecoded0?.append(structure0) + } + } + } + analysisParameters = analysisParametersDecoded0 } } +extension CleanRoomsClientTypes.AnalysisTemplate: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "AnalysisTemplate(analysisParameters: \(Swift.String(describing: analysisParameters)), arn: \(Swift.String(describing: arn)), collaborationArn: \(Swift.String(describing: collaborationArn)), collaborationId: \(Swift.String(describing: collaborationId)), createTime: \(Swift.String(describing: createTime)), description: \(Swift.String(describing: description)), format: \(Swift.String(describing: format)), id: \(Swift.String(describing: id)), membershipArn: \(Swift.String(describing: membershipArn)), membershipId: \(Swift.String(describing: membershipId)), name: \(Swift.String(describing: name)), schema: \(Swift.String(describing: schema)), updateTime: \(Swift.String(describing: updateTime)), source: \"CONTENT_REDACTED\")"} +} + extension CleanRoomsClientTypes { - /// The multi-party data share environment. The collaboration contains metadata about its purpose and participants. - public struct Collaboration: Swift.Equatable { - /// The unique ARN for the collaboration. + /// The analysis template. + public struct AnalysisTemplate: Swift.Equatable { + /// The parameters of the analysis template. + public var analysisParameters: [CleanRoomsClientTypes.AnalysisParameter]? + /// The Amazon Resource Name (ARN) of the analysis template. /// This member is required. public var arn: Swift.String? - /// The time when the collaboration was created. + /// The unique ARN for the analysis template’s associated collaboration. /// This member is required. - public var createTime: ClientRuntime.Date? - /// The identifier used to reference members of the collaboration. Currently only supports Amazon Web Services account ID. + public var collaborationArn: Swift.String? + /// The unique ID for the associated collaboration of the analysis template. /// This member is required. - public var creatorAccountId: Swift.String? - /// A display name of the collaboration creator. + public var collaborationId: Swift.String? + /// The time that the analysis template was created. /// This member is required. - public var creatorDisplayName: Swift.String? - /// The settings for client-side encryption for cryptographic computing. - public var dataEncryptionMetadata: CleanRoomsClientTypes.DataEncryptionMetadata? - /// A description of the collaboration provided by the collaboration owner. + public var createTime: ClientRuntime.Date? + /// The description of the analysis template. public var description: Swift.String? - /// The unique ID for the collaboration. + /// The format of the analysis template. + /// This member is required. + public var format: CleanRoomsClientTypes.AnalysisFormat? + /// The identifier for the analysis template. /// This member is required. public var id: Swift.String? - /// The status of a member in a collaboration. + /// The Amazon Resource Name (ARN) of the member who created the analysis template. /// This member is required. - public var memberStatus: CleanRoomsClientTypes.MemberStatus? - /// The unique ARN for your membership within the collaboration. public var membershipArn: Swift.String? - /// The unique ID for your membership within the collaboration. + /// The identifier of a member who created the analysis template. + /// This member is required. public var membershipId: Swift.String? - /// A human-readable identifier provided by the collaboration owner. Display names are not unique. + /// The name of the analysis template. /// This member is required. public var name: Swift.String? - /// An indicator as to whether query logging has been enabled or disabled for the collaboration. + /// The entire schema object. /// This member is required. - public var queryLogStatus: CleanRoomsClientTypes.CollaborationQueryLogStatus? - /// The time the collaboration metadata was last updated. + public var schema: CleanRoomsClientTypes.AnalysisSchema? + /// The source of the analysis template. + /// This member is required. + public var source: CleanRoomsClientTypes.AnalysisSource? + /// The time that the analysis template was last updated. /// This member is required. public var updateTime: ClientRuntime.Date? public init( + analysisParameters: [CleanRoomsClientTypes.AnalysisParameter]? = nil, arn: Swift.String? = nil, + collaborationArn: Swift.String? = nil, + collaborationId: Swift.String? = nil, createTime: ClientRuntime.Date? = nil, - creatorAccountId: Swift.String? = nil, - creatorDisplayName: Swift.String? = nil, - dataEncryptionMetadata: CleanRoomsClientTypes.DataEncryptionMetadata? = nil, description: Swift.String? = nil, + format: CleanRoomsClientTypes.AnalysisFormat? = nil, id: Swift.String? = nil, - memberStatus: CleanRoomsClientTypes.MemberStatus? = nil, membershipArn: Swift.String? = nil, membershipId: Swift.String? = nil, name: Swift.String? = nil, - queryLogStatus: CleanRoomsClientTypes.CollaborationQueryLogStatus? = nil, + schema: CleanRoomsClientTypes.AnalysisSchema? = nil, + source: CleanRoomsClientTypes.AnalysisSource? = nil, updateTime: ClientRuntime.Date? = nil ) { + self.analysisParameters = analysisParameters self.arn = arn + self.collaborationArn = collaborationArn + self.collaborationId = collaborationId self.createTime = createTime - self.creatorAccountId = creatorAccountId - self.creatorDisplayName = creatorDisplayName - self.dataEncryptionMetadata = dataEncryptionMetadata self.description = description + self.format = format self.id = id - self.memberStatus = memberStatus self.membershipArn = membershipArn self.membershipId = membershipId self.name = name - self.queryLogStatus = queryLogStatus + self.schema = schema + self.source = source self.updateTime = updateTime } } } -extension CleanRoomsClientTypes { - public enum CollaborationQueryLogStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case disabled - case enabled - case sdkUnknown(Swift.String) - - public static var allCases: [CollaborationQueryLogStatus] { - 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 = CollaborationQueryLogStatus(rawValue: rawValue) ?? CollaborationQueryLogStatus.sdkUnknown(rawValue) - } - } -} - -extension CleanRoomsClientTypes.CollaborationSummary: Swift.Codable { +extension CleanRoomsClientTypes.AnalysisTemplateSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn + case collaborationArn + case collaborationId case createTime - case creatorAccountId - case creatorDisplayName + case description case id - case memberStatus case membershipArn case membershipId case name @@ -1210,21 +1256,21 @@ extension CleanRoomsClientTypes.CollaborationSummary: Swift.Codable { if let arn = self.arn { try encodeContainer.encode(arn, forKey: .arn) } + if let collaborationArn = self.collaborationArn { + try encodeContainer.encode(collaborationArn, forKey: .collaborationArn) + } + if let collaborationId = self.collaborationId { + try encodeContainer.encode(collaborationId, forKey: .collaborationId) + } if let createTime = self.createTime { try encodeContainer.encodeTimestamp(createTime, format: .epochSeconds, forKey: .createTime) } - if let creatorAccountId = self.creatorAccountId { - try encodeContainer.encode(creatorAccountId, forKey: .creatorAccountId) - } - if let creatorDisplayName = self.creatorDisplayName { - try encodeContainer.encode(creatorDisplayName, forKey: .creatorDisplayName) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) } if let id = self.id { try encodeContainer.encode(id, forKey: .id) } - if let memberStatus = self.memberStatus { - try encodeContainer.encode(memberStatus.rawValue, forKey: .memberStatus) - } if let membershipArn = self.membershipArn { try encodeContainer.encode(membershipArn, forKey: .membershipArn) } @@ -1241,44 +1287,1102 @@ extension CleanRoomsClientTypes.CollaborationSummary: Swift.Codable { public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) - id = idDecoded let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) arn = arnDecoded - let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) - name = nameDecoded - let creatorAccountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorAccountId) - creatorAccountId = creatorAccountIdDecoded - let creatorDisplayNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorDisplayName) - creatorDisplayName = creatorDisplayNameDecoded let createTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createTime) createTime = createTimeDecoded + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded let updateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updateTime) updateTime = updateTimeDecoded - let memberStatusDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.MemberStatus.self, forKey: .memberStatus) - memberStatus = memberStatusDecoded - let membershipIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .membershipId) - membershipId = membershipIdDecoded let membershipArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .membershipArn) membershipArn = membershipArnDecoded + let membershipIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .membershipId) + membershipId = membershipIdDecoded + let collaborationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .collaborationArn) + collaborationArn = collaborationArnDecoded + let collaborationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .collaborationId) + collaborationId = collaborationIdDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded } } extension CleanRoomsClientTypes { - /// The metadata of the collaboration. - public struct CollaborationSummary: Swift.Equatable { - /// The ARN of the collaboration. + /// The metadata of the analysis template. + public struct AnalysisTemplateSummary: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the analysis template. /// This member is required. public var arn: Swift.String? - /// The time when the collaboration was created. + /// The unique ARN for the analysis template summary’s associated collaboration. /// This member is required. - public var createTime: ClientRuntime.Date? - /// The identifier used to reference members of the collaboration. Currently only supports Amazon Web Services account ID. + public var collaborationArn: Swift.String? + /// A unique identifier for the collaboration that the analysis template summary belongs to. Currently accepts collaboration ID. /// This member is required. - public var creatorAccountId: Swift.String? - /// The display name of the collaboration creator. + public var collaborationId: Swift.String? + /// The time that the analysis template summary was created. /// This member is required. - public var creatorDisplayName: Swift.String? + public var createTime: ClientRuntime.Date? + /// The description of the analysis template. + public var description: Swift.String? + /// The identifier of the analysis template. + /// This member is required. + public var id: Swift.String? + /// The Amazon Resource Name (ARN) of the member who created the analysis template. + /// This member is required. + public var membershipArn: Swift.String? + /// The identifier for a membership resource. + /// This member is required. + public var membershipId: Swift.String? + /// The name of the analysis template. + /// This member is required. + public var name: Swift.String? + /// The time that the analysis template summary was last updated. + /// This member is required. + public var updateTime: ClientRuntime.Date? + + public init( + arn: Swift.String? = nil, + collaborationArn: Swift.String? = nil, + collaborationId: Swift.String? = nil, + createTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + id: Swift.String? = nil, + membershipArn: Swift.String? = nil, + membershipId: Swift.String? = nil, + name: Swift.String? = nil, + updateTime: ClientRuntime.Date? = nil + ) + { + self.arn = arn + self.collaborationArn = collaborationArn + self.collaborationId = collaborationId + self.createTime = createTime + self.description = description + self.id = id + self.membershipArn = membershipArn + self.membershipId = membershipId + self.name = name + self.updateTime = updateTime + } + } + +} + +extension CleanRoomsClientTypes.BatchGetCollaborationAnalysisTemplateError: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case arn + case code + case message + } + + 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 code = self.code { + try encodeContainer.encode(code, forKey: .code) + } + if let message = self.message { + try encodeContainer.encode(message, forKey: .message) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let codeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .code) + code = codeDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension CleanRoomsClientTypes { + /// Details of errors thrown by the call to retrieve multiple analysis templates within a collaboration by their identifiers. + public struct BatchGetCollaborationAnalysisTemplateError: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the analysis template. + /// This member is required. + public var arn: Swift.String? + /// An error code for the error. + /// This member is required. + public var code: Swift.String? + /// A description of why the call failed. + /// This member is required. + public var message: Swift.String? + + public init( + arn: Swift.String? = nil, + code: Swift.String? = nil, + message: Swift.String? = nil + ) + { + self.arn = arn + self.code = code + self.message = message + } + } + +} + +extension BatchGetCollaborationAnalysisTemplateInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case analysisTemplateArns + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let analysisTemplateArns = analysisTemplateArns { + var analysisTemplateArnsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .analysisTemplateArns) + for analysistemplatearn0 in analysisTemplateArns { + try analysisTemplateArnsContainer.encode(analysistemplatearn0) + } + } + } +} + +extension BatchGetCollaborationAnalysisTemplateInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let collaborationIdentifier = collaborationIdentifier else { + return nil + } + return "/collaborations/\(collaborationIdentifier.urlPercentEncoding())/batch-analysistemplates" + } +} + +public struct BatchGetCollaborationAnalysisTemplateInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) associated with the analysis template within a collaboration. + /// This member is required. + public var analysisTemplateArns: [Swift.String]? + /// A unique identifier for the collaboration that the analysis templates belong to. Currently accepts collaboration ID. + /// This member is required. + public var collaborationIdentifier: Swift.String? + + public init( + analysisTemplateArns: [Swift.String]? = nil, + collaborationIdentifier: Swift.String? = nil + ) + { + self.analysisTemplateArns = analysisTemplateArns + self.collaborationIdentifier = collaborationIdentifier + } +} + +struct BatchGetCollaborationAnalysisTemplateInputBody: Swift.Equatable { + let analysisTemplateArns: [Swift.String]? +} + +extension BatchGetCollaborationAnalysisTemplateInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case analysisTemplateArns + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let analysisTemplateArnsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .analysisTemplateArns) + var analysisTemplateArnsDecoded0:[Swift.String]? = nil + if let analysisTemplateArnsContainer = analysisTemplateArnsContainer { + analysisTemplateArnsDecoded0 = [Swift.String]() + for string0 in analysisTemplateArnsContainer { + if let string0 = string0 { + analysisTemplateArnsDecoded0?.append(string0) + } + } + } + analysisTemplateArns = analysisTemplateArnsDecoded0 + } +} + +public enum BatchGetCollaborationAnalysisTemplateOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension BatchGetCollaborationAnalysisTemplateOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: BatchGetCollaborationAnalysisTemplateOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.collaborationAnalysisTemplates = output.collaborationAnalysisTemplates + self.errors = output.errors + } else { + self.collaborationAnalysisTemplates = nil + self.errors = nil + } + } +} + +public struct BatchGetCollaborationAnalysisTemplateOutputResponse: Swift.Equatable { + /// The retrieved list of analysis templates within a collaboration. + /// This member is required. + public var collaborationAnalysisTemplates: [CleanRoomsClientTypes.CollaborationAnalysisTemplate]? + /// Error reasons for collaboration analysis templates that could not be retrieved. One error is returned for every collaboration analysis template that could not be retrieved. + /// This member is required. + public var errors: [CleanRoomsClientTypes.BatchGetCollaborationAnalysisTemplateError]? + + public init( + collaborationAnalysisTemplates: [CleanRoomsClientTypes.CollaborationAnalysisTemplate]? = nil, + errors: [CleanRoomsClientTypes.BatchGetCollaborationAnalysisTemplateError]? = nil + ) + { + self.collaborationAnalysisTemplates = collaborationAnalysisTemplates + self.errors = errors + } +} + +struct BatchGetCollaborationAnalysisTemplateOutputResponseBody: Swift.Equatable { + let collaborationAnalysisTemplates: [CleanRoomsClientTypes.CollaborationAnalysisTemplate]? + let errors: [CleanRoomsClientTypes.BatchGetCollaborationAnalysisTemplateError]? +} + +extension BatchGetCollaborationAnalysisTemplateOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case collaborationAnalysisTemplates + case errors + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let collaborationAnalysisTemplatesContainer = try containerValues.decodeIfPresent([CleanRoomsClientTypes.CollaborationAnalysisTemplate?].self, forKey: .collaborationAnalysisTemplates) + var collaborationAnalysisTemplatesDecoded0:[CleanRoomsClientTypes.CollaborationAnalysisTemplate]? = nil + if let collaborationAnalysisTemplatesContainer = collaborationAnalysisTemplatesContainer { + collaborationAnalysisTemplatesDecoded0 = [CleanRoomsClientTypes.CollaborationAnalysisTemplate]() + for structure0 in collaborationAnalysisTemplatesContainer { + if let structure0 = structure0 { + collaborationAnalysisTemplatesDecoded0?.append(structure0) + } + } + } + collaborationAnalysisTemplates = collaborationAnalysisTemplatesDecoded0 + let errorsContainer = try containerValues.decodeIfPresent([CleanRoomsClientTypes.BatchGetCollaborationAnalysisTemplateError?].self, forKey: .errors) + var errorsDecoded0:[CleanRoomsClientTypes.BatchGetCollaborationAnalysisTemplateError]? = nil + if let errorsContainer = errorsContainer { + errorsDecoded0 = [CleanRoomsClientTypes.BatchGetCollaborationAnalysisTemplateError]() + for structure0 in errorsContainer { + if let structure0 = structure0 { + errorsDecoded0?.append(structure0) + } + } + } + errors = errorsDecoded0 + } +} + +extension CleanRoomsClientTypes.BatchGetSchemaError: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case code + case message + case name + } + + 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 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 nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let codeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .code) + code = codeDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension CleanRoomsClientTypes { + /// An error describing why a schema could not be fetched. + public struct BatchGetSchemaError: Swift.Equatable { + /// An error code for the error. + /// This member is required. + public var code: Swift.String? + /// An error message for the error. + /// This member is required. + public var message: Swift.String? + /// An error name for the error. + /// This member is required. + public var name: Swift.String? + + public init( + code: Swift.String? = nil, + message: Swift.String? = nil, + name: Swift.String? = nil + ) + { + self.code = code + self.message = message + self.name = name + } + } + +} + +extension BatchGetSchemaInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case names + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let names = names { + var namesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .names) + for tablealias0 in names { + try namesContainer.encode(tablealias0) + } + } + } +} + +extension BatchGetSchemaInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let collaborationIdentifier = collaborationIdentifier else { + return nil + } + return "/collaborations/\(collaborationIdentifier.urlPercentEncoding())/batch-schema" + } +} + +public struct BatchGetSchemaInput: Swift.Equatable { + /// A unique identifier for the collaboration that the schemas belong to. Currently accepts collaboration ID. + /// This member is required. + public var collaborationIdentifier: Swift.String? + /// The names for the schema objects to retrieve.> + /// This member is required. + public var names: [Swift.String]? + + public init( + collaborationIdentifier: Swift.String? = nil, + names: [Swift.String]? = nil + ) + { + self.collaborationIdentifier = collaborationIdentifier + self.names = names + } +} + +struct BatchGetSchemaInputBody: Swift.Equatable { + let names: [Swift.String]? +} + +extension BatchGetSchemaInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case names + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let namesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .names) + var namesDecoded0:[Swift.String]? = nil + if let namesContainer = namesContainer { + namesDecoded0 = [Swift.String]() + for string0 in namesContainer { + if let string0 = string0 { + namesDecoded0?.append(string0) + } + } + } + names = namesDecoded0 + } +} + +public enum BatchGetSchemaOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension BatchGetSchemaOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: BatchGetSchemaOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.errors = output.errors + self.schemas = output.schemas + } else { + self.errors = nil + self.schemas = nil + } + } +} + +public struct BatchGetSchemaOutputResponse: Swift.Equatable { + /// Error reasons for schemas that could not be retrieved. One error is returned for every schema that could not be retrieved. + /// This member is required. + public var errors: [CleanRoomsClientTypes.BatchGetSchemaError]? + /// The retrieved list of schemas. + /// This member is required. + public var schemas: [CleanRoomsClientTypes.Schema]? + + public init( + errors: [CleanRoomsClientTypes.BatchGetSchemaError]? = nil, + schemas: [CleanRoomsClientTypes.Schema]? = nil + ) + { + self.errors = errors + self.schemas = schemas + } +} + +struct BatchGetSchemaOutputResponseBody: Swift.Equatable { + let schemas: [CleanRoomsClientTypes.Schema]? + let errors: [CleanRoomsClientTypes.BatchGetSchemaError]? +} + +extension BatchGetSchemaOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case errors + case schemas + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let schemasContainer = try containerValues.decodeIfPresent([CleanRoomsClientTypes.Schema?].self, forKey: .schemas) + var schemasDecoded0:[CleanRoomsClientTypes.Schema]? = nil + if let schemasContainer = schemasContainer { + schemasDecoded0 = [CleanRoomsClientTypes.Schema]() + for structure0 in schemasContainer { + if let structure0 = structure0 { + schemasDecoded0?.append(structure0) + } + } + } + schemas = schemasDecoded0 + let errorsContainer = try containerValues.decodeIfPresent([CleanRoomsClientTypes.BatchGetSchemaError?].self, forKey: .errors) + var errorsDecoded0:[CleanRoomsClientTypes.BatchGetSchemaError]? = nil + if let errorsContainer = errorsContainer { + errorsDecoded0 = [CleanRoomsClientTypes.BatchGetSchemaError]() + for structure0 in errorsContainer { + if let structure0 = structure0 { + errorsDecoded0?.append(structure0) + } + } + } + errors = errorsDecoded0 + } +} + +extension CleanRoomsClientTypes.Collaboration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case arn + case createTime + case creatorAccountId + case creatorDisplayName + case dataEncryptionMetadata + case description + case id + case memberStatus + case membershipArn + case membershipId + case name + case queryLogStatus + case updateTime + } + + 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 createTime = self.createTime { + try encodeContainer.encodeTimestamp(createTime, format: .epochSeconds, forKey: .createTime) + } + if let creatorAccountId = self.creatorAccountId { + try encodeContainer.encode(creatorAccountId, forKey: .creatorAccountId) + } + if let creatorDisplayName = self.creatorDisplayName { + try encodeContainer.encode(creatorDisplayName, forKey: .creatorDisplayName) + } + if let dataEncryptionMetadata = self.dataEncryptionMetadata { + try encodeContainer.encode(dataEncryptionMetadata, forKey: .dataEncryptionMetadata) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) + } + if let memberStatus = self.memberStatus { + try encodeContainer.encode(memberStatus.rawValue, forKey: .memberStatus) + } + if let membershipArn = self.membershipArn { + try encodeContainer.encode(membershipArn, forKey: .membershipArn) + } + if let membershipId = self.membershipId { + try encodeContainer.encode(membershipId, forKey: .membershipId) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let queryLogStatus = self.queryLogStatus { + try encodeContainer.encode(queryLogStatus.rawValue, forKey: .queryLogStatus) + } + if let updateTime = self.updateTime { + try encodeContainer.encodeTimestamp(updateTime, format: .epochSeconds, forKey: .updateTime) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let creatorAccountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorAccountId) + creatorAccountId = creatorAccountIdDecoded + let creatorDisplayNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorDisplayName) + creatorDisplayName = creatorDisplayNameDecoded + let createTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createTime) + createTime = createTimeDecoded + let updateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updateTime) + updateTime = updateTimeDecoded + let memberStatusDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.MemberStatus.self, forKey: .memberStatus) + memberStatus = memberStatusDecoded + let membershipIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .membershipId) + membershipId = membershipIdDecoded + let membershipArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .membershipArn) + membershipArn = membershipArnDecoded + let dataEncryptionMetadataDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.DataEncryptionMetadata.self, forKey: .dataEncryptionMetadata) + dataEncryptionMetadata = dataEncryptionMetadataDecoded + let queryLogStatusDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.CollaborationQueryLogStatus.self, forKey: .queryLogStatus) + queryLogStatus = queryLogStatusDecoded + } +} + +extension CleanRoomsClientTypes { + /// The multi-party data share environment. The collaboration contains metadata about its purpose and participants. + public struct Collaboration: Swift.Equatable { + /// The unique ARN for the collaboration. + /// This member is required. + public var arn: Swift.String? + /// The time when the collaboration was created. + /// This member is required. + public var createTime: ClientRuntime.Date? + /// The identifier used to reference members of the collaboration. Currently only supports Amazon Web Services account ID. + /// This member is required. + public var creatorAccountId: Swift.String? + /// A display name of the collaboration creator. + /// This member is required. + public var creatorDisplayName: Swift.String? + /// The settings for client-side encryption for cryptographic computing. + public var dataEncryptionMetadata: CleanRoomsClientTypes.DataEncryptionMetadata? + /// A description of the collaboration provided by the collaboration owner. + public var description: Swift.String? + /// The unique ID for the collaboration. + /// This member is required. + public var id: Swift.String? + /// The status of a member in a collaboration. + /// This member is required. + public var memberStatus: CleanRoomsClientTypes.MemberStatus? + /// The unique ARN for your membership within the collaboration. + public var membershipArn: Swift.String? + /// The unique ID for your membership within the collaboration. + public var membershipId: Swift.String? + /// A human-readable identifier provided by the collaboration owner. Display names are not unique. + /// This member is required. + public var name: Swift.String? + /// An indicator as to whether query logging has been enabled or disabled for the collaboration. + /// This member is required. + public var queryLogStatus: CleanRoomsClientTypes.CollaborationQueryLogStatus? + /// The time the collaboration metadata was last updated. + /// This member is required. + public var updateTime: ClientRuntime.Date? + + public init( + arn: Swift.String? = nil, + createTime: ClientRuntime.Date? = nil, + creatorAccountId: Swift.String? = nil, + creatorDisplayName: Swift.String? = nil, + dataEncryptionMetadata: CleanRoomsClientTypes.DataEncryptionMetadata? = nil, + description: Swift.String? = nil, + id: Swift.String? = nil, + memberStatus: CleanRoomsClientTypes.MemberStatus? = nil, + membershipArn: Swift.String? = nil, + membershipId: Swift.String? = nil, + name: Swift.String? = nil, + queryLogStatus: CleanRoomsClientTypes.CollaborationQueryLogStatus? = nil, + updateTime: ClientRuntime.Date? = nil + ) + { + self.arn = arn + self.createTime = createTime + self.creatorAccountId = creatorAccountId + self.creatorDisplayName = creatorDisplayName + self.dataEncryptionMetadata = dataEncryptionMetadata + self.description = description + self.id = id + self.memberStatus = memberStatus + self.membershipArn = membershipArn + self.membershipId = membershipId + self.name = name + self.queryLogStatus = queryLogStatus + self.updateTime = updateTime + } + } + +} + +extension CleanRoomsClientTypes.CollaborationAnalysisTemplate: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case analysisParameters + case arn + case collaborationArn + case collaborationId + case createTime + case creatorAccountId + case description + case format + case id + case name + case schema + case source + case updateTime + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let analysisParameters = analysisParameters { + var analysisParametersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .analysisParameters) + for analysisparameter0 in analysisParameters { + try analysisParametersContainer.encode(analysisparameter0) + } + } + if let arn = self.arn { + try encodeContainer.encode(arn, forKey: .arn) + } + if let collaborationArn = self.collaborationArn { + try encodeContainer.encode(collaborationArn, forKey: .collaborationArn) + } + if let collaborationId = self.collaborationId { + try encodeContainer.encode(collaborationId, forKey: .collaborationId) + } + if let createTime = self.createTime { + try encodeContainer.encodeTimestamp(createTime, format: .epochSeconds, forKey: .createTime) + } + if let creatorAccountId = self.creatorAccountId { + try encodeContainer.encode(creatorAccountId, forKey: .creatorAccountId) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let format = self.format { + try encodeContainer.encode(format.rawValue, forKey: .format) + } + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let schema = self.schema { + try encodeContainer.encode(schema, forKey: .schema) + } + if let source = self.source { + try encodeContainer.encode(source, forKey: .source) + } + if let updateTime = self.updateTime { + try encodeContainer.encodeTimestamp(updateTime, format: .epochSeconds, forKey: .updateTime) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let collaborationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .collaborationId) + collaborationId = collaborationIdDecoded + let collaborationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .collaborationArn) + collaborationArn = collaborationArnDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let creatorAccountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorAccountId) + creatorAccountId = creatorAccountIdDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let createTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createTime) + createTime = createTimeDecoded + let updateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updateTime) + updateTime = updateTimeDecoded + let schemaDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisSchema.self, forKey: .schema) + schema = schemaDecoded + let formatDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisFormat.self, forKey: .format) + format = formatDecoded + let sourceDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisSource.self, forKey: .source) + source = sourceDecoded + let analysisParametersContainer = try containerValues.decodeIfPresent([CleanRoomsClientTypes.AnalysisParameter?].self, forKey: .analysisParameters) + var analysisParametersDecoded0:[CleanRoomsClientTypes.AnalysisParameter]? = nil + if let analysisParametersContainer = analysisParametersContainer { + analysisParametersDecoded0 = [CleanRoomsClientTypes.AnalysisParameter]() + for structure0 in analysisParametersContainer { + if let structure0 = structure0 { + analysisParametersDecoded0?.append(structure0) + } + } + } + analysisParameters = analysisParametersDecoded0 + } +} + +extension CleanRoomsClientTypes.CollaborationAnalysisTemplate: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "CollaborationAnalysisTemplate(analysisParameters: \(Swift.String(describing: analysisParameters)), arn: \(Swift.String(describing: arn)), collaborationArn: \(Swift.String(describing: collaborationArn)), collaborationId: \(Swift.String(describing: collaborationId)), createTime: \(Swift.String(describing: createTime)), creatorAccountId: \(Swift.String(describing: creatorAccountId)), description: \(Swift.String(describing: description)), format: \(Swift.String(describing: format)), id: \(Swift.String(describing: id)), name: \(Swift.String(describing: name)), schema: \(Swift.String(describing: schema)), updateTime: \(Swift.String(describing: updateTime)), source: \"CONTENT_REDACTED\")"} +} + +extension CleanRoomsClientTypes { + /// The analysis template within a collaboration. + public struct CollaborationAnalysisTemplate: Swift.Equatable { + /// The analysis parameters that have been specified in the analysis template. + public var analysisParameters: [CleanRoomsClientTypes.AnalysisParameter]? + /// The Amazon Resource Name (ARN) of the analysis template. + /// This member is required. + public var arn: Swift.String? + /// The unique ARN for the analysis template’s associated collaboration. + /// This member is required. + public var collaborationArn: Swift.String? + /// A unique identifier for the collaboration that the analysis templates belong to. Currently accepts collaboration ID. + /// This member is required. + public var collaborationId: Swift.String? + /// The time that the analysis template within a collaboration was created. + /// This member is required. + public var createTime: ClientRuntime.Date? + /// The identifier used to reference members of the collaboration. Currently only supports Amazon Web Services account ID. + /// This member is required. + public var creatorAccountId: Swift.String? + /// The description of the analysis template. + public var description: Swift.String? + /// The format of the analysis template in the collaboration. + /// This member is required. + public var format: CleanRoomsClientTypes.AnalysisFormat? + /// The identifier of the analysis template. + /// This member is required. + public var id: Swift.String? + /// The name of the analysis template. + /// This member is required. + public var name: Swift.String? + /// The entire schema object. + /// This member is required. + public var schema: CleanRoomsClientTypes.AnalysisSchema? + /// The source of the analysis template within a collaboration. + /// This member is required. + public var source: CleanRoomsClientTypes.AnalysisSource? + /// The time that the analysis template in the collaboration was last updated. + /// This member is required. + public var updateTime: ClientRuntime.Date? + + public init( + analysisParameters: [CleanRoomsClientTypes.AnalysisParameter]? = nil, + arn: Swift.String? = nil, + collaborationArn: Swift.String? = nil, + collaborationId: Swift.String? = nil, + createTime: ClientRuntime.Date? = nil, + creatorAccountId: Swift.String? = nil, + description: Swift.String? = nil, + format: CleanRoomsClientTypes.AnalysisFormat? = nil, + id: Swift.String? = nil, + name: Swift.String? = nil, + schema: CleanRoomsClientTypes.AnalysisSchema? = nil, + source: CleanRoomsClientTypes.AnalysisSource? = nil, + updateTime: ClientRuntime.Date? = nil + ) + { + self.analysisParameters = analysisParameters + self.arn = arn + self.collaborationArn = collaborationArn + self.collaborationId = collaborationId + self.createTime = createTime + self.creatorAccountId = creatorAccountId + self.description = description + self.format = format + self.id = id + self.name = name + self.schema = schema + self.source = source + self.updateTime = updateTime + } + } + +} + +extension CleanRoomsClientTypes.CollaborationAnalysisTemplateSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case arn + case collaborationArn + case collaborationId + case createTime + case creatorAccountId + case description + case id + case name + case updateTime + } + + 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 collaborationArn = self.collaborationArn { + try encodeContainer.encode(collaborationArn, forKey: .collaborationArn) + } + if let collaborationId = self.collaborationId { + try encodeContainer.encode(collaborationId, forKey: .collaborationId) + } + if let createTime = self.createTime { + try encodeContainer.encodeTimestamp(createTime, format: .epochSeconds, forKey: .createTime) + } + if let creatorAccountId = self.creatorAccountId { + try encodeContainer.encode(creatorAccountId, forKey: .creatorAccountId) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let updateTime = self.updateTime { + try encodeContainer.encodeTimestamp(updateTime, format: .epochSeconds, forKey: .updateTime) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let createTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createTime) + createTime = createTimeDecoded + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let updateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updateTime) + updateTime = updateTimeDecoded + let collaborationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .collaborationArn) + collaborationArn = collaborationArnDecoded + let collaborationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .collaborationId) + collaborationId = collaborationIdDecoded + let creatorAccountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorAccountId) + creatorAccountId = creatorAccountIdDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + } +} + +extension CleanRoomsClientTypes { + /// The metadata of the analysis template within a collaboration. + public struct CollaborationAnalysisTemplateSummary: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the analysis template. + /// This member is required. + public var arn: Swift.String? + /// The unique ARN for the analysis template’s associated collaboration. + /// This member is required. + public var collaborationArn: Swift.String? + /// A unique identifier for the collaboration that the analysis templates belong to. Currently accepts collaboration ID. + /// This member is required. + public var collaborationId: Swift.String? + /// The time that the summary of the analysis template in a collaboration was created. + /// This member is required. + public var createTime: ClientRuntime.Date? + /// The identifier used to reference members of the collaboration. Currently only supports Amazon Web Services account ID. + /// This member is required. + public var creatorAccountId: Swift.String? + /// The description of the analysis template. + public var description: Swift.String? + /// The identifier of the analysis template. + /// This member is required. + public var id: Swift.String? + /// The name of the analysis template. + /// This member is required. + public var name: Swift.String? + /// The time that the summary of the analysis template in the collaboration was last updated. + /// This member is required. + public var updateTime: ClientRuntime.Date? + + public init( + arn: Swift.String? = nil, + collaborationArn: Swift.String? = nil, + collaborationId: Swift.String? = nil, + createTime: ClientRuntime.Date? = nil, + creatorAccountId: Swift.String? = nil, + description: Swift.String? = nil, + id: Swift.String? = nil, + name: Swift.String? = nil, + updateTime: ClientRuntime.Date? = nil + ) + { + self.arn = arn + self.collaborationArn = collaborationArn + self.collaborationId = collaborationId + self.createTime = createTime + self.creatorAccountId = creatorAccountId + self.description = description + self.id = id + self.name = name + self.updateTime = updateTime + } + } + +} + +extension CleanRoomsClientTypes { + public enum CollaborationQueryLogStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case disabled + case enabled + case sdkUnknown(Swift.String) + + public static var allCases: [CollaborationQueryLogStatus] { + 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 = CollaborationQueryLogStatus(rawValue: rawValue) ?? CollaborationQueryLogStatus.sdkUnknown(rawValue) + } + } +} + +extension CleanRoomsClientTypes.CollaborationSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case arn + case createTime + case creatorAccountId + case creatorDisplayName + case id + case memberStatus + case membershipArn + case membershipId + case name + case updateTime + } + + 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 createTime = self.createTime { + try encodeContainer.encodeTimestamp(createTime, format: .epochSeconds, forKey: .createTime) + } + if let creatorAccountId = self.creatorAccountId { + try encodeContainer.encode(creatorAccountId, forKey: .creatorAccountId) + } + if let creatorDisplayName = self.creatorDisplayName { + try encodeContainer.encode(creatorDisplayName, forKey: .creatorDisplayName) + } + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) + } + if let memberStatus = self.memberStatus { + try encodeContainer.encode(memberStatus.rawValue, forKey: .memberStatus) + } + if let membershipArn = self.membershipArn { + try encodeContainer.encode(membershipArn, forKey: .membershipArn) + } + if let membershipId = self.membershipId { + try encodeContainer.encode(membershipId, forKey: .membershipId) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let updateTime = self.updateTime { + try encodeContainer.encodeTimestamp(updateTime, format: .epochSeconds, forKey: .updateTime) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let creatorAccountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorAccountId) + creatorAccountId = creatorAccountIdDecoded + let creatorDisplayNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorDisplayName) + creatorDisplayName = creatorDisplayNameDecoded + let createTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createTime) + createTime = createTimeDecoded + let updateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updateTime) + updateTime = updateTimeDecoded + let memberStatusDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.MemberStatus.self, forKey: .memberStatus) + memberStatus = memberStatusDecoded + let membershipIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .membershipId) + membershipId = membershipIdDecoded + let membershipArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .membershipArn) + membershipArn = membershipArnDecoded + } +} + +extension CleanRoomsClientTypes { + /// The metadata of the collaboration. + public struct CollaborationSummary: Swift.Equatable { + /// The ARN of the collaboration. + /// This member is required. + public var arn: Swift.String? + /// The time when the collaboration was created. + /// This member is required. + public var createTime: ClientRuntime.Date? + /// The identifier used to reference members of the collaboration. Currently only supports Amazon Web Services account ID. + /// This member is required. + public var creatorAccountId: Swift.String? + /// The display name of the collaboration creator. + /// This member is required. + public var creatorDisplayName: Swift.String? /// The identifier for the collaboration. /// This member is required. public var id: Swift.String? @@ -1477,7 +2581,7 @@ extension CleanRoomsClientTypes { /// The analysis method for the configured table. The only valid value is currently `DIRECT_QUERY`. /// This member is required. public var analysisMethod: CleanRoomsClientTypes.AnalysisMethod? - /// The types of analysis rules associated with this configured table. Valid values are `AGGREGATION` and `LIST`. Currently, only one analysis rule may be associated with a configured table. + /// The types of analysis rules associated with this configured table. Currently, only one analysis rule may be associated with a configured table. /// This member is required. public var analysisRuleTypes: [CleanRoomsClientTypes.ConfiguredTableAnalysisRuleType]? /// The unique ARN for the configured table. @@ -1593,7 +2697,7 @@ extension CleanRoomsClientTypes { /// The policy that controls SQL query rules. /// This member is required. public var policy: CleanRoomsClientTypes.ConfiguredTableAnalysisRulePolicy? - /// The type of configured table analysis rule. Valid values are `AGGREGATION` and `LIST`. + /// The type of configured table analysis rule. /// This member is required. public var type: CleanRoomsClientTypes.ConfiguredTableAnalysisRuleType? /// The time the configured table analysis rule was last updated. @@ -1660,6 +2764,7 @@ extension CleanRoomsClientTypes { extension CleanRoomsClientTypes.ConfiguredTableAnalysisRulePolicyV1: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case aggregation + case custom case list case sdkUnknown } @@ -1669,6 +2774,8 @@ extension CleanRoomsClientTypes.ConfiguredTableAnalysisRulePolicyV1: Swift.Codab switch self { case let .aggregation(aggregation): try container.encode(aggregation, forKey: .aggregation) + case let .custom(custom): + try container.encode(custom, forKey: .custom) case let .list(list): try container.encode(list, forKey: .list) case let .sdkUnknown(sdkUnknown): @@ -1688,6 +2795,11 @@ extension CleanRoomsClientTypes.ConfiguredTableAnalysisRulePolicyV1: Swift.Codab self = .aggregation(aggregation) return } + let customDecoded = try values.decodeIfPresent(CleanRoomsClientTypes.AnalysisRuleCustom.self, forKey: .custom) + if let custom = customDecoded { + self = .custom(custom) + return + } self = .sdkUnknown("") } } @@ -1699,6 +2811,8 @@ extension CleanRoomsClientTypes { case list(CleanRoomsClientTypes.AnalysisRuleList) /// Analysis rule type that enables only aggregation queries on a configured table. case aggregation(CleanRoomsClientTypes.AnalysisRuleAggregation) + /// A type of analysis rule that enables the table owner to approve custom SQL queries on their configured tables. + case custom(CleanRoomsClientTypes.AnalysisRuleCustom) case sdkUnknown(Swift.String) } @@ -1707,12 +2821,14 @@ extension CleanRoomsClientTypes { extension CleanRoomsClientTypes { public enum ConfiguredTableAnalysisRuleType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case aggregation + case custom case list case sdkUnknown(Swift.String) public static var allCases: [ConfiguredTableAnalysisRuleType] { return [ .aggregation, + .custom, .list, .sdkUnknown("") ] @@ -1724,6 +2840,7 @@ extension CleanRoomsClientTypes { public var rawValue: Swift.String { switch self { case .aggregation: return "AGGREGATION" + case .custom: return "CUSTOM" case .list: return "LIST" case let .sdkUnknown(s): return s } @@ -2158,73 +3275,278 @@ public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AW resourceType: CleanRoomsClientTypes.ResourceType? = nil ) { - self.properties.message = message - self.properties.reason = reason - self.properties.resourceId = resourceId - self.properties.resourceType = resourceType + self.properties.message = message + self.properties.reason = reason + self.properties.resourceId = resourceId + self.properties.resourceType = resourceType + } +} + +struct ConflictExceptionBody: Swift.Equatable { + let message: Swift.String? + let resourceId: Swift.String? + let resourceType: CleanRoomsClientTypes.ResourceType? + let reason: CleanRoomsClientTypes.ConflictExceptionReason? +} + +extension ConflictExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case message + case reason + case resourceId + case resourceType + } + + 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 resourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceId) + resourceId = resourceIdDecoded + let resourceTypeDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.ResourceType.self, forKey: .resourceType) + resourceType = resourceTypeDecoded + let reasonDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.ConflictExceptionReason.self, forKey: .reason) + reason = reasonDecoded + } +} + +extension CleanRoomsClientTypes { + public enum ConflictExceptionReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case alreadyExists + case invalidState + case subresourcesExist + case sdkUnknown(Swift.String) + + public static var allCases: [ConflictExceptionReason] { + return [ + .alreadyExists, + .invalidState, + .subresourcesExist, + .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 .alreadyExists: return "ALREADY_EXISTS" + case .invalidState: return "INVALID_STATE" + case .subresourcesExist: return "SUBRESOURCES_EXIST" + 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 = ConflictExceptionReason(rawValue: rawValue) ?? ConflictExceptionReason.sdkUnknown(rawValue) + } + } +} + +extension CreateAnalysisTemplateInput: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "CreateAnalysisTemplateInput(analysisParameters: \(Swift.String(describing: analysisParameters)), description: \(Swift.String(describing: description)), format: \(Swift.String(describing: format)), membershipIdentifier: \(Swift.String(describing: membershipIdentifier)), name: \(Swift.String(describing: name)), tags: \(Swift.String(describing: tags)), source: \"CONTENT_REDACTED\")"} +} + +extension CreateAnalysisTemplateInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case analysisParameters + case description + case format + case name + case source + case tags + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let analysisParameters = analysisParameters { + var analysisParametersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .analysisParameters) + for analysisparameter0 in analysisParameters { + try analysisParametersContainer.encode(analysisparameter0) + } + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let format = self.format { + try encodeContainer.encode(format.rawValue, forKey: .format) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let source = self.source { + try encodeContainer.encode(source, forKey: .source) + } + if let tags = tags { + var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) + for (dictKey0, tagMap0) in tags { + try tagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + } +} + +extension CreateAnalysisTemplateInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let membershipIdentifier = membershipIdentifier else { + return nil + } + return "/memberships/\(membershipIdentifier.urlPercentEncoding())/analysistemplates" + } +} + +public struct CreateAnalysisTemplateInput: Swift.Equatable { + /// The parameters of the analysis template. + public var analysisParameters: [CleanRoomsClientTypes.AnalysisParameter]? + /// The description of the analysis template. + public var description: Swift.String? + /// The format of the analysis template. + /// This member is required. + public var format: CleanRoomsClientTypes.AnalysisFormat? + /// The identifier for a membership resource. + /// This member is required. + public var membershipIdentifier: Swift.String? + /// The name of the analysis template. + /// This member is required. + public var name: Swift.String? + /// The information in the analysis template. Currently supports text, the query text for the analysis template. + /// This member is required. + public var source: CleanRoomsClientTypes.AnalysisSource? + /// An optional label that you can assign to a resource when you create it. Each tag consists of a key and an optional value, both of which you define. When you use tagging, you can also use tag-based access control in IAM policies to control access to this resource. + public var tags: [Swift.String:Swift.String]? + + public init( + analysisParameters: [CleanRoomsClientTypes.AnalysisParameter]? = nil, + description: Swift.String? = nil, + format: CleanRoomsClientTypes.AnalysisFormat? = nil, + membershipIdentifier: Swift.String? = nil, + name: Swift.String? = nil, + source: CleanRoomsClientTypes.AnalysisSource? = nil, + tags: [Swift.String:Swift.String]? = nil + ) + { + self.analysisParameters = analysisParameters + self.description = description + self.format = format + self.membershipIdentifier = membershipIdentifier + self.name = name + self.source = source + self.tags = tags + } +} + +struct CreateAnalysisTemplateInputBody: Swift.Equatable { + let description: Swift.String? + let name: Swift.String? + let format: CleanRoomsClientTypes.AnalysisFormat? + let source: CleanRoomsClientTypes.AnalysisSource? + let tags: [Swift.String:Swift.String]? + let analysisParameters: [CleanRoomsClientTypes.AnalysisParameter]? +} + +extension CreateAnalysisTemplateInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case analysisParameters + case description + case format + case name + case source + case tags + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let formatDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisFormat.self, forKey: .format) + format = formatDecoded + let sourceDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisSource.self, forKey: .source) + source = sourceDecoded + 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 analysisParametersContainer = try containerValues.decodeIfPresent([CleanRoomsClientTypes.AnalysisParameter?].self, forKey: .analysisParameters) + var analysisParametersDecoded0:[CleanRoomsClientTypes.AnalysisParameter]? = nil + if let analysisParametersContainer = analysisParametersContainer { + analysisParametersDecoded0 = [CleanRoomsClientTypes.AnalysisParameter]() + for structure0 in analysisParametersContainer { + if let structure0 = structure0 { + analysisParametersDecoded0?.append(structure0) + } + } + } + analysisParameters = analysisParametersDecoded0 + } +} + +public enum CreateAnalysisTemplateOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension CreateAnalysisTemplateOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: CreateAnalysisTemplateOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.analysisTemplate = output.analysisTemplate + } else { + self.analysisTemplate = nil + } + } +} + +public struct CreateAnalysisTemplateOutputResponse: Swift.Equatable { + /// The analysis template. + /// This member is required. + public var analysisTemplate: CleanRoomsClientTypes.AnalysisTemplate? + + public init( + analysisTemplate: CleanRoomsClientTypes.AnalysisTemplate? = nil + ) + { + self.analysisTemplate = analysisTemplate } } -struct ConflictExceptionBody: Swift.Equatable { - let message: Swift.String? - let resourceId: Swift.String? - let resourceType: CleanRoomsClientTypes.ResourceType? - let reason: CleanRoomsClientTypes.ConflictExceptionReason? +struct CreateAnalysisTemplateOutputResponseBody: Swift.Equatable { + let analysisTemplate: CleanRoomsClientTypes.AnalysisTemplate? } -extension ConflictExceptionBody: Swift.Decodable { +extension CreateAnalysisTemplateOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message - case reason - case resourceId - case resourceType + case analysisTemplate } 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 resourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceId) - resourceId = resourceIdDecoded - let resourceTypeDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.ResourceType.self, forKey: .resourceType) - resourceType = resourceTypeDecoded - let reasonDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.ConflictExceptionReason.self, forKey: .reason) - reason = reasonDecoded - } -} - -extension CleanRoomsClientTypes { - public enum ConflictExceptionReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case alreadyExists - case invalidState - case subresourcesExist - case sdkUnknown(Swift.String) - - public static var allCases: [ConflictExceptionReason] { - return [ - .alreadyExists, - .invalidState, - .subresourcesExist, - .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 .alreadyExists: return "ALREADY_EXISTS" - case .invalidState: return "INVALID_STATE" - case .subresourcesExist: return "SUBRESOURCES_EXIST" - 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 = ConflictExceptionReason(rawValue: rawValue) ?? ConflictExceptionReason.sdkUnknown(rawValue) - } + let analysisTemplateDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisTemplate.self, forKey: .analysisTemplate) + analysisTemplate = analysisTemplateDecoded } } @@ -2487,7 +3809,7 @@ public struct CreateConfiguredTableAnalysisRuleInput: Swift.Equatable { /// The entire created configured table analysis rule object. /// This member is required. public var analysisRulePolicy: CleanRoomsClientTypes.ConfiguredTableAnalysisRulePolicy? - /// The type of analysis rule. Valid values are AGGREGATION and LIST. + /// The type of analysis rule. /// This member is required. public var analysisRuleType: CleanRoomsClientTypes.ConfiguredTableAnalysisRuleType? /// The identifier for the configured table to create the analysis rule for. Currently accepts the configured table ID. @@ -3164,6 +4486,70 @@ extension CleanRoomsClientTypes { } +extension DeleteAnalysisTemplateInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let membershipIdentifier = membershipIdentifier else { + return nil + } + guard let analysisTemplateIdentifier = analysisTemplateIdentifier else { + return nil + } + return "/memberships/\(membershipIdentifier.urlPercentEncoding())/analysistemplates/\(analysisTemplateIdentifier.urlPercentEncoding())" + } +} + +public struct DeleteAnalysisTemplateInput: Swift.Equatable { + /// The identifier for the analysis template resource. + /// This member is required. + public var analysisTemplateIdentifier: Swift.String? + /// The identifier for a membership resource. + /// This member is required. + public var membershipIdentifier: Swift.String? + + public init( + analysisTemplateIdentifier: Swift.String? = nil, + membershipIdentifier: Swift.String? = nil + ) + { + self.analysisTemplateIdentifier = analysisTemplateIdentifier + self.membershipIdentifier = membershipIdentifier + } +} + +struct DeleteAnalysisTemplateInputBody: Swift.Equatable { +} + +extension DeleteAnalysisTemplateInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteAnalysisTemplateOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteAnalysisTemplateOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct DeleteAnalysisTemplateOutputResponse: Swift.Equatable { + + public init() { } +} + extension DeleteCollaborationInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let collaborationIdentifier = collaborationIdentifier else { @@ -3441,19 +4827,172 @@ public struct DeleteMemberInput: Swift.Equatable { struct DeleteMemberInputBody: Swift.Equatable { } -extension DeleteMemberInputBody: Swift.Decodable { +extension DeleteMemberInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteMemberOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteMemberOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct DeleteMemberOutputResponse: Swift.Equatable { + + public init() { } +} + +extension DeleteMembershipInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let membershipIdentifier = membershipIdentifier else { + return nil + } + return "/memberships/\(membershipIdentifier.urlPercentEncoding())" + } +} + +public struct DeleteMembershipInput: Swift.Equatable { + /// The identifier for a membership resource. + /// This member is required. + public var membershipIdentifier: Swift.String? + + public init( + membershipIdentifier: Swift.String? = nil + ) + { + self.membershipIdentifier = membershipIdentifier + } +} + +struct DeleteMembershipInputBody: Swift.Equatable { +} + +extension DeleteMembershipInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteMembershipOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteMembershipOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct DeleteMembershipOutputResponse: Swift.Equatable { + + public init() { } +} + +extension CleanRoomsClientTypes { + public enum FilterableMemberStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case active + case invited + case sdkUnknown(Swift.String) + + public static var allCases: [FilterableMemberStatus] { + return [ + .active, + .invited, + .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 .invited: return "INVITED" + 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 = FilterableMemberStatus(rawValue: rawValue) ?? FilterableMemberStatus.sdkUnknown(rawValue) + } + } +} + +extension GetAnalysisTemplateInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let membershipIdentifier = membershipIdentifier else { + return nil + } + guard let analysisTemplateIdentifier = analysisTemplateIdentifier else { + return nil + } + return "/memberships/\(membershipIdentifier.urlPercentEncoding())/analysistemplates/\(analysisTemplateIdentifier.urlPercentEncoding())" + } +} + +public struct GetAnalysisTemplateInput: Swift.Equatable { + /// The identifier for the analysis template resource. + /// This member is required. + public var analysisTemplateIdentifier: Swift.String? + /// The identifier for a membership resource. + /// This member is required. + public var membershipIdentifier: Swift.String? + + public init( + analysisTemplateIdentifier: Swift.String? = nil, + membershipIdentifier: Swift.String? = nil + ) + { + self.analysisTemplateIdentifier = analysisTemplateIdentifier + self.membershipIdentifier = membershipIdentifier + } +} + +struct GetAnalysisTemplateInputBody: Swift.Equatable { +} + +extension GetAnalysisTemplateInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DeleteMemberOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum GetAnalysisTemplateOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -3463,54 +5002,92 @@ public enum DeleteMemberOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DeleteMemberOutputResponse: ClientRuntime.HttpResponseBinding { +extension GetAnalysisTemplateOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetAnalysisTemplateOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.analysisTemplate = output.analysisTemplate + } else { + self.analysisTemplate = nil + } } } -public struct DeleteMemberOutputResponse: Swift.Equatable { +public struct GetAnalysisTemplateOutputResponse: Swift.Equatable { + /// The analysis template. + /// This member is required. + public var analysisTemplate: CleanRoomsClientTypes.AnalysisTemplate? - public init() { } + public init( + analysisTemplate: CleanRoomsClientTypes.AnalysisTemplate? = nil + ) + { + self.analysisTemplate = analysisTemplate + } } -extension DeleteMembershipInput: ClientRuntime.URLPathProvider { +struct GetAnalysisTemplateOutputResponseBody: Swift.Equatable { + let analysisTemplate: CleanRoomsClientTypes.AnalysisTemplate? +} + +extension GetAnalysisTemplateOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case analysisTemplate + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let analysisTemplateDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisTemplate.self, forKey: .analysisTemplate) + analysisTemplate = analysisTemplateDecoded + } +} + +extension GetCollaborationAnalysisTemplateInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let membershipIdentifier = membershipIdentifier else { + guard let collaborationIdentifier = collaborationIdentifier else { return nil } - return "/memberships/\(membershipIdentifier.urlPercentEncoding())" + guard let analysisTemplateArn = analysisTemplateArn else { + return nil + } + return "/collaborations/\(collaborationIdentifier.urlPercentEncoding())/analysistemplates/\(analysisTemplateArn.urlPercentEncoding())" } } -public struct DeleteMembershipInput: Swift.Equatable { - /// The identifier for a membership resource. +public struct GetCollaborationAnalysisTemplateInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) associated with the analysis template within a collaboration. /// This member is required. - public var membershipIdentifier: Swift.String? + public var analysisTemplateArn: Swift.String? + /// A unique identifier for the collaboration that the analysis templates belong to. Currently accepts collaboration ID. + /// This member is required. + public var collaborationIdentifier: Swift.String? public init( - membershipIdentifier: Swift.String? = nil + analysisTemplateArn: Swift.String? = nil, + collaborationIdentifier: Swift.String? = nil ) { - self.membershipIdentifier = membershipIdentifier + self.analysisTemplateArn = analysisTemplateArn + self.collaborationIdentifier = collaborationIdentifier } } -struct DeleteMembershipInputBody: Swift.Equatable { +struct GetCollaborationAnalysisTemplateInputBody: Swift.Equatable { } -extension DeleteMembershipInputBody: Swift.Decodable { +extension GetCollaborationAnalysisTemplateInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DeleteMembershipOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum GetCollaborationAnalysisTemplateOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -3520,45 +5097,44 @@ public enum DeleteMembershipOutputError: ClientRuntime.HttpResponseErrorBinding } } -extension DeleteMembershipOutputResponse: ClientRuntime.HttpResponseBinding { +extension GetCollaborationAnalysisTemplateOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetCollaborationAnalysisTemplateOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.collaborationAnalysisTemplate = output.collaborationAnalysisTemplate + } else { + self.collaborationAnalysisTemplate = nil + } } } -public struct DeleteMembershipOutputResponse: Swift.Equatable { +public struct GetCollaborationAnalysisTemplateOutputResponse: Swift.Equatable { + /// The analysis template within a collaboration. + /// This member is required. + public var collaborationAnalysisTemplate: CleanRoomsClientTypes.CollaborationAnalysisTemplate? - public init() { } + public init( + collaborationAnalysisTemplate: CleanRoomsClientTypes.CollaborationAnalysisTemplate? = nil + ) + { + self.collaborationAnalysisTemplate = collaborationAnalysisTemplate + } } -extension CleanRoomsClientTypes { - public enum FilterableMemberStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case active - case invited - case sdkUnknown(Swift.String) +struct GetCollaborationAnalysisTemplateOutputResponseBody: Swift.Equatable { + let collaborationAnalysisTemplate: CleanRoomsClientTypes.CollaborationAnalysisTemplate? +} - public static var allCases: [FilterableMemberStatus] { - return [ - .active, - .invited, - .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 .invited: return "INVITED" - 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 = FilterableMemberStatus(rawValue: rawValue) ?? FilterableMemberStatus.sdkUnknown(rawValue) - } +extension GetCollaborationAnalysisTemplateOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case collaborationAnalysisTemplate + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let collaborationAnalysisTemplateDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.CollaborationAnalysisTemplate.self, forKey: .collaborationAnalysisTemplate) + collaborationAnalysisTemplate = collaborationAnalysisTemplateDecoded } } @@ -4169,87 +5745,362 @@ public enum GetSchemaAnalysisRuleOutputError: ClientRuntime.HttpResponseErrorBin } } -extension GetSchemaAnalysisRuleOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { +extension GetSchemaAnalysisRuleOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetSchemaAnalysisRuleOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.analysisRule = output.analysisRule + } else { + self.analysisRule = nil + } + } +} + +public struct GetSchemaAnalysisRuleOutputResponse: Swift.Equatable { + /// A specification about how data from the configured table can be used. + /// This member is required. + public var analysisRule: CleanRoomsClientTypes.AnalysisRule? + + public init( + analysisRule: CleanRoomsClientTypes.AnalysisRule? = nil + ) + { + self.analysisRule = analysisRule + } +} + +struct GetSchemaAnalysisRuleOutputResponseBody: Swift.Equatable { + let analysisRule: CleanRoomsClientTypes.AnalysisRule? +} + +extension GetSchemaAnalysisRuleOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case analysisRule + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let analysisRuleDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisRule.self, forKey: .analysisRule) + analysisRule = analysisRuleDecoded + } +} + +extension GetSchemaInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let collaborationIdentifier = collaborationIdentifier else { + return nil + } + guard let name = name else { + return nil + } + return "/collaborations/\(collaborationIdentifier.urlPercentEncoding())/schemas/\(name.urlPercentEncoding())" + } +} + +public struct GetSchemaInput: Swift.Equatable { + /// A unique identifier for the collaboration that the schema belongs to. Currently accepts a collaboration ID. + /// This member is required. + public var collaborationIdentifier: Swift.String? + /// The name of the relation to retrieve the schema for. + /// This member is required. + public var name: Swift.String? + + public init( + collaborationIdentifier: Swift.String? = nil, + name: Swift.String? = nil + ) + { + self.collaborationIdentifier = collaborationIdentifier + self.name = name + } +} + +struct GetSchemaInputBody: Swift.Equatable { +} + +extension GetSchemaInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum GetSchemaOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetSchemaOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetSchemaOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.schema = output.schema + } else { + self.schema = nil + } + } +} + +public struct GetSchemaOutputResponse: Swift.Equatable { + /// The entire schema object. + /// This member is required. + public var schema: CleanRoomsClientTypes.Schema? + + public init( + schema: CleanRoomsClientTypes.Schema? = nil + ) + { + self.schema = schema + } +} + +struct GetSchemaOutputResponseBody: Swift.Equatable { + let schema: CleanRoomsClientTypes.Schema? +} + +extension GetSchemaOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case schema + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let schemaDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.Schema.self, forKey: .schema) + schema = schemaDecoded + } +} + +extension CleanRoomsClientTypes.GlueTableReference: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case databaseName + case tableName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let databaseName = self.databaseName { + try encodeContainer.encode(databaseName, forKey: .databaseName) + } + if let tableName = self.tableName { + try encodeContainer.encode(tableName, forKey: .tableName) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tableNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .tableName) + tableName = tableNameDecoded + let databaseNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .databaseName) + databaseName = databaseNameDecoded + } +} + +extension CleanRoomsClientTypes { + /// A reference to a table within an Glue data catalog. + public struct GlueTableReference: Swift.Equatable { + /// The name of the database the Glue table belongs to. + /// This member is required. + public var databaseName: Swift.String? + /// The name of the Glue table. + /// This member is required. + public var tableName: Swift.String? + + public init( + databaseName: Swift.String? = nil, + tableName: Swift.String? = nil + ) + { + self.databaseName = databaseName + self.tableName = tableName + } + } + +} + +extension InternalServerException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: GetSchemaAnalysisRuleOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.analysisRule = output.analysisRule + let output: InternalServerExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message } else { - self.analysisRule = nil + self.properties.message = nil } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message } } -public struct GetSchemaAnalysisRuleOutputResponse: Swift.Equatable { - /// A specification about how data from the configured table can be used. - /// This member is required. - public var analysisRule: CleanRoomsClientTypes.AnalysisRule? +/// Unexpected error during processing of request. +public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "InternalServerException" } + public static var fault: ErrorFault { .server } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? public init( - analysisRule: CleanRoomsClientTypes.AnalysisRule? = nil + message: Swift.String? = nil ) { - self.analysisRule = analysisRule + self.properties.message = message } } -struct GetSchemaAnalysisRuleOutputResponseBody: Swift.Equatable { - let analysisRule: CleanRoomsClientTypes.AnalysisRule? +struct InternalServerExceptionBody: Swift.Equatable { + let message: Swift.String? } -extension GetSchemaAnalysisRuleOutputResponseBody: Swift.Decodable { +extension InternalServerExceptionBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case analysisRule + case message } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let analysisRuleDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisRule.self, forKey: .analysisRule) - analysisRule = analysisRuleDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded } } -extension GetSchemaInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let collaborationIdentifier = collaborationIdentifier else { - return nil +extension CleanRoomsClientTypes { + public enum JoinOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case and + case or + case sdkUnknown(Swift.String) + + public static var allCases: [JoinOperator] { + return [ + .and, + .or, + .sdkUnknown("") + ] } - guard let name = name else { + 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 .and: return "AND" + case .or: return "OR" + 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 = JoinOperator(rawValue: rawValue) ?? JoinOperator.sdkUnknown(rawValue) + } + } +} + +extension CleanRoomsClientTypes { + public enum JoinRequiredOption: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case queryRunner + case sdkUnknown(Swift.String) + + public static var allCases: [JoinRequiredOption] { + return [ + .queryRunner, + .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 .queryRunner: return "QUERY_RUNNER" + 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 = JoinRequiredOption(rawValue: rawValue) ?? JoinRequiredOption.sdkUnknown(rawValue) + } + } +} + +extension ListAnalysisTemplatesInput: 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 ListAnalysisTemplatesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let membershipIdentifier = membershipIdentifier else { return nil } - return "/collaborations/\(collaborationIdentifier.urlPercentEncoding())/schemas/\(name.urlPercentEncoding())" + return "/memberships/\(membershipIdentifier.urlPercentEncoding())/analysistemplates" } } -public struct GetSchemaInput: Swift.Equatable { - /// A unique identifier for the collaboration that the schema belongs to. Currently accepts a collaboration ID. - /// This member is required. - public var collaborationIdentifier: Swift.String? - /// The name of the relation to retrieve the schema for. +public struct ListAnalysisTemplatesInput: Swift.Equatable { + /// The maximum size of the results that is returned per call. + public var maxResults: Swift.Int? + /// The identifier for a membership resource. /// This member is required. - public var name: Swift.String? + public var membershipIdentifier: Swift.String? + /// The token value retrieved from a previous call to access the next page of results. + public var nextToken: Swift.String? public init( - collaborationIdentifier: Swift.String? = nil, - name: Swift.String? = nil + maxResults: Swift.Int? = nil, + membershipIdentifier: Swift.String? = nil, + nextToken: Swift.String? = nil ) { - self.collaborationIdentifier = collaborationIdentifier - self.name = name + self.maxResults = maxResults + self.membershipIdentifier = membershipIdentifier + self.nextToken = nextToken } } -struct GetSchemaInputBody: Swift.Equatable { +struct ListAnalysisTemplatesInputBody: Swift.Equatable { } -extension GetSchemaInputBody: Swift.Decodable { +extension ListAnalysisTemplatesInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum GetSchemaOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListAnalysisTemplatesOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -4264,207 +6115,194 @@ public enum GetSchemaOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension GetSchemaOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListAnalysisTemplatesOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: GetSchemaOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.schema = output.schema + let output: ListAnalysisTemplatesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.analysisTemplateSummaries = output.analysisTemplateSummaries + self.nextToken = output.nextToken } else { - self.schema = nil + self.analysisTemplateSummaries = nil + self.nextToken = nil } } } -public struct GetSchemaOutputResponse: Swift.Equatable { - /// The entire schema object. +public struct ListAnalysisTemplatesOutputResponse: Swift.Equatable { + /// Lists analysis template metadata. /// This member is required. - public var schema: CleanRoomsClientTypes.Schema? + public var analysisTemplateSummaries: [CleanRoomsClientTypes.AnalysisTemplateSummary]? + /// The token value retrieved from a previous call to access the next page of results. + public var nextToken: Swift.String? public init( - schema: CleanRoomsClientTypes.Schema? = nil + analysisTemplateSummaries: [CleanRoomsClientTypes.AnalysisTemplateSummary]? = nil, + nextToken: Swift.String? = nil ) { - self.schema = schema + self.analysisTemplateSummaries = analysisTemplateSummaries + self.nextToken = nextToken } } -struct GetSchemaOutputResponseBody: Swift.Equatable { - let schema: CleanRoomsClientTypes.Schema? +struct ListAnalysisTemplatesOutputResponseBody: Swift.Equatable { + let nextToken: Swift.String? + let analysisTemplateSummaries: [CleanRoomsClientTypes.AnalysisTemplateSummary]? } -extension GetSchemaOutputResponseBody: Swift.Decodable { +extension ListAnalysisTemplatesOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case schema + case analysisTemplateSummaries + case nextToken } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let schemaDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.Schema.self, forKey: .schema) - schema = schemaDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let analysisTemplateSummariesContainer = try containerValues.decodeIfPresent([CleanRoomsClientTypes.AnalysisTemplateSummary?].self, forKey: .analysisTemplateSummaries) + var analysisTemplateSummariesDecoded0:[CleanRoomsClientTypes.AnalysisTemplateSummary]? = nil + if let analysisTemplateSummariesContainer = analysisTemplateSummariesContainer { + analysisTemplateSummariesDecoded0 = [CleanRoomsClientTypes.AnalysisTemplateSummary]() + for structure0 in analysisTemplateSummariesContainer { + if let structure0 = structure0 { + analysisTemplateSummariesDecoded0?.append(structure0) + } + } + } + analysisTemplateSummaries = analysisTemplateSummariesDecoded0 } } -extension CleanRoomsClientTypes.GlueTableReference: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case databaseName - case tableName +extension ListCollaborationAnalysisTemplatesInput: 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 func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let databaseName = self.databaseName { - try encodeContainer.encode(databaseName, forKey: .databaseName) - } - if let tableName = self.tableName { - try encodeContainer.encode(tableName, forKey: .tableName) +extension ListCollaborationAnalysisTemplatesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let collaborationIdentifier = collaborationIdentifier else { + return nil } + return "/collaborations/\(collaborationIdentifier.urlPercentEncoding())/analysistemplates" } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let tableNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .tableName) - tableName = tableNameDecoded - let databaseNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .databaseName) - databaseName = databaseNameDecoded +public struct ListCollaborationAnalysisTemplatesInput: Swift.Equatable { + /// A unique identifier for the collaboration that the analysis templates belong to. Currently accepts collaboration ID. + /// This member is required. + public var collaborationIdentifier: Swift.String? + /// The maximum size of the results that is returned per call. + public var maxResults: Swift.Int? + /// The token value retrieved from a previous call to access the next page of results. + public var nextToken: Swift.String? + + public init( + collaborationIdentifier: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.collaborationIdentifier = collaborationIdentifier + self.maxResults = maxResults + self.nextToken = nextToken } } -extension CleanRoomsClientTypes { - /// A reference to a table within an Glue data catalog. - public struct GlueTableReference: Swift.Equatable { - /// The name of the database the Glue table belongs to. - /// This member is required. - public var databaseName: Swift.String? - /// The name of the Glue table. - /// This member is required. - public var tableName: Swift.String? +struct ListCollaborationAnalysisTemplatesInputBody: Swift.Equatable { +} + +extension ListCollaborationAnalysisTemplatesInputBody: Swift.Decodable { - public init( - databaseName: Swift.String? = nil, - tableName: Swift.String? = nil - ) - { - self.databaseName = databaseName - self.tableName = tableName - } + public init(from decoder: Swift.Decoder) throws { } +} +public enum ListCollaborationAnalysisTemplatesOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } } -extension InternalServerException { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { +extension ListCollaborationAnalysisTemplatesOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: InternalServerExceptionBody = try responseDecoder.decode(responseBody: data) - self.properties.message = output.message + let output: ListCollaborationAnalysisTemplatesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.collaborationAnalysisTemplateSummaries = output.collaborationAnalysisTemplateSummaries + self.nextToken = output.nextToken } else { - self.properties.message = nil + self.collaborationAnalysisTemplateSummaries = nil + self.nextToken = nil } - self.httpResponse = httpResponse - self.requestID = requestID - self.message = message } } -/// Unexpected error during processing of request. -public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "InternalServerException" } - public static var fault: ErrorFault { .server } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? +public struct ListCollaborationAnalysisTemplatesOutputResponse: Swift.Equatable { + /// The metadata of the analysis template within a collaboration. + /// This member is required. + public var collaborationAnalysisTemplateSummaries: [CleanRoomsClientTypes.CollaborationAnalysisTemplateSummary]? + /// The token value retrieved from a previous call to access the next page of results. + public var nextToken: Swift.String? public init( - message: Swift.String? = nil + collaborationAnalysisTemplateSummaries: [CleanRoomsClientTypes.CollaborationAnalysisTemplateSummary]? = nil, + nextToken: Swift.String? = nil ) { - self.properties.message = message + self.collaborationAnalysisTemplateSummaries = collaborationAnalysisTemplateSummaries + self.nextToken = nextToken } } -struct InternalServerExceptionBody: Swift.Equatable { - let message: Swift.String? +struct ListCollaborationAnalysisTemplatesOutputResponseBody: Swift.Equatable { + let nextToken: Swift.String? + let collaborationAnalysisTemplateSummaries: [CleanRoomsClientTypes.CollaborationAnalysisTemplateSummary]? } -extension InternalServerExceptionBody: Swift.Decodable { +extension ListCollaborationAnalysisTemplatesOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message + case collaborationAnalysisTemplateSummaries + case nextToken } 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 CleanRoomsClientTypes { - public enum JoinOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case and - case or - case sdkUnknown(Swift.String) - - public static var allCases: [JoinOperator] { - return [ - .and, - .or, - .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 .and: return "AND" - case .or: return "OR" - 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 = JoinOperator(rawValue: rawValue) ?? JoinOperator.sdkUnknown(rawValue) - } - } -} - -extension CleanRoomsClientTypes { - public enum JoinRequiredOption: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case queryRunner - case sdkUnknown(Swift.String) - - public static var allCases: [JoinRequiredOption] { - return [ - .queryRunner, - .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 .queryRunner: return "QUERY_RUNNER" - case let .sdkUnknown(s): return s + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let collaborationAnalysisTemplateSummariesContainer = try containerValues.decodeIfPresent([CleanRoomsClientTypes.CollaborationAnalysisTemplateSummary?].self, forKey: .collaborationAnalysisTemplateSummaries) + var collaborationAnalysisTemplateSummariesDecoded0:[CleanRoomsClientTypes.CollaborationAnalysisTemplateSummary]? = nil + if let collaborationAnalysisTemplateSummariesContainer = collaborationAnalysisTemplateSummariesContainer { + collaborationAnalysisTemplateSummariesDecoded0 = [CleanRoomsClientTypes.CollaborationAnalysisTemplateSummary]() + for structure0 in collaborationAnalysisTemplateSummariesContainer { + if let structure0 = structure0 { + collaborationAnalysisTemplateSummariesDecoded0?.append(structure0) + } } } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = JoinRequiredOption(rawValue: rawValue) ?? JoinRequiredOption.sdkUnknown(rawValue) - } + collaborationAnalysisTemplateSummaries = collaborationAnalysisTemplateSummariesDecoded0 } } @@ -6140,6 +7978,77 @@ extension CleanRoomsClientTypes { } +extension CleanRoomsClientTypes { + public enum ParameterType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case bigint + case boolean + case char + case date + case decimal + case doublePrecision + case integer + case real + case smallint + case time + case timestamp + case timestamptz + case timetz + case varbyte + case varchar + case sdkUnknown(Swift.String) + + public static var allCases: [ParameterType] { + return [ + .bigint, + .boolean, + .char, + .date, + .decimal, + .doublePrecision, + .integer, + .real, + .smallint, + .time, + .timestamp, + .timestamptz, + .timetz, + .varbyte, + .varchar, + .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 .bigint: return "BIGINT" + case .boolean: return "BOOLEAN" + case .char: return "CHAR" + case .date: return "DATE" + case .decimal: return "DECIMAL" + case .doublePrecision: return "DOUBLE_PRECISION" + case .integer: return "INTEGER" + case .real: return "REAL" + case .smallint: return "SMALLINT" + case .time: return "TIME" + case .timestamp: return "TIMESTAMP" + case .timestamptz: return "TIMESTAMPTZ" + case .timetz: return "TIMETZ" + case .varbyte: return "VARBYTE" + case .varchar: return "VARCHAR" + 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 = ParameterType(rawValue: rawValue) ?? ParameterType.sdkUnknown(rawValue) + } + } +} + extension CleanRoomsClientTypes.ProtectedQuery: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case createTime @@ -6565,11 +8474,22 @@ extension CleanRoomsClientTypes { extension CleanRoomsClientTypes.ProtectedQuerySQLParameters: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case analysisTemplateArn + case parameters case queryString } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let analysisTemplateArn = self.analysisTemplateArn { + try encodeContainer.encode(analysisTemplateArn, forKey: .analysisTemplateArn) + } + if let parameters = parameters { + var parametersContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .parameters) + for (dictKey0, parameterMap0) in parameters { + try parametersContainer.encode(parameterMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } if let queryString = self.queryString { try encodeContainer.encode(queryString, forKey: .queryString) } @@ -6579,6 +8499,19 @@ extension CleanRoomsClientTypes.ProtectedQuerySQLParameters: Swift.Codable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let queryStringDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .queryString) queryString = queryStringDecoded + let analysisTemplateArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .analysisTemplateArn) + analysisTemplateArn = analysisTemplateArnDecoded + let parametersContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .parameters) + var parametersDecoded0: [Swift.String:Swift.String]? = nil + if let parametersContainer = parametersContainer { + parametersDecoded0 = [Swift.String:Swift.String]() + for (key0, parametervalue0) in parametersContainer { + if let parametervalue0 = parametervalue0 { + parametersDecoded0?[key0] = parametervalue0 + } + } + } + parameters = parametersDecoded0 } } @@ -6591,13 +8524,21 @@ extension CleanRoomsClientTypes.ProtectedQuerySQLParameters: Swift.CustomDebugSt extension CleanRoomsClientTypes { /// The parameters for the SQL type Protected Query. public struct ProtectedQuerySQLParameters: Swift.Equatable { + /// The Amazon Resource Name (ARN) associated with the analysis template within a collaboration. + public var analysisTemplateArn: Swift.String? + /// The protected query SQL parameters. + public var parameters: [Swift.String:Swift.String]? /// The query string to be submitted. public var queryString: Swift.String? public init( + analysisTemplateArn: Swift.String? = nil, + parameters: [Swift.String:Swift.String]? = nil, queryString: Swift.String? = nil ) { + self.analysisTemplateArn = analysisTemplateArn + self.parameters = parameters self.queryString = queryString } } @@ -7134,7 +9075,7 @@ extension CleanRoomsClientTypes { public struct Schema: Swift.Equatable { /// The analysis method for the schema. The only valid value is currently DIRECT_QUERY. public var analysisMethod: CleanRoomsClientTypes.AnalysisMethod? - /// The analysis rule types associated with the schema. Valued values are LIST and AGGREGATION. Currently, only one entry is present. + /// The analysis rule types associated with the schema. Currently, only one entry is present. /// This member is required. public var analysisRuleTypes: [CleanRoomsClientTypes.AnalysisRuleType]? /// The unique ARN for the collaboration that the schema belongs to. @@ -7872,6 +9813,125 @@ public struct UntagResourceOutputResponse: Swift.Equatable { public init() { } } +extension UpdateAnalysisTemplateInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + } +} + +extension UpdateAnalysisTemplateInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let membershipIdentifier = membershipIdentifier else { + return nil + } + guard let analysisTemplateIdentifier = analysisTemplateIdentifier else { + return nil + } + return "/memberships/\(membershipIdentifier.urlPercentEncoding())/analysistemplates/\(analysisTemplateIdentifier.urlPercentEncoding())" + } +} + +public struct UpdateAnalysisTemplateInput: Swift.Equatable { + /// The identifier for the analysis template resource. + /// This member is required. + public var analysisTemplateIdentifier: Swift.String? + /// A new description for the analysis template. + public var description: Swift.String? + /// The identifier for a membership resource. + /// This member is required. + public var membershipIdentifier: Swift.String? + + public init( + analysisTemplateIdentifier: Swift.String? = nil, + description: Swift.String? = nil, + membershipIdentifier: Swift.String? = nil + ) + { + self.analysisTemplateIdentifier = analysisTemplateIdentifier + self.description = description + self.membershipIdentifier = membershipIdentifier + } +} + +struct UpdateAnalysisTemplateInputBody: Swift.Equatable { + let description: Swift.String? +} + +extension UpdateAnalysisTemplateInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + } +} + +public enum UpdateAnalysisTemplateOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UpdateAnalysisTemplateOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: UpdateAnalysisTemplateOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.analysisTemplate = output.analysisTemplate + } else { + self.analysisTemplate = nil + } + } +} + +public struct UpdateAnalysisTemplateOutputResponse: Swift.Equatable { + /// The analysis template. + /// This member is required. + public var analysisTemplate: CleanRoomsClientTypes.AnalysisTemplate? + + public init( + analysisTemplate: CleanRoomsClientTypes.AnalysisTemplate? = nil + ) + { + self.analysisTemplate = analysisTemplate + } +} + +struct UpdateAnalysisTemplateOutputResponseBody: Swift.Equatable { + let analysisTemplate: CleanRoomsClientTypes.AnalysisTemplate? +} + +extension UpdateAnalysisTemplateOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case analysisTemplate + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let analysisTemplateDecoded = try containerValues.decodeIfPresent(CleanRoomsClientTypes.AnalysisTemplate.self, forKey: .analysisTemplate) + analysisTemplate = analysisTemplateDecoded + } +} + extension UpdateCollaborationInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case description @@ -8738,6 +10798,7 @@ extension CleanRoomsClientTypes { extension CleanRoomsClientTypes { public enum ValidationExceptionReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case fieldValidationFailed + case iamSynchronizationDelay case invalidConfiguration case invalidQuery case sdkUnknown(Swift.String) @@ -8745,6 +10806,7 @@ extension CleanRoomsClientTypes { public static var allCases: [ValidationExceptionReason] { return [ .fieldValidationFailed, + .iamSynchronizationDelay, .invalidConfiguration, .invalidQuery, .sdkUnknown("") @@ -8757,6 +10819,7 @@ extension CleanRoomsClientTypes { public var rawValue: Swift.String { switch self { case .fieldValidationFailed: return "FIELD_VALIDATION_FAILED" + case .iamSynchronizationDelay: return "IAM_SYNCHRONIZATION_DELAY" case .invalidConfiguration: return "INVALID_CONFIGURATION" case .invalidQuery: return "INVALID_QUERY" case let .sdkUnknown(s): return s diff --git a/Sources/Services/AWSCloudFormation/CloudFormationClient.swift b/Sources/Services/AWSCloudFormation/CloudFormationClient.swift index 929231d52f0..9d13a96cc86 100644 --- a/Sources/Services/AWSCloudFormation/CloudFormationClient.swift +++ b/Sources/Services/AWSCloudFormation/CloudFormationClient.swift @@ -1700,6 +1700,42 @@ extension CloudFormationClient: CloudFormationClientProtocol { return result } + /// Returns drift information for resources in a stack instance. ListStackInstanceResourceDrifts returns drift information for the most recent drift detection operation. If an operation is in progress, it may only return partial results. + public func listStackInstanceResourceDrifts(input: ListStackInstanceResourceDriftsInput) async throws -> ListStackInstanceResourceDriftsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listStackInstanceResourceDrifts") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "cloudformation") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listStackInstanceResourceDrifts") + 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.serviceSpecific.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.SerializableBodyMiddleware(xmlName: "ListStackInstanceResourceDriftsInput")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-www-form-urlencoded")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Returns summary information about stack instances that are associated with the specified stack set. You can filter for stack instances that are associated with a specific Amazon Web Services account name or Region, or that have a specific status. public func listStackInstances(input: ListStackInstancesInput) async throws -> ListStackInstancesOutputResponse { diff --git a/Sources/Services/AWSCloudFormation/CloudFormationClientProtocol.swift b/Sources/Services/AWSCloudFormation/CloudFormationClientProtocol.swift index 86a37cb09ea..6391c7a9c36 100644 --- a/Sources/Services/AWSCloudFormation/CloudFormationClientProtocol.swift +++ b/Sources/Services/AWSCloudFormation/CloudFormationClientProtocol.swift @@ -105,6 +105,8 @@ public protocol CloudFormationClientProtocol { func listExports(input: ListExportsInput) async throws -> ListExportsOutputResponse /// Lists all stacks that are importing an exported output value. To modify or remove an exported output value, first use this action to see which stacks are using it. To see the exported output values in your account, see [ListExports]. For more information about importing an exported output value, see the [Fn::ImportValue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html) function. func listImports(input: ListImportsInput) async throws -> ListImportsOutputResponse + /// Returns drift information for resources in a stack instance. ListStackInstanceResourceDrifts returns drift information for the most recent drift detection operation. If an operation is in progress, it may only return partial results. + func listStackInstanceResourceDrifts(input: ListStackInstanceResourceDriftsInput) async throws -> ListStackInstanceResourceDriftsOutputResponse /// Returns summary information about stack instances that are associated with the specified stack set. You can filter for stack instances that are associated with a specific Amazon Web Services account name or Region, or that have a specific status. func listStackInstances(input: ListStackInstancesInput) async throws -> ListStackInstancesOutputResponse /// Returns descriptions of all resources of the specified stack. For deleted stacks, ListStackResources returns resource information for up to 90 days after the stack has been deleted. diff --git a/Sources/Services/AWSCloudFormation/EndpointResolver.swift b/Sources/Services/AWSCloudFormation/EndpointResolver.swift index cbbf1e668ee..b16ad650abd 100644 --- a/Sources/Services/AWSCloudFormation/EndpointResolver.swift +++ b/Sources/Services/AWSCloudFormation/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://cloudformation-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://cloudformation.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://cloudformation-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://cloudformation.{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://cloudformation.{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\":[{\"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\":[{\"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\":[],\"endpoint\":{\"url\":\"https://cloudformation-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\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://cloudformation.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://cloudformation-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\":[],\"endpoint\":{\"url\":\"https://cloudformation.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://cloudformation.{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/AWSCloudFormation/models/Models.swift b/Sources/Services/AWSCloudFormation/models/Models.swift index 8a850fcf5c4..32722116ab6 100644 --- a/Sources/Services/AWSCloudFormation/models/Models.swift +++ b/Sources/Services/AWSCloudFormation/models/Models.swift @@ -793,6 +793,7 @@ extension CFNRegistryException { public struct CFNRegistryException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { + /// An message with details about the error that occurred. public internal(set) var message: Swift.String? = nil } @@ -1979,9 +1980,9 @@ public struct CreateChangeSetInput: Swift.Equatable { /// * [AWS::IAM::UserToGroupAddition](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html) /// /// - /// For more information, see [Acknowledging IAM resources in CloudFormation templates](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities). + /// For more information, see [Acknowledging IAM resources in CloudFormation templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities). /// - /// * CAPABILITY_AUTO_EXPAND Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually creating the stack. If your stack template contains one or more macros, and you choose to create a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the [AWS::Include](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) and [AWS::Serverless](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html) transforms, which are macros hosted by CloudFormation. This capacity doesn't apply to creating change sets, and specifying it when creating change sets has no effect. If you want to create a stack from a stack template that contains macros and nested stacks, you must create or update the stack directly from the template using the [CreateStack] or [UpdateStack] action, and specifying this capability. For more information about macros, see [Using CloudFormation macros to perform custom processing on templates](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html). + /// * CAPABILITY_AUTO_EXPAND Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually creating the stack. If your stack template contains one or more macros, and you choose to create a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the [AWS::Include](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) and [AWS::Serverless](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html) transforms, which are macros hosted by CloudFormation. This capacity doesn't apply to creating change sets, and specifying it when creating change sets has no effect. If you want to create a stack from a stack template that contains macros and nested stacks, you must create or update the stack directly from the template using the [CreateStack] or [UpdateStack] action, and specifying this capability. For more information about macros, see [Using CloudFormation macros to perform custom processing on templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html). public var capabilities: [CloudFormationClientTypes.Capability]? /// The name of the change set. The name must be unique among all change sets that are associated with the specified stack. A change set name can contain only alphanumeric, case sensitive characters, and hyphens. It must start with an alphabetical character and can't exceed 128 characters. /// This member is required. @@ -2384,6 +2385,9 @@ extension CreateStackInput: Swift.Encodable { try resourceTypesContainer.encode("", forKey: ClientRuntime.Key("")) } } + if let retainExceptOnCreate = retainExceptOnCreate { + try container.encode(retainExceptOnCreate, forKey: ClientRuntime.Key("RetainExceptOnCreate")) + } if let roleARN = roleARN { try container.encode(roleARN, forKey: ClientRuntime.Key("RoleARN")) } @@ -2461,15 +2465,15 @@ public struct CreateStackInput: Swift.Equatable { /// * [AWS::IAM::UserToGroupAddition](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html) /// /// - /// For more information, see [Acknowledging IAM Resources in CloudFormation Templates](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities). + /// For more information, see [Acknowledging IAM Resources in CloudFormation Templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities). /// - /// * CAPABILITY_AUTO_EXPAND Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually creating the stack. If your stack template contains one or more macros, and you choose to create a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the [AWS::Include](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) and [AWS::Serverless](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html) transforms, which are macros hosted by CloudFormation. If you want to create a stack from a stack template that contains macros and nested stacks, you must create the stack directly from the template using this capability. You should only create stacks directly from a stack template that contains macros if you know what processing the macro performs. Each macro relies on an underlying Lambda service function for processing stack templates. Be aware that the Lambda function owner can update the function operation without CloudFormation being notified. For more information, see [Using CloudFormation macros to perform custom processing on templates](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html). + /// * CAPABILITY_AUTO_EXPAND Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually creating the stack. If your stack template contains one or more macros, and you choose to create a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the [AWS::Include](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) and [AWS::Serverless](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html) transforms, which are macros hosted by CloudFormation. If you want to create a stack from a stack template that contains macros and nested stacks, you must create the stack directly from the template using this capability. You should only create stacks directly from a stack template that contains macros if you know what processing the macro performs. Each macro relies on an underlying Lambda service function for processing stack templates. Be aware that the Lambda function owner can update the function operation without CloudFormation being notified. For more information, see [Using CloudFormation macros to perform custom processing on templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html). public var capabilities: [CloudFormationClientTypes.Capability]? /// A unique identifier for this CreateStack request. Specify this token if you plan to retry requests so that CloudFormation knows that you're not attempting to create a stack with the same name. You might retry CreateStack requests to ensure that CloudFormation successfully received them. All events initiated by a given stack operation are assigned the same client request token, which you can use to track operations. For example, if you execute a CreateStack operation with the token token1, then all the StackEvents generated by that operation will have ClientRequestToken set as token1. In the console, stack operations display the client request token on the Events tab. Stack operations that are initiated from the console use the token format Console-StackOperation-ID, which helps you easily identify the stack operation . For example, if you create a stack using the console, each stack event would be assigned the same token in the following format: Console-CreateStack-7f59c3cf-00d2-40c7-b2ff-e75db0987002. public var clientRequestToken: Swift.String? /// Set to true to disable rollback of the stack if stack creation failed. You can specify either DisableRollback or OnFailure, but not both. Default: false public var disableRollback: Swift.Bool? - /// Whether to enable termination protection on the specified stack. If a user attempts to delete a stack with termination protection enabled, the operation fails and the stack remains unchanged. For more information, see [Protecting a Stack From Being Deleted](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html) in the CloudFormation User Guide. Termination protection is deactivated on stacks by default. For [nested stacks](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html), termination protection is set on the root stack and can't be changed directly on the nested stack. + /// Whether to enable termination protection on the specified stack. If a user attempts to delete a stack with termination protection enabled, the operation fails and the stack remains unchanged. For more information, see [Protecting a Stack From Being Deleted](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html) in the CloudFormation User Guide. Termination protection is deactivated on stacks by default. For [nested stacks](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html), termination protection is set on the root stack and can't be changed directly on the nested stack. public var enableTerminationProtection: Swift.Bool? /// The Amazon Simple Notification Service (Amazon SNS) topic ARNs to publish stack related events. You can find your Amazon SNS topic ARNs using the Amazon SNS console or your Command Line Interface (CLI). public var notificationARNs: [Swift.String]? @@ -2479,6 +2483,8 @@ public struct CreateStackInput: Swift.Equatable { public var parameters: [CloudFormationClientTypes.Parameter]? /// The template resource types that you have permissions to work with for this create stack action, such as AWS::EC2::Instance, AWS::EC2::*, or Custom::MyCustomInstance. Use the following syntax to describe template resource types: AWS::* (for all Amazon Web Services resources), Custom::* (for all custom resources), Custom::logical_ID (for a specific custom resource), AWS::service_name::* (for all resources of a particular Amazon Web Services service), and AWS::service_name::resource_logical_ID (for a specific Amazon Web Services resource). If the list of resource types doesn't include a resource that you're creating, the stack creation fails. By default, CloudFormation grants permissions to all resource types. Identity and Access Management (IAM) uses this parameter for CloudFormation-specific condition keys in IAM policies. For more information, see [Controlling Access with Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html). public var resourceTypes: [Swift.String]? + /// This deletion policy deletes newly created resources, but retains existing resources, when a stack operation is rolled back. This ensures new, empty, and unused resources are deleted, while critical resources and their data are retained. RetainExceptOnCreate can be specified for any resource that supports the [ DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html) attribute. + public var retainExceptOnCreate: Swift.Bool? /// The Amazon Resource Name (ARN) of an Identity and Access Management (IAM) role that CloudFormation assumes to create the stack. CloudFormation uses the role's credentials to make calls on your behalf. CloudFormation always uses this role for all future operations on the stack. Provided that users have permission to operate on the stack, CloudFormation uses this role even if the users don't have permission to pass it. Ensure that the role grants least privilege. If you don't specify a value, CloudFormation uses the role that was previously associated with the stack. If no role is available, CloudFormation uses a temporary session that's generated from your user credentials. public var roleARN: Swift.String? /// The rollback triggers for CloudFormation to monitor during stack creation and updating operations, and for the specified monitoring period afterwards. @@ -2508,6 +2514,7 @@ public struct CreateStackInput: Swift.Equatable { onFailure: CloudFormationClientTypes.OnFailure? = nil, parameters: [CloudFormationClientTypes.Parameter]? = nil, resourceTypes: [Swift.String]? = nil, + retainExceptOnCreate: Swift.Bool? = nil, roleARN: Swift.String? = nil, rollbackConfiguration: CloudFormationClientTypes.RollbackConfiguration? = nil, stackName: Swift.String? = nil, @@ -2527,6 +2534,7 @@ public struct CreateStackInput: Swift.Equatable { self.onFailure = onFailure self.parameters = parameters self.resourceTypes = resourceTypes + self.retainExceptOnCreate = retainExceptOnCreate self.roleARN = roleARN self.rollbackConfiguration = rollbackConfiguration self.stackName = stackName @@ -2557,6 +2565,7 @@ struct CreateStackInputBody: Swift.Equatable { let tags: [CloudFormationClientTypes.Tag]? let clientRequestToken: Swift.String? let enableTerminationProtection: Swift.Bool? + let retainExceptOnCreate: Swift.Bool? } extension CreateStackInputBody: Swift.Decodable { @@ -2569,6 +2578,7 @@ extension CreateStackInputBody: Swift.Decodable { case onFailure = "OnFailure" case parameters = "Parameters" case resourceTypes = "ResourceTypes" + case retainExceptOnCreate = "RetainExceptOnCreate" case roleARN = "RoleARN" case rollbackConfiguration = "RollbackConfiguration" case stackName = "StackName" @@ -2701,6 +2711,8 @@ extension CreateStackInputBody: Swift.Decodable { clientRequestToken = clientRequestTokenDecoded let enableTerminationProtectionDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enableTerminationProtection) enableTerminationProtection = enableTerminationProtectionDecoded + let retainExceptOnCreateDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .retainExceptOnCreate) + retainExceptOnCreate = retainExceptOnCreateDecoded } } @@ -3119,7 +3131,7 @@ extension CreateStackSetInput: ClientRuntime.URLPathProvider { } public struct CreateStackSetInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the IAM role to use to create this stack set. Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see [Prerequisites: Granting Permissions for Stack Set Operations](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html) in the CloudFormation User Guide. + /// The Amazon Resource Name (ARN) of the IAM role to use to create this stack set. Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see [Prerequisites: Granting Permissions for Stack Set Operations](https://docs.aws.amazon.com/AWSCloudFormation/stacksets-prereqs.html) in the CloudFormation User Guide. public var administrationRoleARN: Swift.String? /// Describes whether StackSets automatically deploys to Organizations accounts that are added to the target organization or organizational unit (OU). Specify only if PermissionModel is SERVICE_MANAGED. public var autoDeployment: CloudFormationClientTypes.AutoDeployment? @@ -3160,9 +3172,9 @@ public struct CreateStackSetInput: Swift.Equatable { /// * [AWS::IAM::UserToGroupAddition](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html) /// /// - /// For more information, see [Acknowledging IAM Resources in CloudFormation Templates](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities). + /// For more information, see [Acknowledging IAM Resources in CloudFormation Templates](https://docs.aws.amazon.com/AWSCloudFormation/using-iam-template.html#capabilities). /// - /// * CAPABILITY_AUTO_EXPAND Some templates reference macros. If your stack set template references one or more macros, you must create the stack set directly from the processed template, without first reviewing the resulting changes in a change set. To create the stack set directly, you must acknowledge this capability. For more information, see [Using CloudFormation Macros to Perform Custom Processing on Templates](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html). Stack sets with service-managed permissions don't currently support the use of macros in templates. (This includes the [AWS::Include](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) and [AWS::Serverless](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html) transforms, which are macros hosted by CloudFormation.) Even if you specify this capability for a stack set with service-managed permissions, if you reference a macro in your template the stack set operation will fail. + /// * CAPABILITY_AUTO_EXPAND Some templates reference macros. If your stack set template references one or more macros, you must create the stack set directly from the processed template, without first reviewing the resulting changes in a change set. To create the stack set directly, you must acknowledge this capability. For more information, see [Using CloudFormation Macros to Perform Custom Processing on Templates](https://docs.aws.amazon.com/AWSCloudFormation/template-macros.html). Stack sets with service-managed permissions don't currently support the use of macros in templates. (This includes the [AWS::Include](https://docs.aws.amazon.com/AWSCloudFormation/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) and [AWS::Serverless](https://docs.aws.amazon.com/AWSCloudFormation/transform-aws-serverless.html) transforms, which are macros hosted by CloudFormation.) Even if you specify this capability for a stack set with service-managed permissions, if you reference a macro in your template the stack set operation will fail. public var capabilities: [CloudFormationClientTypes.Capability]? /// A unique identifier for this CreateStackSet request. Specify this token if you plan to retry requests so that CloudFormation knows that you're not attempting to create another stack set with the same name. You might retry CreateStackSet requests to ensure that CloudFormation successfully received them. If you don't specify an operation ID, the SDK generates one automatically. public var clientRequestToken: Swift.String? @@ -7802,6 +7814,9 @@ extension ExecuteChangeSetInput: Swift.Encodable { if let disableRollback = disableRollback { try container.encode(disableRollback, forKey: ClientRuntime.Key("DisableRollback")) } + if let retainExceptOnCreate = retainExceptOnCreate { + try container.encode(retainExceptOnCreate, forKey: ClientRuntime.Key("RetainExceptOnCreate")) + } if let stackName = stackName { try container.encode(stackName, forKey: ClientRuntime.Key("StackName")) } @@ -7832,6 +7847,8 @@ public struct ExecuteChangeSetInput: Swift.Equatable { /// /// Default: True public var disableRollback: Swift.Bool? + /// This deletion policy deletes newly created resources, but retains existing resources, when a stack operation is rolled back. This ensures new, empty, and unused resources are deleted, while critical resources and their data are retained. RetainExceptOnCreate can be specified for any resource that supports the [ DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html) attribute. + public var retainExceptOnCreate: Swift.Bool? /// If you specified the name of a change set, specify the stack name or Amazon Resource Name (ARN) that's associated with the change set you want to execute. public var stackName: Swift.String? @@ -7839,12 +7856,14 @@ public struct ExecuteChangeSetInput: Swift.Equatable { changeSetName: Swift.String? = nil, clientRequestToken: Swift.String? = nil, disableRollback: Swift.Bool? = nil, + retainExceptOnCreate: Swift.Bool? = nil, stackName: Swift.String? = nil ) { self.changeSetName = changeSetName self.clientRequestToken = clientRequestToken self.disableRollback = disableRollback + self.retainExceptOnCreate = retainExceptOnCreate self.stackName = stackName } } @@ -7854,6 +7873,7 @@ struct ExecuteChangeSetInputBody: Swift.Equatable { let stackName: Swift.String? let clientRequestToken: Swift.String? let disableRollback: Swift.Bool? + let retainExceptOnCreate: Swift.Bool? } extension ExecuteChangeSetInputBody: Swift.Decodable { @@ -7861,6 +7881,7 @@ extension ExecuteChangeSetInputBody: Swift.Decodable { case changeSetName = "ChangeSetName" case clientRequestToken = "ClientRequestToken" case disableRollback = "DisableRollback" + case retainExceptOnCreate = "RetainExceptOnCreate" case stackName = "StackName" } @@ -7874,6 +7895,8 @@ extension ExecuteChangeSetInputBody: Swift.Decodable { clientRequestToken = clientRequestTokenDecoded let disableRollbackDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .disableRollback) disableRollback = disableRollbackDecoded + let retainExceptOnCreateDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .retainExceptOnCreate) + retainExceptOnCreate = retainExceptOnCreateDecoded } } @@ -8267,6 +8290,9 @@ extension GetTemplateSummaryInput: Swift.Encodable { if let templateBody = templateBody { try container.encode(templateBody, forKey: ClientRuntime.Key("TemplateBody")) } + if let templateSummaryConfig = templateSummaryConfig { + try container.encode(templateSummaryConfig, forKey: ClientRuntime.Key("TemplateSummaryConfig")) + } if let templateURL = templateURL { try container.encode(templateURL, forKey: ClientRuntime.Key("TemplateURL")) } @@ -8295,6 +8321,8 @@ public struct GetTemplateSummaryInput: Swift.Equatable { public var stackSetName: Swift.String? /// Structure containing the template body with a minimum length of 1 byte and a maximum length of 51,200 bytes. For more information about templates, see [Template anatomy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html) in the CloudFormation User Guide. Conditional: You must specify only one of the following parameters: StackName, StackSetName, TemplateBody, or TemplateURL. public var templateBody: Swift.String? + /// Specifies options for the GetTemplateSummary API action. + public var templateSummaryConfig: CloudFormationClientTypes.TemplateSummaryConfig? /// Location of file containing the template body. The URL must point to a template (max size: 460,800 bytes) that's located in an Amazon S3 bucket or a Systems Manager document. For more information about templates, see [Template anatomy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html) in the CloudFormation User Guide. Conditional: You must specify only one of the following parameters: StackName, StackSetName, TemplateBody, or TemplateURL. public var templateURL: Swift.String? @@ -8303,6 +8331,7 @@ public struct GetTemplateSummaryInput: Swift.Equatable { stackName: Swift.String? = nil, stackSetName: Swift.String? = nil, templateBody: Swift.String? = nil, + templateSummaryConfig: CloudFormationClientTypes.TemplateSummaryConfig? = nil, templateURL: Swift.String? = nil ) { @@ -8310,6 +8339,7 @@ public struct GetTemplateSummaryInput: Swift.Equatable { self.stackName = stackName self.stackSetName = stackSetName self.templateBody = templateBody + self.templateSummaryConfig = templateSummaryConfig self.templateURL = templateURL } } @@ -8320,6 +8350,7 @@ struct GetTemplateSummaryInputBody: Swift.Equatable { let stackName: Swift.String? let stackSetName: Swift.String? let callAs: CloudFormationClientTypes.CallAs? + let templateSummaryConfig: CloudFormationClientTypes.TemplateSummaryConfig? } extension GetTemplateSummaryInputBody: Swift.Decodable { @@ -8328,6 +8359,7 @@ extension GetTemplateSummaryInputBody: Swift.Decodable { case stackName = "StackName" case stackSetName = "StackSetName" case templateBody = "TemplateBody" + case templateSummaryConfig = "TemplateSummaryConfig" case templateURL = "TemplateURL" } @@ -8343,6 +8375,8 @@ extension GetTemplateSummaryInputBody: Swift.Decodable { stackSetName = stackSetNameDecoded let callAsDecoded = try containerValues.decodeIfPresent(CloudFormationClientTypes.CallAs.self, forKey: .callAs) callAs = callAsDecoded + let templateSummaryConfigDecoded = try containerValues.decodeIfPresent(CloudFormationClientTypes.TemplateSummaryConfig.self, forKey: .templateSummaryConfig) + templateSummaryConfig = templateSummaryConfigDecoded } } @@ -8370,6 +8404,7 @@ extension GetTemplateSummaryOutputResponse: ClientRuntime.HttpResponseBinding { self.resourceIdentifierSummaries = output.resourceIdentifierSummaries self.resourceTypes = output.resourceTypes self.version = output.version + self.warnings = output.warnings } else { self.capabilities = nil self.capabilitiesReason = nil @@ -8380,6 +8415,7 @@ extension GetTemplateSummaryOutputResponse: ClientRuntime.HttpResponseBinding { self.resourceIdentifierSummaries = nil self.resourceTypes = nil self.version = nil + self.warnings = nil } } } @@ -8404,6 +8440,8 @@ public struct GetTemplateSummaryOutputResponse: Swift.Equatable { public var resourceTypes: [Swift.String]? /// The Amazon Web Services template format version, which identifies the capabilities of the template. public var version: Swift.String? + /// An object containing any warnings returned. + public var warnings: CloudFormationClientTypes.Warnings? public init( capabilities: [CloudFormationClientTypes.Capability]? = nil, @@ -8414,7 +8452,8 @@ public struct GetTemplateSummaryOutputResponse: Swift.Equatable { parameters: [CloudFormationClientTypes.ParameterDeclaration]? = nil, resourceIdentifierSummaries: [CloudFormationClientTypes.ResourceIdentifierSummary]? = nil, resourceTypes: [Swift.String]? = nil, - version: Swift.String? = nil + version: Swift.String? = nil, + warnings: CloudFormationClientTypes.Warnings? = nil ) { self.capabilities = capabilities @@ -8426,6 +8465,7 @@ public struct GetTemplateSummaryOutputResponse: Swift.Equatable { self.resourceIdentifierSummaries = resourceIdentifierSummaries self.resourceTypes = resourceTypes self.version = version + self.warnings = warnings } } @@ -8439,6 +8479,7 @@ struct GetTemplateSummaryOutputResponseBody: Swift.Equatable { let metadata: Swift.String? let declaredTransforms: [Swift.String]? let resourceIdentifierSummaries: [CloudFormationClientTypes.ResourceIdentifierSummary]? + let warnings: CloudFormationClientTypes.Warnings? } extension GetTemplateSummaryOutputResponseBody: Swift.Decodable { @@ -8452,6 +8493,7 @@ extension GetTemplateSummaryOutputResponseBody: Swift.Decodable { case resourceIdentifierSummaries = "ResourceIdentifierSummaries" case resourceTypes = "ResourceTypes" case version = "Version" + case warnings = "Warnings" } public init(from decoder: Swift.Decoder) throws { @@ -8560,6 +8602,8 @@ extension GetTemplateSummaryOutputResponseBody: Swift.Decodable { } else { resourceIdentifierSummaries = nil } + let warningsDecoded = try containerValues.decodeIfPresent(CloudFormationClientTypes.Warnings.self, forKey: .warnings) + warnings = warningsDecoded } } @@ -9696,6 +9740,250 @@ extension ListImportsOutputResponseBody: Swift.Decodable { } } +extension ListStackInstanceResourceDriftsInput: Swift.Encodable { + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let callAs = callAs { + try container.encode(callAs, forKey: ClientRuntime.Key("CallAs")) + } + if let maxResults = maxResults { + try container.encode(maxResults, forKey: ClientRuntime.Key("MaxResults")) + } + if let nextToken = nextToken { + try container.encode(nextToken, forKey: ClientRuntime.Key("NextToken")) + } + if let operationId = operationId { + try container.encode(operationId, forKey: ClientRuntime.Key("OperationId")) + } + if let stackInstanceAccount = stackInstanceAccount { + try container.encode(stackInstanceAccount, forKey: ClientRuntime.Key("StackInstanceAccount")) + } + if let stackInstanceRegion = stackInstanceRegion { + try container.encode(stackInstanceRegion, forKey: ClientRuntime.Key("StackInstanceRegion")) + } + if let stackInstanceResourceDriftStatuses = stackInstanceResourceDriftStatuses { + if !stackInstanceResourceDriftStatuses.isEmpty { + var stackInstanceResourceDriftStatusesContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("StackInstanceResourceDriftStatuses")) + for (index0, stackresourcedriftstatus0) in stackInstanceResourceDriftStatuses.enumerated() { + try stackInstanceResourceDriftStatusesContainer.encode(stackresourcedriftstatus0, forKey: ClientRuntime.Key("member.\(index0.advanced(by: 1))")) + } + } + else { + var stackInstanceResourceDriftStatusesContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("StackInstanceResourceDriftStatuses")) + try stackInstanceResourceDriftStatusesContainer.encode("", forKey: ClientRuntime.Key("")) + } + } + if let stackSetName = stackSetName { + try container.encode(stackSetName, forKey: ClientRuntime.Key("StackSetName")) + } + try container.encode("ListStackInstanceResourceDrifts", forKey:ClientRuntime.Key("Action")) + try container.encode("2010-05-15", forKey:ClientRuntime.Key("Version")) + } +} + +extension ListStackInstanceResourceDriftsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct ListStackInstanceResourceDriftsInput: Swift.Equatable { + /// [Service-managed permissions] Specifies whether you are acting as an account administrator in the organization's management account or as a delegated administrator in a member account. By default, SELF is specified. Use SELF for stack sets with self-managed permissions. + /// + /// * If you are signed in to the management account, specify SELF. + /// + /// * If you are signed in to a delegated administrator account, specify DELEGATED_ADMIN. Your Amazon Web Services account must be registered as a delegated administrator in the management account. For more information, see [Register a delegated administrator](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) in the CloudFormation User Guide. + public var callAs: CloudFormationClientTypes.CallAs? + /// The maximum number of results to be returned with a single call. If the number of available results exceeds this maximum, the response includes a NextToken value that you can assign to the NextToken request parameter to get the next set of results. + public var maxResults: Swift.Int? + /// If the previous paginated request didn't return all of the remaining results, the response object's NextToken parameter value is set to a token. To retrieve the next set of results, call this action again and assign that token to the request object's NextToken parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. + public var nextToken: Swift.String? + /// The unique ID of the drift operation. + /// This member is required. + public var operationId: Swift.String? + /// The name of the Amazon Web Services account that you want to list resource drifts for. + /// This member is required. + public var stackInstanceAccount: Swift.String? + /// The name of the Region where you want to list resource drifts. + /// This member is required. + public var stackInstanceRegion: Swift.String? + /// The resource drift status of the stack instance. + /// + /// * DELETED: The resource differs from its expected template configuration in that the resource has been deleted. + /// + /// * MODIFIED: One or more resource properties differ from their expected template values. + /// + /// * IN_SYNC: The resource's actual configuration matches its expected template configuration. + /// + /// * NOT_CHECKED: CloudFormation doesn't currently return this value. + public var stackInstanceResourceDriftStatuses: [CloudFormationClientTypes.StackResourceDriftStatus]? + /// The name or unique ID of the stack set that you want to list drifted resources for. + /// This member is required. + public var stackSetName: Swift.String? + + public init( + callAs: CloudFormationClientTypes.CallAs? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + operationId: Swift.String? = nil, + stackInstanceAccount: Swift.String? = nil, + stackInstanceRegion: Swift.String? = nil, + stackInstanceResourceDriftStatuses: [CloudFormationClientTypes.StackResourceDriftStatus]? = nil, + stackSetName: Swift.String? = nil + ) + { + self.callAs = callAs + self.maxResults = maxResults + self.nextToken = nextToken + self.operationId = operationId + self.stackInstanceAccount = stackInstanceAccount + self.stackInstanceRegion = stackInstanceRegion + self.stackInstanceResourceDriftStatuses = stackInstanceResourceDriftStatuses + self.stackSetName = stackSetName + } +} + +struct ListStackInstanceResourceDriftsInputBody: Swift.Equatable { + let stackSetName: Swift.String? + let nextToken: Swift.String? + let maxResults: Swift.Int? + let stackInstanceResourceDriftStatuses: [CloudFormationClientTypes.StackResourceDriftStatus]? + let stackInstanceAccount: Swift.String? + let stackInstanceRegion: Swift.String? + let operationId: Swift.String? + let callAs: CloudFormationClientTypes.CallAs? +} + +extension ListStackInstanceResourceDriftsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case callAs = "CallAs" + case maxResults = "MaxResults" + case nextToken = "NextToken" + case operationId = "OperationId" + case stackInstanceAccount = "StackInstanceAccount" + case stackInstanceRegion = "StackInstanceRegion" + case stackInstanceResourceDriftStatuses = "StackInstanceResourceDriftStatuses" + case stackSetName = "StackSetName" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let stackSetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .stackSetName) + stackSetName = stackSetNameDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + if containerValues.contains(.stackInstanceResourceDriftStatuses) { + struct KeyVal0{struct member{}} + let stackInstanceResourceDriftStatusesWrappedContainer = containerValues.nestedContainerNonThrowable(keyedBy: CollectionMemberCodingKey.CodingKeys.self, forKey: .stackInstanceResourceDriftStatuses) + if let stackInstanceResourceDriftStatusesWrappedContainer = stackInstanceResourceDriftStatusesWrappedContainer { + let stackInstanceResourceDriftStatusesContainer = try stackInstanceResourceDriftStatusesWrappedContainer.decodeIfPresent([CloudFormationClientTypes.StackResourceDriftStatus].self, forKey: .member) + var stackInstanceResourceDriftStatusesBuffer:[CloudFormationClientTypes.StackResourceDriftStatus]? = nil + if let stackInstanceResourceDriftStatusesContainer = stackInstanceResourceDriftStatusesContainer { + stackInstanceResourceDriftStatusesBuffer = [CloudFormationClientTypes.StackResourceDriftStatus]() + for enumContainer0 in stackInstanceResourceDriftStatusesContainer { + stackInstanceResourceDriftStatusesBuffer?.append(enumContainer0) + } + } + stackInstanceResourceDriftStatuses = stackInstanceResourceDriftStatusesBuffer + } else { + stackInstanceResourceDriftStatuses = [] + } + } else { + stackInstanceResourceDriftStatuses = nil + } + let stackInstanceAccountDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .stackInstanceAccount) + stackInstanceAccount = stackInstanceAccountDecoded + let stackInstanceRegionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .stackInstanceRegion) + stackInstanceRegion = stackInstanceRegionDecoded + let operationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .operationId) + operationId = operationIdDecoded + let callAsDecoded = try containerValues.decodeIfPresent(CloudFormationClientTypes.CallAs.self, forKey: .callAs) + callAs = callAsDecoded + } +} + +public enum ListStackInstanceResourceDriftsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restXMLError = try await AWSClientRuntime.RestXMLError(httpResponse: httpResponse) + switch restXMLError.errorCode { + case "OperationNotFoundException": return try await OperationNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + case "StackInstanceNotFoundException": return try await StackInstanceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + case "StackSetNotFoundException": return try await StackSetNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restXMLError.message, requestID: restXMLError.requestId, typeName: restXMLError.errorCode) + } + } +} + +extension ListStackInstanceResourceDriftsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListStackInstanceResourceDriftsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nextToken = output.nextToken + self.summaries = output.summaries + } else { + self.nextToken = nil + self.summaries = nil + } + } +} + +public struct ListStackInstanceResourceDriftsOutputResponse: Swift.Equatable { + /// If the previous paginated request didn't return all of the remaining results, the response object's NextToken parameter value is set to a token. To retrieve the next set of results, call this action again and assign that token to the request object's NextToken parameter. If there are no remaining results, the previous response object's NextToken parameter is set to null. + public var nextToken: Swift.String? + /// A list of StackInstanceResourceDriftSummary structures that contain information about the specified stack instances. + public var summaries: [CloudFormationClientTypes.StackInstanceResourceDriftsSummary]? + + public init( + nextToken: Swift.String? = nil, + summaries: [CloudFormationClientTypes.StackInstanceResourceDriftsSummary]? = nil + ) + { + self.nextToken = nextToken + self.summaries = summaries + } +} + +struct ListStackInstanceResourceDriftsOutputResponseBody: Swift.Equatable { + let summaries: [CloudFormationClientTypes.StackInstanceResourceDriftsSummary]? + let nextToken: Swift.String? +} + +extension ListStackInstanceResourceDriftsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextToken = "NextToken" + case summaries = "Summaries" + } + + public init(from decoder: Swift.Decoder) throws { + let topLevelContainer = try decoder.container(keyedBy: ClientRuntime.Key.self) + let containerValues = try topLevelContainer.nestedContainer(keyedBy: CodingKeys.self, forKey: ClientRuntime.Key("ListStackInstanceResourceDriftsResult")) + if containerValues.contains(.summaries) { + struct KeyVal0{struct member{}} + let summariesWrappedContainer = containerValues.nestedContainerNonThrowable(keyedBy: CollectionMemberCodingKey.CodingKeys.self, forKey: .summaries) + if let summariesWrappedContainer = summariesWrappedContainer { + let summariesContainer = try summariesWrappedContainer.decodeIfPresent([CloudFormationClientTypes.StackInstanceResourceDriftsSummary].self, forKey: .member) + var summariesBuffer:[CloudFormationClientTypes.StackInstanceResourceDriftsSummary]? = nil + if let summariesContainer = summariesContainer { + summariesBuffer = [CloudFormationClientTypes.StackInstanceResourceDriftsSummary]() + for structureContainer0 in summariesContainer { + summariesBuffer?.append(structureContainer0) + } + } + summaries = summariesBuffer + } else { + summaries = [] + } + } else { + summaries = nil + } + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + extension ListStackInstancesInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var container = encoder.container(keyedBy: ClientRuntime.Key.self) @@ -13968,7 +14256,7 @@ extension CloudFormationClientTypes.RollbackConfiguration: Swift.Codable { } extension CloudFormationClientTypes { - /// Structure containing the rollback triggers for CloudFormation to monitor during stack creation and updating operations, and for the specified monitoring period afterwards. Rollback triggers enable you to have CloudFormation monitor the state of your application during stack creation and updating, and to roll back that operation if the application breaches the threshold of any of the alarms you've specified. For more information, see [Monitor and Roll Back Stack Operations](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-rollback-triggers.html). + /// Structure containing the rollback triggers for CloudFormation to monitor during stack creation and updating operations, and for the specified monitoring period afterwards. Rollback triggers enable you to have CloudFormation monitor the state of your application during stack creation and updating, and to roll back that operation if the application breaches the threshold of any of the alarms you've specified. For more information, see [Monitor and Roll Back Stack Operations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-rollback-triggers.html). public struct RollbackConfiguration: Swift.Equatable { /// The amount of time, in minutes, during which CloudFormation should monitor all the rollback triggers after the stack creation or update operation deploys all necessary resources. The default is 0 minutes. If you specify a monitoring period but don't specify any rollback triggers, CloudFormation still waits the specified period of time before cleaning up old resources after update operations. You can use this monitoring period to perform any manual stack validation desired, and manually cancel the stack creation or update (using [CancelUpdateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CancelUpdateStack.html), for example) as necessary. If you specify 0 for this parameter, CloudFormation still monitors the specified rollback triggers during stack creation and update operations. Then, for update operations, it begins disposing of old resources immediately once the operation completes. public var monitoringTimeInMinutes: Swift.Int? @@ -14002,6 +14290,9 @@ extension RollbackStackInput: Swift.Encodable { if let clientRequestToken = clientRequestToken { try container.encode(clientRequestToken, forKey: ClientRuntime.Key("ClientRequestToken")) } + if let retainExceptOnCreate = retainExceptOnCreate { + try container.encode(retainExceptOnCreate, forKey: ClientRuntime.Key("RetainExceptOnCreate")) + } if let roleARN = roleARN { try container.encode(roleARN, forKey: ClientRuntime.Key("RoleARN")) } @@ -14022,6 +14313,8 @@ extension RollbackStackInput: ClientRuntime.URLPathProvider { public struct RollbackStackInput: Swift.Equatable { /// A unique identifier for this RollbackStack request. public var clientRequestToken: Swift.String? + /// This deletion policy deletes newly created resources, but retains existing resources, when a stack operation is rolled back. This ensures new, empty, and unused resources are deleted, while critical resources and their data are retained. RetainExceptOnCreate can be specified for any resource that supports the [ DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html) attribute. + public var retainExceptOnCreate: Swift.Bool? /// The Amazon Resource Name (ARN) of an Identity and Access Management role that CloudFormation assumes to rollback the stack. public var roleARN: Swift.String? /// The name that's associated with the stack. @@ -14030,11 +14323,13 @@ public struct RollbackStackInput: Swift.Equatable { public init( clientRequestToken: Swift.String? = nil, + retainExceptOnCreate: Swift.Bool? = nil, roleARN: Swift.String? = nil, stackName: Swift.String? = nil ) { self.clientRequestToken = clientRequestToken + self.retainExceptOnCreate = retainExceptOnCreate self.roleARN = roleARN self.stackName = stackName } @@ -14044,11 +14339,13 @@ struct RollbackStackInputBody: Swift.Equatable { let stackName: Swift.String? let roleARN: Swift.String? let clientRequestToken: Swift.String? + let retainExceptOnCreate: Swift.Bool? } extension RollbackStackInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case clientRequestToken = "ClientRequestToken" + case retainExceptOnCreate = "RetainExceptOnCreate" case roleARN = "RoleARN" case stackName = "StackName" } @@ -14061,6 +14358,8 @@ extension RollbackStackInputBody: Swift.Decodable { roleARN = roleARNDecoded let clientRequestTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientRequestToken) clientRequestToken = clientRequestTokenDecoded + let retainExceptOnCreateDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .retainExceptOnCreate) + retainExceptOnCreate = retainExceptOnCreateDecoded } } @@ -14608,6 +14907,7 @@ extension CloudFormationClientTypes.Stack: Swift.Codable { case outputs = "Outputs" case parameters = "Parameters" case parentId = "ParentId" + case retainExceptOnCreate = "RetainExceptOnCreate" case roleARN = "RoleARN" case rollbackConfiguration = "RollbackConfiguration" case rootId = "RootId" @@ -14696,6 +14996,9 @@ extension CloudFormationClientTypes.Stack: Swift.Codable { if let parentId = parentId { try container.encode(parentId, forKey: ClientRuntime.Key("ParentId")) } + if let retainExceptOnCreate = retainExceptOnCreate { + try container.encode(retainExceptOnCreate, forKey: ClientRuntime.Key("RetainExceptOnCreate")) + } if let roleARN = roleARN { try container.encode(roleARN, forKey: ClientRuntime.Key("RoleARN")) } @@ -14865,6 +15168,8 @@ extension CloudFormationClientTypes.Stack: Swift.Codable { rootId = rootIdDecoded let driftInformationDecoded = try containerValues.decodeIfPresent(CloudFormationClientTypes.StackDriftInformation.self, forKey: .driftInformation) driftInformation = driftInformationDecoded + let retainExceptOnCreateDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .retainExceptOnCreate) + retainExceptOnCreate = retainExceptOnCreateDecoded } } @@ -14888,9 +15193,9 @@ extension CloudFormationClientTypes { /// /// * false: enable rollback. public var disableRollback: Swift.Bool? - /// Information about whether a stack's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). + /// Information about whether a stack's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). public var driftInformation: CloudFormationClientTypes.StackDriftInformation? - /// Whether termination protection is enabled for the stack. For [nested stacks](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html), termination protection is set on the root stack and can't be changed directly on the nested stack. For more information, see [Protecting a Stack From Being Deleted](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html) in the CloudFormation User Guide. + /// Whether termination protection is enabled for the stack. For [nested stacks](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html), termination protection is set on the root stack and can't be changed directly on the nested stack. For more information, see [Protecting a Stack From Being Deleted](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html) in the CloudFormation User Guide. public var enableTerminationProtection: Swift.Bool? /// The time the stack was last updated. This field will only be returned if the stack has been updated at least once. public var lastUpdatedTime: ClientRuntime.Date? @@ -14900,13 +15205,15 @@ extension CloudFormationClientTypes { public var outputs: [CloudFormationClientTypes.Output]? /// A list of Parameter structures. public var parameters: [CloudFormationClientTypes.Parameter]? - /// For nested stacks--stacks created as resources for another stack--the stack ID of the direct parent of this stack. For the first level of nested stacks, the root stack is also the parent stack. For more information, see [Working with Nested Stacks](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) in the CloudFormation User Guide. + /// For nested stacks--stacks created as resources for another stack--the stack ID of the direct parent of this stack. For the first level of nested stacks, the root stack is also the parent stack. For more information, see [Working with Nested Stacks](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) in the CloudFormation User Guide. public var parentId: Swift.String? + /// This deletion policy deletes newly created resources, but retains existing resources, when a stack operation is rolled back. This ensures new, empty, and unused resources are deleted, while critical resources and their data are retained. RetainExceptOnCreate can be specified for any resource that supports the [ DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html) attribute. + public var retainExceptOnCreate: Swift.Bool? /// The Amazon Resource Name (ARN) of an Identity and Access Management (IAM) role that's associated with the stack. During a stack operation, CloudFormation uses this role's credentials to make calls on your behalf. public var roleARN: Swift.String? /// The rollback triggers for CloudFormation to monitor during stack creation and updating operations, and for the specified monitoring period afterwards. public var rollbackConfiguration: CloudFormationClientTypes.RollbackConfiguration? - /// For nested stacks--stacks created as resources for another stack--the stack ID of the top-level stack to which the nested stack ultimately belongs. For more information, see [Working with Nested Stacks](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) in the CloudFormation User Guide. + /// For nested stacks--stacks created as resources for another stack--the stack ID of the top-level stack to which the nested stack ultimately belongs. For more information, see [Working with Nested Stacks](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) in the CloudFormation User Guide. public var rootId: Swift.String? /// Unique identifier of the stack. public var stackId: Swift.String? @@ -14937,6 +15244,7 @@ extension CloudFormationClientTypes { outputs: [CloudFormationClientTypes.Output]? = nil, parameters: [CloudFormationClientTypes.Parameter]? = nil, parentId: Swift.String? = nil, + retainExceptOnCreate: Swift.Bool? = nil, roleARN: Swift.String? = nil, rollbackConfiguration: CloudFormationClientTypes.RollbackConfiguration? = nil, rootId: Swift.String? = nil, @@ -14961,6 +15269,7 @@ extension CloudFormationClientTypes { self.outputs = outputs self.parameters = parameters self.parentId = parentId + self.retainExceptOnCreate = retainExceptOnCreate self.roleARN = roleARN self.rollbackConfiguration = rollbackConfiguration self.rootId = rootId @@ -15683,12 +15992,14 @@ extension CloudFormationClientTypes { extension CloudFormationClientTypes { public enum StackInstanceFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case detailedStatus + case driftStatus case lastOperationId case sdkUnknown(Swift.String) public static var allCases: [StackInstanceFilterName] { return [ .detailedStatus, + .driftStatus, .lastOperationId, .sdkUnknown("") ] @@ -15700,6 +16011,7 @@ extension CloudFormationClientTypes { public var rawValue: Swift.String { switch self { case .detailedStatus: return "DETAILED_STATUS" + case .driftStatus: return "DRIFT_STATUS" case .lastOperationId: return "LAST_OPERATION_ID" case let .sdkUnknown(s): return s } @@ -15766,6 +16078,176 @@ extension StackInstanceNotFoundExceptionBody: Swift.Decodable { } } +extension CloudFormationClientTypes.StackInstanceResourceDriftsSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case logicalResourceId = "LogicalResourceId" + case physicalResourceId = "PhysicalResourceId" + case physicalResourceIdContext = "PhysicalResourceIdContext" + case propertyDifferences = "PropertyDifferences" + case resourceType = "ResourceType" + case stackId = "StackId" + case stackResourceDriftStatus = "StackResourceDriftStatus" + case timestamp = "Timestamp" + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let logicalResourceId = logicalResourceId { + try container.encode(logicalResourceId, forKey: ClientRuntime.Key("LogicalResourceId")) + } + if let physicalResourceId = physicalResourceId { + try container.encode(physicalResourceId, forKey: ClientRuntime.Key("PhysicalResourceId")) + } + if let physicalResourceIdContext = physicalResourceIdContext { + if !physicalResourceIdContext.isEmpty { + var physicalResourceIdContextContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("PhysicalResourceIdContext")) + for (index0, physicalresourceidcontextkeyvaluepair0) in physicalResourceIdContext.enumerated() { + try physicalResourceIdContextContainer.encode(physicalresourceidcontextkeyvaluepair0, forKey: ClientRuntime.Key("member.\(index0.advanced(by: 1))")) + } + } + else { + var physicalResourceIdContextContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("PhysicalResourceIdContext")) + try physicalResourceIdContextContainer.encode("", forKey: ClientRuntime.Key("")) + } + } + if let propertyDifferences = propertyDifferences { + if !propertyDifferences.isEmpty { + var propertyDifferencesContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("PropertyDifferences")) + for (index0, propertydifference0) in propertyDifferences.enumerated() { + try propertyDifferencesContainer.encode(propertydifference0, forKey: ClientRuntime.Key("member.\(index0.advanced(by: 1))")) + } + } + else { + var propertyDifferencesContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("PropertyDifferences")) + try propertyDifferencesContainer.encode("", forKey: ClientRuntime.Key("")) + } + } + if let resourceType = resourceType { + try container.encode(resourceType, forKey: ClientRuntime.Key("ResourceType")) + } + if let stackId = stackId { + try container.encode(stackId, forKey: ClientRuntime.Key("StackId")) + } + if let stackResourceDriftStatus = stackResourceDriftStatus { + try container.encode(stackResourceDriftStatus, forKey: ClientRuntime.Key("StackResourceDriftStatus")) + } + if let timestamp = timestamp { + try container.encodeTimestamp(timestamp, format: .dateTime, forKey: ClientRuntime.Key("timestamp")) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let stackIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .stackId) + stackId = stackIdDecoded + let logicalResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .logicalResourceId) + logicalResourceId = logicalResourceIdDecoded + let physicalResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .physicalResourceId) + physicalResourceId = physicalResourceIdDecoded + if containerValues.contains(.physicalResourceIdContext) { + struct KeyVal0{struct member{}} + let physicalResourceIdContextWrappedContainer = containerValues.nestedContainerNonThrowable(keyedBy: CollectionMemberCodingKey.CodingKeys.self, forKey: .physicalResourceIdContext) + if let physicalResourceIdContextWrappedContainer = physicalResourceIdContextWrappedContainer { + let physicalResourceIdContextContainer = try physicalResourceIdContextWrappedContainer.decodeIfPresent([CloudFormationClientTypes.PhysicalResourceIdContextKeyValuePair].self, forKey: .member) + var physicalResourceIdContextBuffer:[CloudFormationClientTypes.PhysicalResourceIdContextKeyValuePair]? = nil + if let physicalResourceIdContextContainer = physicalResourceIdContextContainer { + physicalResourceIdContextBuffer = [CloudFormationClientTypes.PhysicalResourceIdContextKeyValuePair]() + for structureContainer0 in physicalResourceIdContextContainer { + physicalResourceIdContextBuffer?.append(structureContainer0) + } + } + physicalResourceIdContext = physicalResourceIdContextBuffer + } else { + physicalResourceIdContext = [] + } + } else { + physicalResourceIdContext = nil + } + let resourceTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceType) + resourceType = resourceTypeDecoded + if containerValues.contains(.propertyDifferences) { + struct KeyVal0{struct member{}} + let propertyDifferencesWrappedContainer = containerValues.nestedContainerNonThrowable(keyedBy: CollectionMemberCodingKey.CodingKeys.self, forKey: .propertyDifferences) + if let propertyDifferencesWrappedContainer = propertyDifferencesWrappedContainer { + let propertyDifferencesContainer = try propertyDifferencesWrappedContainer.decodeIfPresent([CloudFormationClientTypes.PropertyDifference].self, forKey: .member) + var propertyDifferencesBuffer:[CloudFormationClientTypes.PropertyDifference]? = nil + if let propertyDifferencesContainer = propertyDifferencesContainer { + propertyDifferencesBuffer = [CloudFormationClientTypes.PropertyDifference]() + for structureContainer0 in propertyDifferencesContainer { + propertyDifferencesBuffer?.append(structureContainer0) + } + } + propertyDifferences = propertyDifferencesBuffer + } else { + propertyDifferences = [] + } + } else { + propertyDifferences = nil + } + let stackResourceDriftStatusDecoded = try containerValues.decodeIfPresent(CloudFormationClientTypes.StackResourceDriftStatus.self, forKey: .stackResourceDriftStatus) + stackResourceDriftStatus = stackResourceDriftStatusDecoded + let timestampDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .timestamp) + timestamp = timestampDecoded + } +} + +extension CloudFormationClientTypes { + /// The structure containing summary information about resource drifts for a stack instance. + public struct StackInstanceResourceDriftsSummary: Swift.Equatable { + /// The logical name of the resource specified in the template. + /// This member is required. + public var logicalResourceId: Swift.String? + /// The name or unique identifier that corresponds to a physical instance ID of a resource supported by CloudFormation. + public var physicalResourceId: Swift.String? + /// Context information that enables CloudFormation to uniquely identify a resource. CloudFormation uses context key-value pairs in cases where a resource's logical and physical IDs aren't enough to uniquely identify that resource. Each context key-value pair specifies a unique resource that contains the targeted resource. + public var physicalResourceIdContext: [CloudFormationClientTypes.PhysicalResourceIdContextKeyValuePair]? + /// Status of the actual configuration of the resource compared to its expected configuration. These will be present only for resources whose StackInstanceResourceDriftStatus is MODIFIED. + public var propertyDifferences: [CloudFormationClientTypes.PropertyDifference]? + /// Type of resource. For more information, go to [Amazon Web Services Resource Types Reference](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) in the CloudFormation User Guide. + /// This member is required. + public var resourceType: Swift.String? + /// The ID of the stack instance. + /// This member is required. + public var stackId: Swift.String? + /// The drift status of the resource in a stack instance. + /// + /// * DELETED: The resource differs from its expected template configuration in that the resource has been deleted. + /// + /// * MODIFIED: One or more resource properties differ from their expected template values. + /// + /// * IN_SYNC: The resource's actual configuration matches its expected template configuration. + /// + /// * NOT_CHECKED: CloudFormation doesn't currently return this value. + /// This member is required. + public var stackResourceDriftStatus: CloudFormationClientTypes.StackResourceDriftStatus? + /// Time at which the stack instance drift detection operation was initiated. + /// This member is required. + public var timestamp: ClientRuntime.Date? + + public init( + logicalResourceId: Swift.String? = nil, + physicalResourceId: Swift.String? = nil, + physicalResourceIdContext: [CloudFormationClientTypes.PhysicalResourceIdContextKeyValuePair]? = nil, + propertyDifferences: [CloudFormationClientTypes.PropertyDifference]? = nil, + resourceType: Swift.String? = nil, + stackId: Swift.String? = nil, + stackResourceDriftStatus: CloudFormationClientTypes.StackResourceDriftStatus? = nil, + timestamp: ClientRuntime.Date? = nil + ) + { + self.logicalResourceId = logicalResourceId + self.physicalResourceId = physicalResourceId + self.physicalResourceIdContext = physicalResourceIdContext + self.propertyDifferences = propertyDifferences + self.resourceType = resourceType + self.stackId = stackId + self.stackResourceDriftStatus = stackResourceDriftStatus + self.timestamp = timestamp + } + } + +} + extension CloudFormationClientTypes { public enum StackInstanceStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case current @@ -16095,7 +16577,7 @@ extension CloudFormationClientTypes { public struct StackResource: Swift.Equatable { /// User defined description associated with the resource. public var description: Swift.String? - /// Information about whether the resource's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). + /// Information about whether the resource's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). public var driftInformation: CloudFormationClientTypes.StackResourceDriftInformation? /// The logical name of the resource specified in the template. /// This member is required. @@ -16240,7 +16722,7 @@ extension CloudFormationClientTypes { public struct StackResourceDetail: Swift.Equatable { /// User defined description associated with the resource. public var description: Swift.String? - /// Information about whether the resource's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). + /// Information about whether the resource's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). public var driftInformation: CloudFormationClientTypes.StackResourceDriftInformation? /// Time the status was updated. /// This member is required. @@ -16431,7 +16913,7 @@ extension CloudFormationClientTypes.StackResourceDrift: Swift.Codable { } extension CloudFormationClientTypes { - /// Contains the drift information for a resource that has been checked for drift. This includes actual and expected property values for resources in which CloudFormation has detected drift. Only resource properties explicitly defined in the stack template are checked for drift. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). Resources that don't currently support drift detection can't be checked. For a list of resources that support drift detection, see [Resources that Support Drift Detection](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift-resource-list.html). Use [DetectStackResourceDrift] to detect drift on individual resources, or [DetectStackDrift] to detect drift on all resources in a given stack that support drift detection. + /// Contains the drift information for a resource that has been checked for drift. This includes actual and expected property values for resources in which CloudFormation has detected drift. Only resource properties explicitly defined in the stack template are checked for drift. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). Resources that don't currently support drift detection can't be checked. For a list of resources that support drift detection, see [Resources that Support Drift Detection](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift-resource-list.html). Use [DetectStackResourceDrift] to detect drift on individual resources, or [DetectStackDrift] to detect drift on all resources in a given stack that support drift detection. public struct StackResourceDrift: Swift.Equatable { /// A JSON structure containing the actual property values of the stack resource. For resources whose StackResourceDriftStatus is DELETED, this structure will not be present. public var actualProperties: Swift.String? @@ -16709,7 +17191,7 @@ extension CloudFormationClientTypes.StackResourceSummary: Swift.Codable { extension CloudFormationClientTypes { /// Contains high-level information about the specified stack resource. public struct StackResourceSummary: Swift.Equatable { - /// Information about whether the resource's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). + /// Information about whether the resource's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). public var driftInformation: CloudFormationClientTypes.StackResourceDriftInformationSummary? /// Time the status was updated. /// This member is required. @@ -17002,7 +17484,7 @@ extension CloudFormationClientTypes.StackSet: Swift.Codable { extension CloudFormationClientTypes { /// A structure that contains information about a stack set. A stack set enables you to provision stacks into Amazon Web Services accounts and across Regions by using a single CloudFormation template. In the stack set, you specify the template to use, in addition to any parameters and capabilities that the template requires. public struct StackSet: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the IAM role used to create or update the stack set. Use customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see [Prerequisites: Granting Permissions for Stack Set Operations](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html) in the CloudFormation User Guide. + /// The Amazon Resource Name (ARN) of the IAM role used to create or update the stack set. Use customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see [Prerequisites: Granting Permissions for Stack Set Operations](https://docs.aws.amazon.com/AWSCloudFormation/stacksets-prereqs.html) in the CloudFormation User Guide. public var administrationRoleARN: Swift.String? /// [Service-managed permissions] Describes whether StackSets automatically deploys to Organizations accounts that are added to a target organization or organizational unit (OU). public var autoDeployment: CloudFormationClientTypes.AutoDeployment? @@ -17498,7 +17980,7 @@ extension CloudFormationClientTypes { public struct StackSetOperation: Swift.Equatable { /// The type of stack set operation: CREATE, UPDATE, or DELETE. Create and delete operations affect only the specified stack set instances that are associated with the specified stack set. Update operations affect both the stack set itself, in addition to all associated stack set instances. public var action: CloudFormationClientTypes.StackSetOperationAction? - /// The Amazon Resource Name (ARN) of the IAM role used to perform this stack set operation. Use customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see [Define Permissions for Multiple Administrators](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html) in the CloudFormation User Guide. + /// The Amazon Resource Name (ARN) of the IAM role used to perform this stack set operation. Use customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see [Define Permissions for Multiple Administrators](https://docs.aws.amazon.com/AWSCloudFormation/stacksets-prereqs.html) in the CloudFormation User Guide. public var administrationRoleARN: Swift.String? /// The time at which the operation was initiated. Note that the creation times for the stack set operation might differ from the creation time of the individual stacks themselves. This is because CloudFormation needs to perform preparatory work for the operation, such as dispatching the work to the requested Regions, before actually creating the first stacks. public var creationTimestamp: ClientRuntime.Date? @@ -18395,13 +18877,13 @@ extension CloudFormationClientTypes { public var creationTime: ClientRuntime.Date? /// The time the stack was deleted. public var deletionTime: ClientRuntime.Date? - /// Summarizes information about whether a stack's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). + /// Summarizes information about whether a stack's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters. For more information, see [Detecting Unregulated Configuration Changes to Stacks and Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). public var driftInformation: CloudFormationClientTypes.StackDriftInformationSummary? /// The time the stack was last updated. This field will only be returned if the stack has been updated at least once. public var lastUpdatedTime: ClientRuntime.Date? - /// For nested stacks--stacks created as resources for another stack--the stack ID of the direct parent of this stack. For the first level of nested stacks, the root stack is also the parent stack. For more information, see [Working with Nested Stacks](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) in the CloudFormation User Guide. + /// For nested stacks--stacks created as resources for another stack--the stack ID of the direct parent of this stack. For the first level of nested stacks, the root stack is also the parent stack. For more information, see [Working with Nested Stacks](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) in the CloudFormation User Guide. public var parentId: Swift.String? - /// For nested stacks--stacks created as resources for another stack--the stack ID of the top-level stack to which the nested stack ultimately belongs. For more information, see [Working with Nested Stacks](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) in the CloudFormation User Guide. + /// For nested stacks--stacks created as resources for another stack--the stack ID of the top-level stack to which the nested stack ultimately belongs. For more information, see [Working with Nested Stacks](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html) in the CloudFormation User Guide. public var rootId: Swift.String? /// Unique stack identifier. public var stackId: Swift.String? @@ -18739,6 +19221,41 @@ extension CloudFormationClientTypes { } } +extension CloudFormationClientTypes.TemplateSummaryConfig: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case treatUnrecognizedResourceTypesAsWarnings = "TreatUnrecognizedResourceTypesAsWarnings" + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let treatUnrecognizedResourceTypesAsWarnings = treatUnrecognizedResourceTypesAsWarnings { + try container.encode(treatUnrecognizedResourceTypesAsWarnings, forKey: ClientRuntime.Key("TreatUnrecognizedResourceTypesAsWarnings")) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let treatUnrecognizedResourceTypesAsWarningsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .treatUnrecognizedResourceTypesAsWarnings) + treatUnrecognizedResourceTypesAsWarnings = treatUnrecognizedResourceTypesAsWarningsDecoded + } +} + +extension CloudFormationClientTypes { + /// Options for the GetTemplateSummary API action. + public struct TemplateSummaryConfig: Swift.Equatable { + /// If set to True, any unrecognized resource types generate warnings and not an error. Any unrecognized resource types are returned in the Warnings output parameter. + public var treatUnrecognizedResourceTypesAsWarnings: Swift.Bool? + + public init( + treatUnrecognizedResourceTypesAsWarnings: Swift.Bool? = nil + ) + { + self.treatUnrecognizedResourceTypesAsWarnings = treatUnrecognizedResourceTypesAsWarnings + } + } + +} + extension TestTypeInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var container = encoder.container(keyedBy: ClientRuntime.Key.self) @@ -19164,6 +19681,7 @@ extension TypeConfigurationNotFoundException { public struct TypeConfigurationNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { + /// An message with details about the error that occurred. public internal(set) var message: Swift.String? = nil } @@ -19288,6 +19806,7 @@ extension TypeNotFoundException { public struct TypeNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { + /// An message with details about the error that occurred. public internal(set) var message: Swift.String? = nil } @@ -19686,6 +20205,9 @@ extension UpdateStackInput: Swift.Encodable { try resourceTypesContainer.encode("", forKey: ClientRuntime.Key("")) } } + if let retainExceptOnCreate = retainExceptOnCreate { + try container.encode(retainExceptOnCreate, forKey: ClientRuntime.Key("RetainExceptOnCreate")) + } if let roleARN = roleARN { try container.encode(roleARN, forKey: ClientRuntime.Key("RoleARN")) } @@ -19769,9 +20291,9 @@ public struct UpdateStackInput: Swift.Equatable { /// * [AWS::IAM::UserToGroupAddition](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html) /// /// - /// For more information, see [Acknowledging IAM Resources in CloudFormation Templates](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities). + /// For more information, see [Acknowledging IAM Resources in CloudFormation Templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities). /// - /// * CAPABILITY_AUTO_EXPAND Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually updating the stack. If your stack template contains one or more macros, and you choose to update a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the [AWS::Include](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) and [AWS::Serverless](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html) transforms, which are macros hosted by CloudFormation. If you want to update a stack from a stack template that contains macros and nested stacks, you must update the stack directly from the template using this capability. You should only update stacks directly from a stack template that contains macros if you know what processing the macro performs. Each macro relies on an underlying Lambda service function for processing stack templates. Be aware that the Lambda function owner can update the function operation without CloudFormation being notified. For more information, see [Using CloudFormation Macros to Perform Custom Processing on Templates](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html). + /// * CAPABILITY_AUTO_EXPAND Some template contain macros. Macros perform custom processing on templates; this can include simple actions like find-and-replace operations, all the way to extensive transformations of entire templates. Because of this, users typically create a change set from the processed template, so that they can review the changes resulting from the macros before actually updating the stack. If your stack template contains one or more macros, and you choose to update a stack directly from the processed template, without first reviewing the resulting changes in a change set, you must acknowledge this capability. This includes the [AWS::Include](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) and [AWS::Serverless](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html) transforms, which are macros hosted by CloudFormation. If you want to update a stack from a stack template that contains macros and nested stacks, you must update the stack directly from the template using this capability. You should only update stacks directly from a stack template that contains macros if you know what processing the macro performs. Each macro relies on an underlying Lambda service function for processing stack templates. Be aware that the Lambda function owner can update the function operation without CloudFormation being notified. For more information, see [Using CloudFormation Macros to Perform Custom Processing on Templates](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html). public var capabilities: [CloudFormationClientTypes.Capability]? /// A unique identifier for this UpdateStack request. Specify this token if you plan to retry requests so that CloudFormation knows that you're not attempting to update a stack with the same name. You might retry UpdateStack requests to ensure that CloudFormation successfully received them. All events triggered by a given stack operation are assigned the same client request token, which you can use to track operations. For example, if you execute a CreateStack operation with the token token1, then all the StackEvents generated by that operation will have ClientRequestToken set as token1. In the console, stack operations display the client request token on the Events tab. Stack operations that are initiated from the console use the token format Console-StackOperation-ID, which helps you easily identify the stack operation . For example, if you create a stack using the console, each stack event would be assigned the same token in the following format: Console-CreateStack-7f59c3cf-00d2-40c7-b2ff-e75db0987002. public var clientRequestToken: Swift.String? @@ -19783,6 +20305,8 @@ public struct UpdateStackInput: Swift.Equatable { public var parameters: [CloudFormationClientTypes.Parameter]? /// The template resource types that you have permissions to work with for this update stack action, such as AWS::EC2::Instance, AWS::EC2::*, or Custom::MyCustomInstance. If the list of resource types doesn't include a resource that you're updating, the stack update fails. By default, CloudFormation grants permissions to all resource types. Identity and Access Management (IAM) uses this parameter for CloudFormation-specific condition keys in IAM policies. For more information, see [Controlling Access with Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html). public var resourceTypes: [Swift.String]? + /// This deletion policy deletes newly created resources, but retains existing resources, when a stack operation is rolled back. This ensures new, empty, and unused resources are deleted, while critical resources and their data are retained. RetainExceptOnCreate can be specified for any resource that supports the [ DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html) attribute. + public var retainExceptOnCreate: Swift.Bool? /// The Amazon Resource Name (ARN) of an Identity and Access Management (IAM) role that CloudFormation assumes to update the stack. CloudFormation uses the role's credentials to make calls on your behalf. CloudFormation always uses this role for all future operations on the stack. Provided that users have permission to operate on the stack, CloudFormation uses this role even if the users don't have permission to pass it. Ensure that the role grants least privilege. If you don't specify a value, CloudFormation uses the role that was previously associated with the stack. If no role is available, CloudFormation uses a temporary session that is generated from your user credentials. public var roleARN: Swift.String? /// The rollback triggers for CloudFormation to monitor during stack creation and updating operations, and for the specified monitoring period afterwards. @@ -19814,6 +20338,7 @@ public struct UpdateStackInput: Swift.Equatable { notificationARNs: [Swift.String]? = nil, parameters: [CloudFormationClientTypes.Parameter]? = nil, resourceTypes: [Swift.String]? = nil, + retainExceptOnCreate: Swift.Bool? = nil, roleARN: Swift.String? = nil, rollbackConfiguration: CloudFormationClientTypes.RollbackConfiguration? = nil, stackName: Swift.String? = nil, @@ -19833,6 +20358,7 @@ public struct UpdateStackInput: Swift.Equatable { self.notificationARNs = notificationARNs self.parameters = parameters self.resourceTypes = resourceTypes + self.retainExceptOnCreate = retainExceptOnCreate self.roleARN = roleARN self.rollbackConfiguration = rollbackConfiguration self.stackName = stackName @@ -19865,6 +20391,7 @@ struct UpdateStackInputBody: Swift.Equatable { let tags: [CloudFormationClientTypes.Tag]? let disableRollback: Swift.Bool? let clientRequestToken: Swift.String? + let retainExceptOnCreate: Swift.Bool? } extension UpdateStackInputBody: Swift.Decodable { @@ -19875,6 +20402,7 @@ extension UpdateStackInputBody: Swift.Decodable { case notificationARNs = "NotificationARNs" case parameters = "Parameters" case resourceTypes = "ResourceTypes" + case retainExceptOnCreate = "RetainExceptOnCreate" case roleARN = "RoleARN" case rollbackConfiguration = "RollbackConfiguration" case stackName = "StackName" @@ -20009,6 +20537,8 @@ extension UpdateStackInputBody: Swift.Decodable { disableRollback = disableRollbackDecoded let clientRequestTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientRequestToken) clientRequestToken = clientRequestTokenDecoded + let retainExceptOnCreateDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .retainExceptOnCreate) + retainExceptOnCreate = retainExceptOnCreateDecoded } } @@ -20457,7 +20987,7 @@ extension UpdateStackSetInput: ClientRuntime.URLPathProvider { public struct UpdateStackSetInput: Swift.Equatable { /// [Self-managed permissions] The accounts in which to update associated stack instances. If you specify accounts, you must also specify the Amazon Web Services Regions in which to update stack set instances. To update all the stack instances associated with this stack set, don't specify the Accounts or Regions properties. If the stack set update includes changes to the template (that is, if the TemplateBody or TemplateURL properties are specified), or the Parameters property, CloudFormation marks all stack instances with a status of OUTDATED prior to updating the stack instances in the specified accounts and Amazon Web Services Regions. If the stack set update does not include changes to the template or parameters, CloudFormation updates the stack instances in the specified accounts and Amazon Web Services Regions, while leaving all other stack instances with their existing stack instance status. public var accounts: [Swift.String]? - /// The Amazon Resource Name (ARN) of the IAM role to use to update this stack set. Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see [Granting Permissions for Stack Set Operations](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html) in the CloudFormation User Guide. If you specified a customized administrator role when you created the stack set, you must specify a customized administrator role, even if it is the same customized administrator role used with this stack set previously. + /// The Amazon Resource Name (ARN) of the IAM role to use to update this stack set. Specify an IAM role only if you are using customized administrator roles to control which users or groups can manage specific stack sets within the same administrator account. For more information, see [Granting Permissions for Stack Set Operations](https://docs.aws.amazon.com/AWSCloudFormation/stacksets-prereqs.html) in the CloudFormation User Guide. If you specified a customized administrator role when you created the stack set, you must specify a customized administrator role, even if it is the same customized administrator role used with this stack set previously. public var administrationRoleARN: Swift.String? /// [Service-managed permissions] Describes whether StackSets automatically deploys to Organizations accounts that are added to a target organization or organizational unit (OU). If you specify AutoDeployment, don't specify DeploymentTargets or Regions. public var autoDeployment: CloudFormationClientTypes.AutoDeployment? @@ -20495,9 +21025,9 @@ public struct UpdateStackSetInput: Swift.Equatable { /// * [ AWS::IAM::UserToGroupAddition](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html) /// /// - /// For more information, see [Acknowledging IAM Resources in CloudFormation Templates](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html#capabilities). + /// For more information, see [Acknowledging IAM Resources in CloudFormation Templates](https://docs.aws.amazon.com/AWSCloudFormation/using-iam-template.html#capabilities). /// - /// * CAPABILITY_AUTO_EXPAND Some templates reference macros. If your stack set template references one or more macros, you must update the stack set directly from the processed template, without first reviewing the resulting changes in a change set. To update the stack set directly, you must acknowledge this capability. For more information, see [Using CloudFormation Macros to Perform Custom Processing on Templates](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html). Stack sets with service-managed permissions do not currently support the use of macros in templates. (This includes the [AWS::Include](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) and [AWS::Serverless](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-aws-serverless.html) transforms, which are macros hosted by CloudFormation.) Even if you specify this capability for a stack set with service-managed permissions, if you reference a macro in your template the stack set operation will fail. + /// * CAPABILITY_AUTO_EXPAND Some templates reference macros. If your stack set template references one or more macros, you must update the stack set directly from the processed template, without first reviewing the resulting changes in a change set. To update the stack set directly, you must acknowledge this capability. For more information, see [Using CloudFormation Macros to Perform Custom Processing on Templates](https://docs.aws.amazon.com/AWSCloudFormation/template-macros.html). Stack sets with service-managed permissions do not currently support the use of macros in templates. (This includes the [AWS::Include](https://docs.aws.amazon.com/AWSCloudFormation/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) and [AWS::Serverless](https://docs.aws.amazon.com/AWSCloudFormation/transform-aws-serverless.html) transforms, which are macros hosted by CloudFormation.) Even if you specify this capability for a stack set with service-managed permissions, if you reference a macro in your template the stack set operation will fail. public var capabilities: [CloudFormationClientTypes.Capability]? /// [Service-managed permissions] The Organizations accounts in which to update associated stack instances. To update all the stack instances associated with this stack set, do not specify DeploymentTargets or Regions. If the stack set update includes changes to the template (that is, if TemplateBody or TemplateURL is specified), or the Parameters, CloudFormation marks all stack instances with a status of OUTDATED prior to updating the stack instances in the specified accounts and Amazon Web Services Regions. If the stack set update doesn't include changes to the template or parameters, CloudFormation updates the stack instances in the specified accounts and Regions, while leaving all other stack instances with their existing stack instance status. public var deploymentTargets: CloudFormationClientTypes.DeploymentTargets? @@ -21185,3 +21715,64 @@ extension CloudFormationClientTypes { } } } + +extension CloudFormationClientTypes.Warnings: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case unrecognizedResourceTypes = "UnrecognizedResourceTypes" + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let unrecognizedResourceTypes = unrecognizedResourceTypes { + if !unrecognizedResourceTypes.isEmpty { + var unrecognizedResourceTypesContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("UnrecognizedResourceTypes")) + for (index0, resourcetype0) in unrecognizedResourceTypes.enumerated() { + try unrecognizedResourceTypesContainer.encode(resourcetype0, forKey: ClientRuntime.Key("member.\(index0.advanced(by: 1))")) + } + } + else { + var unrecognizedResourceTypesContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("UnrecognizedResourceTypes")) + try unrecognizedResourceTypesContainer.encode("", forKey: ClientRuntime.Key("")) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + if containerValues.contains(.unrecognizedResourceTypes) { + struct KeyVal0{struct member{}} + let unrecognizedResourceTypesWrappedContainer = containerValues.nestedContainerNonThrowable(keyedBy: CollectionMemberCodingKey.CodingKeys.self, forKey: .unrecognizedResourceTypes) + if let unrecognizedResourceTypesWrappedContainer = unrecognizedResourceTypesWrappedContainer { + let unrecognizedResourceTypesContainer = try unrecognizedResourceTypesWrappedContainer.decodeIfPresent([Swift.String].self, forKey: .member) + var unrecognizedResourceTypesBuffer:[Swift.String]? = nil + if let unrecognizedResourceTypesContainer = unrecognizedResourceTypesContainer { + unrecognizedResourceTypesBuffer = [Swift.String]() + for stringContainer0 in unrecognizedResourceTypesContainer { + unrecognizedResourceTypesBuffer?.append(stringContainer0) + } + } + unrecognizedResourceTypes = unrecognizedResourceTypesBuffer + } else { + unrecognizedResourceTypes = [] + } + } else { + unrecognizedResourceTypes = nil + } + } +} + +extension CloudFormationClientTypes { + /// Contains any warnings returned by the GetTemplateSummary API action. + public struct Warnings: Swift.Equatable { + /// A list of all of the unrecognized resource types. This is only returned if the TemplateSummaryConfig parameter has the TreatUnrecognizedResourceTypesAsWarning configuration set to True. + public var unrecognizedResourceTypes: [Swift.String]? + + public init( + unrecognizedResourceTypes: [Swift.String]? = nil + ) + { + self.unrecognizedResourceTypes = unrecognizedResourceTypes + } + } + +} diff --git a/Sources/Services/AWSCloudFront/CloudFrontClient.swift b/Sources/Services/AWSCloudFront/CloudFrontClient.swift index 046d301c18e..ec6cfc45c13 100644 --- a/Sources/Services/AWSCloudFront/CloudFrontClient.swift +++ b/Sources/Services/AWSCloudFront/CloudFrontClient.swift @@ -103,7 +103,13 @@ extension CloudFrontClient: CloudFrontClientProtocol { return result } - /// Creates a staging distribution using the configuration of the provided primary distribution. A staging distribution is a copy of an existing distribution (called the primary distribution) that you can use in a continuous deployment workflow. After you create a staging distribution, you can use UpdateDistribution to modify the staging distribution's configuration. Then you can use CreateContinuousDeploymentPolicy to incrementally move traffic to the staging distribution. + /// Creates a staging distribution using the configuration of the provided primary distribution. A staging distribution is a copy of an existing distribution (called the primary distribution) that you can use in a continuous deployment workflow. After you create a staging distribution, you can use UpdateDistribution to modify the staging distribution's configuration. Then you can use CreateContinuousDeploymentPolicy to incrementally move traffic to the staging distribution. This API operation requires the following IAM permissions: + /// + /// * [GetDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistribution.html) + /// + /// * [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html) + /// + /// * [CopyDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CopyDistribution.html) public func copyDistribution(input: CopyDistributionInput) async throws -> CopyDistributionOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -291,7 +297,11 @@ extension CloudFrontClient: CloudFrontClientProtocol { return result } - /// Create a new distribution with tags. + /// Create a new distribution with tags. This API operation requires the following IAM permissions: + /// + /// * [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html) + /// + /// * [TagResource](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_TagResource.html) public func createDistributionWithTags(input: CreateDistributionWithTagsInput) async throws -> CreateDistributionWithTagsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3414,7 +3424,11 @@ extension CloudFrontClient: CloudFrontClientProtocol { return result } - /// Copies the staging distribution's configuration to its corresponding primary distribution. The primary distribution retains its Aliases (also known as alternate domain names or CNAMEs) and ContinuousDeploymentPolicyId value, but otherwise its configuration is overwritten to match the staging distribution. You can use this operation in a continuous deployment workflow after you have tested configuration changes on the staging distribution. After using a continuous deployment policy to move a portion of your domain name's traffic to the staging distribution and verifying that it works as intended, you can use this operation to copy the staging distribution's configuration to the primary distribution. This action will disable the continuous deployment policy and move your domain's traffic back to the primary distribution. + /// Copies the staging distribution's configuration to its corresponding primary distribution. The primary distribution retains its Aliases (also known as alternate domain names or CNAMEs) and ContinuousDeploymentPolicyId value, but otherwise its configuration is overwritten to match the staging distribution. You can use this operation in a continuous deployment workflow after you have tested configuration changes on the staging distribution. After using a continuous deployment policy to move a portion of your domain name's traffic to the staging distribution and verifying that it works as intended, you can use this operation to copy the staging distribution's configuration to the primary distribution. This action will disable the continuous deployment policy and move your domain's traffic back to the primary distribution. This API operation requires the following IAM permissions: + /// + /// * [GetDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistribution.html) + /// + /// * [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) public func updateDistributionWithStagingConfig(input: UpdateDistributionWithStagingConfigInput) async throws -> UpdateDistributionWithStagingConfigOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSCloudFront/CloudFrontClientProtocol.swift b/Sources/Services/AWSCloudFront/CloudFrontClientProtocol.swift index ea25a971ef5..e7c27be8f28 100644 --- a/Sources/Services/AWSCloudFront/CloudFrontClientProtocol.swift +++ b/Sources/Services/AWSCloudFront/CloudFrontClientProtocol.swift @@ -6,7 +6,13 @@ import ClientRuntime public protocol CloudFrontClientProtocol { /// Associates an alias (also known as a CNAME or an alternate domain name) with a CloudFront distribution. With this operation you can move an alias that's already in use on a CloudFront distribution to a different distribution in one step. This prevents the downtime that could occur if you first remove the alias from one distribution and then separately add the alias to another distribution. To use this operation to associate an alias with a distribution, you provide the alias and the ID of the target distribution for the alias. For more information, including how to set up the target distribution, prerequisites that you must complete, and other restrictions, see [Moving an alternate domain name to a different distribution](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-move) in the Amazon CloudFront Developer Guide. func associateAlias(input: AssociateAliasInput) async throws -> AssociateAliasOutputResponse - /// Creates a staging distribution using the configuration of the provided primary distribution. A staging distribution is a copy of an existing distribution (called the primary distribution) that you can use in a continuous deployment workflow. After you create a staging distribution, you can use UpdateDistribution to modify the staging distribution's configuration. Then you can use CreateContinuousDeploymentPolicy to incrementally move traffic to the staging distribution. + /// Creates a staging distribution using the configuration of the provided primary distribution. A staging distribution is a copy of an existing distribution (called the primary distribution) that you can use in a continuous deployment workflow. After you create a staging distribution, you can use UpdateDistribution to modify the staging distribution's configuration. Then you can use CreateContinuousDeploymentPolicy to incrementally move traffic to the staging distribution. This API operation requires the following IAM permissions: + /// + /// * [GetDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistribution.html) + /// + /// * [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html) + /// + /// * [CopyDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CopyDistribution.html) func copyDistribution(input: CopyDistributionInput) async throws -> CopyDistributionOutputResponse /// Creates a cache policy. After you create a cache policy, you can attach it to one or more cache behaviors. When it's attached to a cache behavior, the cache policy determines the following: /// @@ -23,7 +29,11 @@ public protocol CloudFrontClientProtocol { func createContinuousDeploymentPolicy(input: CreateContinuousDeploymentPolicyInput) async throws -> CreateContinuousDeploymentPolicyOutputResponse /// Creates a CloudFront distribution. func createDistribution(input: CreateDistributionInput) async throws -> CreateDistributionOutputResponse - /// Create a new distribution with tags. + /// Create a new distribution with tags. This API operation requires the following IAM permissions: + /// + /// * [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html) + /// + /// * [TagResource](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_TagResource.html) func createDistributionWithTags(input: CreateDistributionWithTagsInput) async throws -> CreateDistributionWithTagsOutputResponse /// Create a new field-level encryption configuration. func createFieldLevelEncryptionConfig(input: CreateFieldLevelEncryptionConfigInput) async throws -> CreateFieldLevelEncryptionConfigOutputResponse @@ -268,7 +278,11 @@ public protocol CloudFrontClientProtocol { /// /// * Submit an UpdateDistribution request, providing the distribution configuration. The new configuration replaces the existing configuration. The values that you specify in an UpdateDistribution request are not merged into your existing configuration. Make sure to include all fields: the ones that you modified and also the ones that you didn't. func updateDistribution(input: UpdateDistributionInput) async throws -> UpdateDistributionOutputResponse - /// Copies the staging distribution's configuration to its corresponding primary distribution. The primary distribution retains its Aliases (also known as alternate domain names or CNAMEs) and ContinuousDeploymentPolicyId value, but otherwise its configuration is overwritten to match the staging distribution. You can use this operation in a continuous deployment workflow after you have tested configuration changes on the staging distribution. After using a continuous deployment policy to move a portion of your domain name's traffic to the staging distribution and verifying that it works as intended, you can use this operation to copy the staging distribution's configuration to the primary distribution. This action will disable the continuous deployment policy and move your domain's traffic back to the primary distribution. + /// Copies the staging distribution's configuration to its corresponding primary distribution. The primary distribution retains its Aliases (also known as alternate domain names or CNAMEs) and ContinuousDeploymentPolicyId value, but otherwise its configuration is overwritten to match the staging distribution. You can use this operation in a continuous deployment workflow after you have tested configuration changes on the staging distribution. After using a continuous deployment policy to move a portion of your domain name's traffic to the staging distribution and verifying that it works as intended, you can use this operation to copy the staging distribution's configuration to the primary distribution. This action will disable the continuous deployment policy and move your domain's traffic back to the primary distribution. This API operation requires the following IAM permissions: + /// + /// * [GetDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistribution.html) + /// + /// * [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) func updateDistributionWithStagingConfig(input: UpdateDistributionWithStagingConfigInput) async throws -> UpdateDistributionWithStagingConfigOutputResponse /// Update a field-level encryption configuration. func updateFieldLevelEncryptionConfig(input: UpdateFieldLevelEncryptionConfigInput) async throws -> UpdateFieldLevelEncryptionConfigOutputResponse diff --git a/Sources/Services/AWSCloudFront/models/Models.swift b/Sources/Services/AWSCloudFront/models/Models.swift index d453522e66f..95fa755acb9 100644 --- a/Sources/Services/AWSCloudFront/models/Models.swift +++ b/Sources/Services/AWSCloudFront/models/Models.swift @@ -221,7 +221,7 @@ extension CloudFrontClientTypes.ActiveTrustedSigners: ClientRuntime.DynamicNodeE extension CloudFrontClientTypes { /// A list of Amazon Web Services accounts and the active CloudFront key pairs in each account that CloudFront can use to verify the signatures of signed URLs and signed cookies. public struct ActiveTrustedSigners: Swift.Equatable { - /// This field is true if any of the Amazon Web Services accounts in the list have active CloudFront key pairs that CloudFront can use to verify the signatures of signed URLs and signed cookies. If not, this field is false. + /// This field is true if any of the Amazon Web Services accounts in the list are configured as trusted signers. If not, this field is false. /// This member is required. public var enabled: Swift.Bool? /// A list of Amazon Web Services accounts and the identifiers of active CloudFront key pairs in each account that CloudFront can use to verify the signatures of signed URLs and signed cookies. @@ -3603,6 +3603,7 @@ extension CopyDistributionInput: ClientRuntime.DynamicNodeEncoding { extension CopyDistributionInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case callerReference = "CallerReference" + case enabled = "Enabled" } public func encode(to encoder: Swift.Encoder) throws { @@ -3613,6 +3614,9 @@ extension CopyDistributionInput: Swift.Encodable { if let callerReference = callerReference { try container.encode(callerReference, forKey: ClientRuntime.Key("CallerReference")) } + if let enabled = enabled { + try container.encode(enabled, forKey: ClientRuntime.Key("Enabled")) + } } } @@ -3642,6 +3646,8 @@ public struct CopyDistributionInput: Swift.Equatable { /// A value that uniquely identifies a request to create a resource. This helps to prevent CloudFront from creating a duplicate resource if you accidentally resubmit an identical request. /// This member is required. public var callerReference: Swift.String? + /// A Boolean flag to specify the state of the staging distribution when it's created. When you set this value to True, the staging distribution is enabled. When you set this value to False, the staging distribution is disabled. If you omit this field, the default value is True. + public var enabled: Swift.Bool? /// The version identifier of the primary distribution whose configuration you are copying. This is the ETag value returned in the response to GetDistribution and GetDistributionConfig. public var ifMatch: Swift.String? /// The identifier of the primary distribution whose configuration you are copying. To get a distribution ID, use ListDistributions. @@ -3652,12 +3658,14 @@ public struct CopyDistributionInput: Swift.Equatable { public init( callerReference: Swift.String? = nil, + enabled: Swift.Bool? = nil, ifMatch: Swift.String? = nil, primaryDistributionId: Swift.String? = nil, staging: Swift.Bool? = nil ) { self.callerReference = callerReference + self.enabled = enabled self.ifMatch = ifMatch self.primaryDistributionId = primaryDistributionId self.staging = staging @@ -3666,17 +3674,21 @@ public struct CopyDistributionInput: Swift.Equatable { struct CopyDistributionInputBody: Swift.Equatable { let callerReference: Swift.String? + let enabled: Swift.Bool? } extension CopyDistributionInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case callerReference = "CallerReference" + case enabled = "Enabled" } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let callerReferenceDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .callerReference) callerReference = callerReferenceDecoded + let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) + enabled = enabledDecoded } } @@ -3731,6 +3743,7 @@ public enum CopyDistributionOutputError: ClientRuntime.HttpResponseErrorBinding case "TooManyDistributionsAssociatedToCachePolicy": return try await TooManyDistributionsAssociatedToCachePolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToFieldLevelEncryptionConfig": return try await TooManyDistributionsAssociatedToFieldLevelEncryptionConfig(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToKeyGroup": return try await TooManyDistributionsAssociatedToKeyGroup(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + case "TooManyDistributionsAssociatedToOriginAccessControl": return try await TooManyDistributionsAssociatedToOriginAccessControl(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToOriginRequestPolicy": return try await TooManyDistributionsAssociatedToOriginRequestPolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToResponseHeadersPolicy": return try await TooManyDistributionsAssociatedToResponseHeadersPolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsWithFunctionAssociations": return try await TooManyDistributionsWithFunctionAssociations(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) @@ -4701,6 +4714,7 @@ public enum CreateDistributionWithTagsOutputError: ClientRuntime.HttpResponseErr case "ContinuousDeploymentPolicyInUse": return try await ContinuousDeploymentPolicyInUse(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "DistributionAlreadyExists": return try await DistributionAlreadyExists(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "IllegalFieldLevelEncryptionConfigAssociationWithCacheBehavior": return try await IllegalFieldLevelEncryptionConfigAssociationWithCacheBehavior(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + case "IllegalOriginAccessConfiguration": return try await IllegalOriginAccessConfiguration(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "InconsistentQuantities": return try await InconsistentQuantities(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "InvalidArgument": return try await InvalidArgument(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "InvalidDefaultRootObject": return try await InvalidDefaultRootObject(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) @@ -4744,6 +4758,7 @@ public enum CreateDistributionWithTagsOutputError: ClientRuntime.HttpResponseErr case "TooManyDistributionsAssociatedToCachePolicy": return try await TooManyDistributionsAssociatedToCachePolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToFieldLevelEncryptionConfig": return try await TooManyDistributionsAssociatedToFieldLevelEncryptionConfig(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToKeyGroup": return try await TooManyDistributionsAssociatedToKeyGroup(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + case "TooManyDistributionsAssociatedToOriginAccessControl": return try await TooManyDistributionsAssociatedToOriginAccessControl(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToOriginRequestPolicy": return try await TooManyDistributionsAssociatedToOriginRequestPolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToResponseHeadersPolicy": return try await TooManyDistributionsAssociatedToResponseHeadersPolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsWithFunctionAssociations": return try await TooManyDistributionsWithFunctionAssociations(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) @@ -11831,7 +11846,7 @@ extension CloudFrontClientTypes { /// A comment to describe the function. /// This member is required. public var comment: Swift.String? - /// The function's runtime environment. The only valid value is cloudfront-js-1.0. + /// The function's runtime environment verion. /// This member is required. public var runtime: CloudFrontClientTypes.FunctionRuntime? @@ -12092,11 +12107,13 @@ extension CloudFrontClientTypes { extension CloudFrontClientTypes { public enum FunctionRuntime: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case cloudfrontJs10 + case cloudfrontJs20 case sdkUnknown(Swift.String) public static var allCases: [FunctionRuntime] { return [ .cloudfrontJs10, + .cloudfrontJs20, .sdkUnknown("") ] } @@ -12107,6 +12124,7 @@ extension CloudFrontClientTypes { public var rawValue: Swift.String { switch self { case .cloudfrontJs10: return "cloudfront-js-1.0" + case .cloudfrontJs20: return "cloudfront-js-2.0" case let .sdkUnknown(s): return s } } @@ -32983,7 +33001,7 @@ extension CloudFrontClientTypes.TrustedSigners: ClientRuntime.DynamicNodeEncodin extension CloudFrontClientTypes { /// A list of Amazon Web Services accounts whose public keys CloudFront can use to verify the signatures of signed URLs and signed cookies. public struct TrustedSigners: Swift.Equatable { - /// This field is true if any of the Amazon Web Services accounts have public keys that CloudFront can use to verify the signatures of signed URLs and signed cookies. If not, this field is false. + /// This field is true if any of the Amazon Web Services accounts in the list are configured as trusted signers. If not, this field is false. /// This member is required. public var enabled: Swift.Bool? /// A list of Amazon Web Services account identifiers. @@ -33966,6 +33984,7 @@ public enum UpdateDistributionOutputError: ClientRuntime.HttpResponseErrorBindin case "TooManyDistributionsAssociatedToCachePolicy": return try await TooManyDistributionsAssociatedToCachePolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToFieldLevelEncryptionConfig": return try await TooManyDistributionsAssociatedToFieldLevelEncryptionConfig(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToKeyGroup": return try await TooManyDistributionsAssociatedToKeyGroup(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + case "TooManyDistributionsAssociatedToOriginAccessControl": return try await TooManyDistributionsAssociatedToOriginAccessControl(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToOriginRequestPolicy": return try await TooManyDistributionsAssociatedToOriginRequestPolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToResponseHeadersPolicy": return try await TooManyDistributionsAssociatedToResponseHeadersPolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsWithFunctionAssociations": return try await TooManyDistributionsWithFunctionAssociations(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) @@ -34146,6 +34165,7 @@ public enum UpdateDistributionWithStagingConfigOutputError: ClientRuntime.HttpRe case "TooManyDistributionsAssociatedToCachePolicy": return try await TooManyDistributionsAssociatedToCachePolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToFieldLevelEncryptionConfig": return try await TooManyDistributionsAssociatedToFieldLevelEncryptionConfig(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToKeyGroup": return try await TooManyDistributionsAssociatedToKeyGroup(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + case "TooManyDistributionsAssociatedToOriginAccessControl": return try await TooManyDistributionsAssociatedToOriginAccessControl(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToOriginRequestPolicy": return try await TooManyDistributionsAssociatedToOriginRequestPolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsAssociatedToResponseHeadersPolicy": return try await TooManyDistributionsAssociatedToResponseHeadersPolicy(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "TooManyDistributionsWithFunctionAssociations": return try await TooManyDistributionsWithFunctionAssociations(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) diff --git a/Sources/Services/AWSCodeCatalyst/CodeCatalystClient.swift b/Sources/Services/AWSCodeCatalyst/CodeCatalystClient.swift index 90fabd389e7..573c82096c4 100644 --- a/Sources/Services/AWSCodeCatalyst/CodeCatalystClient.swift +++ b/Sources/Services/AWSCodeCatalyst/CodeCatalystClient.swift @@ -163,6 +163,38 @@ extension CodeCatalystClient: CodeCatalystClientProtocol { return result } + /// Creates an empty Git-based source repository in a specified project. The repository is created with an initial empty commit with a default branch named main. + public func createSourceRepository(input: CreateSourceRepositoryInput) async throws -> CreateSourceRepositoryOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .put) + .withServiceName(value: serviceName) + .withOperation(value: "createSourceRepository") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .build() + var operation = ClientRuntime.OperationStack(id: "createSourceRepository") + 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, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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: "CreateSourceRepositoryRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Creates a branch in a specified source repository in Amazon CodeCatalyst. This API only creates a branch in a source repository hosted in Amazon CodeCatalyst. You cannot use this API to create a branch in a linked repository. public func createSourceRepositoryBranch(input: CreateSourceRepositoryBranchInput) async throws -> CreateSourceRepositoryBranchOutputResponse { @@ -253,6 +285,93 @@ extension CodeCatalystClient: CodeCatalystClientProtocol { return result } + /// Deletes a project in a space. + public func deleteProject(input: DeleteProjectInput) async throws -> DeleteProjectOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteProject") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteProject") + 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, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Deletes a source repository in Amazon CodeCatalyst. You cannot use this API to delete a linked repository. It can only be used to delete a Amazon CodeCatalyst source repository. + public func deleteSourceRepository(input: DeleteSourceRepositoryInput) async throws -> DeleteSourceRepositoryOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteSourceRepository") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteSourceRepository") + 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, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Deletes a space. Deleting a space cannot be undone. Additionally, since space names must be unique across Amazon CodeCatalyst, you cannot reuse names of deleted spaces. + public func deleteSpace(input: DeleteSpaceInput) async throws -> DeleteSpaceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteSpace") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteSpace") + 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, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Returns information about a Dev Environment for a source repository in a project. Dev Environments are specific to the user who creates them. public func getDevEnvironment(input: GetDevEnvironmentInput) async throws -> GetDevEnvironmentOutputResponse { @@ -311,6 +430,35 @@ extension CodeCatalystClient: CodeCatalystClientProtocol { return result } + /// Returns information about a source repository. + public func getSourceRepository(input: GetSourceRepositoryInput) async throws -> GetSourceRepositoryOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getSourceRepository") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .build() + var operation = ClientRuntime.OperationStack(id: "getSourceRepository") + 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, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Returns information about the URLs that can be used with a Git client to clone a source repository. public func getSourceRepositoryCloneUrls(input: GetSourceRepositoryCloneUrlsInput) async throws -> GetSourceRepositoryCloneUrlsOutputResponse { @@ -838,6 +986,70 @@ extension CodeCatalystClient: CodeCatalystClientProtocol { return result } + /// Changes one or more values for a project. + public func updateProject(input: UpdateProjectInput) async throws -> UpdateProjectOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .patch) + .withServiceName(value: serviceName) + .withOperation(value: "updateProject") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .build() + var operation = ClientRuntime.OperationStack(id: "updateProject") + 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, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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: "UpdateProjectRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Changes one or more values for a space. + public func updateSpace(input: UpdateSpaceInput) async throws -> UpdateSpaceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .patch) + .withServiceName(value: serviceName) + .withOperation(value: "updateSpace") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .build() + var operation = ClientRuntime.OperationStack(id: "updateSpace") + 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, useFIPS: config.useFIPS ?? false) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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: "UpdateSpaceRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Verifies whether the calling user has a valid Amazon CodeCatalyst login and session. If successful, this returns the ID of the user in Amazon CodeCatalyst. public func verifySession(input: VerifySessionInput) async throws -> VerifySessionOutputResponse { diff --git a/Sources/Services/AWSCodeCatalyst/CodeCatalystClientProtocol.swift b/Sources/Services/AWSCodeCatalyst/CodeCatalystClientProtocol.swift index 3bce82f4c69..25c4d5875a2 100644 --- a/Sources/Services/AWSCodeCatalyst/CodeCatalystClientProtocol.swift +++ b/Sources/Services/AWSCodeCatalyst/CodeCatalystClientProtocol.swift @@ -2,41 +2,61 @@ import ClientRuntime -/// Welcome to the Amazon CodeCatalyst API reference. This reference provides descriptions of operations and data types for Amazon CodeCatalyst. You can use the Amazon CodeCatalyst API to work with the following objects. Dev Environments and the Amazon Web Services Toolkits, by calling the following: +/// Welcome to the Amazon CodeCatalyst API reference. This reference provides descriptions of operations and data types for Amazon CodeCatalyst. You can use the Amazon CodeCatalyst API to work with the following objects. Spaces, by calling the following: /// -/// * [CreateAccessToken], which creates a personal access token (PAT) for the current user. +/// * [DeleteSpace], which deletes a space. /// -/// * [CreateDevEnvironment], which creates a Dev Environment, where you can quickly work on the code stored in the source repositories of your project. +/// * [GetSpace], which returns information about a space. /// -/// * [CreateProject] which creates a project in a specified space. +/// * [GetSubscription], which returns information about the Amazon Web Services account used for billing purposes and the billing plan for the space. /// -/// * [CreateSourceRepositoryBranch], which creates a branch in a specified repository where you can work on code. +/// * [ListSpaces], which retrieves a list of spaces. /// -/// * [DeleteDevEnvironment], which deletes a Dev Environment. +/// * [UpdateSpace], which hanges one or more values for a space. /// -/// * [GetDevEnvironment], which returns information about a Dev Environment. +/// +/// Projects, by calling the following: +/// +/// * [CreateProject] which creates a project in a specified space. /// /// * [GetProject], which returns information about a project. /// -/// * [GetSourceRepositoryCloneUrls], which returns information about the URLs that can be used with a Git client to clone a source repository. +/// * [ListProjects], which retrieves a list of projects in a space. /// -/// * [GetSpace], which returns information about a space. /// -/// * [GetSubscription], which returns information about the Amazon Web Services account used for billing purposes and the billing plan for the space. +/// Users, by calling the following: /// /// * [GetUserDetails], which returns information about a user in Amazon CodeCatalyst. /// -/// * [ListDevEnvironments], which retrieves a list of Dev Environments in a project. /// -/// * [ListDevEnvironmentSessions], which retrieves a list of active Dev Environment sessions in a project. +/// Source repositories, by calling the following: /// -/// * [ListProjects], which retrieves a list of projects in a space. +/// * [CreateSourceRepository], which creates an empty Git-based source repository in a specified project. +/// +/// * [CreateSourceRepositoryBranch], which creates a branch in a specified repository where you can work on code. +/// +/// * [DeleteSourceRepository], which deletes a source repository. +/// +/// * [GetSourceRepository], which returns information about a source repository. +/// +/// * [GetSourceRepositoryCloneUrls], which returns information about the URLs that can be used with a Git client to clone a source repository. /// /// * [ListSourceRepositories], which retrieves a list of source repositories in a project. /// /// * [ListSourceRepositoryBranches], which retrieves a list of branches in a source repository. /// -/// * [ListSpaces], which retrieves a list of spaces. +/// +/// Dev Environments and the Amazon Web Services Toolkits, by calling the following: +/// +/// * [CreateDevEnvironment], which creates a Dev Environment, where you can quickly work on the code stored in the source repositories of your project. +/// +/// * [DeleteDevEnvironment], which deletes a Dev Environment. +/// +/// * [GetDevEnvironment], which returns information about a Dev Environment. +/// +/// * [ListDevEnvironments], which retrieves a list of Dev Environments in a project. +/// +/// * [ListDevEnvironmentSessions], which retrieves a list of active Dev Environment sessions in a project. /// /// * [StartDevEnvironment], which starts a specified Dev Environment and puts it into an active state. /// @@ -48,17 +68,19 @@ import ClientRuntime /// /// * [UpdateDevEnvironment], which changes one or more values for a Dev Environment. /// -/// * [VerifySession], which verifies whether the calling user has a valid Amazon CodeCatalyst login and session. -/// /// /// Security, activity, and resource management in Amazon CodeCatalyst, by calling the following: /// +/// * [CreateAccessToken], which creates a personal access token (PAT) for the current user. +/// /// * [DeleteAccessToken], which deletes a specified personal access token (PAT). /// /// * [ListAccessTokens], which lists all personal access tokens (PATs) associated with a user. /// /// * [ListEventLogs], which retrieves a list of events that occurred during a specified time period in a space. /// +/// * [VerifySession], which verifies whether the calling user has a valid Amazon CodeCatalyst login and session. +/// /// /// If you are using the Amazon CodeCatalyst APIs with an SDK or the CLI, you must configure your computer to work with Amazon CodeCatalyst and single sign-on (SSO). For more information, see [Setting up to use the CLI with Amazon CodeCatalyst](https://docs.aws.amazon.com/codecatalyst/latest/userguide/set-up-cli.html) and the SSO documentation for your SDK. public protocol CodeCatalystClientProtocol { @@ -68,16 +90,26 @@ public protocol CodeCatalystClientProtocol { func createDevEnvironment(input: CreateDevEnvironmentInput) async throws -> CreateDevEnvironmentOutputResponse /// Creates a project in a specified space. func createProject(input: CreateProjectInput) async throws -> CreateProjectOutputResponse + /// Creates an empty Git-based source repository in a specified project. The repository is created with an initial empty commit with a default branch named main. + func createSourceRepository(input: CreateSourceRepositoryInput) async throws -> CreateSourceRepositoryOutputResponse /// Creates a branch in a specified source repository in Amazon CodeCatalyst. This API only creates a branch in a source repository hosted in Amazon CodeCatalyst. You cannot use this API to create a branch in a linked repository. func createSourceRepositoryBranch(input: CreateSourceRepositoryBranchInput) async throws -> CreateSourceRepositoryBranchOutputResponse /// Deletes a specified personal access token (PAT). A personal access token can only be deleted by the user who created it. func deleteAccessToken(input: DeleteAccessTokenInput) async throws -> DeleteAccessTokenOutputResponse /// Deletes a Dev Environment. func deleteDevEnvironment(input: DeleteDevEnvironmentInput) async throws -> DeleteDevEnvironmentOutputResponse + /// Deletes a project in a space. + func deleteProject(input: DeleteProjectInput) async throws -> DeleteProjectOutputResponse + /// Deletes a source repository in Amazon CodeCatalyst. You cannot use this API to delete a linked repository. It can only be used to delete a Amazon CodeCatalyst source repository. + func deleteSourceRepository(input: DeleteSourceRepositoryInput) async throws -> DeleteSourceRepositoryOutputResponse + /// Deletes a space. Deleting a space cannot be undone. Additionally, since space names must be unique across Amazon CodeCatalyst, you cannot reuse names of deleted spaces. + func deleteSpace(input: DeleteSpaceInput) async throws -> DeleteSpaceOutputResponse /// Returns information about a Dev Environment for a source repository in a project. Dev Environments are specific to the user who creates them. func getDevEnvironment(input: GetDevEnvironmentInput) async throws -> GetDevEnvironmentOutputResponse /// Returns information about a project. func getProject(input: GetProjectInput) async throws -> GetProjectOutputResponse + /// Returns information about a source repository. + func getSourceRepository(input: GetSourceRepositoryInput) async throws -> GetSourceRepositoryOutputResponse /// Returns information about the URLs that can be used with a Git client to clone a source repository. func getSourceRepositoryCloneUrls(input: GetSourceRepositoryCloneUrlsInput) async throws -> GetSourceRepositoryCloneUrlsOutputResponse /// Returns information about an space. @@ -112,6 +144,10 @@ public protocol CodeCatalystClientProtocol { func stopDevEnvironmentSession(input: StopDevEnvironmentSessionInput) async throws -> StopDevEnvironmentSessionOutputResponse /// Changes one or more values for a Dev Environment. Updating certain values of the Dev Environment will cause a restart. func updateDevEnvironment(input: UpdateDevEnvironmentInput) async throws -> UpdateDevEnvironmentOutputResponse + /// Changes one or more values for a project. + func updateProject(input: UpdateProjectInput) async throws -> UpdateProjectOutputResponse + /// Changes one or more values for a space. + func updateSpace(input: UpdateSpaceInput) async throws -> UpdateSpaceOutputResponse /// Verifies whether the calling user has a valid Amazon CodeCatalyst login and session. If successful, this returns the ID of the user in Amazon CodeCatalyst. func verifySession(input: VerifySessionInput) async throws -> VerifySessionOutputResponse } diff --git a/Sources/Services/AWSCodeCatalyst/models/Models.swift b/Sources/Services/AWSCodeCatalyst/models/Models.swift index 57d64fe714d..4459e574cfa 100644 --- a/Sources/Services/AWSCodeCatalyst/models/Models.swift +++ b/Sources/Services/AWSCodeCatalyst/models/Models.swift @@ -841,6 +841,160 @@ extension CreateSourceRepositoryBranchOutputResponseBody: Swift.Decodable { } } +extension CreateSourceRepositoryInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + } +} + +extension CreateSourceRepositoryInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let spaceName = spaceName else { + return nil + } + guard let projectName = projectName else { + return nil + } + guard let name = name else { + return nil + } + return "/v1/spaces/\(spaceName.urlPercentEncoding())/projects/\(projectName.urlPercentEncoding())/sourceRepositories/\(name.urlPercentEncoding())" + } +} + +public struct CreateSourceRepositoryInput: Swift.Equatable { + /// The description of the source repository. + public var description: Swift.String? + /// The name of the source repository. For more information about name requirements, see [Quotas for source repositories](https://docs.aws.amazon.com/codecatalyst/latest/userguide/source-quotas.html). + /// This member is required. + public var name: Swift.String? + /// The name of the project in the space. + /// This member is required. + public var projectName: Swift.String? + /// The name of the space. + /// This member is required. + public var spaceName: Swift.String? + + public init( + description: Swift.String? = nil, + name: Swift.String? = nil, + projectName: Swift.String? = nil, + spaceName: Swift.String? = nil + ) + { + self.description = description + self.name = name + self.projectName = projectName + self.spaceName = spaceName + } +} + +struct CreateSourceRepositoryInputBody: Swift.Equatable { + let description: Swift.String? +} + +extension CreateSourceRepositoryInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + } +} + +public enum CreateSourceRepositoryOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension CreateSourceRepositoryOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: CreateSourceRepositoryOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.description = output.description + self.name = output.name + self.projectName = output.projectName + self.spaceName = output.spaceName + } else { + self.description = nil + self.name = nil + self.projectName = nil + self.spaceName = nil + } + } +} + +public struct CreateSourceRepositoryOutputResponse: Swift.Equatable { + /// The description of the source repository. + public var description: Swift.String? + /// The name of the source repository. + /// This member is required. + public var name: Swift.String? + /// The name of the project in the space. + /// This member is required. + public var projectName: Swift.String? + /// The name of the space. + /// This member is required. + public var spaceName: Swift.String? + + public init( + description: Swift.String? = nil, + name: Swift.String? = nil, + projectName: Swift.String? = nil, + spaceName: Swift.String? = nil + ) + { + self.description = description + self.name = name + self.projectName = projectName + self.spaceName = spaceName + } +} + +struct CreateSourceRepositoryOutputResponseBody: Swift.Equatable { + let spaceName: Swift.String? + let projectName: Swift.String? + let name: Swift.String? + let description: Swift.String? +} + +extension CreateSourceRepositoryOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case name + case projectName + case spaceName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let spaceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .spaceName) + spaceName = spaceNameDecoded + let projectNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .projectName) + projectName = projectNameDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + } +} + extension DeleteAccessTokenInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let id = id else { @@ -885,14 +1039,245 @@ public enum DeleteAccessTokenOutputError: ClientRuntime.HttpResponseErrorBinding extension DeleteAccessTokenOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { } -} - -public struct DeleteAccessTokenOutputResponse: Swift.Equatable { +} + +public struct DeleteAccessTokenOutputResponse: Swift.Equatable { + + public init() { } +} + +extension DeleteDevEnvironmentInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let spaceName = spaceName else { + return nil + } + guard let projectName = projectName else { + return nil + } + guard let id = id else { + return nil + } + return "/v1/spaces/\(spaceName.urlPercentEncoding())/projects/\(projectName.urlPercentEncoding())/devEnvironments/\(id.urlPercentEncoding())" + } +} + +public struct DeleteDevEnvironmentInput: Swift.Equatable { + /// The system-generated unique ID of the Dev Environment you want to delete. To retrieve a list of Dev Environment IDs, use [ListDevEnvironments]. + /// This member is required. + public var id: Swift.String? + /// The name of the project in the space. + /// This member is required. + public var projectName: Swift.String? + /// The name of the space. + /// This member is required. + public var spaceName: Swift.String? + + public init( + id: Swift.String? = nil, + projectName: Swift.String? = nil, + spaceName: Swift.String? = nil + ) + { + self.id = id + self.projectName = projectName + self.spaceName = spaceName + } +} + +struct DeleteDevEnvironmentInputBody: Swift.Equatable { +} + +extension DeleteDevEnvironmentInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteDevEnvironmentOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteDevEnvironmentOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DeleteDevEnvironmentOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.id = output.id + self.projectName = output.projectName + self.spaceName = output.spaceName + } else { + self.id = nil + self.projectName = nil + self.spaceName = nil + } + } +} + +public struct DeleteDevEnvironmentOutputResponse: Swift.Equatable { + /// The system-generated unique ID of the deleted Dev Environment. + /// This member is required. + public var id: Swift.String? + /// The name of the project in the space. + /// This member is required. + public var projectName: Swift.String? + /// The name of the space. + /// This member is required. + public var spaceName: Swift.String? + + public init( + id: Swift.String? = nil, + projectName: Swift.String? = nil, + spaceName: Swift.String? = nil + ) + { + self.id = id + self.projectName = projectName + self.spaceName = spaceName + } +} + +struct DeleteDevEnvironmentOutputResponseBody: Swift.Equatable { + let spaceName: Swift.String? + let projectName: Swift.String? + let id: Swift.String? +} + +extension DeleteDevEnvironmentOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case id + case projectName + case spaceName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let spaceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .spaceName) + spaceName = spaceNameDecoded + let projectNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .projectName) + projectName = projectNameDecoded + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + } +} + +extension DeleteProjectInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let spaceName = spaceName else { + return nil + } + guard let name = name else { + return nil + } + return "/v1/spaces/\(spaceName.urlPercentEncoding())/projects/\(name.urlPercentEncoding())" + } +} + +public struct DeleteProjectInput: Swift.Equatable { + /// The name of the project in the space. To retrieve a list of project names, use [ListProjects]. + /// This member is required. + public var name: Swift.String? + /// The name of the space. + /// This member is required. + public var spaceName: Swift.String? + + public init( + name: Swift.String? = nil, + spaceName: Swift.String? = nil + ) + { + self.name = name + self.spaceName = spaceName + } +} + +struct DeleteProjectInputBody: Swift.Equatable { +} + +extension DeleteProjectInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteProjectOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteProjectOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DeleteProjectOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.displayName = output.displayName + self.name = output.name + self.spaceName = output.spaceName + } else { + self.displayName = nil + self.name = nil + self.spaceName = nil + } + } +} + +public struct DeleteProjectOutputResponse: Swift.Equatable { + /// The friendly name displayed to users of the project in Amazon CodeCatalyst. + public var displayName: Swift.String? + /// The name of the project in the space. + /// This member is required. + public var name: Swift.String? + /// The name of the space. + /// This member is required. + public var spaceName: Swift.String? + + public init( + displayName: Swift.String? = nil, + name: Swift.String? = nil, + spaceName: Swift.String? = nil + ) + { + self.displayName = displayName + self.name = name + self.spaceName = spaceName + } +} + +struct DeleteProjectOutputResponseBody: Swift.Equatable { + let spaceName: Swift.String? + let name: Swift.String? + let displayName: Swift.String? +} + +extension DeleteProjectOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case displayName + case name + case spaceName + } - public init() { } + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let spaceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .spaceName) + spaceName = spaceNameDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let displayNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .displayName) + displayName = displayNameDecoded + } } -extension DeleteDevEnvironmentInput: ClientRuntime.URLPathProvider { +extension DeleteSourceRepositoryInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let spaceName = spaceName else { return nil @@ -900,17 +1285,17 @@ extension DeleteDevEnvironmentInput: ClientRuntime.URLPathProvider { guard let projectName = projectName else { return nil } - guard let id = id else { + guard let name = name else { return nil } - return "/v1/spaces/\(spaceName.urlPercentEncoding())/projects/\(projectName.urlPercentEncoding())/devEnvironments/\(id.urlPercentEncoding())" + return "/v1/spaces/\(spaceName.urlPercentEncoding())/projects/\(projectName.urlPercentEncoding())/sourceRepositories/\(name.urlPercentEncoding())" } } -public struct DeleteDevEnvironmentInput: Swift.Equatable { - /// The system-generated unique ID of the Dev Environment you want to delete. To retrieve a list of Dev Environment IDs, use [ListDevEnvironments]. +public struct DeleteSourceRepositoryInput: Swift.Equatable { + /// The name of the source repository. /// This member is required. - public var id: Swift.String? + public var name: Swift.String? /// The name of the project in the space. /// This member is required. public var projectName: Swift.String? @@ -919,27 +1304,27 @@ public struct DeleteDevEnvironmentInput: Swift.Equatable { public var spaceName: Swift.String? public init( - id: Swift.String? = nil, + name: Swift.String? = nil, projectName: Swift.String? = nil, spaceName: Swift.String? = nil ) { - self.id = id + self.name = name self.projectName = projectName self.spaceName = spaceName } } -struct DeleteDevEnvironmentInputBody: Swift.Equatable { +struct DeleteSourceRepositoryInputBody: Swift.Equatable { } -extension DeleteDevEnvironmentInputBody: Swift.Decodable { +extension DeleteSourceRepositoryInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DeleteDevEnvironmentOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DeleteSourceRepositoryOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -949,26 +1334,26 @@ public enum DeleteDevEnvironmentOutputError: ClientRuntime.HttpResponseErrorBind } } -extension DeleteDevEnvironmentOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteSourceRepositoryOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DeleteDevEnvironmentOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.id = output.id + let output: DeleteSourceRepositoryOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.name = output.name self.projectName = output.projectName self.spaceName = output.spaceName } else { - self.id = nil + self.name = nil self.projectName = nil self.spaceName = nil } } } -public struct DeleteDevEnvironmentOutputResponse: Swift.Equatable { - /// The system-generated unique ID of the deleted Dev Environment. +public struct DeleteSourceRepositoryOutputResponse: Swift.Equatable { + /// The name of the repository. /// This member is required. - public var id: Swift.String? + public var name: Swift.String? /// The name of the project in the space. /// This member is required. public var projectName: Swift.String? @@ -977,26 +1362,26 @@ public struct DeleteDevEnvironmentOutputResponse: Swift.Equatable { public var spaceName: Swift.String? public init( - id: Swift.String? = nil, + name: Swift.String? = nil, projectName: Swift.String? = nil, spaceName: Swift.String? = nil ) { - self.id = id + self.name = name self.projectName = projectName self.spaceName = spaceName } } -struct DeleteDevEnvironmentOutputResponseBody: Swift.Equatable { +struct DeleteSourceRepositoryOutputResponseBody: Swift.Equatable { let spaceName: Swift.String? let projectName: Swift.String? - let id: Swift.String? + let name: Swift.String? } -extension DeleteDevEnvironmentOutputResponseBody: Swift.Decodable { +extension DeleteSourceRepositoryOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case id + case name case projectName case spaceName } @@ -1007,8 +1392,100 @@ extension DeleteDevEnvironmentOutputResponseBody: Swift.Decodable { spaceName = spaceNameDecoded let projectNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .projectName) projectName = projectNameDecoded - let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) - id = idDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + } +} + +extension DeleteSpaceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let name = name else { + return nil + } + return "/v1/spaces/\(name.urlPercentEncoding())" + } +} + +public struct DeleteSpaceInput: Swift.Equatable { + /// The name of the space. To retrieve a list of space names, use [ListSpaces]. + /// This member is required. + public var name: Swift.String? + + public init( + name: Swift.String? = nil + ) + { + self.name = name + } +} + +struct DeleteSpaceInputBody: Swift.Equatable { +} + +extension DeleteSpaceInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteSpaceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteSpaceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DeleteSpaceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.displayName = output.displayName + self.name = output.name + } else { + self.displayName = nil + self.name = nil + } + } +} + +public struct DeleteSpaceOutputResponse: Swift.Equatable { + /// The friendly name of the space displayed to users of the space in Amazon CodeCatalyst. + public var displayName: Swift.String? + /// The name of the space. + /// This member is required. + public var name: Swift.String? + + public init( + displayName: Swift.String? = nil, + name: Swift.String? = nil + ) + { + self.displayName = displayName + self.name = name + } +} + +struct DeleteSpaceOutputResponseBody: Swift.Equatable { + let name: Swift.String? + let displayName: Swift.String? +} + +extension DeleteSpaceOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case displayName + case name + } + + 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 displayNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .displayName) + displayName = displayNameDecoded } } @@ -1690,7 +2167,7 @@ extension CodeCatalystClientTypes { public var responsePayload: CodeCatalystClientTypes.EventPayload? /// The IP address of the user whose actions are recorded in the event. public var sourceIpAddress: Swift.String? - /// + /// The user agent whose actions are recorded in the event. public var userAgent: Swift.String? /// The system-generated unique ID of the user whose actions are recorded in the event. /// This member is required. @@ -1881,14 +2358,14 @@ extension CodeCatalystClientTypes.Filter: Swift.Codable { } extension CodeCatalystClientTypes { - /// + /// Information about a filter used to limit results of a query. public struct Filter: Swift.Equatable { - /// + /// The operator used to compare the fields. public var comparisonOperator: Swift.String? - /// + /// A key that can be used to sort results. /// This member is required. public var key: Swift.String? - /// + /// The values of the key. /// This member is required. public var values: [Swift.String]? @@ -2398,6 +2875,158 @@ extension GetSourceRepositoryCloneUrlsOutputResponseBody: Swift.Decodable { } } +extension GetSourceRepositoryInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let spaceName = spaceName else { + return nil + } + guard let projectName = projectName else { + return nil + } + guard let name = name else { + return nil + } + return "/v1/spaces/\(spaceName.urlPercentEncoding())/projects/\(projectName.urlPercentEncoding())/sourceRepositories/\(name.urlPercentEncoding())" + } +} + +public struct GetSourceRepositoryInput: Swift.Equatable { + /// The name of the source repository. + /// This member is required. + public var name: Swift.String? + /// The name of the project in the space. + /// This member is required. + public var projectName: Swift.String? + /// The name of the space. + /// This member is required. + public var spaceName: Swift.String? + + public init( + name: Swift.String? = nil, + projectName: Swift.String? = nil, + spaceName: Swift.String? = nil + ) + { + self.name = name + self.projectName = projectName + self.spaceName = spaceName + } +} + +struct GetSourceRepositoryInputBody: Swift.Equatable { +} + +extension GetSourceRepositoryInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum GetSourceRepositoryOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetSourceRepositoryOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetSourceRepositoryOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.createdTime = output.createdTime + self.description = output.description + self.lastUpdatedTime = output.lastUpdatedTime + self.name = output.name + self.projectName = output.projectName + self.spaceName = output.spaceName + } else { + self.createdTime = nil + self.description = nil + self.lastUpdatedTime = nil + self.name = nil + self.projectName = nil + self.spaceName = nil + } + } +} + +public struct GetSourceRepositoryOutputResponse: Swift.Equatable { + /// The time the source repository was created, in coordinated universal time (UTC) timestamp format as specified in [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339#section-5.6). + /// This member is required. + public var createdTime: ClientRuntime.Date? + /// The description of the source repository. + public var description: Swift.String? + /// The time the source repository was last updated, in coordinated universal time (UTC) timestamp format as specified in [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339#section-5.6). + /// This member is required. + public var lastUpdatedTime: ClientRuntime.Date? + /// The name of the source repository. + /// This member is required. + public var name: Swift.String? + /// The name of the project in the space. + /// This member is required. + public var projectName: Swift.String? + /// The name of the space. + /// This member is required. + public var spaceName: Swift.String? + + public init( + createdTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + lastUpdatedTime: ClientRuntime.Date? = nil, + name: Swift.String? = nil, + projectName: Swift.String? = nil, + spaceName: Swift.String? = nil + ) + { + self.createdTime = createdTime + self.description = description + self.lastUpdatedTime = lastUpdatedTime + self.name = name + self.projectName = projectName + self.spaceName = spaceName + } +} + +struct GetSourceRepositoryOutputResponseBody: Swift.Equatable { + let spaceName: Swift.String? + let projectName: Swift.String? + let name: Swift.String? + let description: Swift.String? + let lastUpdatedTime: ClientRuntime.Date? + let createdTime: ClientRuntime.Date? +} + +extension GetSourceRepositoryOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdTime + case description + case lastUpdatedTime + case name + case projectName + case spaceName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let spaceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .spaceName) + spaceName = spaceNameDecoded + let projectNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .projectName) + projectName = projectNameDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let lastUpdatedTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .lastUpdatedTime) + lastUpdatedTime = lastUpdatedTimeDecoded + let createdTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .createdTime) + createdTime = createdTimeDecoded + } +} + extension GetSpaceInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let name = name else { @@ -4411,7 +5040,7 @@ extension CodeCatalystClientTypes { /// A key that can be used to sort results. /// This member is required. public var key: CodeCatalystClientTypes.FilterKey? - /// The value of the key. + /// The values of the key. /// This member is required. public var values: [Swift.String]? @@ -5568,6 +6197,274 @@ extension UpdateDevEnvironmentOutputResponseBody: Swift.Decodable { } } +extension UpdateProjectInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + } +} + +extension UpdateProjectInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let spaceName = spaceName else { + return nil + } + guard let name = name else { + return nil + } + return "/v1/spaces/\(spaceName.urlPercentEncoding())/projects/\(name.urlPercentEncoding())" + } +} + +public struct UpdateProjectInput: Swift.Equatable { + /// The description of the project. + public var description: Swift.String? + /// The name of the project. + /// This member is required. + public var name: Swift.String? + /// The name of the space. + /// This member is required. + public var spaceName: Swift.String? + + public init( + description: Swift.String? = nil, + name: Swift.String? = nil, + spaceName: Swift.String? = nil + ) + { + self.description = description + self.name = name + self.spaceName = spaceName + } +} + +struct UpdateProjectInputBody: Swift.Equatable { + let description: Swift.String? +} + +extension UpdateProjectInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + } +} + +public enum UpdateProjectOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UpdateProjectOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: UpdateProjectOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.description = output.description + self.displayName = output.displayName + self.name = output.name + self.spaceName = output.spaceName + } else { + self.description = nil + self.displayName = nil + self.name = nil + self.spaceName = nil + } + } +} + +public struct UpdateProjectOutputResponse: Swift.Equatable { + /// The description of the project. + public var description: Swift.String? + /// The friendly name of the project displayed to users in Amazon CodeCatalyst. + public var displayName: Swift.String? + /// The name of the project. + public var name: Swift.String? + /// The name of the space. + public var spaceName: Swift.String? + + public init( + description: Swift.String? = nil, + displayName: Swift.String? = nil, + name: Swift.String? = nil, + spaceName: Swift.String? = nil + ) + { + self.description = description + self.displayName = displayName + self.name = name + self.spaceName = spaceName + } +} + +struct UpdateProjectOutputResponseBody: Swift.Equatable { + let spaceName: Swift.String? + let name: Swift.String? + let displayName: Swift.String? + let description: Swift.String? +} + +extension UpdateProjectOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case displayName + case name + case spaceName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let spaceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .spaceName) + spaceName = spaceNameDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let displayNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .displayName) + displayName = displayNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + } +} + +extension UpdateSpaceInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + } +} + +extension UpdateSpaceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let name = name else { + return nil + } + return "/v1/spaces/\(name.urlPercentEncoding())" + } +} + +public struct UpdateSpaceInput: Swift.Equatable { + /// The description of the space. + public var description: Swift.String? + /// The name of the space. + /// This member is required. + public var name: Swift.String? + + public init( + description: Swift.String? = nil, + name: Swift.String? = nil + ) + { + self.description = description + self.name = name + } +} + +struct UpdateSpaceInputBody: Swift.Equatable { + let description: Swift.String? +} + +extension UpdateSpaceInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + } +} + +public enum UpdateSpaceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UpdateSpaceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: UpdateSpaceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.description = output.description + self.displayName = output.displayName + self.name = output.name + } else { + self.description = nil + self.displayName = nil + self.name = nil + } + } +} + +public struct UpdateSpaceOutputResponse: Swift.Equatable { + /// The description of the space. + public var description: Swift.String? + /// The friendly name of the space displayed to users in Amazon CodeCatalyst. + public var displayName: Swift.String? + /// The name of the space. + public var name: Swift.String? + + public init( + description: Swift.String? = nil, + displayName: Swift.String? = nil, + name: Swift.String? = nil + ) + { + self.description = description + self.displayName = displayName + self.name = name + } +} + +struct UpdateSpaceOutputResponseBody: Swift.Equatable { + let name: Swift.String? + let displayName: Swift.String? + let description: Swift.String? +} + +extension UpdateSpaceOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case displayName + case name + } + + 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 displayNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .displayName) + displayName = displayNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + } +} + extension CodeCatalystClientTypes.UserIdentity: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case awsAccountId @@ -5610,7 +6507,7 @@ extension CodeCatalystClientTypes { public struct UserIdentity: Swift.Equatable { /// The Amazon Web Services account number of the user in Amazon Web Services, if any. public var awsAccountId: Swift.String? - /// + /// The ID of the Amazon CodeCatalyst service principal. /// This member is required. public var principalId: Swift.String? /// The display name of the user in Amazon CodeCatalyst. diff --git a/Sources/Services/AWSCodeGuruSecurity/CodeGuruSecurityClient.swift b/Sources/Services/AWSCodeGuruSecurity/CodeGuruSecurityClient.swift index 1442e68e109..080c14ce0b0 100644 --- a/Sources/Services/AWSCodeGuruSecurity/CodeGuruSecurityClient.swift +++ b/Sources/Services/AWSCodeGuruSecurity/CodeGuruSecurityClient.swift @@ -352,7 +352,7 @@ extension CodeGuruSecurityClient: CodeGuruSecurityClientProtocol { return result } - /// Returns a list of all the scans in an account. + /// Returns a list of all the standard scans in an account. Does not return express scans. public func listScans(input: ListScansInput) async throws -> ListScansOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSCodeGuruSecurity/CodeGuruSecurityClientProtocol.swift b/Sources/Services/AWSCodeGuruSecurity/CodeGuruSecurityClientProtocol.swift index 2ed35bf1ce3..e362039231d 100644 --- a/Sources/Services/AWSCodeGuruSecurity/CodeGuruSecurityClientProtocol.swift +++ b/Sources/Services/AWSCodeGuruSecurity/CodeGuruSecurityClientProtocol.swift @@ -2,7 +2,7 @@ import ClientRuntime -/// This section provides documentation for the [Amazon CodeGuru Security](https://docs.aws.amazon.com/https:/docs.aws.amazon.com/codeguru/latest/security-ug/what-is-codeguru-security.html) API operations. CodeGuru Security is a service that uses program analysis and machine learning to detect security policy violations and vulnerabilities, and recommends ways to address these security risks. By proactively detecting and providing recommendations for addressing security risks, CodeGuru Security improves the overall security of your application code. For more information about CodeGuru Security, see the [Amazon CodeGuru Security User Guide](https://docs.aws.amazon.com/codeguru/latest/security-ug/what-is-codeguru-security.html). +/// Amazon CodeGuru Security is in preview release and is subject to change. This section provides documentation for the Amazon CodeGuru Security API operations. CodeGuru Security is a service that uses program analysis and machine learning to detect security policy violations and vulnerabilities, and recommends ways to address these security risks. By proactively detecting and providing recommendations for addressing security risks, CodeGuru Security improves the overall security of your application code. For more information about CodeGuru Security, see the [Amazon CodeGuru Security User Guide](https://docs.aws.amazon.com/codeguru/latest/security-ug/what-is-codeguru-security.html). public protocol CodeGuruSecurityClientProtocol { /// Returns a list of all requested findings. func batchGetFindings(input: BatchGetFindingsInput) async throws -> BatchGetFindingsOutputResponse @@ -20,7 +20,7 @@ public protocol CodeGuruSecurityClientProtocol { func getScan(input: GetScanInput) async throws -> GetScanOutputResponse /// Returns metrics about all findings in an account within a specified time range. func listFindingsMetrics(input: ListFindingsMetricsInput) async throws -> ListFindingsMetricsOutputResponse - /// Returns a list of all the scans in an account. + /// Returns a list of all the standard scans in an account. Does not return express scans. func listScans(input: ListScansInput) async throws -> ListScansOutputResponse /// Returns a list of all tags associated with a scan. func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse diff --git a/Sources/Services/AWSCodeGuruSecurity/models/Models.swift b/Sources/Services/AWSCodeGuruSecurity/models/Models.swift index a35c3363a4c..72ac6db2ad1 100644 --- a/Sources/Services/AWSCodeGuruSecurity/models/Models.swift +++ b/Sources/Services/AWSCodeGuruSecurity/models/Models.swift @@ -633,7 +633,7 @@ extension CreateScanInput: ClientRuntime.URLPathProvider { } public struct CreateScanInput: Swift.Equatable { - /// The type of analysis you want CodeGuru Security to perform in the scan, either Security or All. The Secuirty type only generates findings related to security. The All type generates both security findings and quality findings. Defaults to Security type if missing. + /// The type of analysis you want CodeGuru Security to perform in the scan, either Security or All. The Security type only generates findings related to security. The All type generates both security findings and quality findings. Defaults to Security type if missing. public var analysisType: CodeGuruSecurityClientTypes.AnalysisType? /// The idempotency token for the request. Amazon CodeGuru Security uses this value to prevent the accidental creation of duplicate scans if there are failures and retries. public var clientToken: Swift.String? diff --git a/Sources/Services/AWSCodeStarconnections/CodeStarconnectionsClient.swift b/Sources/Services/AWSCodeStarconnections/CodeStarconnectionsClient.swift index 1de959c1930..4fbb4151374 100644 --- a/Sources/Services/AWSCodeStarconnections/CodeStarconnectionsClient.swift +++ b/Sources/Services/AWSCodeStarconnections/CodeStarconnectionsClient.swift @@ -67,7 +67,7 @@ public struct CodeStarconnectionsClientLogHandlerFactory: ClientRuntime.SDKLogHa } extension CodeStarconnectionsClient: CodeStarconnectionsClientProtocol { - /// Creates a connection that can then be given to other AWS services like CodePipeline so that it can access third-party code repositories. The connection is in pending status until the third-party connection handshake is completed from the console. + /// Creates a connection that can then be given to other Amazon Web Services services like CodePipeline so that it can access third-party code repositories. The connection is in pending status until the third-party connection handshake is completed from the console. public func createConnection(input: CreateConnectionInput) async throws -> CreateConnectionOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -437,7 +437,7 @@ extension CodeStarconnectionsClient: CodeStarconnectionsClientProtocol { return result } - /// Removes tags from an AWS resource. + /// Removes tags from an Amazon Web Services resource. public func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSCodeStarconnections/CodeStarconnectionsClientProtocol.swift b/Sources/Services/AWSCodeStarconnections/CodeStarconnectionsClientProtocol.swift index 31238a99dfa..8f46f119bb3 100644 --- a/Sources/Services/AWSCodeStarconnections/CodeStarconnectionsClientProtocol.swift +++ b/Sources/Services/AWSCodeStarconnections/CodeStarconnectionsClientProtocol.swift @@ -2,7 +2,7 @@ import ClientRuntime -/// AWS CodeStar Connections This AWS CodeStar Connections API Reference provides descriptions and usage examples of the operations and data types for the AWS CodeStar Connections API. You can use the connections API to work with connections and installations. Connections are configurations that you use to connect AWS resources to external code repositories. Each connection is a resource that can be given to services such as CodePipeline to connect to a third-party repository such as Bitbucket. For example, you can add the connection in CodePipeline so that it triggers your pipeline when a code change is made to your third-party code repository. Each connection is named and associated with a unique ARN that is used to reference the connection. When you create a connection, the console initiates a third-party connection handshake. Installations are the apps that are used to conduct this handshake. For example, the installation for the Bitbucket provider type is the Bitbucket app. When you create a connection, you can choose an existing installation or create one. When you want to create a connection to an installed provider type such as GitHub Enterprise Server, you create a host for your connections. You can work with connections by calling: +/// AWS CodeStar Connections This Amazon Web Services CodeStar Connections API Reference provides descriptions and usage examples of the operations and data types for the Amazon Web Services CodeStar Connections API. You can use the connections API to work with connections and installations. Connections are configurations that you use to connect Amazon Web Services resources to external code repositories. Each connection is a resource that can be given to services such as CodePipeline to connect to a third-party repository such as Bitbucket. For example, you can add the connection in CodePipeline so that it triggers your pipeline when a code change is made to your third-party code repository. Each connection is named and associated with a unique ARN that is used to reference the connection. When you create a connection, the console initiates a third-party connection handshake. Installations are the apps that are used to conduct this handshake. For example, the installation for the Bitbucket provider type is the Bitbucket app. When you create a connection, you can choose an existing installation or create one. When you want to create a connection to an installed provider type such as GitHub Enterprise Server, you create a host for your connections. You can work with connections by calling: /// /// * [CreateConnection], which creates a uniquely named connection that can be referenced by services such as CodePipeline. /// @@ -24,18 +24,18 @@ import ClientRuntime /// * [ListHosts], which lists the hosts associated with your account. /// /// -/// You can work with tags in AWS CodeStar Connections by calling the following: +/// You can work with tags in Amazon Web Services CodeStar Connections by calling the following: /// -/// * [ListTagsForResource], which gets information about AWS tags for a specified Amazon Resource Name (ARN) in AWS CodeStar Connections. +/// * [ListTagsForResource], which gets information about Amazon Web Services tags for a specified Amazon Resource Name (ARN) in Amazon Web Services CodeStar Connections. /// -/// * [TagResource], which adds or updates tags for a resource in AWS CodeStar Connections. +/// * [TagResource], which adds or updates tags for a resource in Amazon Web Services CodeStar Connections. /// -/// * [UntagResource], which removes tags for a resource in AWS CodeStar Connections. +/// * [UntagResource], which removes tags for a resource in Amazon Web Services CodeStar Connections. /// /// -/// For information about how to use AWS CodeStar Connections, see the [Developer Tools User Guide](https://docs.aws.amazon.com/dtconsole/latest/userguide/welcome-connections.html). +/// For information about how to use Amazon Web Services CodeStar Connections, see the [Developer Tools User Guide](https://docs.aws.amazon.com/dtconsole/latest/userguide/welcome-connections.html). public protocol CodeStarconnectionsClientProtocol { - /// Creates a connection that can then be given to other AWS services like CodePipeline so that it can access third-party code repositories. The connection is in pending status until the third-party connection handshake is completed from the console. + /// Creates a connection that can then be given to other Amazon Web Services services like CodePipeline so that it can access third-party code repositories. The connection is in pending status until the third-party connection handshake is completed from the console. func createConnection(input: CreateConnectionInput) async throws -> CreateConnectionOutputResponse /// Creates a resource that represents the infrastructure where a third-party provider is installed. The host is used when you create connections to an installed third-party provider type, such as GitHub Enterprise Server. You create one host for all connections to that provider. A host created through the CLI or the SDK is in `PENDING` status by default. You can make its status `AVAILABLE` by setting up the host in the console. func createHost(input: CreateHostInput) async throws -> CreateHostOutputResponse @@ -55,7 +55,7 @@ public protocol CodeStarconnectionsClientProtocol { func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse /// Adds to or modifies the tags of the given resource. Tags are metadata that can be used to manage a resource. func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse - /// Removes tags from an AWS resource. + /// Removes tags from an Amazon Web Services resource. func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse /// Updates a specified host with the provided configurations. func updateHost(input: UpdateHostInput) async throws -> UpdateHostOutputResponse diff --git a/Sources/Services/AWSCodeStarconnections/models/Models.swift b/Sources/Services/AWSCodeStarconnections/models/Models.swift index 891f6807477..5a7cf033731 100644 --- a/Sources/Services/AWSCodeStarconnections/models/Models.swift +++ b/Sources/Services/AWSCodeStarconnections/models/Models.swift @@ -107,11 +107,11 @@ extension CodeStarconnectionsClientTypes.Connection: Swift.Codable { } extension CodeStarconnectionsClientTypes { - /// A resource that is used to connect third-party source providers with services like AWS CodePipeline. Note: A connection created through CloudFormation, the CLI, or the SDK is in `PENDING` status by default. You can make its status `AVAILABLE` by updating the connection in the console. + /// A resource that is used to connect third-party source providers with services like CodePipeline. Note: A connection created through CloudFormation, the CLI, or the SDK is in `PENDING` status by default. You can make its status `AVAILABLE` by updating the connection in the console. public struct Connection: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the connection. The ARN is used as the connection reference when the connection is shared between AWS services. The ARN is never reused if the connection is deleted. + /// The Amazon Resource Name (ARN) of the connection. The ARN is used as the connection reference when the connection is shared between Amazon Web Services. The ARN is never reused if the connection is deleted. public var connectionArn: Swift.String? - /// The name of the connection. Connection names must be unique in an AWS user account. + /// The name of the connection. Connection names must be unique in an Amazon Web Services account. public var connectionName: Swift.String? /// The current status of the connection. public var connectionStatus: CodeStarconnectionsClientTypes.ConnectionStatus? @@ -212,7 +212,7 @@ extension CreateConnectionInput: ClientRuntime.URLPathProvider { } public struct CreateConnectionInput: Swift.Equatable { - /// The name of the connection to be created. The name must be unique in the calling AWS account. + /// The name of the connection to be created. /// This member is required. public var connectionName: Swift.String? /// The Amazon Resource Name (ARN) of the host associated with the connection to be created. @@ -301,7 +301,7 @@ extension CreateConnectionOutputResponse: ClientRuntime.HttpResponseBinding { } public struct CreateConnectionOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the connection to be created. The ARN is used as the connection reference when the connection is shared between AWS services. The ARN is never reused if the connection is deleted. + /// The Amazon Resource Name (ARN) of the connection to be created. The ARN is used as the connection reference when the connection is shared between Amazon Web Services services. The ARN is never reused if the connection is deleted. /// This member is required. public var connectionArn: Swift.String? /// Specifies the tags applied to the resource. @@ -385,7 +385,7 @@ extension CreateHostInput: ClientRuntime.URLPathProvider { } public struct CreateHostInput: Swift.Equatable { - /// The name of the host to be created. The name must be unique in the calling AWS account. + /// The name of the host to be created. /// This member is required. public var name: Swift.String? /// The endpoint of the infrastructure to be represented by the host after it is created. @@ -1066,7 +1066,7 @@ extension ListConnectionsInput: Swift.Encodable { if let hostArnFilter = self.hostArnFilter { try encodeContainer.encode(hostArnFilter, forKey: .hostArnFilter) } - if maxResults != 0 { + if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { @@ -1088,7 +1088,7 @@ public struct ListConnectionsInput: Swift.Equatable { /// Filters the list of connections to those associated with a specified host. public var hostArnFilter: Swift.String? /// The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value. - public var maxResults: Swift.Int + public var maxResults: Swift.Int? /// The token that was returned from the previous ListConnections call, which can be used to return the next set of connections in the list. public var nextToken: Swift.String? /// Filters the list of connections to those associated with a specified provider, such as Bitbucket. @@ -1096,7 +1096,7 @@ public struct ListConnectionsInput: Swift.Equatable { public init( hostArnFilter: Swift.String? = nil, - maxResults: Swift.Int = 0, + maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, providerTypeFilter: CodeStarconnectionsClientTypes.ProviderType? = nil ) @@ -1111,7 +1111,7 @@ public struct ListConnectionsInput: Swift.Equatable { struct ListConnectionsInputBody: Swift.Equatable { let providerTypeFilter: CodeStarconnectionsClientTypes.ProviderType? let hostArnFilter: Swift.String? - let maxResults: Swift.Int + let maxResults: Swift.Int? let nextToken: Swift.String? } @@ -1129,7 +1129,7 @@ extension ListConnectionsInputBody: Swift.Decodable { providerTypeFilter = providerTypeFilterDecoded let hostArnFilterDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .hostArnFilter) hostArnFilter = hostArnFilterDecoded - let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) ?? 0 + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded @@ -1141,6 +1141,7 @@ public enum ListConnectionsOutputError: ClientRuntime.HttpResponseErrorBinding { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } @@ -1213,7 +1214,7 @@ extension ListHostsInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if maxResults != 0 { + if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { @@ -1230,12 +1231,12 @@ extension ListHostsInput: ClientRuntime.URLPathProvider { public struct ListHostsInput: Swift.Equatable { /// The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned nextToken value. - public var maxResults: Swift.Int + public var maxResults: Swift.Int? /// The token that was returned from the previous ListHosts call, which can be used to return the next set of hosts in the list. public var nextToken: Swift.String? public init( - maxResults: Swift.Int = 0, + maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil ) { @@ -1245,7 +1246,7 @@ public struct ListHostsInput: Swift.Equatable { } struct ListHostsInputBody: Swift.Equatable { - let maxResults: Swift.Int + let maxResults: Swift.Int? let nextToken: Swift.String? } @@ -1257,7 +1258,7 @@ extension ListHostsInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) ?? 0 + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded @@ -1446,6 +1447,7 @@ extension CodeStarconnectionsClientTypes { case bitbucket case github case githubEnterpriseServer + case gitlab case sdkUnknown(Swift.String) public static var allCases: [ProviderType] { @@ -1453,6 +1455,7 @@ extension CodeStarconnectionsClientTypes { .bitbucket, .github, .githubEnterpriseServer, + .gitlab, .sdkUnknown("") ] } @@ -1465,6 +1468,7 @@ extension CodeStarconnectionsClientTypes { case .bitbucket: return "Bitbucket" case .github: return "GitHub" case .githubEnterpriseServer: return "GitHubEnterpriseServer" + case .gitlab: return "GitLab" case let .sdkUnknown(s): return s } } @@ -1612,7 +1616,7 @@ extension CodeStarconnectionsClientTypes.Tag: Swift.Codable { } extension CodeStarconnectionsClientTypes { - /// A tag is a key-value pair that is used to manage the resource. This tag is available for use by AWS services that support tags. + /// A tag is a key-value pair that is used to manage the resource. This tag is available for use by Amazon Web Services services that support tags. public struct Tag: Swift.Equatable { /// The tag's key. /// This member is required. diff --git a/Sources/Services/AWSCodeartifact/models/Models.swift b/Sources/Services/AWSCodeartifact/models/Models.swift index 6348715c91a..a35e332bcc2 100644 --- a/Sources/Services/AWSCodeartifact/models/Models.swift +++ b/Sources/Services/AWSCodeartifact/models/Models.swift @@ -6671,7 +6671,7 @@ public struct PublishPackageVersionInput: Swift.Equatable { public var domain: Swift.String? /// The 12-digit account number of the AWS account that owns the domain. It does not include dashes or spaces. public var domainOwner: Swift.String? - /// A format that specifies the type of the package version with the requested asset file. + /// A format that specifies the type of the package version with the requested asset file. The only supported value is generic. /// This member is required. public var format: CodeartifactClientTypes.PackageFormat? /// The namespace of the package version to publish. diff --git a/Sources/Services/AWSCognitoIdentityProvider/CognitoIdentityProviderClient.swift b/Sources/Services/AWSCognitoIdentityProvider/CognitoIdentityProviderClient.swift index 496460fd47d..f61e0966ce1 100644 --- a/Sources/Services/AWSCognitoIdentityProvider/CognitoIdentityProviderClient.swift +++ b/Sources/Services/AWSCognitoIdentityProvider/CognitoIdentityProviderClient.swift @@ -67,7 +67,11 @@ public struct CognitoIdentityProviderClientLogHandlerFactory: ClientRuntime.SDKL } extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { - /// Adds additional user attributes to the user pool schema. + /// Adds additional user attributes to the user pool schema. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func addCustomAttributes(input: AddCustomAttributesInput) async throws -> AddCustomAttributesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -104,7 +108,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Adds the specified user to the specified group. Calling this action requires developer credentials. + /// Adds the specified user to the specified group. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminAddUserToGroup(input: AdminAddUserToGroupInput) async throws -> AdminAddUserToGroupOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -141,7 +149,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Confirms user registration as an admin without using a confirmation code. Works on any user. Calling this action requires developer credentials. + /// Confirms user registration as an admin without using a confirmation code. Works on any user. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminConfirmSignUp(input: AdminConfirmSignUpInput) async throws -> AdminConfirmSignUpOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -178,7 +190,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Creates a new user in the specified user pool. If MessageAction isn't set, the default is to send a welcome message via email or phone (SMS). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. This message is based on a template that you configured in your call to create or update a user pool. This template includes your custom sign-up instructions and placeholders for user name and temporary password. Alternatively, you can call AdminCreateUser with SUPPRESS for the MessageAction parameter, and Amazon Cognito won't send any email. In either case, the user will be in the FORCE_CHANGE_PASSWORD state until they sign in and change their password. AdminCreateUser requires developer credentials. + /// Creates a new user in the specified user pool. If MessageAction isn't set, the default is to send a welcome message via email or phone (SMS). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. This message is based on a template that you configured in your call to create or update a user pool. This template includes your custom sign-up instructions and placeholders for user name and temporary password. Alternatively, you can call AdminCreateUser with SUPPRESS for the MessageAction parameter, and Amazon Cognito won't send any email. In either case, the user will be in the FORCE_CHANGE_PASSWORD state until they sign in and change their password. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminCreateUser(input: AdminCreateUserInput) async throws -> AdminCreateUserOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -215,7 +231,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Deletes a user as an administrator. Works on any user. Calling this action requires developer credentials. + /// Deletes a user as an administrator. Works on any user. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminDeleteUser(input: AdminDeleteUserInput) async throws -> AdminDeleteUserOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -252,7 +272,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Deletes the user attributes in a user pool as an administrator. Works on any user. Calling this action requires developer credentials. + /// Deletes the user attributes in a user pool as an administrator. Works on any user. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminDeleteUserAttributes(input: AdminDeleteUserAttributesInput) async throws -> AdminDeleteUserAttributesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -289,7 +313,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Prevents the user from signing in with the specified external (SAML or social) identity provider (IdP). If the user that you want to deactivate is a Amazon Cognito user pools native username + password user, they can't use their password to sign in. If the user to deactivate is a linked external IdP user, any link between that user and an existing user is removed. When the external user signs in again, and the user is no longer attached to the previously linked DestinationUser, the user must create a new user account. See [AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html). This action is enabled only for admin access and requires developer credentials. The ProviderName must match the value specified when creating an IdP for the pool. To deactivate a native username + password user, the ProviderName value must be Cognito and the ProviderAttributeName must be Cognito_Subject. The ProviderAttributeValue must be the name that is used in the user pool for the user. The ProviderAttributeName must always be Cognito_Subject for social IdPs. The ProviderAttributeValue must always be the exact subject that was used when the user was originally linked as a source user. For de-linking a SAML identity, there are two scenarios. If the linked identity has not yet been used to sign in, the ProviderAttributeName and ProviderAttributeValue must be the same values that were used for the SourceUser when the identities were originally linked using AdminLinkProviderForUser call. (If the linking was done with ProviderAttributeName set to Cognito_Subject, the same applies here). However, if the user has already signed in, the ProviderAttributeName must be Cognito_Subject and ProviderAttributeValue must be the subject of the SAML assertion. + /// Prevents the user from signing in with the specified external (SAML or social) identity provider (IdP). If the user that you want to deactivate is a Amazon Cognito user pools native username + password user, they can't use their password to sign in. If the user to deactivate is a linked external IdP user, any link between that user and an existing user is removed. When the external user signs in again, and the user is no longer attached to the previously linked DestinationUser, the user must create a new user account. See [AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html). The ProviderName must match the value specified when creating an IdP for the pool. To deactivate a native username + password user, the ProviderName value must be Cognito and the ProviderAttributeName must be Cognito_Subject. The ProviderAttributeValue must be the name that is used in the user pool for the user. The ProviderAttributeName must always be Cognito_Subject for social IdPs. The ProviderAttributeValue must always be the exact subject that was used when the user was originally linked as a source user. For de-linking a SAML identity, there are two scenarios. If the linked identity has not yet been used to sign in, the ProviderAttributeName and ProviderAttributeValue must be the same values that were used for the SourceUser when the identities were originally linked using AdminLinkProviderForUser call. (If the linking was done with ProviderAttributeName set to Cognito_Subject, the same applies here). However, if the user has already signed in, the ProviderAttributeName must be Cognito_Subject and ProviderAttributeValue must be the subject of the SAML assertion. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminDisableProviderForUser(input: AdminDisableProviderForUserInput) async throws -> AdminDisableProviderForUserOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -326,7 +354,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Deactivates a user and revokes all access tokens for the user. A deactivated user can't sign in, but still appears in the responses to GetUser and ListUsers API requests. You must make this API request with Amazon Web Services credentials that have cognito-idp:AdminDisableUser permissions. + /// Deactivates a user and revokes all access tokens for the user. A deactivated user can't sign in, but still appears in the responses to GetUser and ListUsers API requests. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminDisableUser(input: AdminDisableUserInput) async throws -> AdminDisableUserOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -363,7 +395,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Enables the specified user as an administrator. Works on any user. Calling this action requires developer credentials. + /// Enables the specified user as an administrator. Works on any user. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminEnableUser(input: AdminEnableUserInput) async throws -> AdminEnableUserOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -400,7 +436,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Forgets the device, as an administrator. Calling this action requires developer credentials. + /// Forgets the device, as an administrator. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminForgetDevice(input: AdminForgetDeviceInput) async throws -> AdminForgetDeviceOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -437,7 +477,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Gets the device, as an administrator. Calling this action requires developer credentials. + /// Gets the device, as an administrator. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminGetDevice(input: AdminGetDeviceInput) async throws -> AdminGetDeviceOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -474,7 +518,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Gets the specified user by user name in a user pool as an administrator. Works on any user. Calling this action requires developer credentials. + /// Gets the specified user by user name in a user pool as an administrator. Works on any user. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminGetUser(input: AdminGetUserInput) async throws -> AdminGetUserOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -511,7 +559,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Initiates the authentication flow, as an administrator. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. Calling this action requires developer credentials. + /// Initiates the authentication flow, as an administrator. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminInitiateAuth(input: AdminInitiateAuthInput) async throws -> AdminInitiateAuthOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -548,7 +600,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Links an existing user account in a user pool (DestinationUser) to an identity from an external IdP (SourceUser) based on a specified attribute name and value from the external IdP. This allows you to create a link from the existing user account to an external federated user identity that has not yet been used to sign in. You can then use the federated user identity to sign in as the existing user account. For example, if there is an existing user with a username and password, this API links that user to a federated user identity. When the user signs in with a federated user identity, they sign in as the existing user account. The maximum number of federated identities linked to a user is five. Because this API allows a user with an external federated identity to sign in as an existing user in the user pool, it is critical that it only be used with external IdPs and provider attributes that have been trusted by the application owner. This action is administrative and requires developer credentials. + /// Links an existing user account in a user pool (DestinationUser) to an identity from an external IdP (SourceUser) based on a specified attribute name and value from the external IdP. This allows you to create a link from the existing user account to an external federated user identity that has not yet been used to sign in. You can then use the federated user identity to sign in as the existing user account. For example, if there is an existing user with a username and password, this API links that user to a federated user identity. When the user signs in with a federated user identity, they sign in as the existing user account. The maximum number of federated identities linked to a user is five. Because this API allows a user with an external federated identity to sign in as an existing user in the user pool, it is critical that it only be used with external IdPs and provider attributes that have been trusted by the application owner. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminLinkProviderForUser(input: AdminLinkProviderForUserInput) async throws -> AdminLinkProviderForUserOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -585,7 +641,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Lists devices, as an administrator. Calling this action requires developer credentials. + /// Lists devices, as an administrator. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminListDevices(input: AdminListDevicesInput) async throws -> AdminListDevicesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -622,7 +682,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Lists the groups that the user belongs to. Calling this action requires developer credentials. + /// Lists the groups that the user belongs to. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminListGroupsForUser(input: AdminListGroupsForUserInput) async throws -> AdminListGroupsForUserOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -659,7 +723,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// A history of user activity and any risks detected as part of Amazon Cognito advanced security. + /// A history of user activity and any risks detected as part of Amazon Cognito advanced security. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminListUserAuthEvents(input: AdminListUserAuthEventsInput) async throws -> AdminListUserAuthEventsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -696,7 +764,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Removes the specified user from the specified group. Calling this action requires developer credentials. + /// Removes the specified user from the specified group. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminRemoveUserFromGroup(input: AdminRemoveUserFromGroupInput) async throws -> AdminRemoveUserFromGroupOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -733,7 +805,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Resets the specified user's password in a user pool as an administrator. Works on any user. When a developer calls this API, the current password is invalidated, so it must be changed. If a user tries to sign in after the API is called, the app will get a PasswordResetRequiredException exception back and should direct the user down the flow to reset the password, which is the same as the forgot password flow. In addition, if the user pool has phone verification selected and a verified phone number exists for the user, or if email verification is selected and a verified email exists for the user, calling this API will also result in sending a message to the end user with the code to change their password. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. Calling this action requires developer credentials. + /// Resets the specified user's password in a user pool as an administrator. Works on any user. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Deactivates a user's password, requiring them to change it. If a user tries to sign in after the API is called, Amazon Cognito responds with a PasswordResetRequiredException error. Your app must then perform the actions that reset your user's password: the forgot-password flow. In addition, if the user pool has phone verification selected and a verified phone number exists for the user, or if email verification is selected and a verified email exists for the user, calling this API will also result in sending a message to the end user with the code to change their password. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminResetUserPassword(input: AdminResetUserPasswordInput) async throws -> AdminResetUserPasswordOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -770,7 +846,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Responds to an authentication challenge, as an administrator. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. Calling this action requires developer credentials. + /// Responds to an authentication challenge, as an administrator. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminRespondToAuthChallenge(input: AdminRespondToAuthChallengeInput) async throws -> AdminRespondToAuthChallengeOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -807,7 +887,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// The user's multi-factor authentication (MFA) preference, including which MFA options are activated, and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in. + /// The user's multi-factor authentication (MFA) preference, including which MFA options are activated, and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminSetUserMFAPreference(input: AdminSetUserMFAPreferenceInput) async throws -> AdminSetUserMFAPreferenceOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -844,7 +928,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Sets the specified user's password in a user pool as an administrator. Works on any user. The password can be temporary or permanent. If it is temporary, the user status enters the FORCE_CHANGE_PASSWORD state. When the user next tries to sign in, the InitiateAuth/AdminInitiateAuth response will contain the NEW_PASSWORD_REQUIRED challenge. If the user doesn't sign in before it expires, the user won't be able to sign in, and an administrator must reset their password. Once the user has set a new password, or the password is permanent, the user status is set to Confirmed. + /// Sets the specified user's password in a user pool as an administrator. Works on any user. The password can be temporary or permanent. If it is temporary, the user status enters the FORCE_CHANGE_PASSWORD state. When the user next tries to sign in, the InitiateAuth/AdminInitiateAuth response will contain the NEW_PASSWORD_REQUIRED challenge. If the user doesn't sign in before it expires, the user won't be able to sign in, and an administrator must reset their password. Once the user has set a new password, or the password is permanent, the user status is set to Confirmed. AdminSetUserPassword can set a password for the user profile that Amazon Cognito creates for third-party federated users. When you set a password, the federated user's status changes from EXTERNAL_PROVIDER to CONFIRMED. A user in this state can sign in as a federated user, and initiate authentication flows in the API like a linked native user. They can also modify their password and attributes in token-authenticated API requests like ChangePassword and UpdateUserAttributes. As a best security practice and to keep users in sync with your external IdP, don't set passwords on federated user profiles. To set up a federated user for native sign-in with a linked native user, refer to [Linking federated users to an existing user profile](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation-consolidate-users.html). Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminSetUserPassword(input: AdminSetUserPasswordInput) async throws -> AdminSetUserPasswordOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -881,7 +969,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// This action is no longer supported. You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token MFA. To configure either type of MFA, use [AdminSetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html) instead. + /// This action is no longer supported. You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token MFA. To configure either type of MFA, use [AdminSetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html) instead. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminSetUserSettings(input: AdminSetUserSettingsInput) async throws -> AdminSetUserSettingsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -918,7 +1010,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Provides feedback for an authentication event indicating if it was from a valid user. This feedback is used for improving the risk evaluation decision for the user pool as part of Amazon Cognito advanced security. + /// Provides feedback for an authentication event indicating if it was from a valid user. This feedback is used for improving the risk evaluation decision for the user pool as part of Amazon Cognito advanced security. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminUpdateAuthEventFeedback(input: AdminUpdateAuthEventFeedbackInput) async throws -> AdminUpdateAuthEventFeedbackOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -955,7 +1051,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Updates the device status as an administrator. Calling this action requires developer credentials. + /// Updates the device status as an administrator. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminUpdateDeviceStatus(input: AdminUpdateDeviceStatusInput) async throws -> AdminUpdateDeviceStatusOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -992,7 +1092,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Updates the specified user's attributes, including developer attributes, as an administrator. Works on any user. For custom attributes, you must prepend the custom: prefix to the attribute name. In addition to updating user attributes, this API can also be used to mark phone and email as verified. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. Calling this action requires developer credentials. + /// This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Updates the specified user's attributes, including developer attributes, as an administrator. Works on any user. For custom attributes, you must prepend the custom: prefix to the attribute name. In addition to updating user attributes, this API can also be used to mark phone and email as verified. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminUpdateUserAttributes(input: AdminUpdateUserAttributesInput) async throws -> AdminUpdateUserAttributesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1029,7 +1133,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Signs out a user from all devices. You must sign AdminUserGlobalSignOut requests with Amazon Web Services credentials. It also invalidates all refresh tokens that Amazon Cognito has issued to a user. The user's current access and ID tokens remain valid until they expire. By default, access and ID tokens expire one hour after they're issued. A user can still use a hosted UI cookie to retrieve new tokens for the duration of the cookie validity period of 1 hour. Calling this action requires developer credentials. + /// Signs out a user from all devices. AdminUserGlobalSignOut invalidates all identity, access and refresh tokens that Amazon Cognito has issued to a user. A user can still use a hosted UI cookie to retrieve new tokens for the duration of the 1-hour cookie validity period. Your app isn't aware that a user's access token is revoked unless it attempts to authorize a user pools API request with an access token that contains the scope aws.cognito.signin.user.admin. Your app might otherwise accept access tokens until they expire. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func adminUserGlobalSignOut(input: AdminUserGlobalSignOutInput) async throws -> AdminUserGlobalSignOutOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1066,7 +1174,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Begins setup of time-based one-time password (TOTP) multi-factor authentication (MFA) for a user, with a unique private key that Amazon Cognito generates and returns in the API response. You can authorize an AssociateSoftwareToken request with either the user's access token, or a session string from a challenge response that you received from Amazon Cognito. Amazon Cognito disassociates an existing software token when you verify the new token in a [ VerifySoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html) API request. If you don't verify the software token and your user pool doesn't require MFA, the user can then authenticate with user name and password credentials alone. If your user pool requires TOTP MFA, Amazon Cognito generates an MFA_SETUP or SOFTWARE_TOKEN_SETUP challenge each time your user signs. Complete setup with AssociateSoftwareToken and VerifySoftwareToken. After you set up software token MFA for your user, Amazon Cognito generates a SOFTWARE_TOKEN_MFA challenge when they authenticate. Respond to this challenge with your user's TOTP. + /// Begins setup of time-based one-time password (TOTP) multi-factor authentication (MFA) for a user, with a unique private key that Amazon Cognito generates and returns in the API response. You can authorize an AssociateSoftwareToken request with either the user's access token, or a session string from a challenge response that you received from Amazon Cognito. Amazon Cognito disassociates an existing software token when you verify the new token in a [ VerifySoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html) API request. If you don't verify the software token and your user pool doesn't require MFA, the user can then authenticate with user name and password credentials alone. If your user pool requires TOTP MFA, Amazon Cognito generates an MFA_SETUP or SOFTWARE_TOKEN_SETUP challenge each time your user signs. Complete setup with AssociateSoftwareToken and VerifySoftwareToken. After you set up software token MFA for your user, Amazon Cognito generates a SOFTWARE_TOKEN_MFA challenge when they authenticate. Respond to this challenge with your user's TOTP. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func associateSoftwareToken(input: AssociateSoftwareTokenInput) async throws -> AssociateSoftwareTokenOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1099,7 +1207,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Changes the password for a specified user in a user pool. + /// Changes the password for a specified user in a user pool. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func changePassword(input: ChangePasswordInput) async throws -> ChangePasswordOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1132,7 +1240,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Confirms tracking of the device. This API call is the call that begins device tracking. + /// Confirms tracking of the device. This API call is the call that begins device tracking. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func confirmDevice(input: ConfirmDeviceInput) async throws -> ConfirmDeviceOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1165,7 +1273,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Allows a user to enter a confirmation code to reset a forgotten password. + /// Allows a user to enter a confirmation code to reset a forgotten password. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func confirmForgotPassword(input: ConfirmForgotPasswordInput) async throws -> ConfirmForgotPasswordOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1198,7 +1306,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Confirms registration of a new user. + /// Confirms registration of a new user. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func confirmSignUp(input: ConfirmSignUpInput) async throws -> ConfirmSignUpOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1231,7 +1339,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Creates a new group in the specified user pool. Calling this action requires developer credentials. + /// Creates a new group in the specified user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func createGroup(input: CreateGroupInput) async throws -> CreateGroupOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1268,7 +1380,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Creates an IdP for a user pool. + /// Creates an IdP for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func createIdentityProvider(input: CreateIdentityProviderInput) async throws -> CreateIdentityProviderOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1305,7 +1421,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Creates a new OAuth2.0 resource server and defines custom scopes within it. + /// Creates a new OAuth2.0 resource server and defines custom scopes within it. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func createResourceServer(input: CreateResourceServerInput) async throws -> CreateResourceServerOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1342,7 +1462,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Creates the user import job. + /// Creates a user import job. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func createUserImportJob(input: CreateUserImportJobInput) async throws -> CreateUserImportJobOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1379,7 +1503,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Creates a new Amazon Cognito user pool and sets the password policy for the pool. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Creates a new Amazon Cognito user pool and sets the password policy for the pool. If you don't provide a value for an attribute, Amazon Cognito sets it to its default value. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func createUserPool(input: CreateUserPoolInput) async throws -> CreateUserPoolOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1416,7 +1544,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Creates the user pool client. When you create a new user pool client, token revocation is automatically activated. For more information about revoking tokens, see [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html). + /// Creates the user pool client. When you create a new user pool client, token revocation is automatically activated. For more information about revoking tokens, see [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html). If you don't provide a value for an attribute, Amazon Cognito sets it to its default value. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func createUserPoolClient(input: CreateUserPoolClientInput) async throws -> CreateUserPoolClientOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1453,7 +1585,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Creates a new domain for a user pool. + /// Creates a new domain for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func createUserPoolDomain(input: CreateUserPoolDomainInput) async throws -> CreateUserPoolDomainOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1601,7 +1737,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Allows a user to delete himself or herself. + /// Allows a user to delete their own user profile. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func deleteUser(input: DeleteUserInput) async throws -> DeleteUserOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1634,7 +1770,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Deletes the attributes for a user. + /// Deletes the attributes for a user. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func deleteUserAttributes(input: DeleteUserAttributesInput) async throws -> DeleteUserAttributesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1926,7 +2062,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Returns the configuration information and metadata of the specified user pool. + /// Returns the configuration information and metadata of the specified user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func describeUserPool(input: DescribeUserPoolInput) async throws -> DescribeUserPoolOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1963,7 +2103,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Client method for returning the configuration information and metadata of the specified user pool app client. + /// Client method for returning the configuration information and metadata of the specified user pool app client. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func describeUserPoolClient(input: DescribeUserPoolClientInput) async throws -> DescribeUserPoolClientOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2037,7 +2181,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Forgets the specified device. + /// Forgets the specified device. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func forgetDevice(input: ForgetDeviceInput) async throws -> ForgetDeviceOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2070,7 +2214,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Calling this API causes a message to be sent to the end user with a confirmation code that is required to change the user's password. For the Username parameter, you can use the username or user alias. The method used to send the confirmation code is sent according to the specified AccountRecoverySetting. For more information, see [Recovering User Accounts](https://docs.aws.amazon.com/cognito/latest/developerguide/how-to-recover-a-user-account.html) in the Amazon Cognito Developer Guide. If neither a verified phone number nor a verified email exists, an InvalidParameterException is thrown. To use the confirmation code for resetting the password, call [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Calling this API causes a message to be sent to the end user with a confirmation code that is required to change the user's password. For the Username parameter, you can use the username or user alias. The method used to send the confirmation code is sent according to the specified AccountRecoverySetting. For more information, see [Recovering User Accounts](https://docs.aws.amazon.com/cognito/latest/developerguide/how-to-recover-a-user-account.html) in the Amazon Cognito Developer Guide. To use the confirmation code for resetting the password, call [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html). If neither a verified phone number nor a verified email exists, this API returns InvalidParameterException. If your app client has a client secret and you don't provide a SECRET_HASH parameter, this API returns NotAuthorizedException. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. public func forgotPassword(input: ForgotPasswordInput) async throws -> ForgotPasswordOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2140,7 +2284,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Gets the device. + /// Gets the device. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func getDevice(input: GetDeviceInput) async throws -> GetDeviceOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2247,6 +2391,43 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } + /// Gets the detailed activity logging configuration for a user pool. + public func getLogDeliveryConfiguration(input: GetLogDeliveryConfigurationInput) async throws -> GetLogDeliveryConfigurationOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getLogDeliveryConfiguration") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "cognito-idp") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getLogDeliveryConfiguration") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSCognitoIdentityProviderService.GetLogDeliveryConfiguration")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "GetLogDeliveryConfigurationRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// This method takes a user pool ID, and returns the signing certificate. The issued certificate is valid for 10 years from the date of issue. Amazon Cognito issues and assigns a new signing certificate annually. This process returns a new value in the response to GetSigningCertificate, but doesn't invalidate the original certificate. public func getSigningCertificate(input: GetSigningCertificateInput) async throws -> GetSigningCertificateOutputResponse { @@ -2321,7 +2502,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Gets the user attributes and metadata for a user. + /// Gets the user attributes and metadata for a user. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func getUser(input: GetUserInput) async throws -> GetUserOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2354,7 +2535,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Generates a user attribute verification code for the specified attribute name. Sends a message to a user with a code that they must return in a VerifyUserAttribute request. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Generates a user attribute verification code for the specified attribute name. Sends a message to a user with a code that they must return in a VerifyUserAttribute request. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. public func getUserAttributeVerificationCode(input: GetUserAttributeVerificationCodeInput) async throws -> GetUserAttributeVerificationCodeOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2424,7 +2605,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Signs out users from all devices. It also invalidates all refresh tokens that Amazon Cognito has issued to a user. A user can still use a hosted UI cookie to retrieve new tokens for the duration of the 1-hour cookie validity period. + /// Signs out a user from all devices. GlobalSignOut invalidates all identity, access and refresh tokens that Amazon Cognito has issued to a user. A user can still use a hosted UI cookie to retrieve new tokens for the duration of the 1-hour cookie validity period. Your app isn't aware that a user's access token is revoked unless it attempts to authorize a user pools API request with an access token that contains the scope aws.cognito.signin.user.admin. Your app might otherwise accept access tokens until they expire. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func globalSignOut(input: GlobalSignOutInput) async throws -> GlobalSignOutOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2457,7 +2638,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Initiates sign-in for a user in the Amazon Cognito user directory. You can't sign in a user with a federated IdP with InitiateAuth. For more information, see [ Adding user pool sign-in through a third party](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Initiates sign-in for a user in the Amazon Cognito user directory. You can't sign in a user with a federated IdP with InitiateAuth. For more information, see [ Adding user pool sign-in through a third party](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html). Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. public func initiateAuth(input: InitiateAuthInput) async throws -> InitiateAuthOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2490,7 +2671,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Lists the sign-in devices that Amazon Cognito has registered to the current user. + /// Lists the sign-in devices that Amazon Cognito has registered to the current user. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func listDevices(input: ListDevicesInput) async throws -> ListDevicesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2523,7 +2704,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Lists the groups associated with a user pool. Calling this action requires developer credentials. + /// Lists the groups associated with a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func listGroups(input: ListGroupsInput) async throws -> ListGroupsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2560,7 +2745,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Lists information about all IdPs for a user pool. + /// Lists information about all IdPs for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func listIdentityProviders(input: ListIdentityProvidersInput) async throws -> ListIdentityProvidersOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2597,7 +2786,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Lists the resource servers for a user pool. + /// Lists the resource servers for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func listResourceServers(input: ListResourceServersInput) async throws -> ListResourceServersOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2671,7 +2864,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Lists the user import jobs. + /// Lists user import jobs for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func listUserImportJobs(input: ListUserImportJobsInput) async throws -> ListUserImportJobsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2708,7 +2905,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Lists the clients that have been created for the specified user pool. + /// Lists the clients that have been created for the specified user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func listUserPoolClients(input: ListUserPoolClientsInput) async throws -> ListUserPoolClientsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2745,7 +2946,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Lists the user pools associated with an Amazon Web Services account. + /// Lists the user pools associated with an Amazon Web Services account. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func listUserPools(input: ListUserPoolsInput) async throws -> ListUserPoolsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2782,7 +2987,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Lists the users in the Amazon Cognito user pool. + /// Lists users and their basic details in a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func listUsers(input: ListUsersInput) async throws -> ListUsersOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2819,7 +3028,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Lists the users in the specified group. Calling this action requires developer credentials. + /// Lists the users in the specified group. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func listUsersInGroup(input: ListUsersInGroupInput) async throws -> ListUsersInGroupOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2856,7 +3069,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Resends the confirmation (for confirmation of registration) to a specific user in the user pool. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Resends the confirmation (for confirmation of registration) to a specific user in the user pool. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. public func resendConfirmationCode(input: ResendConfirmationCodeInput) async throws -> ResendConfirmationCodeOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2889,7 +3102,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Responds to the authentication challenge. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Responds to the authentication challenge. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. public func respondToAuthChallenge(input: RespondToAuthChallengeInput) async throws -> RespondToAuthChallengeOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2922,7 +3135,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Revokes all of the access tokens generated by, and at the same time as, the specified refresh token. After a token is revoked, you can't use the revoked token to access Amazon Cognito user APIs, or to authorize access to your resource server. + /// Revokes all of the access tokens generated by, and at the same time as, the specified refresh token. After a token is revoked, you can't use the revoked token to access Amazon Cognito user APIs, or to authorize access to your resource server. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func revokeToken(input: RevokeTokenInput) async throws -> RevokeTokenOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2955,6 +3168,43 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } + /// Sets up or modifies the detailed activity logging configuration of a user pool. + public func setLogDeliveryConfiguration(input: SetLogDeliveryConfigurationInput) async throws -> SetLogDeliveryConfigurationOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "setLogDeliveryConfiguration") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "cognito-idp") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "setLogDeliveryConfiguration") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSCognitoIdentityProviderService.SetLogDeliveryConfiguration")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "SetLogDeliveryConfigurationRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Configures actions on detected risks. To delete the risk configuration for UserPoolId or ClientId, pass null values for all four configuration types. To activate Amazon Cognito advanced security features, update the user pool to include the UserPoolAddOns keyAdvancedSecurityMode. public func setRiskConfiguration(input: SetRiskConfigurationInput) async throws -> SetRiskConfigurationOutputResponse { @@ -3029,7 +3279,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Set the user's multi-factor authentication (MFA) method preference, including which MFA factors are activated and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in. If an MFA type is activated for a user, the user will be prompted for MFA during all sign-in attempts unless device tracking is turned on and the device has been trusted. If you want MFA to be applied selectively based on the assessed risk level of sign-in attempts, deactivate MFA for users and turn on Adaptive Authentication for the user pool. + /// Set the user's multi-factor authentication (MFA) method preference, including which MFA factors are activated and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in. If an MFA type is activated for a user, the user will be prompted for MFA during all sign-in attempts unless device tracking is turned on and the device has been trusted. If you want MFA to be applied selectively based on the assessed risk level of sign-in attempts, deactivate MFA for users and turn on Adaptive Authentication for the user pool. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func setUserMFAPreference(input: SetUserMFAPreferenceInput) async throws -> SetUserMFAPreferenceOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3062,7 +3312,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Sets the user pool multi-factor authentication (MFA) configuration. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Sets the user pool multi-factor authentication (MFA) configuration. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. public func setUserPoolMfaConfig(input: SetUserPoolMfaConfigInput) async throws -> SetUserPoolMfaConfigOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3099,7 +3349,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// This action is no longer supported. You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token MFA. To configure either type of MFA, use [SetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html) instead. + /// This action is no longer supported. You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token MFA. To configure either type of MFA, use [SetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html) instead. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func setUserSettings(input: SetUserSettingsInput) async throws -> SetUserSettingsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3132,7 +3382,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Registers the user in the specified user pool and creates a user name, password, and user attributes. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Registers the user in the specified user pool and creates a user name, password, and user attributes. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. public func signUp(input: SignUpInput) async throws -> SignUpOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3313,7 +3563,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Provides the feedback for an authentication event, whether it was from a valid user or not. This feedback is used for improving the risk evaluation decision for the user pool as part of Amazon Cognito advanced security. + /// Provides the feedback for an authentication event, whether it was from a valid user or not. This feedback is used for improving the risk evaluation decision for the user pool as part of Amazon Cognito advanced security. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func updateAuthEventFeedback(input: UpdateAuthEventFeedbackInput) async throws -> UpdateAuthEventFeedbackOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3346,7 +3596,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Updates the device status. + /// Updates the device status. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func updateDeviceStatus(input: UpdateDeviceStatusInput) async throws -> UpdateDeviceStatusOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3379,7 +3629,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Updates the specified group with the specified attributes. Calling this action requires developer credentials. + /// Updates the specified group with the specified attributes. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func updateGroup(input: UpdateGroupInput) async throws -> UpdateGroupOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3416,7 +3670,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Updates IdP information for a user pool. + /// Updates IdP information for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func updateIdentityProvider(input: UpdateIdentityProviderInput) async throws -> UpdateIdentityProviderOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3453,7 +3711,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Updates the name and scopes of resource server. All other fields are read-only. If you don't provide a value for an attribute, it is set to the default value. + /// Updates the name and scopes of resource server. All other fields are read-only. If you don't provide a value for an attribute, it is set to the default value. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func updateResourceServer(input: UpdateResourceServerInput) async throws -> UpdateResourceServerOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3490,7 +3752,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Allows a user to update a specific attribute (one at a time). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Allows a user to update a specific attribute (one at a time). Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. public func updateUserAttributes(input: UpdateUserAttributesInput) async throws -> UpdateUserAttributesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3523,7 +3785,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Updates the specified user pool with the specified attributes. You can get a list of the current user pool settings using [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html). If you don't provide a value for an attribute, it will be set to the default value. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Updates the specified user pool with the specified attributes. You can get a list of the current user pool settings using [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html). If you don't provide a value for an attribute, Amazon Cognito sets it to its default value. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func updateUserPool(input: UpdateUserPoolInput) async throws -> UpdateUserPoolOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3560,7 +3826,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Updates the specified user pool app client with the specified attributes. You can get a list of the current user pool app client settings using [DescribeUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html). If you don't provide a value for an attribute, it will be set to the default value. You can also use this operation to enable token revocation for user pool clients. For more information about revoking tokens, see [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html). + /// Updates the specified user pool app client with the specified attributes. You can get a list of the current user pool app client settings using [DescribeUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html). If you don't provide a value for an attribute, Amazon Cognito sets it to its default value. You can also use this operation to enable token revocation for user pool clients. For more information about revoking tokens, see [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html). Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func updateUserPoolClient(input: UpdateUserPoolClientInput) async throws -> UpdateUserPoolClientOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3597,7 +3867,11 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Updates the Secure Sockets Layer (SSL) certificate for the custom domain for your user pool. You can use this operation to provide the Amazon Resource Name (ARN) of a new certificate to Amazon Cognito. You can't use it to change the domain for a user pool. A custom domain is used to host the Amazon Cognito hosted UI, which provides sign-up and sign-in pages for your application. When you set up a custom domain, you provide a certificate that you manage with Certificate Manager (ACM). When necessary, you can use this operation to change the certificate that you applied to your custom domain. Usually, this is unnecessary following routine certificate renewal with ACM. When you renew your existing certificate in ACM, the ARN for your certificate remains the same, and your custom domain uses the new certificate automatically. However, if you replace your existing certificate with a new one, ACM gives the new certificate a new ARN. To apply the new certificate to your custom domain, you must provide this ARN to Amazon Cognito. When you add your new certificate in ACM, you must choose US East (N. Virginia) as the Amazon Web Services Region. After you submit your request, Amazon Cognito requires up to 1 hour to distribute your new certificate to your custom domain. For more information about adding a custom domain to your user pool, see [Using Your Own Domain for the Hosted UI](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html). + /// Updates the Secure Sockets Layer (SSL) certificate for the custom domain for your user pool. You can use this operation to provide the Amazon Resource Name (ARN) of a new certificate to Amazon Cognito. You can't use it to change the domain for a user pool. A custom domain is used to host the Amazon Cognito hosted UI, which provides sign-up and sign-in pages for your application. When you set up a custom domain, you provide a certificate that you manage with Certificate Manager (ACM). When necessary, you can use this operation to change the certificate that you applied to your custom domain. Usually, this is unnecessary following routine certificate renewal with ACM. When you renew your existing certificate in ACM, the ARN for your certificate remains the same, and your custom domain uses the new certificate automatically. However, if you replace your existing certificate with a new one, ACM gives the new certificate a new ARN. To apply the new certificate to your custom domain, you must provide this ARN to Amazon Cognito. When you add your new certificate in ACM, you must choose US East (N. Virginia) as the Amazon Web Services Region. After you submit your request, Amazon Cognito requires up to 1 hour to distribute your new certificate to your custom domain. For more information about adding a custom domain to your user pool, see [Using Your Own Domain for the Hosted UI](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html). Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) public func updateUserPoolDomain(input: UpdateUserPoolDomainInput) async throws -> UpdateUserPoolDomainOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3634,7 +3908,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Use this API to register a user's entered time-based one-time password (TOTP) code and mark the user's software token MFA status as "verified" if successful. The request takes an access token or a session string, but not both. + /// Use this API to register a user's entered time-based one-time password (TOTP) code and mark the user's software token MFA status as "verified" if successful. The request takes an access token or a session string, but not both. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func verifySoftwareToken(input: VerifySoftwareTokenInput) async throws -> VerifySoftwareTokenOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3667,7 +3941,7 @@ extension CognitoIdentityProviderClient: CognitoIdentityProviderClientProtocol { return result } - /// Verifies the specified user attributes in the user pool. If your user pool requires verification before Amazon Cognito updates the attribute value, VerifyUserAttribute updates the affected attribute to its pending value. For more information, see [ UserAttributeUpdateSettingsType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserAttributeUpdateSettingsType.html). + /// Verifies the specified user attributes in the user pool. If your user pool requires verification before Amazon Cognito updates the attribute value, VerifyUserAttribute updates the affected attribute to its pending value. For more information, see [ UserAttributeUpdateSettingsType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserAttributeUpdateSettingsType.html). Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). public func verifyUserAttribute(input: VerifyUserAttributeInput) async throws -> VerifyUserAttributeOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSCognitoIdentityProvider/CognitoIdentityProviderClientProtocol.swift b/Sources/Services/AWSCognitoIdentityProvider/CognitoIdentityProviderClientProtocol.swift index febbd25b364..1dc0ed8c881 100644 --- a/Sources/Services/AWSCognitoIdentityProvider/CognitoIdentityProviderClientProtocol.swift +++ b/Sources/Services/AWSCognitoIdentityProvider/CognitoIdentityProviderClientProtocol.swift @@ -2,85 +2,242 @@ import ClientRuntime -/// Using the Amazon Cognito user pools API, you can create a user pool to manage directories and users. You can authenticate a user to obtain tokens related to user identity and access policies. This API reference provides information about user pools in Amazon Cognito user pools. For more information, see the [Amazon Cognito Documentation](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html). +/// With the Amazon Cognito user pools API, you can set up user pools and app clients, and authenticate users. To authenticate users from third-party identity providers (IdPs) in this API, you can [link IdP users to native user profiles](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation-consolidate-users.html). Learn more about the authentication and authorization of federated users in the [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html). This API reference provides detailed information about API operations and object types in Amazon Cognito. At the bottom of the page for each API operation and object, under See Also, you can learn how to use it in an Amazon Web Services SDK in the language of your choice. Along with resource management operations, the Amazon Cognito user pools API includes classes of operations and authorization models for client-side and server-side user operations. For more information, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) in the Amazon Cognito Developer Guide. You can also start reading about the CognitoIdentityProvider client in the following SDK guides. +/// +/// * [Amazon Web Services Command Line Interface](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/index.html#cli-aws-cognito-idp) +/// +/// * [Amazon Web Services SDK for .NET](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CognitoIdentityProvider/TCognitoIdentityProviderClient.html) +/// +/// * [Amazon Web Services SDK for C++](https://sdk.amazonaws.com/cpp/api/LATEST/aws-cpp-sdk-cognito-idp/html/class_aws_1_1_cognito_identity_provider_1_1_cognito_identity_provider_client.html) +/// +/// * [Amazon Web Services SDK for Go](https://docs.aws.amazon.com/sdk-for-go/api/service/cognitoidentityprovider/#CognitoIdentityProvider) +/// +/// * [Amazon Web Services SDK for Java V2](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/cognitoidentityprovider/CognitoIdentityProviderClient.html) +/// +/// * [Amazon Web Services SDK for JavaScript](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html) +/// +/// * [Amazon Web Services SDK for PHP V3](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cognito-idp-2016-04-18.html) +/// +/// * [Amazon Web Services SDK for Python](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cognito-idp.html) +/// +/// * [Amazon Web Services SDK for Ruby V3](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/CognitoIdentityProvider/Client.html) +/// +/// +/// To get started with an Amazon Web Services SDK, see [Tools to Build on Amazon Web Services](http://aws.amazon.com/developer/tools/). For example actions and scenarios, see [Code examples for Amazon Cognito Identity Provider using Amazon Web Services SDKs](https://docs.aws.amazon.com/cognito/latest/developerguide/service_code_examples_cognito-identity-provider.html). public protocol CognitoIdentityProviderClientProtocol { - /// Adds additional user attributes to the user pool schema. + /// Adds additional user attributes to the user pool schema. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func addCustomAttributes(input: AddCustomAttributesInput) async throws -> AddCustomAttributesOutputResponse - /// Adds the specified user to the specified group. Calling this action requires developer credentials. + /// Adds the specified user to the specified group. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminAddUserToGroup(input: AdminAddUserToGroupInput) async throws -> AdminAddUserToGroupOutputResponse - /// Confirms user registration as an admin without using a confirmation code. Works on any user. Calling this action requires developer credentials. + /// Confirms user registration as an admin without using a confirmation code. Works on any user. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminConfirmSignUp(input: AdminConfirmSignUpInput) async throws -> AdminConfirmSignUpOutputResponse - /// Creates a new user in the specified user pool. If MessageAction isn't set, the default is to send a welcome message via email or phone (SMS). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. This message is based on a template that you configured in your call to create or update a user pool. This template includes your custom sign-up instructions and placeholders for user name and temporary password. Alternatively, you can call AdminCreateUser with SUPPRESS for the MessageAction parameter, and Amazon Cognito won't send any email. In either case, the user will be in the FORCE_CHANGE_PASSWORD state until they sign in and change their password. AdminCreateUser requires developer credentials. + /// Creates a new user in the specified user pool. If MessageAction isn't set, the default is to send a welcome message via email or phone (SMS). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. This message is based on a template that you configured in your call to create or update a user pool. This template includes your custom sign-up instructions and placeholders for user name and temporary password. Alternatively, you can call AdminCreateUser with SUPPRESS for the MessageAction parameter, and Amazon Cognito won't send any email. In either case, the user will be in the FORCE_CHANGE_PASSWORD state until they sign in and change their password. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminCreateUser(input: AdminCreateUserInput) async throws -> AdminCreateUserOutputResponse - /// Deletes a user as an administrator. Works on any user. Calling this action requires developer credentials. + /// Deletes a user as an administrator. Works on any user. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminDeleteUser(input: AdminDeleteUserInput) async throws -> AdminDeleteUserOutputResponse - /// Deletes the user attributes in a user pool as an administrator. Works on any user. Calling this action requires developer credentials. + /// Deletes the user attributes in a user pool as an administrator. Works on any user. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminDeleteUserAttributes(input: AdminDeleteUserAttributesInput) async throws -> AdminDeleteUserAttributesOutputResponse - /// Prevents the user from signing in with the specified external (SAML or social) identity provider (IdP). If the user that you want to deactivate is a Amazon Cognito user pools native username + password user, they can't use their password to sign in. If the user to deactivate is a linked external IdP user, any link between that user and an existing user is removed. When the external user signs in again, and the user is no longer attached to the previously linked DestinationUser, the user must create a new user account. See [AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html). This action is enabled only for admin access and requires developer credentials. The ProviderName must match the value specified when creating an IdP for the pool. To deactivate a native username + password user, the ProviderName value must be Cognito and the ProviderAttributeName must be Cognito_Subject. The ProviderAttributeValue must be the name that is used in the user pool for the user. The ProviderAttributeName must always be Cognito_Subject for social IdPs. The ProviderAttributeValue must always be the exact subject that was used when the user was originally linked as a source user. For de-linking a SAML identity, there are two scenarios. If the linked identity has not yet been used to sign in, the ProviderAttributeName and ProviderAttributeValue must be the same values that were used for the SourceUser when the identities were originally linked using AdminLinkProviderForUser call. (If the linking was done with ProviderAttributeName set to Cognito_Subject, the same applies here). However, if the user has already signed in, the ProviderAttributeName must be Cognito_Subject and ProviderAttributeValue must be the subject of the SAML assertion. + /// Prevents the user from signing in with the specified external (SAML or social) identity provider (IdP). If the user that you want to deactivate is a Amazon Cognito user pools native username + password user, they can't use their password to sign in. If the user to deactivate is a linked external IdP user, any link between that user and an existing user is removed. When the external user signs in again, and the user is no longer attached to the previously linked DestinationUser, the user must create a new user account. See [AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html). The ProviderName must match the value specified when creating an IdP for the pool. To deactivate a native username + password user, the ProviderName value must be Cognito and the ProviderAttributeName must be Cognito_Subject. The ProviderAttributeValue must be the name that is used in the user pool for the user. The ProviderAttributeName must always be Cognito_Subject for social IdPs. The ProviderAttributeValue must always be the exact subject that was used when the user was originally linked as a source user. For de-linking a SAML identity, there are two scenarios. If the linked identity has not yet been used to sign in, the ProviderAttributeName and ProviderAttributeValue must be the same values that were used for the SourceUser when the identities were originally linked using AdminLinkProviderForUser call. (If the linking was done with ProviderAttributeName set to Cognito_Subject, the same applies here). However, if the user has already signed in, the ProviderAttributeName must be Cognito_Subject and ProviderAttributeValue must be the subject of the SAML assertion. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminDisableProviderForUser(input: AdminDisableProviderForUserInput) async throws -> AdminDisableProviderForUserOutputResponse - /// Deactivates a user and revokes all access tokens for the user. A deactivated user can't sign in, but still appears in the responses to GetUser and ListUsers API requests. You must make this API request with Amazon Web Services credentials that have cognito-idp:AdminDisableUser permissions. + /// Deactivates a user and revokes all access tokens for the user. A deactivated user can't sign in, but still appears in the responses to GetUser and ListUsers API requests. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminDisableUser(input: AdminDisableUserInput) async throws -> AdminDisableUserOutputResponse - /// Enables the specified user as an administrator. Works on any user. Calling this action requires developer credentials. + /// Enables the specified user as an administrator. Works on any user. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminEnableUser(input: AdminEnableUserInput) async throws -> AdminEnableUserOutputResponse - /// Forgets the device, as an administrator. Calling this action requires developer credentials. + /// Forgets the device, as an administrator. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminForgetDevice(input: AdminForgetDeviceInput) async throws -> AdminForgetDeviceOutputResponse - /// Gets the device, as an administrator. Calling this action requires developer credentials. + /// Gets the device, as an administrator. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminGetDevice(input: AdminGetDeviceInput) async throws -> AdminGetDeviceOutputResponse - /// Gets the specified user by user name in a user pool as an administrator. Works on any user. Calling this action requires developer credentials. + /// Gets the specified user by user name in a user pool as an administrator. Works on any user. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminGetUser(input: AdminGetUserInput) async throws -> AdminGetUserOutputResponse - /// Initiates the authentication flow, as an administrator. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. Calling this action requires developer credentials. + /// Initiates the authentication flow, as an administrator. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminInitiateAuth(input: AdminInitiateAuthInput) async throws -> AdminInitiateAuthOutputResponse - /// Links an existing user account in a user pool (DestinationUser) to an identity from an external IdP (SourceUser) based on a specified attribute name and value from the external IdP. This allows you to create a link from the existing user account to an external federated user identity that has not yet been used to sign in. You can then use the federated user identity to sign in as the existing user account. For example, if there is an existing user with a username and password, this API links that user to a federated user identity. When the user signs in with a federated user identity, they sign in as the existing user account. The maximum number of federated identities linked to a user is five. Because this API allows a user with an external federated identity to sign in as an existing user in the user pool, it is critical that it only be used with external IdPs and provider attributes that have been trusted by the application owner. This action is administrative and requires developer credentials. + /// Links an existing user account in a user pool (DestinationUser) to an identity from an external IdP (SourceUser) based on a specified attribute name and value from the external IdP. This allows you to create a link from the existing user account to an external federated user identity that has not yet been used to sign in. You can then use the federated user identity to sign in as the existing user account. For example, if there is an existing user with a username and password, this API links that user to a federated user identity. When the user signs in with a federated user identity, they sign in as the existing user account. The maximum number of federated identities linked to a user is five. Because this API allows a user with an external federated identity to sign in as an existing user in the user pool, it is critical that it only be used with external IdPs and provider attributes that have been trusted by the application owner. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminLinkProviderForUser(input: AdminLinkProviderForUserInput) async throws -> AdminLinkProviderForUserOutputResponse - /// Lists devices, as an administrator. Calling this action requires developer credentials. + /// Lists devices, as an administrator. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminListDevices(input: AdminListDevicesInput) async throws -> AdminListDevicesOutputResponse - /// Lists the groups that the user belongs to. Calling this action requires developer credentials. + /// Lists the groups that the user belongs to. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminListGroupsForUser(input: AdminListGroupsForUserInput) async throws -> AdminListGroupsForUserOutputResponse - /// A history of user activity and any risks detected as part of Amazon Cognito advanced security. + /// A history of user activity and any risks detected as part of Amazon Cognito advanced security. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminListUserAuthEvents(input: AdminListUserAuthEventsInput) async throws -> AdminListUserAuthEventsOutputResponse - /// Removes the specified user from the specified group. Calling this action requires developer credentials. + /// Removes the specified user from the specified group. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminRemoveUserFromGroup(input: AdminRemoveUserFromGroupInput) async throws -> AdminRemoveUserFromGroupOutputResponse - /// Resets the specified user's password in a user pool as an administrator. Works on any user. When a developer calls this API, the current password is invalidated, so it must be changed. If a user tries to sign in after the API is called, the app will get a PasswordResetRequiredException exception back and should direct the user down the flow to reset the password, which is the same as the forgot password flow. In addition, if the user pool has phone verification selected and a verified phone number exists for the user, or if email verification is selected and a verified email exists for the user, calling this API will also result in sending a message to the end user with the code to change their password. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. Calling this action requires developer credentials. + /// Resets the specified user's password in a user pool as an administrator. Works on any user. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Deactivates a user's password, requiring them to change it. If a user tries to sign in after the API is called, Amazon Cognito responds with a PasswordResetRequiredException error. Your app must then perform the actions that reset your user's password: the forgot-password flow. In addition, if the user pool has phone verification selected and a verified phone number exists for the user, or if email verification is selected and a verified email exists for the user, calling this API will also result in sending a message to the end user with the code to change their password. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminResetUserPassword(input: AdminResetUserPasswordInput) async throws -> AdminResetUserPasswordOutputResponse - /// Responds to an authentication challenge, as an administrator. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. Calling this action requires developer credentials. + /// Responds to an authentication challenge, as an administrator. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminRespondToAuthChallenge(input: AdminRespondToAuthChallengeInput) async throws -> AdminRespondToAuthChallengeOutputResponse - /// The user's multi-factor authentication (MFA) preference, including which MFA options are activated, and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in. + /// The user's multi-factor authentication (MFA) preference, including which MFA options are activated, and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminSetUserMFAPreference(input: AdminSetUserMFAPreferenceInput) async throws -> AdminSetUserMFAPreferenceOutputResponse - /// Sets the specified user's password in a user pool as an administrator. Works on any user. The password can be temporary or permanent. If it is temporary, the user status enters the FORCE_CHANGE_PASSWORD state. When the user next tries to sign in, the InitiateAuth/AdminInitiateAuth response will contain the NEW_PASSWORD_REQUIRED challenge. If the user doesn't sign in before it expires, the user won't be able to sign in, and an administrator must reset their password. Once the user has set a new password, or the password is permanent, the user status is set to Confirmed. + /// Sets the specified user's password in a user pool as an administrator. Works on any user. The password can be temporary or permanent. If it is temporary, the user status enters the FORCE_CHANGE_PASSWORD state. When the user next tries to sign in, the InitiateAuth/AdminInitiateAuth response will contain the NEW_PASSWORD_REQUIRED challenge. If the user doesn't sign in before it expires, the user won't be able to sign in, and an administrator must reset their password. Once the user has set a new password, or the password is permanent, the user status is set to Confirmed. AdminSetUserPassword can set a password for the user profile that Amazon Cognito creates for third-party federated users. When you set a password, the federated user's status changes from EXTERNAL_PROVIDER to CONFIRMED. A user in this state can sign in as a federated user, and initiate authentication flows in the API like a linked native user. They can also modify their password and attributes in token-authenticated API requests like ChangePassword and UpdateUserAttributes. As a best security practice and to keep users in sync with your external IdP, don't set passwords on federated user profiles. To set up a federated user for native sign-in with a linked native user, refer to [Linking federated users to an existing user profile](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation-consolidate-users.html). Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminSetUserPassword(input: AdminSetUserPasswordInput) async throws -> AdminSetUserPasswordOutputResponse - /// This action is no longer supported. You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token MFA. To configure either type of MFA, use [AdminSetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html) instead. + /// This action is no longer supported. You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token MFA. To configure either type of MFA, use [AdminSetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html) instead. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminSetUserSettings(input: AdminSetUserSettingsInput) async throws -> AdminSetUserSettingsOutputResponse - /// Provides feedback for an authentication event indicating if it was from a valid user. This feedback is used for improving the risk evaluation decision for the user pool as part of Amazon Cognito advanced security. + /// Provides feedback for an authentication event indicating if it was from a valid user. This feedback is used for improving the risk evaluation decision for the user pool as part of Amazon Cognito advanced security. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminUpdateAuthEventFeedback(input: AdminUpdateAuthEventFeedbackInput) async throws -> AdminUpdateAuthEventFeedbackOutputResponse - /// Updates the device status as an administrator. Calling this action requires developer credentials. + /// Updates the device status as an administrator. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminUpdateDeviceStatus(input: AdminUpdateDeviceStatusInput) async throws -> AdminUpdateDeviceStatusOutputResponse - /// Updates the specified user's attributes, including developer attributes, as an administrator. Works on any user. For custom attributes, you must prepend the custom: prefix to the attribute name. In addition to updating user attributes, this API can also be used to mark phone and email as verified. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. Calling this action requires developer credentials. + /// This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Updates the specified user's attributes, including developer attributes, as an administrator. Works on any user. For custom attributes, you must prepend the custom: prefix to the attribute name. In addition to updating user attributes, this API can also be used to mark phone and email as verified. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminUpdateUserAttributes(input: AdminUpdateUserAttributesInput) async throws -> AdminUpdateUserAttributesOutputResponse - /// Signs out a user from all devices. You must sign AdminUserGlobalSignOut requests with Amazon Web Services credentials. It also invalidates all refresh tokens that Amazon Cognito has issued to a user. The user's current access and ID tokens remain valid until they expire. By default, access and ID tokens expire one hour after they're issued. A user can still use a hosted UI cookie to retrieve new tokens for the duration of the cookie validity period of 1 hour. Calling this action requires developer credentials. + /// Signs out a user from all devices. AdminUserGlobalSignOut invalidates all identity, access and refresh tokens that Amazon Cognito has issued to a user. A user can still use a hosted UI cookie to retrieve new tokens for the duration of the 1-hour cookie validity period. Your app isn't aware that a user's access token is revoked unless it attempts to authorize a user pools API request with an access token that contains the scope aws.cognito.signin.user.admin. Your app might otherwise accept access tokens until they expire. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func adminUserGlobalSignOut(input: AdminUserGlobalSignOutInput) async throws -> AdminUserGlobalSignOutOutputResponse - /// Begins setup of time-based one-time password (TOTP) multi-factor authentication (MFA) for a user, with a unique private key that Amazon Cognito generates and returns in the API response. You can authorize an AssociateSoftwareToken request with either the user's access token, or a session string from a challenge response that you received from Amazon Cognito. Amazon Cognito disassociates an existing software token when you verify the new token in a [ VerifySoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html) API request. If you don't verify the software token and your user pool doesn't require MFA, the user can then authenticate with user name and password credentials alone. If your user pool requires TOTP MFA, Amazon Cognito generates an MFA_SETUP or SOFTWARE_TOKEN_SETUP challenge each time your user signs. Complete setup with AssociateSoftwareToken and VerifySoftwareToken. After you set up software token MFA for your user, Amazon Cognito generates a SOFTWARE_TOKEN_MFA challenge when they authenticate. Respond to this challenge with your user's TOTP. + /// Begins setup of time-based one-time password (TOTP) multi-factor authentication (MFA) for a user, with a unique private key that Amazon Cognito generates and returns in the API response. You can authorize an AssociateSoftwareToken request with either the user's access token, or a session string from a challenge response that you received from Amazon Cognito. Amazon Cognito disassociates an existing software token when you verify the new token in a [ VerifySoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html) API request. If you don't verify the software token and your user pool doesn't require MFA, the user can then authenticate with user name and password credentials alone. If your user pool requires TOTP MFA, Amazon Cognito generates an MFA_SETUP or SOFTWARE_TOKEN_SETUP challenge each time your user signs. Complete setup with AssociateSoftwareToken and VerifySoftwareToken. After you set up software token MFA for your user, Amazon Cognito generates a SOFTWARE_TOKEN_MFA challenge when they authenticate. Respond to this challenge with your user's TOTP. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func associateSoftwareToken(input: AssociateSoftwareTokenInput) async throws -> AssociateSoftwareTokenOutputResponse - /// Changes the password for a specified user in a user pool. + /// Changes the password for a specified user in a user pool. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func changePassword(input: ChangePasswordInput) async throws -> ChangePasswordOutputResponse - /// Confirms tracking of the device. This API call is the call that begins device tracking. + /// Confirms tracking of the device. This API call is the call that begins device tracking. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func confirmDevice(input: ConfirmDeviceInput) async throws -> ConfirmDeviceOutputResponse - /// Allows a user to enter a confirmation code to reset a forgotten password. + /// Allows a user to enter a confirmation code to reset a forgotten password. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func confirmForgotPassword(input: ConfirmForgotPasswordInput) async throws -> ConfirmForgotPasswordOutputResponse - /// Confirms registration of a new user. + /// Confirms registration of a new user. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func confirmSignUp(input: ConfirmSignUpInput) async throws -> ConfirmSignUpOutputResponse - /// Creates a new group in the specified user pool. Calling this action requires developer credentials. + /// Creates a new group in the specified user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func createGroup(input: CreateGroupInput) async throws -> CreateGroupOutputResponse - /// Creates an IdP for a user pool. + /// Creates an IdP for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func createIdentityProvider(input: CreateIdentityProviderInput) async throws -> CreateIdentityProviderOutputResponse - /// Creates a new OAuth2.0 resource server and defines custom scopes within it. + /// Creates a new OAuth2.0 resource server and defines custom scopes within it. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func createResourceServer(input: CreateResourceServerInput) async throws -> CreateResourceServerOutputResponse - /// Creates the user import job. + /// Creates a user import job. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func createUserImportJob(input: CreateUserImportJobInput) async throws -> CreateUserImportJobOutputResponse - /// Creates a new Amazon Cognito user pool and sets the password policy for the pool. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Creates a new Amazon Cognito user pool and sets the password policy for the pool. If you don't provide a value for an attribute, Amazon Cognito sets it to its default value. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func createUserPool(input: CreateUserPoolInput) async throws -> CreateUserPoolOutputResponse - /// Creates the user pool client. When you create a new user pool client, token revocation is automatically activated. For more information about revoking tokens, see [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html). + /// Creates the user pool client. When you create a new user pool client, token revocation is automatically activated. For more information about revoking tokens, see [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html). If you don't provide a value for an attribute, Amazon Cognito sets it to its default value. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func createUserPoolClient(input: CreateUserPoolClientInput) async throws -> CreateUserPoolClientOutputResponse - /// Creates a new domain for a user pool. + /// Creates a new domain for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func createUserPoolDomain(input: CreateUserPoolDomainInput) async throws -> CreateUserPoolDomainOutputResponse /// Deletes a group. Calling this action requires developer credentials. func deleteGroup(input: DeleteGroupInput) async throws -> DeleteGroupOutputResponse @@ -88,9 +245,9 @@ public protocol CognitoIdentityProviderClientProtocol { func deleteIdentityProvider(input: DeleteIdentityProviderInput) async throws -> DeleteIdentityProviderOutputResponse /// Deletes a resource server. func deleteResourceServer(input: DeleteResourceServerInput) async throws -> DeleteResourceServerOutputResponse - /// Allows a user to delete himself or herself. + /// Allows a user to delete their own user profile. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func deleteUser(input: DeleteUserInput) async throws -> DeleteUserOutputResponse - /// Deletes the attributes for a user. + /// Deletes the attributes for a user. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func deleteUserAttributes(input: DeleteUserAttributesInput) async throws -> DeleteUserAttributesOutputResponse /// Deletes the specified Amazon Cognito user pool. func deleteUserPool(input: DeleteUserPoolInput) async throws -> DeleteUserPoolOutputResponse @@ -106,75 +263,119 @@ public protocol CognitoIdentityProviderClientProtocol { func describeRiskConfiguration(input: DescribeRiskConfigurationInput) async throws -> DescribeRiskConfigurationOutputResponse /// Describes the user import job. func describeUserImportJob(input: DescribeUserImportJobInput) async throws -> DescribeUserImportJobOutputResponse - /// Returns the configuration information and metadata of the specified user pool. + /// Returns the configuration information and metadata of the specified user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func describeUserPool(input: DescribeUserPoolInput) async throws -> DescribeUserPoolOutputResponse - /// Client method for returning the configuration information and metadata of the specified user pool app client. + /// Client method for returning the configuration information and metadata of the specified user pool app client. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func describeUserPoolClient(input: DescribeUserPoolClientInput) async throws -> DescribeUserPoolClientOutputResponse /// Gets information about a domain. func describeUserPoolDomain(input: DescribeUserPoolDomainInput) async throws -> DescribeUserPoolDomainOutputResponse - /// Forgets the specified device. + /// Forgets the specified device. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func forgetDevice(input: ForgetDeviceInput) async throws -> ForgetDeviceOutputResponse - /// Calling this API causes a message to be sent to the end user with a confirmation code that is required to change the user's password. For the Username parameter, you can use the username or user alias. The method used to send the confirmation code is sent according to the specified AccountRecoverySetting. For more information, see [Recovering User Accounts](https://docs.aws.amazon.com/cognito/latest/developerguide/how-to-recover-a-user-account.html) in the Amazon Cognito Developer Guide. If neither a verified phone number nor a verified email exists, an InvalidParameterException is thrown. To use the confirmation code for resetting the password, call [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Calling this API causes a message to be sent to the end user with a confirmation code that is required to change the user's password. For the Username parameter, you can use the username or user alias. The method used to send the confirmation code is sent according to the specified AccountRecoverySetting. For more information, see [Recovering User Accounts](https://docs.aws.amazon.com/cognito/latest/developerguide/how-to-recover-a-user-account.html) in the Amazon Cognito Developer Guide. To use the confirmation code for resetting the password, call [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html). If neither a verified phone number nor a verified email exists, this API returns InvalidParameterException. If your app client has a client secret and you don't provide a SECRET_HASH parameter, this API returns NotAuthorizedException. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. func forgotPassword(input: ForgotPasswordInput) async throws -> ForgotPasswordOutputResponse /// Gets the header information for the comma-separated value (CSV) file to be used as input for the user import job. func getCSVHeader(input: GetCSVHeaderInput) async throws -> GetCSVHeaderOutputResponse - /// Gets the device. + /// Gets the device. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func getDevice(input: GetDeviceInput) async throws -> GetDeviceOutputResponse /// Gets a group. Calling this action requires developer credentials. func getGroup(input: GetGroupInput) async throws -> GetGroupOutputResponse /// Gets the specified IdP. func getIdentityProviderByIdentifier(input: GetIdentityProviderByIdentifierInput) async throws -> GetIdentityProviderByIdentifierOutputResponse + /// Gets the detailed activity logging configuration for a user pool. + func getLogDeliveryConfiguration(input: GetLogDeliveryConfigurationInput) async throws -> GetLogDeliveryConfigurationOutputResponse /// This method takes a user pool ID, and returns the signing certificate. The issued certificate is valid for 10 years from the date of issue. Amazon Cognito issues and assigns a new signing certificate annually. This process returns a new value in the response to GetSigningCertificate, but doesn't invalidate the original certificate. func getSigningCertificate(input: GetSigningCertificateInput) async throws -> GetSigningCertificateOutputResponse /// Gets the user interface (UI) Customization information for a particular app client's app UI, if any such information exists for the client. If nothing is set for the particular client, but there is an existing pool level customization (the app clientId is ALL), then that information is returned. If nothing is present, then an empty shape is returned. func getUICustomization(input: GetUICustomizationInput) async throws -> GetUICustomizationOutputResponse - /// Gets the user attributes and metadata for a user. + /// Gets the user attributes and metadata for a user. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func getUser(input: GetUserInput) async throws -> GetUserOutputResponse - /// Generates a user attribute verification code for the specified attribute name. Sends a message to a user with a code that they must return in a VerifyUserAttribute request. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Generates a user attribute verification code for the specified attribute name. Sends a message to a user with a code that they must return in a VerifyUserAttribute request. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. func getUserAttributeVerificationCode(input: GetUserAttributeVerificationCodeInput) async throws -> GetUserAttributeVerificationCodeOutputResponse /// Gets the user pool multi-factor authentication (MFA) configuration. func getUserPoolMfaConfig(input: GetUserPoolMfaConfigInput) async throws -> GetUserPoolMfaConfigOutputResponse - /// Signs out users from all devices. It also invalidates all refresh tokens that Amazon Cognito has issued to a user. A user can still use a hosted UI cookie to retrieve new tokens for the duration of the 1-hour cookie validity period. + /// Signs out a user from all devices. GlobalSignOut invalidates all identity, access and refresh tokens that Amazon Cognito has issued to a user. A user can still use a hosted UI cookie to retrieve new tokens for the duration of the 1-hour cookie validity period. Your app isn't aware that a user's access token is revoked unless it attempts to authorize a user pools API request with an access token that contains the scope aws.cognito.signin.user.admin. Your app might otherwise accept access tokens until they expire. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func globalSignOut(input: GlobalSignOutInput) async throws -> GlobalSignOutOutputResponse - /// Initiates sign-in for a user in the Amazon Cognito user directory. You can't sign in a user with a federated IdP with InitiateAuth. For more information, see [ Adding user pool sign-in through a third party](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Initiates sign-in for a user in the Amazon Cognito user directory. You can't sign in a user with a federated IdP with InitiateAuth. For more information, see [ Adding user pool sign-in through a third party](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-identity-federation.html). Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. func initiateAuth(input: InitiateAuthInput) async throws -> InitiateAuthOutputResponse - /// Lists the sign-in devices that Amazon Cognito has registered to the current user. + /// Lists the sign-in devices that Amazon Cognito has registered to the current user. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func listDevices(input: ListDevicesInput) async throws -> ListDevicesOutputResponse - /// Lists the groups associated with a user pool. Calling this action requires developer credentials. + /// Lists the groups associated with a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func listGroups(input: ListGroupsInput) async throws -> ListGroupsOutputResponse - /// Lists information about all IdPs for a user pool. + /// Lists information about all IdPs for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func listIdentityProviders(input: ListIdentityProvidersInput) async throws -> ListIdentityProvidersOutputResponse - /// Lists the resource servers for a user pool. + /// Lists the resource servers for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func listResourceServers(input: ListResourceServersInput) async throws -> ListResourceServersOutputResponse /// Lists the tags that are assigned to an Amazon Cognito user pool. A tag is a label that you can apply to user pools to categorize and manage them in different ways, such as by purpose, owner, environment, or other criteria. You can use this action up to 10 times per second, per account. func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse - /// Lists the user import jobs. + /// Lists user import jobs for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func listUserImportJobs(input: ListUserImportJobsInput) async throws -> ListUserImportJobsOutputResponse - /// Lists the clients that have been created for the specified user pool. + /// Lists the clients that have been created for the specified user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func listUserPoolClients(input: ListUserPoolClientsInput) async throws -> ListUserPoolClientsOutputResponse - /// Lists the user pools associated with an Amazon Web Services account. + /// Lists the user pools associated with an Amazon Web Services account. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func listUserPools(input: ListUserPoolsInput) async throws -> ListUserPoolsOutputResponse - /// Lists the users in the Amazon Cognito user pool. + /// Lists users and their basic details in a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func listUsers(input: ListUsersInput) async throws -> ListUsersOutputResponse - /// Lists the users in the specified group. Calling this action requires developer credentials. + /// Lists the users in the specified group. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func listUsersInGroup(input: ListUsersInGroupInput) async throws -> ListUsersInGroupOutputResponse - /// Resends the confirmation (for confirmation of registration) to a specific user in the user pool. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Resends the confirmation (for confirmation of registration) to a specific user in the user pool. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. func resendConfirmationCode(input: ResendConfirmationCodeInput) async throws -> ResendConfirmationCodeOutputResponse - /// Responds to the authentication challenge. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Responds to the authentication challenge. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. func respondToAuthChallenge(input: RespondToAuthChallengeInput) async throws -> RespondToAuthChallengeOutputResponse - /// Revokes all of the access tokens generated by, and at the same time as, the specified refresh token. After a token is revoked, you can't use the revoked token to access Amazon Cognito user APIs, or to authorize access to your resource server. + /// Revokes all of the access tokens generated by, and at the same time as, the specified refresh token. After a token is revoked, you can't use the revoked token to access Amazon Cognito user APIs, or to authorize access to your resource server. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func revokeToken(input: RevokeTokenInput) async throws -> RevokeTokenOutputResponse + /// Sets up or modifies the detailed activity logging configuration of a user pool. + func setLogDeliveryConfiguration(input: SetLogDeliveryConfigurationInput) async throws -> SetLogDeliveryConfigurationOutputResponse /// Configures actions on detected risks. To delete the risk configuration for UserPoolId or ClientId, pass null values for all four configuration types. To activate Amazon Cognito advanced security features, update the user pool to include the UserPoolAddOns keyAdvancedSecurityMode. func setRiskConfiguration(input: SetRiskConfigurationInput) async throws -> SetRiskConfigurationOutputResponse /// Sets the user interface (UI) customization information for a user pool's built-in app UI. You can specify app UI customization settings for a single client (with a specific clientId) or for all clients (by setting the clientId to ALL). If you specify ALL, the default configuration is used for every client that has no previously set UI customization. If you specify UI customization settings for a particular client, it will no longer return to the ALL configuration. To use this API, your user pool must have a domain associated with it. Otherwise, there is no place to host the app's pages, and the service will throw an error. func setUICustomization(input: SetUICustomizationInput) async throws -> SetUICustomizationOutputResponse - /// Set the user's multi-factor authentication (MFA) method preference, including which MFA factors are activated and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in. If an MFA type is activated for a user, the user will be prompted for MFA during all sign-in attempts unless device tracking is turned on and the device has been trusted. If you want MFA to be applied selectively based on the assessed risk level of sign-in attempts, deactivate MFA for users and turn on Adaptive Authentication for the user pool. + /// Set the user's multi-factor authentication (MFA) method preference, including which MFA factors are activated and if any are preferred. Only one factor can be set as preferred. The preferred MFA factor will be used to authenticate a user if multiple factors are activated. If multiple options are activated and no preference is set, a challenge to choose an MFA option will be returned during sign-in. If an MFA type is activated for a user, the user will be prompted for MFA during all sign-in attempts unless device tracking is turned on and the device has been trusted. If you want MFA to be applied selectively based on the assessed risk level of sign-in attempts, deactivate MFA for users and turn on Adaptive Authentication for the user pool. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func setUserMFAPreference(input: SetUserMFAPreferenceInput) async throws -> SetUserMFAPreferenceOutputResponse - /// Sets the user pool multi-factor authentication (MFA) configuration. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Sets the user pool multi-factor authentication (MFA) configuration. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. func setUserPoolMfaConfig(input: SetUserPoolMfaConfigInput) async throws -> SetUserPoolMfaConfigOutputResponse - /// This action is no longer supported. You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token MFA. To configure either type of MFA, use [SetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html) instead. + /// This action is no longer supported. You can use it to configure only SMS MFA. You can't use it to configure time-based one-time password (TOTP) software token MFA. To configure either type of MFA, use [SetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html) instead. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func setUserSettings(input: SetUserSettingsInput) async throws -> SetUserSettingsOutputResponse - /// Registers the user in the specified user pool and creates a user name, password, and user attributes. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Registers the user in the specified user pool and creates a user name, password, and user attributes. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. func signUp(input: SignUpInput) async throws -> SignUpOutputResponse /// Starts the user import. func startUserImportJob(input: StartUserImportJobInput) async throws -> StartUserImportJobOutputResponse @@ -184,27 +385,51 @@ public protocol CognitoIdentityProviderClientProtocol { func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse /// Removes the specified tags from an Amazon Cognito user pool. You can use this action up to 5 times per second, per account. func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse - /// Provides the feedback for an authentication event, whether it was from a valid user or not. This feedback is used for improving the risk evaluation decision for the user pool as part of Amazon Cognito advanced security. + /// Provides the feedback for an authentication event, whether it was from a valid user or not. This feedback is used for improving the risk evaluation decision for the user pool as part of Amazon Cognito advanced security. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func updateAuthEventFeedback(input: UpdateAuthEventFeedbackInput) async throws -> UpdateAuthEventFeedbackOutputResponse - /// Updates the device status. + /// Updates the device status. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func updateDeviceStatus(input: UpdateDeviceStatusInput) async throws -> UpdateDeviceStatusOutputResponse - /// Updates the specified group with the specified attributes. Calling this action requires developer credentials. + /// Updates the specified group with the specified attributes. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func updateGroup(input: UpdateGroupInput) async throws -> UpdateGroupOutputResponse - /// Updates IdP information for a user pool. + /// Updates IdP information for a user pool. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func updateIdentityProvider(input: UpdateIdentityProviderInput) async throws -> UpdateIdentityProviderOutputResponse - /// Updates the name and scopes of resource server. All other fields are read-only. If you don't provide a value for an attribute, it is set to the default value. + /// Updates the name and scopes of resource server. All other fields are read-only. If you don't provide a value for an attribute, it is set to the default value. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func updateResourceServer(input: UpdateResourceServerInput) async throws -> UpdateResourceServerOutputResponse - /// Allows a user to update a specific attribute (one at a time). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// Allows a user to update a specific attribute (one at a time). Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. func updateUserAttributes(input: UpdateUserAttributesInput) async throws -> UpdateUserAttributesOutputResponse - /// Updates the specified user pool with the specified attributes. You can get a list of the current user pool settings using [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html). If you don't provide a value for an attribute, it will be set to the default value. This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-sms-userpool-settings.html) in the Amazon Cognito Developer Guide. + /// This action might generate an SMS text message. Starting June 1, 2021, US telecom carriers require you to register an origination phone number before you can send SMS messages to US phone numbers. If you use SMS text messages in Amazon Cognito, you must register a phone number with [Amazon Pinpoint](https://console.aws.amazon.com/pinpoint/home/). Amazon Cognito uses the registered number automatically. Otherwise, Amazon Cognito users who must receive SMS messages might not be able to sign up, activate their accounts, or sign in. If you have never used SMS text messages with Amazon Cognito or any other Amazon Web Service, Amazon Simple Notification Service might place your account in the SMS sandbox. In [sandbox mode](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html) , you can send messages only to verified phone numbers. After you test your app while in the sandbox environment, you can move out of the sandbox and into production. For more information, see [ SMS message settings for Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sms-settings.html) in the Amazon Cognito Developer Guide. Updates the specified user pool with the specified attributes. You can get a list of the current user pool settings using [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html). If you don't provide a value for an attribute, Amazon Cognito sets it to its default value. Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func updateUserPool(input: UpdateUserPoolInput) async throws -> UpdateUserPoolOutputResponse - /// Updates the specified user pool app client with the specified attributes. You can get a list of the current user pool app client settings using [DescribeUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html). If you don't provide a value for an attribute, it will be set to the default value. You can also use this operation to enable token revocation for user pool clients. For more information about revoking tokens, see [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html). + /// Updates the specified user pool app client with the specified attributes. You can get a list of the current user pool app client settings using [DescribeUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html). If you don't provide a value for an attribute, Amazon Cognito sets it to its default value. You can also use this operation to enable token revocation for user pool clients. For more information about revoking tokens, see [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html). Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func updateUserPoolClient(input: UpdateUserPoolClientInput) async throws -> UpdateUserPoolClientOutputResponse - /// Updates the Secure Sockets Layer (SSL) certificate for the custom domain for your user pool. You can use this operation to provide the Amazon Resource Name (ARN) of a new certificate to Amazon Cognito. You can't use it to change the domain for a user pool. A custom domain is used to host the Amazon Cognito hosted UI, which provides sign-up and sign-in pages for your application. When you set up a custom domain, you provide a certificate that you manage with Certificate Manager (ACM). When necessary, you can use this operation to change the certificate that you applied to your custom domain. Usually, this is unnecessary following routine certificate renewal with ACM. When you renew your existing certificate in ACM, the ARN for your certificate remains the same, and your custom domain uses the new certificate automatically. However, if you replace your existing certificate with a new one, ACM gives the new certificate a new ARN. To apply the new certificate to your custom domain, you must provide this ARN to Amazon Cognito. When you add your new certificate in ACM, you must choose US East (N. Virginia) as the Amazon Web Services Region. After you submit your request, Amazon Cognito requires up to 1 hour to distribute your new certificate to your custom domain. For more information about adding a custom domain to your user pool, see [Using Your Own Domain for the Hosted UI](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html). + /// Updates the Secure Sockets Layer (SSL) certificate for the custom domain for your user pool. You can use this operation to provide the Amazon Resource Name (ARN) of a new certificate to Amazon Cognito. You can't use it to change the domain for a user pool. A custom domain is used to host the Amazon Cognito hosted UI, which provides sign-up and sign-in pages for your application. When you set up a custom domain, you provide a certificate that you manage with Certificate Manager (ACM). When necessary, you can use this operation to change the certificate that you applied to your custom domain. Usually, this is unnecessary following routine certificate renewal with ACM. When you renew your existing certificate in ACM, the ARN for your certificate remains the same, and your custom domain uses the new certificate automatically. However, if you replace your existing certificate with a new one, ACM gives the new certificate a new ARN. To apply the new certificate to your custom domain, you must provide this ARN to Amazon Cognito. When you add your new certificate in ACM, you must choose US East (N. Virginia) as the Amazon Web Services Region. After you submit your request, Amazon Cognito requires up to 1 hour to distribute your new certificate to your custom domain. For more information about adding a custom domain to your user pool, see [Using Your Own Domain for the Hosted UI](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html). Amazon Cognito evaluates Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you must use IAM credentials to authorize requests, and you must grant yourself the corresponding IAM permission in a policy. Learn more + /// + /// * [Signing Amazon Web Services API Requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) + /// + /// * [Using the Amazon Cognito user pools API and user pool endpoints](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html) func updateUserPoolDomain(input: UpdateUserPoolDomainInput) async throws -> UpdateUserPoolDomainOutputResponse - /// Use this API to register a user's entered time-based one-time password (TOTP) code and mark the user's software token MFA status as "verified" if successful. The request takes an access token or a session string, but not both. + /// Use this API to register a user's entered time-based one-time password (TOTP) code and mark the user's software token MFA status as "verified" if successful. The request takes an access token or a session string, but not both. Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func verifySoftwareToken(input: VerifySoftwareTokenInput) async throws -> VerifySoftwareTokenOutputResponse - /// Verifies the specified user attributes in the user pool. If your user pool requires verification before Amazon Cognito updates the attribute value, VerifyUserAttribute updates the affected attribute to its pending value. For more information, see [ UserAttributeUpdateSettingsType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserAttributeUpdateSettingsType.html). + /// Verifies the specified user attributes in the user pool. If your user pool requires verification before Amazon Cognito updates the attribute value, VerifyUserAttribute updates the affected attribute to its pending value. For more information, see [ UserAttributeUpdateSettingsType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserAttributeUpdateSettingsType.html). Amazon Cognito doesn't evaluate Identity and Access Management (IAM) policies in requests for this API operation. For this operation, you can't use IAM credentials to authorize requests, and you can't grant IAM permissions in policies. For more information about authorization models in Amazon Cognito, see [Using the Amazon Cognito native and OIDC APIs](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html). func verifyUserAttribute(input: VerifyUserAttributeInput) async throws -> VerifyUserAttributeOutputResponse } diff --git a/Sources/Services/AWSCognitoIdentityProvider/models/Models.swift b/Sources/Services/AWSCognitoIdentityProvider/models/Models.swift index f277c52a870..bceacb229c2 100644 --- a/Sources/Services/AWSCognitoIdentityProvider/models/Models.swift +++ b/Sources/Services/AWSCognitoIdentityProvider/models/Models.swift @@ -484,7 +484,7 @@ extension AdminConfirmSignUpInput: ClientRuntime.URLPathProvider { } } -/// Represents the request to confirm user registration. +/// Confirm a user's registration as a user pool administrator. public struct AdminConfirmSignUpInput: Swift.Equatable { /// A map of custom key-value pairs that you can provide as input for any custom workflows that this action triggers. If your user pool configuration includes triggers, the AdminConfirmSignUp API action invokes the Lambda function that is specified for the post confirmation trigger. When Amazon Cognito invokes this function, it passes a JSON payload, which the function receives as input. In this payload, the clientMetadata attribute provides the data that you assigned to the ClientMetadata parameter in your AdminConfirmSignUp request. In your function code in Lambda, you can process the ClientMetadata value to enhance your workflow for your specific needs. For more information, see [ Customizing user pool Workflows with Lambda Triggers](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html) in the Amazon Cognito Developer Guide. When you use the ClientMetadata parameter, remember that Amazon Cognito won't do the following: /// @@ -717,7 +717,7 @@ public struct AdminCreateUserInput: Swift.Equatable { public var forceAliasCreation: Swift.Bool? /// Set to RESEND to resend the invitation message to a user that already exists and reset the expiration limit on the user's account. Set to SUPPRESS to suppress sending the message. You can specify only one value. public var messageAction: CognitoIdentityProviderClientTypes.MessageActionType? - /// The user's temporary password. This password must conform to the password policy that you specified when you created the user pool. The temporary password is valid only once. To complete the Admin Create User flow, the user must enter the temporary password in the sign-in page, along with a new password to be used in all future sign-ins. This parameter isn't required. If you don't specify a value, Amazon Cognito generates one for you. The temporary password can only be used until the user account expiration limit that you specified when you created the user pool. To reset the account after that time limit, you must call AdminCreateUser again, specifying "RESEND" for the MessageAction parameter. + /// The user's temporary password. This password must conform to the password policy that you specified when you created the user pool. The temporary password is valid only once. To complete the Admin Create User flow, the user must enter the temporary password in the sign-in page, along with a new password to be used in all future sign-ins. This parameter isn't required. If you don't specify a value, Amazon Cognito generates one for you. The temporary password can only be used until the user account expiration limit that you set for your user pool. To reset the account after that time limit, you must call AdminCreateUser again and specify RESEND for the MessageAction parameter. public var temporaryPassword: Swift.String? /// An array of name-value pairs that contain user attributes and attribute values to be set for the user to be created. You can create a user without specifying any attributes other than Username. However, any attributes that you specify as required (when creating a user pool or in the Attributes tab of the console) either you should supply (in your call to AdminCreateUser) or the user should supply (when they sign up in response to your welcome message). For custom attributes, you must prepend the custom: prefix to the attribute name. To send a message inviting the user to sign up, you must specify the user's email address or phone number. You can do this in your call to AdminCreateUser or in the Users tab of the Amazon Cognito console for managing your user pools. In your call to AdminCreateUser, you can set the email_verified attribute to True, and you can set the phone_number_verified attribute to True. You can also do this by calling [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html). /// @@ -1770,7 +1770,7 @@ public struct AdminGetUserOutputResponse: Swift.Equatable { public var userAttributes: [CognitoIdentityProviderClientTypes.AttributeType]? /// The date the user was created. public var userCreateDate: ClientRuntime.Date? - /// The date the user was last modified. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was modified. public var userLastModifiedDate: ClientRuntime.Date? /// The MFA options that are activated for the user. The possible values in this list are SMS_MFA and SOFTWARE_TOKEN_MFA. public var userMFASettingList: [Swift.String]? @@ -1780,15 +1780,13 @@ public struct AdminGetUserOutputResponse: Swift.Equatable { /// /// * CONFIRMED - User has been confirmed. /// - /// * ARCHIVED - User is no longer active. - /// /// * UNKNOWN - User status isn't known. /// /// * RESET_REQUIRED - User is confirmed, but the user must request a code and reset their password before they can sign in. /// /// * FORCE_CHANGE_PASSWORD - The user is confirmed and the user can sign in using a temporary password, but on first sign-in, the user must change their password to a new value before doing anything else. public var userStatus: CognitoIdentityProviderClientTypes.UserStatusType? - /// The user name of the user about whom you're receiving information. + /// The username of the user that you requested. /// This member is required. public var username: Swift.String? @@ -1975,11 +1973,14 @@ public struct AdminInitiateAuthInput: Swift.Equatable { /// /// * For USER_SRP_AUTH: USERNAME (required), SRP_A (required), SECRET_HASH (required if the app client is configured with a client secret), DEVICE_KEY. /// - /// * For REFRESH_TOKEN_AUTH/REFRESH_TOKEN: REFRESH_TOKEN (required), SECRET_HASH (required if the app client is configured with a client secret), DEVICE_KEY. + /// * For ADMIN_USER_PASSWORD_AUTH: USERNAME (required), PASSWORD (required), SECRET_HASH (required if the app client is configured with a client secret), DEVICE_KEY. /// - /// * For ADMIN_NO_SRP_AUTH: USERNAME (required), SECRET_HASH (if app client is configured with client secret), PASSWORD (required), DEVICE_KEY. + /// * For REFRESH_TOKEN_AUTH/REFRESH_TOKEN: REFRESH_TOKEN (required), SECRET_HASH (required if the app client is configured with a client secret), DEVICE_KEY. /// /// * For CUSTOM_AUTH: USERNAME (required), SECRET_HASH (if app client is configured with client secret), DEVICE_KEY. To start the authentication flow with password verification, include ChallengeName: SRP_A and SRP_A: (The SRP_A Value). + /// + /// + /// For more information about SECRET_HASH, see [Computing secret hash values](https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash). For information about DEVICE_KEY, see [Working with user devices in your user pool](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html). public var authParameters: [Swift.String:Swift.String]? /// The app client ID. /// This member is required. @@ -2125,11 +2126,6 @@ public enum AdminInitiateAuthOutputError: ClientRuntime.HttpResponseErrorBinding } } -extension AdminInitiateAuthOutputResponse: Swift.CustomDebugStringConvertible { - public var debugDescription: Swift.String { - "AdminInitiateAuthOutputResponse(authenticationResult: \(Swift.String(describing: authenticationResult)), challengeName: \(Swift.String(describing: challengeName)), challengeParameters: \(Swift.String(describing: challengeParameters)), session: \"CONTENT_REDACTED\")"} -} - extension AdminInitiateAuthOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -2258,10 +2254,10 @@ extension AdminLinkProviderForUserInput: ClientRuntime.URLPathProvider { } public struct AdminLinkProviderForUserInput: Swift.Equatable { - /// The existing user in the user pool that you want to assign to the external IdP user account. This user can be a native (Username + Password) Amazon Cognito user pools user or a federated user (for example, a SAML or Facebook user). If the user doesn't exist, Amazon Cognito generates an exception. Amazon Cognito returns this user when the new user (with the linked IdP attribute) signs in. For a native username + password user, the ProviderAttributeValue for the DestinationUser should be the username in the user pool. For a federated user, it should be the provider-specific user_id. The ProviderAttributeName of the DestinationUser is ignored. The ProviderName should be set to Cognito for users in Cognito user pools. All attributes in the DestinationUser profile must be mutable. If you have assigned the user any immutable custom attributes, the operation won't succeed. + /// The existing user in the user pool that you want to assign to the external IdP user account. This user can be a local (Username + Password) Amazon Cognito user pools user or a federated user (for example, a SAML or Facebook user). If the user doesn't exist, Amazon Cognito generates an exception. Amazon Cognito returns this user when the new user (with the linked IdP attribute) signs in. For a native username + password user, the ProviderAttributeValue for the DestinationUser should be the username in the user pool. For a federated user, it should be the provider-specific user_id. The ProviderAttributeName of the DestinationUser is ignored. The ProviderName should be set to Cognito for users in Cognito user pools. All attributes in the DestinationUser profile must be mutable. If you have assigned the user any immutable custom attributes, the operation won't succeed. /// This member is required. public var destinationUser: CognitoIdentityProviderClientTypes.ProviderUserIdentifierType? - /// An external IdP account for a user who doesn't exist yet in the user pool. This user must be a federated user (for example, a SAML or Facebook user), not another native user. If the SourceUser is using a federated social IdP, such as Facebook, Google, or Login with Amazon, you must set the ProviderAttributeName to Cognito_Subject. For social IdPs, the ProviderName will be Facebook, Google, or LoginWithAmazon, and Amazon Cognito will automatically parse the Facebook, Google, and Login with Amazon tokens for id, sub, and user_id, respectively. The ProviderAttributeValue for the user must be the same value as the id, sub, or user_id value found in the social IdP token. For SAML, the ProviderAttributeName can be any value that matches a claim in the SAML assertion. If you want to link SAML users based on the subject of the SAML assertion, you should map the subject to a claim through the SAML IdP and submit that claim name as the ProviderAttributeName. If you set ProviderAttributeName to Cognito_Subject, Amazon Cognito will automatically parse the default unique identifier found in the subject from the SAML token. + /// An external IdP account for a user who doesn't exist yet in the user pool. This user must be a federated user (for example, a SAML or Facebook user), not another native user. If the SourceUser is using a federated social IdP, such as Facebook, Google, or Login with Amazon, you must set the ProviderAttributeName to Cognito_Subject. For social IdPs, the ProviderName will be Facebook, Google, or LoginWithAmazon, and Amazon Cognito will automatically parse the Facebook, Google, and Login with Amazon tokens for id, sub, and user_id, respectively. The ProviderAttributeValue for the user must be the same value as the id, sub, or user_id value found in the social IdP token. For OIDC, the ProviderAttributeName can be any value that matches a claim in the ID token, or that your app retrieves from the userInfo endpoint. You must map the claim to a user pool attribute in your IdP configuration, and set the user pool attribute name as the value of ProviderAttributeName in your AdminLinkProviderForUser request. For SAML, the ProviderAttributeName can be any value that matches a claim in the SAML assertion. To link SAML users based on the subject of the SAML assertion, map the subject to a claim through the SAML IdP and set that claim name as the value of ProviderAttributeName in your AdminLinkProviderForUser request. For both OIDC and SAML users, when you set ProviderAttributeName to Cognito_Subject, Amazon Cognito will automatically parse the default unique identifier found in the subject from the IdP token. /// This member is required. public var sourceUser: CognitoIdentityProviderClientTypes.ProviderUserIdentifierType? /// The user pool ID for the user pool. @@ -3068,7 +3064,7 @@ public struct AdminResetUserPasswordOutputResponse: Swift.Equatable { extension AdminRespondToAuthChallengeInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "AdminRespondToAuthChallengeInput(analyticsMetadata: \(Swift.String(describing: analyticsMetadata)), challengeName: \(Swift.String(describing: challengeName)), clientMetadata: \(Swift.String(describing: clientMetadata)), contextData: \(Swift.String(describing: contextData)), userPoolId: \(Swift.String(describing: userPoolId)), challengeResponses: \"CONTENT_REDACTED\", clientId: \"CONTENT_REDACTED\", session: \"CONTENT_REDACTED\")"} + "AdminRespondToAuthChallengeInput(analyticsMetadata: \(Swift.String(describing: analyticsMetadata)), challengeName: \(Swift.String(describing: challengeName)), challengeResponses: \(Swift.String(describing: challengeResponses)), clientMetadata: \(Swift.String(describing: clientMetadata)), contextData: \(Swift.String(describing: contextData)), session: \(Swift.String(describing: session)), userPoolId: \(Swift.String(describing: userPoolId)), clientId: \"CONTENT_REDACTED\")"} } extension AdminRespondToAuthChallengeInput: Swift.Encodable { @@ -3144,7 +3140,7 @@ public struct AdminRespondToAuthChallengeInput: Swift.Equatable { /// * MFA_SETUP requires USERNAME, plus you must use the session value returned by VerifySoftwareToken in the Session parameter. /// /// - /// The value of the USERNAME attribute must be the user's actual username, not an alias (such as an email address or phone number). To make this simpler, the AdminInitiateAuth response includes the actual username value in the USERNAMEUSER_ID_FOR_SRP attribute. This happens even if you specified an alias in your call to AdminInitiateAuth. + /// The value of the USERNAME attribute must be the user's actual username, not an alias (such as an email address or phone number). To make this simpler, the AdminInitiateAuth response includes the actual username value in the USERNAMEUSER_ID_FOR_SRP attribute. This happens even if you specified an alias in your call to AdminInitiateAuth. For more information about SECRET_HASH, see [Computing secret hash values](https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash). For information about DEVICE_KEY, see [Working with user devices in your user pool](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html). public var challengeResponses: [Swift.String:Swift.String]? /// The app client ID. /// This member is required. @@ -3298,11 +3294,6 @@ public enum AdminRespondToAuthChallengeOutputError: ClientRuntime.HttpResponseEr } } -extension AdminRespondToAuthChallengeOutputResponse: Swift.CustomDebugStringConvertible { - public var debugDescription: Swift.String { - "AdminRespondToAuthChallengeOutputResponse(authenticationResult: \(Swift.String(describing: authenticationResult)), challengeName: \(Swift.String(describing: challengeName)), challengeParameters: \(Swift.String(describing: challengeParameters)), session: \"CONTENT_REDACTED\")"} -} - extension AdminRespondToAuthChallengeOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -3776,7 +3767,7 @@ public struct AdminUpdateAuthEventFeedbackInput: Swift.Equatable { /// The authentication event ID. /// This member is required. public var eventId: Swift.String? - /// The authentication event feedback value. + /// The authentication event feedback value. When you provide a FeedbackValue value of valid, you tell Amazon Cognito that you trust a user session where Amazon Cognito has evaluated some level of risk. When you provide a FeedbackValue value of invalid, you tell Amazon Cognito that you don't trust a user session, or you don't believe that Amazon Cognito evaluated a high-enough risk level. /// This member is required. public var feedbackValue: CognitoIdentityProviderClientTypes.FeedbackValueType? /// The user pool ID. @@ -4395,7 +4386,7 @@ extension CognitoIdentityProviderClientTypes.AnalyticsConfigurationType: Swift.C } extension CognitoIdentityProviderClientTypes { - /// The Amazon Pinpoint analytics configuration necessary to collect metrics for a user pool. In Regions where Amazon Pinpointisn't available, user pools only support sending events to Amazon Pinpoint projects in us-east-1. In Regions where Amazon Pinpoint is available, user pools support sending events to Amazon Pinpoint projects within that same Region. + /// The Amazon Pinpoint analytics configuration necessary to collect metrics for a user pool. In Regions where Amazon Pinpoint isn't available, user pools only support sending events to Amazon Pinpoint projects in us-east-1. In Regions where Amazon Pinpoint is available, user pools support sending events to Amazon Pinpoint projects within that same Region. public struct AnalyticsConfigurationType: Swift.Equatable { /// The Amazon Resource Name (ARN) of an Amazon Pinpoint project. You can use the Amazon Pinpoint project to integrate with the chosen user pool Client. Amazon Cognito publishes events to the Amazon Pinpoint project that the app ARN declares. public var applicationArn: Swift.String? @@ -4463,7 +4454,7 @@ extension CognitoIdentityProviderClientTypes { extension AssociateSoftwareTokenInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "AssociateSoftwareTokenInput(accessToken: \"CONTENT_REDACTED\", session: \"CONTENT_REDACTED\")"} + "AssociateSoftwareTokenInput(session: \(Swift.String(describing: session)), accessToken: \"CONTENT_REDACTED\")"} } extension AssociateSoftwareTokenInput: Swift.Encodable { @@ -4544,7 +4535,7 @@ public enum AssociateSoftwareTokenOutputError: ClientRuntime.HttpResponseErrorBi extension AssociateSoftwareTokenOutputResponse: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "AssociateSoftwareTokenOutputResponse(secretCode: \"CONTENT_REDACTED\", session: \"CONTENT_REDACTED\")"} + "AssociateSoftwareTokenOutputResponse(session: \(Swift.String(describing: session)), secretCode: \"CONTENT_REDACTED\")"} } extension AssociateSoftwareTokenOutputResponse: ClientRuntime.HttpResponseBinding { @@ -4764,7 +4755,7 @@ extension CognitoIdentityProviderClientTypes { public struct AuthEventType: Swift.Equatable { /// The challenge responses. public var challengeResponses: [CognitoIdentityProviderClientTypes.ChallengeResponseType]? - /// The creation date + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was created. public var creationDate: ClientRuntime.Date? /// The user context data captured at the time of an event request. This value provides additional information about the client from which event the request is received. public var eventContextData: CognitoIdentityProviderClientTypes.EventContextDataType? @@ -5217,6 +5208,41 @@ public struct ChangePasswordOutputResponse: Swift.Equatable { public init() { } } +extension CognitoIdentityProviderClientTypes.CloudWatchLogsConfigurationType: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case logGroupArn = "LogGroupArn" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let logGroupArn = self.logGroupArn { + try encodeContainer.encode(logGroupArn, forKey: .logGroupArn) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let logGroupArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .logGroupArn) + logGroupArn = logGroupArnDecoded + } +} + +extension CognitoIdentityProviderClientTypes { + /// The CloudWatch logging destination of a user pool detailed activity logging configuration. + public struct CloudWatchLogsConfigurationType: Swift.Equatable { + /// The Amazon Resource Name (arn) of a CloudWatch Logs log group where your user pool sends logs. The log group must not be encrypted with Key Management Service and must be in the same Amazon Web Services account as your user pool. + public var logGroupArn: Swift.String? + + public init( + logGroupArn: Swift.String? = nil + ) + { + self.logGroupArn = logGroupArn + } + } + +} + extension CognitoIdentityProviderClientTypes.CodeDeliveryDetailsType: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case attributeName = "AttributeName" @@ -5797,7 +5823,7 @@ public struct ConfirmForgotPasswordInput: Swift.Equatable { /// The new password that your user wants to set. /// This member is required. public var password: Swift.String? - /// A keyed-hash message authentication code (HMAC) calculated using the secret key of a user pool client and username plus the client ID in the message. + /// A keyed-hash message authentication code (HMAC) calculated using the secret key of a user pool client and username plus the client ID in the message. For more information about SecretHash, see [Computing secret hash values](https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash). public var secretHash: Swift.String? /// Contextual data about your user session, such as the device fingerprint, IP address, or location. Amazon Cognito advanced security evaluates the risk of an authentication event based on the context that your app generates and passes to Amazon Cognito when it makes API requests. public var userContextData: CognitoIdentityProviderClientTypes.UserContextDataType? @@ -7062,7 +7088,18 @@ public struct CreateUserPoolClientInput: Swift.Equatable { public var accessTokenValidity: Swift.Int? /// The allowed OAuth flows. code Use a code grant flow, which provides an authorization code as the response. This code can be exchanged for access tokens with the /oauth2/token endpoint. implicit Issue the access token (and, optionally, ID token, based on scopes) directly to your user. client_credentials Issue the access token from the /oauth2/token endpoint directly to a non-person user using a combination of the client ID and client secret. public var allowedOAuthFlows: [CognitoIdentityProviderClientTypes.OAuthFlowType]? - /// Set to true if the client is allowed to follow the OAuth protocol when interacting with Amazon Cognito user pools. + /// Set to true to use OAuth 2.0 features in your user pool app client. AllowedOAuthFlowsUserPoolClient must be true before you can configure the following features in your app client. + /// + /// * CallBackURLs: Callback URLs. + /// + /// * LogoutURLs: Sign-out redirect URLs. + /// + /// * AllowedOAuthScopes: OAuth 2.0 scopes. + /// + /// * AllowedOAuthFlows: Support for authorization code, implicit, and client credentials OAuth 2.0 grants. + /// + /// + /// To use OAuth 2.0 features, configure one of these features in the Amazon Cognito console or set AllowedOAuthFlowsUserPoolClient to true in a CreateUserPoolClient or UpdateUserPoolClient API request. If you don't set a value for AllowedOAuthFlowsUserPoolClient in a request with the CLI or SDKs, it defaults to false. public var allowedOAuthFlowsUserPoolClient: Swift.Bool? /// The allowed OAuth scopes. Possible values provided by OAuth are phone, email, openid, and profile. Possible values provided by Amazon Web Services are aws.cognito.signin.user.admin. Custom scopes created in Resource Servers are also supported. public var allowedOAuthScopes: [Swift.String]? @@ -7116,7 +7153,7 @@ public struct CreateUserPoolClientInput: Swift.Equatable { public var explicitAuthFlows: [CognitoIdentityProviderClientTypes.ExplicitAuthFlowsType]? /// Boolean to specify whether you want to generate a secret for the user pool client being created. public var generateSecret: Swift.Bool? - /// The ID token time limit. After this limit expires, your user can't use their ID token. To specify the time unit for IdTokenValidity as seconds, minutes, hours, or days, set a TokenValidityUnits value in your API request. For example, when you set IdTokenValidity as 10 and TokenValidityUnits as hours, your user can authenticate their session with their ID token for 10 hours. The default time unit for AccessTokenValidity in an API request is hours. Valid range is displayed below in seconds. If you don't specify otherwise in the configuration of your app client, your ID tokens are valid for one hour. + /// The ID token time limit. After this limit expires, your user can't use their ID token. To specify the time unit for IdTokenValidity as seconds, minutes, hours, or days, set a TokenValidityUnits value in your API request. For example, when you set IdTokenValidity as 10 and TokenValidityUnits as hours, your user can authenticate their session with their ID token for 10 hours. The default time unit for IdTokenValidity in an API request is hours. Valid range is displayed below in seconds. If you don't specify otherwise in the configuration of your app client, your ID tokens are valid for one hour. public var idTokenValidity: Swift.Int? /// A list of allowed logout URLs for the IdPs. public var logoutURLs: [Swift.String]? @@ -7710,13 +7747,13 @@ public struct CreateUserPoolInput: Swift.Equatable { public var smsVerificationMessage: Swift.String? /// The settings for updates to user attributes. These settings include the property AttributesRequireVerificationBeforeUpdate, a user-pool setting that tells Amazon Cognito how to handle changes to the value of your users' email address and phone number attributes. For more information, see [ Verifying updates to email addresses and phone numbers](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-email-phone-verification.html#user-pool-settings-verifications-verify-attribute-updates). public var userAttributeUpdateSettings: CognitoIdentityProviderClientTypes.UserAttributeUpdateSettingsType? - /// Enables advanced security risk detection. Set the key AdvancedSecurityMode to the value "AUDIT". + /// User pool add-ons. Contains settings for activation of advanced security features. To log user security information but take no action, set to AUDIT. To configure automatic security responses to risky traffic to your user pool, set to ENFORCED. For more information, see [Adding advanced security to a user pool](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html). public var userPoolAddOns: CognitoIdentityProviderClientTypes.UserPoolAddOnsType? /// The tag keys and values to assign to the user pool. A tag is a label that you can use to categorize and manage user pools in different ways, such as by purpose, owner, environment, or other criteria. public var userPoolTags: [Swift.String:Swift.String]? /// Specifies whether a user can use an email address or phone number as a username when they sign up. public var usernameAttributes: [CognitoIdentityProviderClientTypes.UsernameAttributeType]? - /// Case sensitivity on the username input for the selected sign-in option. For example, when case sensitivity is set to False, users can sign in using either "username" or "Username". This configuration is immutable once it has been set. For more information, see [UsernameConfigurationType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UsernameConfigurationType.html). + /// Case sensitivity on the username input for the selected sign-in option. When case sensitivity is set to False (case insensitive), users can sign in with any combination of capital and lowercase letters. For example, username, USERNAME, or UserName, or for email, email@example.com or EMaiL@eXamplE.Com. For most use cases, set case sensitivity to False (case insensitive) as a best practice. When usernames and email addresses are case insensitive, Amazon Cognito treats any variation in case as the same user, and prevents a case variation from being assigned to the same attribute for a different user. This configuration is immutable after you set it. For more information, see [UsernameConfigurationType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UsernameConfigurationType.html). public var usernameConfiguration: CognitoIdentityProviderClientTypes.UsernameConfigurationType? /// The template for the verification message that the user sees when the app requests permission to access the user's information. public var verificationMessageTemplate: CognitoIdentityProviderClientTypes.VerificationMessageTemplateType? @@ -9964,7 +10001,7 @@ extension CognitoIdentityProviderClientTypes { public var deviceKey: Swift.String? /// The date when the device was last authenticated. public var deviceLastAuthenticatedDate: ClientRuntime.Date? - /// The last modified date of the device. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was modified. public var deviceLastModifiedDate: ClientRuntime.Date? public init( @@ -10051,7 +10088,7 @@ extension CognitoIdentityProviderClientTypes { public struct DomainDescriptionType: Swift.Equatable { /// The Amazon Web Services ID for the user pool owner. public var awsAccountId: Swift.String? - /// The Amazon Resource Name (ARN) of the Amazon CloudFront distribution. + /// The Amazon CloudFront endpoint that you use as the target of the alias that you set up with your Domain Name Service (DNS) provider. public var cloudFrontDistribution: Swift.String? /// The configuration for a custom domain that hosts the sign-up and sign-in webpages for your application. public var customDomainConfig: CognitoIdentityProviderClientTypes.CustomDomainConfigType? @@ -10240,7 +10277,7 @@ extension CognitoIdentityProviderClientTypes { public var from: Swift.String? /// The destination to which the receiver of the email should reply. public var replyToEmailAddress: Swift.String? - /// The ARN of a verified email address in Amazon SES. Amazon Cognito uses this email address in one of the following ways, depending on the value that you specify for the EmailSendingAccount parameter: + /// The ARN of a verified email address or an address from a verified domain in Amazon SES. You can set a SourceArn email from a verified domain only with an API request. You can set a verified email address, but not an address in a verified domain, in the Amazon Cognito console. Amazon Cognito uses the email address that you provide in one of the following ways, depending on the value that you specify for the EmailSendingAccount parameter: /// /// * If you specify COGNITO_DEFAULT, Amazon Cognito uses this address as the custom FROM address when it emails your users using its built-in email account. /// @@ -10466,7 +10503,7 @@ extension CognitoIdentityProviderClientTypes { public struct EventFeedbackType: Swift.Equatable { /// The event feedback date. public var feedbackDate: ClientRuntime.Date? - /// The event feedback value. + /// The authentication event feedback value. When you provide a FeedbackValue value of valid, you tell Amazon Cognito that you trust a user session where Amazon Cognito has evaluated some level of risk. When you provide a FeedbackValue value of invalid, you tell Amazon Cognito that you don't trust a user session, or you don't believe that Amazon Cognito evaluated a high-enough risk level. /// This member is required. public var feedbackValue: CognitoIdentityProviderClientTypes.FeedbackValueType? /// The provider. @@ -10612,6 +10649,35 @@ extension CognitoIdentityProviderClientTypes { } +extension CognitoIdentityProviderClientTypes { + public enum EventSourceName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case userNotification + case sdkUnknown(Swift.String) + + public static var allCases: [EventSourceName] { + return [ + .userNotification, + .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 .userNotification: return "userNotification" + 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 = EventSourceName(rawValue: rawValue) ?? EventSourceName.sdkUnknown(rawValue) + } + } +} + extension CognitoIdentityProviderClientTypes { public enum EventType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case forgotpassword @@ -11627,6 +11693,109 @@ extension GetIdentityProviderByIdentifierOutputResponseBody: Swift.Decodable { } } +extension GetLogDeliveryConfigurationInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case userPoolId = "UserPoolId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let userPoolId = self.userPoolId { + try encodeContainer.encode(userPoolId, forKey: .userPoolId) + } + } +} + +extension GetLogDeliveryConfigurationInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct GetLogDeliveryConfigurationInput: Swift.Equatable { + /// The ID of the user pool where you want to view detailed activity logging configuration. + /// This member is required. + public var userPoolId: Swift.String? + + public init( + userPoolId: Swift.String? = nil + ) + { + self.userPoolId = userPoolId + } +} + +struct GetLogDeliveryConfigurationInputBody: Swift.Equatable { + let userPoolId: Swift.String? +} + +extension GetLogDeliveryConfigurationInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case userPoolId = "UserPoolId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let userPoolIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .userPoolId) + userPoolId = userPoolIdDecoded + } +} + +public enum GetLogDeliveryConfigurationOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalErrorException": return try await InternalErrorException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidParameterException": return try await InvalidParameterException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "NotAuthorizedException": return try await NotAuthorizedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "TooManyRequestsException": return try await TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetLogDeliveryConfigurationOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetLogDeliveryConfigurationOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.logDeliveryConfiguration = output.logDeliveryConfiguration + } else { + self.logDeliveryConfiguration = nil + } + } +} + +public struct GetLogDeliveryConfigurationOutputResponse: Swift.Equatable { + /// The detailed activity logging configuration of the requested user pool. + public var logDeliveryConfiguration: CognitoIdentityProviderClientTypes.LogDeliveryConfigurationType? + + public init( + logDeliveryConfiguration: CognitoIdentityProviderClientTypes.LogDeliveryConfigurationType? = nil + ) + { + self.logDeliveryConfiguration = logDeliveryConfiguration + } +} + +struct GetLogDeliveryConfigurationOutputResponseBody: Swift.Equatable { + let logDeliveryConfiguration: CognitoIdentityProviderClientTypes.LogDeliveryConfigurationType? +} + +extension GetLogDeliveryConfigurationOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case logDeliveryConfiguration = "LogDeliveryConfiguration" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let logDeliveryConfigurationDecoded = try containerValues.decodeIfPresent(CognitoIdentityProviderClientTypes.LogDeliveryConfigurationType.self, forKey: .logDeliveryConfiguration) + logDeliveryConfiguration = logDeliveryConfigurationDecoded + } +} + extension GetSigningCertificateInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case userPoolId = "UserPoolId" @@ -12125,7 +12294,7 @@ public struct GetUserOutputResponse: Swift.Equatable { public var userAttributes: [CognitoIdentityProviderClientTypes.AttributeType]? /// The MFA options that are activated for the user. The possible values in this list are SMS_MFA and SOFTWARE_TOKEN_MFA. public var userMFASettingList: [Swift.String]? - /// The user name of the user you want to retrieve from the get user request. + /// The username of the user that you requested. /// This member is required. public var username: Swift.String? @@ -12529,13 +12698,13 @@ extension CognitoIdentityProviderClientTypes.GroupType: Swift.Codable { extension CognitoIdentityProviderClientTypes { /// The group type. public struct GroupType: Swift.Equatable { - /// The date the group was created. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was created. public var creationDate: ClientRuntime.Date? /// A string containing the description of the group. public var description: Swift.String? /// The name of the group. public var groupName: Swift.String? - /// The date the group was last modified. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was modified. public var lastModifiedDate: ClientRuntime.Date? /// A non-negative integer value that specifies the precedence of this group relative to the other groups that a user can belong to in the user pool. Zero is the highest precedence value. Groups with lower Precedence values take precedence over groups with higher ornull Precedence values. If a user belongs to two or more groups, it is the group with the lowest precedence value whose role ARN is given in the user's tokens for the cognito:roles and cognito:preferred_role claims. Two groups can have the same Precedence value. If this happens, neither group takes precedence over the other. If two groups with the same Precedence have the same role ARN, that role is used in the cognito:preferred_role claim in tokens for users in each group. If the two groups have different role ARNs, the cognito:preferred_role claim isn't set in users' tokens. The default Precedence value is null. public var precedence: Swift.Int? @@ -12713,11 +12882,11 @@ extension CognitoIdentityProviderClientTypes { public struct IdentityProviderType: Swift.Equatable { /// A mapping of IdP attributes to standard and custom user pool attributes. public var attributeMapping: [Swift.String:Swift.String]? - /// The date the IdP was created. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was created. public var creationDate: ClientRuntime.Date? /// A list of IdP identifiers. public var idpIdentifiers: [Swift.String]? - /// The date the IdP was last modified. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was modified. public var lastModifiedDate: ClientRuntime.Date? /// The IdP details. The following list describes the provider detail keys for each IdP type. /// @@ -12957,9 +13126,14 @@ public struct InitiateAuthInput: Swift.Equatable { /// /// * For USER_SRP_AUTH: USERNAME (required), SRP_A (required), SECRET_HASH (required if the app client is configured with a client secret), DEVICE_KEY. /// + /// * For USER_PASSWORD_AUTH: USERNAME (required), PASSWORD (required), SECRET_HASH (required if the app client is configured with a client secret), DEVICE_KEY. + /// /// * For REFRESH_TOKEN_AUTH/REFRESH_TOKEN: REFRESH_TOKEN (required), SECRET_HASH (required if the app client is configured with a client secret), DEVICE_KEY. /// /// * For CUSTOM_AUTH: USERNAME (required), SECRET_HASH (if app client is configured with client secret), DEVICE_KEY. To start the authentication flow with password verification, include ChallengeName: SRP_A and SRP_A: (The SRP_A Value). + /// + /// + /// For more information about SECRET_HASH, see [Computing secret hash values](https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash). For information about DEVICE_KEY, see [Working with user devices in your user pool](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html). public var authParameters: [Swift.String:Swift.String]? /// The app client ID. /// This member is required. @@ -13096,11 +13270,6 @@ public enum InitiateAuthOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension InitiateAuthOutputResponse: Swift.CustomDebugStringConvertible { - public var debugDescription: Swift.String { - "InitiateAuthOutputResponse(authenticationResult: \(Swift.String(describing: authenticationResult)), challengeName: \(Swift.String(describing: challengeName)), challengeParameters: \(Swift.String(describing: challengeParameters)), session: \"CONTENT_REDACTED\")"} -} - extension InitiateAuthOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -15250,7 +15419,7 @@ extension ListUsersInput: ClientRuntime.URLPathProvider { /// Represents the request to list users. public struct ListUsersInput: Swift.Equatable { - /// An array of strings, where each string is the name of a user attribute to be returned for each user in the search results. If the array is null, all attributes are returned. + /// A JSON array of user attribute names, for example given_name, that you want Amazon Cognito to include in the response for each user. When you don't provide an AttributesToGet parameter, Amazon Cognito returns all attributes for each user. public var attributesToGet: [Swift.String]? /// A filter string of the form "AttributeName Filter-Type "AttributeValue"". Quotation marks within the filter string must be escaped using the backslash (\) character. For example, "family_name = \"Reddy\"". /// @@ -15384,7 +15553,7 @@ extension ListUsersOutputResponse: ClientRuntime.HttpResponseBinding { public struct ListUsersOutputResponse: Swift.Equatable { /// An identifier that was returned from the previous call to this operation, which can be used to return the next set of items in the list. public var paginationToken: Swift.String? - /// The users returned in the request to list users. + /// A list of the user pool users, and their attributes, that match your query. Amazon Cognito creates a profile in your user pool for each native user in your user pool, and each unique user ID from your third-party identity providers (IdPs). When you link users with the [AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html) API operation, the output of ListUsers displays both the IdP user and the native user that you linked. You can identify IdP users in the Users object of this API response by the IdP prefix that Amazon Cognito appends to Username. public var users: [CognitoIdentityProviderClientTypes.UserType]? public init( @@ -15426,6 +15595,151 @@ extension ListUsersOutputResponseBody: Swift.Decodable { } } +extension CognitoIdentityProviderClientTypes.LogConfigurationType: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case cloudWatchLogsConfiguration = "CloudWatchLogsConfiguration" + case eventSource = "EventSource" + case logLevel = "LogLevel" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let cloudWatchLogsConfiguration = self.cloudWatchLogsConfiguration { + try encodeContainer.encode(cloudWatchLogsConfiguration, forKey: .cloudWatchLogsConfiguration) + } + if let eventSource = self.eventSource { + try encodeContainer.encode(eventSource.rawValue, forKey: .eventSource) + } + if let logLevel = self.logLevel { + try encodeContainer.encode(logLevel.rawValue, forKey: .logLevel) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let logLevelDecoded = try containerValues.decodeIfPresent(CognitoIdentityProviderClientTypes.LogLevel.self, forKey: .logLevel) + logLevel = logLevelDecoded + let eventSourceDecoded = try containerValues.decodeIfPresent(CognitoIdentityProviderClientTypes.EventSourceName.self, forKey: .eventSource) + eventSource = eventSourceDecoded + let cloudWatchLogsConfigurationDecoded = try containerValues.decodeIfPresent(CognitoIdentityProviderClientTypes.CloudWatchLogsConfigurationType.self, forKey: .cloudWatchLogsConfiguration) + cloudWatchLogsConfiguration = cloudWatchLogsConfigurationDecoded + } +} + +extension CognitoIdentityProviderClientTypes { + /// The logging parameters of a user pool. + public struct LogConfigurationType: Swift.Equatable { + /// The CloudWatch logging destination of a user pool. + public var cloudWatchLogsConfiguration: CognitoIdentityProviderClientTypes.CloudWatchLogsConfigurationType? + /// The source of events that your user pool sends for detailed activity logging. + /// This member is required. + public var eventSource: CognitoIdentityProviderClientTypes.EventSourceName? + /// The errorlevel selection of logs that a user pool sends for detailed activity logging. + /// This member is required. + public var logLevel: CognitoIdentityProviderClientTypes.LogLevel? + + public init( + cloudWatchLogsConfiguration: CognitoIdentityProviderClientTypes.CloudWatchLogsConfigurationType? = nil, + eventSource: CognitoIdentityProviderClientTypes.EventSourceName? = nil, + logLevel: CognitoIdentityProviderClientTypes.LogLevel? = nil + ) + { + self.cloudWatchLogsConfiguration = cloudWatchLogsConfiguration + self.eventSource = eventSource + self.logLevel = logLevel + } + } + +} + +extension CognitoIdentityProviderClientTypes.LogDeliveryConfigurationType: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case logConfigurations = "LogConfigurations" + case userPoolId = "UserPoolId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let logConfigurations = logConfigurations { + var logConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .logConfigurations) + for logconfigurationtype0 in logConfigurations { + try logConfigurationsContainer.encode(logconfigurationtype0) + } + } + if let userPoolId = self.userPoolId { + try encodeContainer.encode(userPoolId, forKey: .userPoolId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let userPoolIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .userPoolId) + userPoolId = userPoolIdDecoded + let logConfigurationsContainer = try containerValues.decodeIfPresent([CognitoIdentityProviderClientTypes.LogConfigurationType?].self, forKey: .logConfigurations) + var logConfigurationsDecoded0:[CognitoIdentityProviderClientTypes.LogConfigurationType]? = nil + if let logConfigurationsContainer = logConfigurationsContainer { + logConfigurationsDecoded0 = [CognitoIdentityProviderClientTypes.LogConfigurationType]() + for structure0 in logConfigurationsContainer { + if let structure0 = structure0 { + logConfigurationsDecoded0?.append(structure0) + } + } + } + logConfigurations = logConfigurationsDecoded0 + } +} + +extension CognitoIdentityProviderClientTypes { + /// The logging parameters of a user pool. + public struct LogDeliveryConfigurationType: Swift.Equatable { + /// The detailed activity logging destination of a user pool. + /// This member is required. + public var logConfigurations: [CognitoIdentityProviderClientTypes.LogConfigurationType]? + /// The ID of the user pool where you configured detailed activity logging. + /// This member is required. + public var userPoolId: Swift.String? + + public init( + logConfigurations: [CognitoIdentityProviderClientTypes.LogConfigurationType]? = nil, + userPoolId: Swift.String? = nil + ) + { + self.logConfigurations = logConfigurations + self.userPoolId = userPoolId + } + } + +} + +extension CognitoIdentityProviderClientTypes { + public enum LogLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case error + case sdkUnknown(Swift.String) + + public static var allCases: [LogLevel] { + return [ + .error, + .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 .error: return "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 = LogLevel(rawValue: rawValue) ?? LogLevel.sdkUnknown(rawValue) + } + } +} + extension MFAMethodNotFoundException { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -16206,7 +16520,7 @@ extension CognitoIdentityProviderClientTypes.ProviderDescription: Swift.Codable extension CognitoIdentityProviderClientTypes { /// A container for IdP details. public struct ProviderDescription: Swift.Equatable { - /// The date the provider was added to the user pool. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was created. public var creationDate: ClientRuntime.Date? /// The date the provider was last modified. public var lastModifiedDate: ClientRuntime.Date? @@ -16749,7 +17063,7 @@ extension CognitoIdentityProviderClientTypes { extension RespondToAuthChallengeInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "RespondToAuthChallengeInput(analyticsMetadata: \(Swift.String(describing: analyticsMetadata)), challengeName: \(Swift.String(describing: challengeName)), clientMetadata: \(Swift.String(describing: clientMetadata)), userContextData: \(Swift.String(describing: userContextData)), challengeResponses: \"CONTENT_REDACTED\", clientId: \"CONTENT_REDACTED\", session: \"CONTENT_REDACTED\")"} + "RespondToAuthChallengeInput(analyticsMetadata: \(Swift.String(describing: analyticsMetadata)), challengeName: \(Swift.String(describing: challengeName)), challengeResponses: \(Swift.String(describing: challengeResponses)), clientMetadata: \(Swift.String(describing: clientMetadata)), session: \(Swift.String(describing: session)), userContextData: \(Swift.String(describing: userContextData)), clientId: \"CONTENT_REDACTED\")"} } extension RespondToAuthChallengeInput: Swift.Encodable { @@ -16823,6 +17137,9 @@ public struct RespondToAuthChallengeInput: Swift.Equatable { /// * DEVICE_PASSWORD_VERIFIER requires everything that PASSWORD_VERIFIER requires, plus DEVICE_KEY. /// /// * MFA_SETUP requires USERNAME, plus you must use the session value returned by VerifySoftwareToken in the Session parameter. + /// + /// + /// For more information about SECRET_HASH, see [Computing secret hash values](https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash). For information about DEVICE_KEY, see [Working with user devices in your user pool](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-device-tracking.html). public var challengeResponses: [Swift.String:Swift.String]? /// The app client ID. /// This member is required. @@ -16949,11 +17266,6 @@ public enum RespondToAuthChallengeOutputError: ClientRuntime.HttpResponseErrorBi } } -extension RespondToAuthChallengeOutputResponse: Swift.CustomDebugStringConvertible { - public var debugDescription: Swift.String { - "RespondToAuthChallengeOutputResponse(authenticationResult: \(Swift.String(describing: authenticationResult)), challengeName: \(Swift.String(describing: challengeName)), challengeParameters: \(Swift.String(describing: challengeParameters)), session: \"CONTENT_REDACTED\")"} -} - extension RespondToAuthChallengeOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -17202,7 +17514,7 @@ extension CognitoIdentityProviderClientTypes { public var clientId: Swift.String? /// The compromised credentials risk configuration object, including the EventFilter and the EventAction. public var compromisedCredentialsRiskConfiguration: CognitoIdentityProviderClientTypes.CompromisedCredentialsRiskConfigurationType? - /// The last modified date. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was modified. public var lastModifiedDate: ClientRuntime.Date? /// The configuration to override the risk decision. public var riskExceptionConfiguration: CognitoIdentityProviderClientTypes.RiskExceptionConfigurationType? @@ -17469,15 +17781,15 @@ extension CognitoIdentityProviderClientTypes.SchemaAttributeType: Swift.Codable } extension CognitoIdentityProviderClientTypes { - /// Contains information about the schema attribute. + /// A list of the user attributes and their properties in your user pool. The attribute schema contains standard attributes, custom attributes with a custom: prefix, and developer attributes with a dev: prefix. For more information, see [User pool attributes](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html). Developer-only attributes are a legacy feature of user pools, are read-only to all app clients. You can create and update developer-only attributes only with IAM-authenticated API operations. Use app client read/write permissions instead. public struct SchemaAttributeType: Swift.Equatable { - /// The attribute data type. + /// The data format of the values for your attribute. public var attributeDataType: CognitoIdentityProviderClientTypes.AttributeDataType? /// You should use [WriteAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserPoolClientType.html#CognitoUserPools-Type-UserPoolClientType-WriteAttributes) in the user pool client to control how attributes can be mutated for new use cases instead of using DeveloperOnlyAttribute. Specifies whether the attribute type is developer only. This attribute can only be modified by an administrator. Users won't be able to modify this attribute using their access token. For example, DeveloperOnlyAttribute can be modified using AdminUpdateUserAttributes but can't be updated using UpdateUserAttributes. public var developerOnlyAttribute: Swift.Bool? - /// Specifies whether the value of the attribute can be changed. For any user pool attribute that is mapped to an IdP attribute, you must set this parameter to true. Amazon Cognito updates mapped attributes when users sign in to your application through an IdP. If an attribute is immutable, Amazon Cognito throws an error when it attempts to update the attribute. For more information, see [Specifying Identity Provider Attribute Mappings for Your User Pool](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html). + /// Specifies whether the value of the attribute can be changed. Any user pool attribute whose value you map from an IdP attribute must be mutable, with a parameter value of true. Amazon Cognito updates mapped attributes when users sign in to your application through an IdP. If an attribute is immutable, Amazon Cognito throws an error when it attempts to update the attribute. For more information, see [Specifying Identity Provider Attribute Mappings for Your User Pool](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html). public var mutable: Swift.Bool? - /// A schema attribute of the name type. + /// The name of your user pool attribute, for example username or custom:costcenter. public var name: Swift.String? /// Specifies the constraints for an attribute of the number type. public var numberAttributeConstraints: CognitoIdentityProviderClientTypes.NumberAttributeConstraintsType? @@ -17563,6 +17875,134 @@ extension ScopeDoesNotExistExceptionBody: Swift.Decodable { } } +extension SetLogDeliveryConfigurationInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case logConfigurations = "LogConfigurations" + case userPoolId = "UserPoolId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let logConfigurations = logConfigurations { + var logConfigurationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .logConfigurations) + for logconfigurationtype0 in logConfigurations { + try logConfigurationsContainer.encode(logconfigurationtype0) + } + } + if let userPoolId = self.userPoolId { + try encodeContainer.encode(userPoolId, forKey: .userPoolId) + } + } +} + +extension SetLogDeliveryConfigurationInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct SetLogDeliveryConfigurationInput: Swift.Equatable { + /// A collection of all of the detailed activity logging configurations for a user pool. + /// This member is required. + public var logConfigurations: [CognitoIdentityProviderClientTypes.LogConfigurationType]? + /// The ID of the user pool where you want to configure detailed activity logging . + /// This member is required. + public var userPoolId: Swift.String? + + public init( + logConfigurations: [CognitoIdentityProviderClientTypes.LogConfigurationType]? = nil, + userPoolId: Swift.String? = nil + ) + { + self.logConfigurations = logConfigurations + self.userPoolId = userPoolId + } +} + +struct SetLogDeliveryConfigurationInputBody: Swift.Equatable { + let userPoolId: Swift.String? + let logConfigurations: [CognitoIdentityProviderClientTypes.LogConfigurationType]? +} + +extension SetLogDeliveryConfigurationInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case logConfigurations = "LogConfigurations" + case userPoolId = "UserPoolId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let userPoolIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .userPoolId) + userPoolId = userPoolIdDecoded + let logConfigurationsContainer = try containerValues.decodeIfPresent([CognitoIdentityProviderClientTypes.LogConfigurationType?].self, forKey: .logConfigurations) + var logConfigurationsDecoded0:[CognitoIdentityProviderClientTypes.LogConfigurationType]? = nil + if let logConfigurationsContainer = logConfigurationsContainer { + logConfigurationsDecoded0 = [CognitoIdentityProviderClientTypes.LogConfigurationType]() + for structure0 in logConfigurationsContainer { + if let structure0 = structure0 { + logConfigurationsDecoded0?.append(structure0) + } + } + } + logConfigurations = logConfigurationsDecoded0 + } +} + +public enum SetLogDeliveryConfigurationOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalErrorException": return try await InternalErrorException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidParameterException": return try await InvalidParameterException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "NotAuthorizedException": return try await NotAuthorizedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "TooManyRequestsException": return try await TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension SetLogDeliveryConfigurationOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: SetLogDeliveryConfigurationOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.logDeliveryConfiguration = output.logDeliveryConfiguration + } else { + self.logDeliveryConfiguration = nil + } + } +} + +public struct SetLogDeliveryConfigurationOutputResponse: Swift.Equatable { + /// The detailed activity logging configuration that you applied to the requested user pool. + public var logDeliveryConfiguration: CognitoIdentityProviderClientTypes.LogDeliveryConfigurationType? + + public init( + logDeliveryConfiguration: CognitoIdentityProviderClientTypes.LogDeliveryConfigurationType? = nil + ) + { + self.logDeliveryConfiguration = logDeliveryConfiguration + } +} + +struct SetLogDeliveryConfigurationOutputResponseBody: Swift.Equatable { + let logDeliveryConfiguration: CognitoIdentityProviderClientTypes.LogDeliveryConfigurationType? +} + +extension SetLogDeliveryConfigurationOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case logDeliveryConfiguration = "LogDeliveryConfiguration" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let logDeliveryConfigurationDecoded = try containerValues.decodeIfPresent(CognitoIdentityProviderClientTypes.LogDeliveryConfigurationType.self, forKey: .logDeliveryConfiguration) + logDeliveryConfiguration = logDeliveryConfigurationDecoded + } +} + extension SetRiskConfigurationInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { "SetRiskConfigurationInput(accountTakeoverRiskConfiguration: \(Swift.String(describing: accountTakeoverRiskConfiguration)), compromisedCredentialsRiskConfiguration: \(Swift.String(describing: compromisedCredentialsRiskConfiguration)), riskExceptionConfiguration: \(Swift.String(describing: riskExceptionConfiguration)), userPoolId: \(Swift.String(describing: userPoolId)), clientId: \"CONTENT_REDACTED\")"} @@ -19257,11 +19697,11 @@ extension CognitoIdentityProviderClientTypes.TokenValidityUnitsType: Swift.Codab extension CognitoIdentityProviderClientTypes { /// The data type TokenValidityUnits specifies the time units you use when you set the duration of ID, access, and refresh tokens. public struct TokenValidityUnitsType: Swift.Equatable { - /// A time unit of seconds, minutes, hours, or days for the value that you set in the AccessTokenValidity parameter. The default AccessTokenValidity time unit is hours. + /// A time unit of seconds, minutes, hours, or days for the value that you set in the AccessTokenValidity parameter. The default AccessTokenValidity time unit is hours. AccessTokenValidity duration can range from five minutes to one day. public var accessToken: CognitoIdentityProviderClientTypes.TimeUnitsType? - /// A time unit of seconds, minutes, hours, or days for the value that you set in the IdTokenValidity parameter. The default IdTokenValidity time unit is hours. + /// A time unit of seconds, minutes, hours, or days for the value that you set in the IdTokenValidity parameter. The default IdTokenValidity time unit is hours. IdTokenValidity duration can range from five minutes to one day. public var idToken: CognitoIdentityProviderClientTypes.TimeUnitsType? - /// A time unit of seconds, minutes, hours, or days for the value that you set in the RefreshTokenValidity parameter. The default RefreshTokenValidity time unit is days. + /// A time unit of seconds, minutes, hours, or days for the value that you set in the RefreshTokenValidity parameter. The default RefreshTokenValidity time unit is days. RefreshTokenValidity duration can range from 60 minutes to 10 years. public var refreshToken: CognitoIdentityProviderClientTypes.TimeUnitsType? public init( @@ -19455,7 +19895,7 @@ extension CognitoIdentityProviderClientTypes { public struct UICustomizationType: Swift.Equatable { /// The client ID for the client app. public var clientId: Swift.String? - /// The creation date for the UI customization. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was created. public var creationDate: ClientRuntime.Date? /// The CSS values in the UI customization. public var css: Swift.String? @@ -19463,7 +19903,7 @@ extension CognitoIdentityProviderClientTypes { public var cssVersion: Swift.String? /// The logo image for the UI customization. public var imageUrl: Swift.String? - /// The last-modified date for the UI customization. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was modified. public var lastModifiedDate: ClientRuntime.Date? /// The user pool ID for the user pool. public var userPoolId: Swift.String? @@ -19967,7 +20407,7 @@ public struct UpdateAuthEventFeedbackInput: Swift.Equatable { /// The feedback token. /// This member is required. public var feedbackToken: Swift.String? - /// The authentication event feedback value. + /// The authentication event feedback value. When you provide a FeedbackValue value of valid, you tell Amazon Cognito that you trust a user session where Amazon Cognito has evaluated some level of risk. When you provide a FeedbackValue value of invalid, you tell Amazon Cognito that you don't trust a user session, or you don't believe that Amazon Cognito evaluated a high-enough risk level. /// This member is required. public var feedbackValue: CognitoIdentityProviderClientTypes.FeedbackValueType? /// The user pool ID. @@ -20985,7 +21425,18 @@ public struct UpdateUserPoolClientInput: Swift.Equatable { public var accessTokenValidity: Swift.Int? /// The allowed OAuth flows. code Use a code grant flow, which provides an authorization code as the response. This code can be exchanged for access tokens with the /oauth2/token endpoint. implicit Issue the access token (and, optionally, ID token, based on scopes) directly to your user. client_credentials Issue the access token from the /oauth2/token endpoint directly to a non-person user using a combination of the client ID and client secret. public var allowedOAuthFlows: [CognitoIdentityProviderClientTypes.OAuthFlowType]? - /// Set to true if the client is allowed to follow the OAuth protocol when interacting with Amazon Cognito user pools. + /// Set to true to use OAuth 2.0 features in your user pool app client. AllowedOAuthFlowsUserPoolClient must be true before you can configure the following features in your app client. + /// + /// * CallBackURLs: Callback URLs. + /// + /// * LogoutURLs: Sign-out redirect URLs. + /// + /// * AllowedOAuthScopes: OAuth 2.0 scopes. + /// + /// * AllowedOAuthFlows: Support for authorization code, implicit, and client credentials OAuth 2.0 grants. + /// + /// + /// To use OAuth 2.0 features, configure one of these features in the Amazon Cognito console or set AllowedOAuthFlowsUserPoolClient to true in a CreateUserPoolClient or UpdateUserPoolClient API request. If you don't set a value for AllowedOAuthFlowsUserPoolClient in a request with the CLI or SDKs, it defaults to false. public var allowedOAuthFlowsUserPoolClient: Swift.Bool? /// The allowed OAuth scopes. Possible values provided by OAuth are phone, email, openid, and profile. Possible values provided by Amazon Web Services are aws.cognito.signin.user.admin. Custom scopes created in Resource Servers are also supported. public var allowedOAuthScopes: [Swift.String]? @@ -21039,7 +21490,7 @@ public struct UpdateUserPoolClientInput: Swift.Equatable { /// /// In some environments, you will see the values ADMIN_NO_SRP_AUTH, CUSTOM_AUTH_FLOW_ONLY, or USER_PASSWORD_AUTH. You can't assign these legacy ExplicitAuthFlows values to user pool clients at the same time as values that begin with ALLOW_, like ALLOW_USER_SRP_AUTH. public var explicitAuthFlows: [CognitoIdentityProviderClientTypes.ExplicitAuthFlowsType]? - /// The ID token time limit. After this limit expires, your user can't use their ID token. To specify the time unit for IdTokenValidity as seconds, minutes, hours, or days, set a TokenValidityUnits value in your API request. For example, when you set IdTokenValidity as 10 and TokenValidityUnits as hours, your user can authenticate their session with their ID token for 10 hours. The default time unit for AccessTokenValidity in an API request is hours. Valid range is displayed below in seconds. If you don't specify otherwise in the configuration of your app client, your ID tokens are valid for one hour. + /// The ID token time limit. After this limit expires, your user can't use their ID token. To specify the time unit for IdTokenValidity as seconds, minutes, hours, or days, set a TokenValidityUnits value in your API request. For example, when you set IdTokenValidity as 10 and TokenValidityUnits as hours, your user can authenticate their session with their ID token for 10 hours. The default time unit for IdTokenValidity in an API request is hours. Valid range is displayed below in seconds. If you don't specify otherwise in the configuration of your app client, your ID tokens are valid for one hour. public var idTokenValidity: Swift.Int? /// A list of allowed logout URLs for the IdPs. public var logoutURLs: [Swift.String]? @@ -21055,7 +21506,7 @@ public struct UpdateUserPoolClientInput: Swift.Equatable { public var refreshTokenValidity: Swift.Int? /// A list of provider names for the IdPs that this client supports. The following are supported: COGNITO, Facebook, Google, SignInWithApple, LoginWithAmazon, and the names of your own SAML and OIDC providers. public var supportedIdentityProviders: [Swift.String]? - /// The units in which the validity times are represented. The default unit for RefreshToken is days, and the default for ID and access tokens is hours. + /// The time units you use when you set the duration of ID, access, and refresh tokens. The default unit for RefreshToken is days, and the default for ID and access tokens is hours. public var tokenValidityUnits: CognitoIdentityProviderClientTypes.TokenValidityUnitsType? /// The user pool ID for the user pool where you want to update the user pool client. /// This member is required. @@ -21610,7 +22061,7 @@ public struct UpdateUserPoolInput: Swift.Equatable { public var smsVerificationMessage: Swift.String? /// The settings for updates to user attributes. These settings include the property AttributesRequireVerificationBeforeUpdate, a user-pool setting that tells Amazon Cognito how to handle changes to the value of your users' email address and phone number attributes. For more information, see [ Verifying updates to email addresses and phone numbers](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-email-phone-verification.html#user-pool-settings-verifications-verify-attribute-updates). public var userAttributeUpdateSettings: CognitoIdentityProviderClientTypes.UserAttributeUpdateSettingsType? - /// Enables advanced security risk detection. Set the key AdvancedSecurityMode to the value "AUDIT". + /// User pool add-ons. Contains settings for activation of advanced security features. To log user security information but take no action, set to AUDIT. To configure automatic security responses to risky traffic to your user pool, set to ENFORCED. For more information, see [Adding advanced security to a user pool](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html). public var userPoolAddOns: CognitoIdentityProviderClientTypes.UserPoolAddOnsType? /// The user pool ID for the user pool you want to update. /// This member is required. @@ -21836,7 +22287,7 @@ extension CognitoIdentityProviderClientTypes.UserAttributeUpdateSettingsType: Sw extension CognitoIdentityProviderClientTypes { /// The settings for updates to user attributes. These settings include the property AttributesRequireVerificationBeforeUpdate, a user-pool setting that tells Amazon Cognito how to handle changes to the value of your users' email address and phone number attributes. For more information, see [ Verifying updates to email addresses and phone numbers](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-email-phone-verification.html#user-pool-settings-verifications-verify-attribute-updates). public struct UserAttributeUpdateSettingsType: Swift.Equatable { - /// Requires that your user verifies their email address, phone number, or both before Amazon Cognito updates the value of that attribute. When you update a user attribute that has this option activated, Amazon Cognito sends a verification message to the new phone number or email address. Amazon Cognito doesn’t change the value of the attribute until your user responds to the verification message and confirms the new value. You can verify an updated email address or phone number with a [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) API request. You can also call the [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) or [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API and set email_verified or phone_number_verified to true. When AttributesRequireVerificationBeforeUpdate is false, your user pool doesn't require that your users verify attribute changes before Amazon Cognito updates them. In a user pool where AttributesRequireVerificationBeforeUpdate is false, API operations that change attribute values can immediately update a user’s email or phone_number attribute. + /// Requires that your user verifies their email address, phone number, or both before Amazon Cognito updates the value of that attribute. When you update a user attribute that has this option activated, Amazon Cognito sends a verification message to the new phone number or email address. Amazon Cognito doesn’t change the value of the attribute until your user responds to the verification message and confirms the new value. You can verify an updated email address or phone number with a [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) API request. You can also call the [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API and set email_verified or phone_number_verified to true. When AttributesRequireVerificationBeforeUpdate is false, your user pool doesn't require that your users verify attribute changes before Amazon Cognito updates them. In a user pool where AttributesRequireVerificationBeforeUpdate is false, API operations that change attribute values can immediately update a user’s email or phone_number attribute. public var attributesRequireVerificationBeforeUpdate: [CognitoIdentityProviderClientTypes.VerifiedAttributeType]? public init( @@ -22100,7 +22551,7 @@ extension CognitoIdentityProviderClientTypes { public var completionDate: ClientRuntime.Date? /// The message returned when the user import job is completed. public var completionMessage: Swift.String? - /// The date the user import job was created. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was created. public var creationDate: ClientRuntime.Date? /// The number of users that couldn't be imported. public var failedUsers: Swift.Int @@ -22414,9 +22865,9 @@ extension CognitoIdentityProviderClientTypes.UserPoolAddOnsType: Swift.Codable { } extension CognitoIdentityProviderClientTypes { - /// The user pool add-ons type. + /// User pool add-ons. Contains settings for activation of advanced security features. To log user security information but take no action, set to AUDIT. To configure automatic security responses to risky traffic to your user pool, set to ENFORCED. For more information, see [Adding advanced security to a user pool](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html). public struct UserPoolAddOnsType: Swift.Equatable { - /// The advanced security mode. + /// The operating mode of advanced security features in your user pool. /// This member is required. public var advancedSecurityMode: CognitoIdentityProviderClientTypes.AdvancedSecurityModeType? @@ -22761,7 +23212,18 @@ extension CognitoIdentityProviderClientTypes { public var accessTokenValidity: Swift.Int? /// The allowed OAuth flows. code Use a code grant flow, which provides an authorization code as the response. This code can be exchanged for access tokens with the /oauth2/token endpoint. implicit Issue the access token (and, optionally, ID token, based on scopes) directly to your user. client_credentials Issue the access token from the /oauth2/token endpoint directly to a non-person user using a combination of the client ID and client secret. public var allowedOAuthFlows: [CognitoIdentityProviderClientTypes.OAuthFlowType]? - /// Set to true if the client is allowed to follow the OAuth protocol when interacting with Amazon Cognito user pools. + /// Set to true to use OAuth 2.0 features in your user pool app client. AllowedOAuthFlowsUserPoolClient must be true before you can configure the following features in your app client. + /// + /// * CallBackURLs: Callback URLs. + /// + /// * LogoutURLs: Sign-out redirect URLs. + /// + /// * AllowedOAuthScopes: OAuth 2.0 scopes. + /// + /// * AllowedOAuthFlows: Support for authorization code, implicit, and client credentials OAuth 2.0 grants. + /// + /// + /// To use OAuth 2.0 features, configure one of these features in the Amazon Cognito console or set AllowedOAuthFlowsUserPoolClient to true in a CreateUserPoolClient or UpdateUserPoolClient API request. If you don't set a value for AllowedOAuthFlowsUserPoolClient in a request with the CLI or SDKs, it defaults to false. public var allowedOAuthFlowsUserPoolClient: Swift.Bool? /// The OAuth scopes that your app client supports. Possible values that OAuth provides are phone, email, openid, and profile. Possible values that Amazon Web Services provides are aws.cognito.signin.user.admin. Amazon Cognito also supports custom scopes that you create in Resource Servers. public var allowedOAuthScopes: [Swift.String]? @@ -22786,7 +23248,7 @@ extension CognitoIdentityProviderClientTypes { public var clientName: Swift.String? /// The client secret from the user pool request of the client type. public var clientSecret: Swift.String? - /// The date the user pool client was created. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was created. public var creationDate: ClientRuntime.Date? /// The default redirect URI. Must be in the CallbackURLs list. A redirect URI must: /// @@ -22818,9 +23280,9 @@ extension CognitoIdentityProviderClientTypes { /// /// In some environments, you will see the values ADMIN_NO_SRP_AUTH, CUSTOM_AUTH_FLOW_ONLY, or USER_PASSWORD_AUTH. You can't assign these legacy ExplicitAuthFlows values to user pool clients at the same time as values that begin with ALLOW_, like ALLOW_USER_SRP_AUTH. public var explicitAuthFlows: [CognitoIdentityProviderClientTypes.ExplicitAuthFlowsType]? - /// The ID token time limit. After this limit expires, your user can't use their ID token. To specify the time unit for IdTokenValidity as seconds, minutes, hours, or days, set a TokenValidityUnits value in your API request. For example, when you set IdTokenValidity as 10 and TokenValidityUnits as hours, your user can authenticate their session with their ID token for 10 hours. The default time unit for AccessTokenValidity in an API request is hours. Valid range is displayed below in seconds. If you don't specify otherwise in the configuration of your app client, your ID tokens are valid for one hour. + /// The ID token time limit. After this limit expires, your user can't use their ID token. To specify the time unit for IdTokenValidity as seconds, minutes, hours, or days, set a TokenValidityUnits value in your API request. For example, when you set IdTokenValidity as 10 and TokenValidityUnits as hours, your user can authenticate their session with their ID token for 10 hours. The default time unit for IdTokenValidity in an API request is hours. Valid range is displayed below in seconds. If you don't specify otherwise in the configuration of your app client, your ID tokens are valid for one hour. public var idTokenValidity: Swift.Int? - /// The date the user pool client was last modified. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was modified. public var lastModifiedDate: ClientRuntime.Date? /// A list of allowed logout URLs for the IdPs. public var logoutURLs: [Swift.String]? @@ -22953,13 +23415,13 @@ extension CognitoIdentityProviderClientTypes.UserPoolDescriptionType: Swift.Coda extension CognitoIdentityProviderClientTypes { /// A user pool description. public struct UserPoolDescriptionType: Swift.Equatable { - /// The date the user pool description was created. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was created. public var creationDate: ClientRuntime.Date? /// The ID in a user pool description. public var id: Swift.String? /// The Lambda configuration information in a user pool description. public var lambdaConfig: CognitoIdentityProviderClientTypes.LambdaConfigType? - /// The date the user pool description was last modified. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was modified. public var lastModifiedDate: ClientRuntime.Date? /// The name in a user pool description. public var name: Swift.String? @@ -23395,7 +23857,7 @@ extension CognitoIdentityProviderClientTypes { public var arn: Swift.String? /// The attributes that are auto-verified in a user pool. public var autoVerifiedAttributes: [CognitoIdentityProviderClientTypes.VerifiedAttributeType]? - /// The date the user pool was created. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was created. public var creationDate: ClientRuntime.Date? /// A custom domain name that you provide to Amazon Cognito. This parameter applies only if you use a custom domain to host the sign-up and sign-in pages for your application. An example of a custom domain name might be auth.example.com. For more information about adding a custom domain to your user pool, see [Using Your Own Domain for the Hosted UI](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html). public var customDomain: Swift.String? @@ -23405,7 +23867,7 @@ extension CognitoIdentityProviderClientTypes { public var deviceConfiguration: CognitoIdentityProviderClientTypes.DeviceConfigurationType? /// The domain prefix, if the user pool has a domain associated with it. public var domain: Swift.String? - /// The email configuration of your user pool. The email configuration type sets your preferred sending method, Amazon Web Services Region, and sender for messages tfrom your user pool. + /// The email configuration of your user pool. The email configuration type sets your preferred sending method, Amazon Web Services Region, and sender for messages from your user pool. public var emailConfiguration: CognitoIdentityProviderClientTypes.EmailConfigurationType? /// Deprecated. Review error codes from API requests with EventSource:cognito-idp.amazonaws.com in CloudTrail for information about problems with user pool email configuration. public var emailConfigurationFailure: Swift.String? @@ -23419,7 +23881,7 @@ extension CognitoIdentityProviderClientTypes { public var id: Swift.String? /// The Lambda triggers associated with the user pool. public var lambdaConfig: CognitoIdentityProviderClientTypes.LambdaConfigType? - /// The date the user pool was last modified. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was modified. public var lastModifiedDate: ClientRuntime.Date? /// Can be one of the following values: /// @@ -23433,13 +23895,13 @@ extension CognitoIdentityProviderClientTypes { public var name: Swift.String? /// The policies associated with the user pool. public var policies: CognitoIdentityProviderClientTypes.UserPoolPolicyType? - /// A container with the schema attributes of a user pool. + /// A list of the user attributes and their properties in your user pool. The attribute schema contains standard attributes, custom attributes with a custom: prefix, and developer attributes with a dev: prefix. For more information, see [User pool attributes](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html). Developer-only attributes are a legacy feature of user pools, are read-only to all app clients. You can create and update developer-only attributes only with IAM-authenticated API operations. Use app client read/write permissions instead. public var schemaAttributes: [CognitoIdentityProviderClientTypes.SchemaAttributeType]? /// The contents of the SMS authentication message. public var smsAuthenticationMessage: Swift.String? /// The SMS configuration with the settings that your Amazon Cognito user pool must use to send an SMS message from your Amazon Web Services account through Amazon Simple Notification Service. To send SMS messages with Amazon SNS in the Amazon Web Services Region that you want, the Amazon Cognito user pool uses an Identity and Access Management (IAM) role in your Amazon Web Services account. public var smsConfiguration: CognitoIdentityProviderClientTypes.SmsConfigurationType? - /// The reason why the SMS configuration can't send the messages to your users. This message might include comma-separated values to describe why your SMS configuration can't send messages to user pool end users. InvalidSmsRoleAccessPolicyException The Identity and Access Management role that Amazon Cognito uses to send SMS messages isn't properly configured. For more information, see [SmsConfigurationType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SmsConfigurationType.html). SNSSandbox The Amazon Web Services account is in the SNS SMS Sandbox and messages will only reach verified end users. This parameter won’t get populated with SNSSandbox if the IAM user creating the user pool doesn’t have SNS permissions. To learn how to move your Amazon Web Services account out of the sandbox, see [Moving out of the SMS sandbox](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox-moving-to-production.html). + /// The reason why the SMS configuration can't send the messages to your users. This message might include comma-separated values to describe why your SMS configuration can't send messages to user pool end users. InvalidSmsRoleAccessPolicyException The Identity and Access Management role that Amazon Cognito uses to send SMS messages isn't properly configured. For more information, see [SmsConfigurationType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SmsConfigurationType.html). SNSSandbox The Amazon Web Services account is in the SNS SMS Sandbox and messages will only reach verified end users. This parameter won’t get populated with SNSSandbox if the user creating the user pool doesn’t have SNS permissions. To learn how to move your Amazon Web Services account out of the sandbox, see [Moving out of the SMS sandbox](https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox-moving-to-production.html). public var smsConfigurationFailure: Swift.String? /// This parameter is no longer used. See [VerificationMessageTemplateType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerificationMessageTemplateType.html). public var smsVerificationMessage: Swift.String? @@ -23447,7 +23909,7 @@ extension CognitoIdentityProviderClientTypes { public var status: CognitoIdentityProviderClientTypes.StatusType? /// The settings for updates to user attributes. These settings include the property AttributesRequireVerificationBeforeUpdate, a user-pool setting that tells Amazon Cognito how to handle changes to the value of your users' email address and phone number attributes. For more information, see [ Verifying updates to email addresses and phone numbers](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-email-phone-verification.html#user-pool-settings-verifications-verify-attribute-updates). public var userAttributeUpdateSettings: CognitoIdentityProviderClientTypes.UserAttributeUpdateSettingsType? - /// The user pool add-ons. + /// User pool add-ons. Contains settings for activation of advanced security features. To log user security information but take no action, set to AUDIT. To configure automatic security responses to risky traffic to your user pool, set to ENFORCED. For more information, see [Adding advanced security to a user pool](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-advanced-security.html). public var userPoolAddOns: CognitoIdentityProviderClientTypes.UserPoolAddOnsType? /// The tags that are assigned to the user pool. A tag is a label that you can apply to user pools to categorize and manage them in different ways, such as by purpose, owner, environment, or other criteria. public var userPoolTags: [Swift.String:Swift.String]? @@ -23674,7 +24136,7 @@ extension CognitoIdentityProviderClientTypes { public var mfaOptions: [CognitoIdentityProviderClientTypes.MFAOptionType]? /// The creation date of the user. public var userCreateDate: ClientRuntime.Date? - /// The last modified date of the user. + /// The date and time, in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, when the item was modified. public var userLastModifiedDate: ClientRuntime.Date? /// The user status. This can be one of the following: /// @@ -23684,8 +24146,6 @@ extension CognitoIdentityProviderClientTypes { /// /// * EXTERNAL_PROVIDER - User signed in with a third-party IdP. /// - /// * ARCHIVED - User is no longer active. - /// /// * UNKNOWN - User status isn't known. /// /// * RESET_REQUIRED - User is confirmed, but the user must request a code and reset their password before they can sign in. @@ -23771,7 +24231,7 @@ extension CognitoIdentityProviderClientTypes.UsernameConfigurationType: Swift.Co extension CognitoIdentityProviderClientTypes { /// The username configuration type. public struct UsernameConfigurationType: Swift.Equatable { - /// Specifies whether user name case sensitivity will be applied for all users in the user pool through Amazon Cognito APIs. Valid values include: True Enables case sensitivity for all username input. When this option is set to True, users must sign in using the exact capitalization of their given username, such as “UserName”. This is the default value. False Enables case insensitivity for all username input. For example, when this option is set to False, users can sign in using either "username" or "Username". This option also enables both preferred_username and email alias to be case insensitive, in addition to the username attribute. + /// Specifies whether user name case sensitivity will be applied for all users in the user pool through Amazon Cognito APIs. For most use cases, set case sensitivity to False (case insensitive) as a best practice. When usernames and email addresses are case insensitive, users can sign in as the same user when they enter a different capitalization of their user name. Valid values include: True Enables case sensitivity for all username input. When this option is set to True, users must sign in using the exact capitalization of their given username, such as “UserName”. This is the default value. False Enables case insensitivity for all username input. For example, when this option is set to False, users can sign in using username, USERNAME, or UserName. This option also enables both preferred_username and email alias to be case insensitive, in addition to the username attribute. /// This member is required. public var caseSensitive: Swift.Bool? @@ -23960,7 +24420,7 @@ extension CognitoIdentityProviderClientTypes { extension VerifySoftwareTokenInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "VerifySoftwareTokenInput(friendlyDeviceName: \(Swift.String(describing: friendlyDeviceName)), userCode: \(Swift.String(describing: userCode)), accessToken: \"CONTENT_REDACTED\", session: \"CONTENT_REDACTED\")"} + "VerifySoftwareTokenInput(friendlyDeviceName: \(Swift.String(describing: friendlyDeviceName)), session: \(Swift.String(describing: session)), userCode: \(Swift.String(describing: userCode)), accessToken: \"CONTENT_REDACTED\")"} } extension VerifySoftwareTokenInput: Swift.Encodable { @@ -24070,11 +24530,6 @@ public enum VerifySoftwareTokenOutputError: ClientRuntime.HttpResponseErrorBindi } } -extension VerifySoftwareTokenOutputResponse: Swift.CustomDebugStringConvertible { - public var debugDescription: Swift.String { - "VerifySoftwareTokenOutputResponse(status: \(Swift.String(describing: status)), session: \"CONTENT_REDACTED\")"} -} - extension VerifySoftwareTokenOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), diff --git a/Sources/Services/AWSConnect/ConnectClient.swift b/Sources/Services/AWSConnect/ConnectClient.swift index 0de724a08e7..5b05b3944db 100644 --- a/Sources/Services/AWSConnect/ConnectClient.swift +++ b/Sources/Services/AWSConnect/ConnectClient.swift @@ -1588,6 +1588,39 @@ extension ConnectClient: ConnectClientProtocol { return result } + /// Deletes a queue. + public func deleteQueue(input: DeleteQueueInput) async throws -> DeleteQueueOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteQueue") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "connect") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteQueue") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Deletes a quick connect. public func deleteQuickConnect(input: DeleteQuickConnectInput) async throws -> DeleteQuickConnectOutputResponse { @@ -1621,6 +1654,39 @@ extension ConnectClient: ConnectClientProtocol { return result } + /// Deletes a routing profile. + public func deleteRoutingProfile(input: DeleteRoutingProfileInput) async throws -> DeleteRoutingProfileOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteRoutingProfile") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "connect") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteRoutingProfile") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Deletes a rule for the specified Amazon Connect instance. public func deleteRule(input: DeleteRuleInput) async throws -> DeleteRuleOutputResponse { diff --git a/Sources/Services/AWSConnect/ConnectClientProtocol.swift b/Sources/Services/AWSConnect/ConnectClientProtocol.swift index 9b37303efaf..b87816e0539 100644 --- a/Sources/Services/AWSConnect/ConnectClientProtocol.swift +++ b/Sources/Services/AWSConnect/ConnectClientProtocol.swift @@ -90,8 +90,12 @@ public protocol ConnectClientProtocol { func deleteIntegrationAssociation(input: DeleteIntegrationAssociationInput) async throws -> DeleteIntegrationAssociationOutputResponse /// Deletes a prompt. func deletePrompt(input: DeletePromptInput) async throws -> DeletePromptOutputResponse + /// Deletes a queue. + func deleteQueue(input: DeleteQueueInput) async throws -> DeleteQueueOutputResponse /// Deletes a quick connect. func deleteQuickConnect(input: DeleteQuickConnectInput) async throws -> DeleteQuickConnectOutputResponse + /// Deletes a routing profile. + func deleteRoutingProfile(input: DeleteRoutingProfileInput) async throws -> DeleteRoutingProfileOutputResponse /// Deletes a rule for the specified Amazon Connect instance. func deleteRule(input: DeleteRuleInput) async throws -> DeleteRuleOutputResponse /// This API is in preview release for Amazon Connect and is subject to change. Deletes a security profile. diff --git a/Sources/Services/AWSConnect/models/Models.swift b/Sources/Services/AWSConnect/models/Models.swift index a2d259d442b..ec947603f7b 100644 --- a/Sources/Services/AWSConnect/models/Models.swift +++ b/Sources/Services/AWSConnect/models/Models.swift @@ -8489,6 +8489,71 @@ public struct DeletePromptOutputResponse: Swift.Equatable { public init() { } } +extension DeleteQueueInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let instanceId = instanceId else { + return nil + } + guard let queueId = queueId else { + return nil + } + return "/queues/\(instanceId.urlPercentEncoding())/\(queueId.urlPercentEncoding())" + } +} + +public struct DeleteQueueInput: Swift.Equatable { + /// The identifier of the Amazon Connect instance. You can [find the instance ID](https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html) in the Amazon Resource Name (ARN) of the instance. + /// This member is required. + public var instanceId: Swift.String? + /// The identifier for the queue. + /// This member is required. + public var queueId: Swift.String? + + public init( + instanceId: Swift.String? = nil, + queueId: Swift.String? = nil + ) + { + self.instanceId = instanceId + self.queueId = queueId + } +} + +struct DeleteQueueInputBody: Swift.Equatable { +} + +extension DeleteQueueInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteQueueOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServiceException": return try await InternalServiceException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidParameterException": return try await InvalidParameterException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidRequestException": return try await InvalidRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceInUseException": return try await ResourceInUseException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteQueueOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct DeleteQueueOutputResponse: Swift.Equatable { + + public init() { } +} + extension DeleteQuickConnectInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let instanceId = instanceId else { @@ -8553,6 +8618,71 @@ public struct DeleteQuickConnectOutputResponse: Swift.Equatable { public init() { } } +extension DeleteRoutingProfileInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let instanceId = instanceId else { + return nil + } + guard let routingProfileId = routingProfileId else { + return nil + } + return "/routing-profiles/\(instanceId.urlPercentEncoding())/\(routingProfileId.urlPercentEncoding())" + } +} + +public struct DeleteRoutingProfileInput: Swift.Equatable { + /// The identifier of the Amazon Connect instance. You can [find the instance ID](https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html) in the Amazon Resource Name (ARN) of the instance. + /// This member is required. + public var instanceId: Swift.String? + /// The identifier of the routing profile. + /// This member is required. + public var routingProfileId: Swift.String? + + public init( + instanceId: Swift.String? = nil, + routingProfileId: Swift.String? = nil + ) + { + self.instanceId = instanceId + self.routingProfileId = routingProfileId + } +} + +struct DeleteRoutingProfileInputBody: Swift.Equatable { +} + +extension DeleteRoutingProfileInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteRoutingProfileOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServiceException": return try await InternalServiceException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidParameterException": return try await InvalidParameterException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidRequestException": return try await InvalidRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceInUseException": return try await ResourceInUseException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteRoutingProfileOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct DeleteRoutingProfileOutputResponse: Swift.Equatable { + + public init() { } +} + extension DeleteRuleInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let instanceId = instanceId else { @@ -15727,19 +15857,21 @@ public struct GetMetricDataV2Input: Swift.Equatable { /// /// * User hierarchy groups /// + /// * Feature + /// /// /// At least one filter must be passed from queues, routing profiles, agents, or user hierarchy groups. To filter by phone number, see [Create a historical metrics report](https://docs.aws.amazon.com/connect/latest/adminguide/create-historical-metrics-report.html) in the Amazon Connect Administrator's Guide. Note the following limits: /// - /// * Filter keys: A maximum of 5 filter keys are supported in a single request. Valid filter keys: QUEUE | ROUTING_PROFILE | AGENT | CHANNEL | AGENT_HIERARCHY_LEVEL_ONE | AGENT_HIERARCHY_LEVEL_TWO | AGENT_HIERARCHY_LEVEL_THREE | AGENT_HIERARCHY_LEVEL_FOUR | AGENT_HIERARCHY_LEVEL_FIVE + /// * Filter keys: A maximum of 5 filter keys are supported in a single request. Valid filter keys: QUEUE | ROUTING_PROFILE | AGENT | CHANNEL | AGENT_HIERARCHY_LEVEL_ONE | AGENT_HIERARCHY_LEVEL_TWO | AGENT_HIERARCHY_LEVEL_THREE | AGENT_HIERARCHY_LEVEL_FOUR | AGENT_HIERARCHY_LEVEL_FIVE | FEATURE /// - /// * Filter values: A maximum of 100 filter values are supported in a single request. VOICE, CHAT, and TASK are valid filterValue for the CHANNEL filter key. They do not count towards limitation of 100 filter values. For example, a GetMetricDataV2 request can filter by 50 queues, 35 agents, and 15 routing profiles for a total of 100 filter values, along with 3 channel filters. + /// * Filter values: A maximum of 100 filter values are supported in a single request. VOICE, CHAT, and TASK are valid filterValue for the CHANNEL filter key. They do not count towards limitation of 100 filter values. For example, a GetMetricDataV2 request can filter by 50 queues, 35 agents, and 15 routing profiles for a total of 100 filter values, along with 3 channel filters. contact_lens_conversational_analytics is a valid filterValue for the FEATURE filter key. It is available only to contacts analyzed by Contact Lens conversational analytics. /// This member is required. public var filters: [ConnectClientTypes.FilterV2]? /// The grouping applied to the metrics that are returned. For example, when results are grouped by queue, the metrics returned are grouped by queue. The values that are returned apply to the metrics for each queue. They are not aggregated for all queues. If no grouping is specified, a summary of all metrics is returned. Valid grouping keys: QUEUE | ROUTING_PROFILE | AGENT | CHANNEL | AGENT_HIERARCHY_LEVEL_ONE | AGENT_HIERARCHY_LEVEL_TWO | AGENT_HIERARCHY_LEVEL_THREE | AGENT_HIERARCHY_LEVEL_FOUR | AGENT_HIERARCHY_LEVEL_FIVE public var groupings: [Swift.String]? /// The maximum number of results to return per page. public var maxResults: Swift.Int? - /// The metrics to retrieve. Specify the name, groupings, and filters for each metric. The following historical metrics are available. For a description of each metric, see [Historical metrics definitions](https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html) in the Amazon Connect Administrator's Guide. AGENT_ADHERENT_TIME This metric is available only in Amazon Web Services Regions where [Forecasting, capacity planning, and scheduling](https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region) is available. Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AGENT_NON_RESPONSE Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AGENT_OCCUPANCY Unit: Percentage Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy AGENT_SCHEDULE_ADHERENCE This metric is available only in Amazon Web Services Regions where [Forecasting, capacity planning, and scheduling](https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region) is available. Unit: Percent Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AGENT_SCHEDULED_TIME This metric is available only in Amazon Web Services Regions where [Forecasting, capacity planning, and scheduling](https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region) is available. Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_ABANDON_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_AFTER_CONTACT_WORK_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_AGENT_CONNECTING_TIME Unit: Seconds Valid metric filter key: INITIATION_METHOD. For now, this metric only supports the following as INITIATION_METHOD: INBOUND | OUTBOUND | CALLBACK | API Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_HANDLE_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_HOLD_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_INTERACTION_AND_HOLD_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_INTERACTION_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile AVG_QUEUE_ANSWER_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile CONTACTS_ABANDONED Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy CONTACTS_CREATED Unit: Count Valid metric filter key: INITIATION_METHOD Valid groupings and filters: Queue, Channel, Routing Profile CONTACTS_HANDLED Unit: Count Valid metric filter key: INITIATION_METHOD, DISCONNECT_REASON Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy CONTACTS_HOLD_ABANDONS Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy CONTACTS_QUEUED Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy CONTACTS_TRANSFERRED_OUT Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy CONTACTS_TRANSFERRED_OUT_BY_AGENT Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy CONTACTS_TRANSFERRED_OUT_FROM_QUEUE Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy MAX_QUEUED_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy SERVICE_LEVEL You can include up to 20 SERVICE_LEVEL metrics in a request. Unit: Percent Valid groupings and filters: Queue, Channel, Routing Profile Threshold: For ThresholdValue, enter any whole number from 1 to 604800 (inclusive), in seconds. For Comparison, you must enter LT (for "Less than"). SUM_CONTACTS_ANSWERED_IN_X Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile Threshold: For ThresholdValue, enter any whole number from 1 to 604800 (inclusive), in seconds. For Comparison, you must enter LT (for "Less than"). SUM_CONTACTS_ABANDONED_IN_X Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile Threshold: For ThresholdValue, enter any whole number from 1 to 604800 (inclusive), in seconds. For Comparison, you must enter LT (for "Less than"). SUM_CONTACTS_DISCONNECTED Valid metric filter key: DISCONNECT_REASON Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile SUM_RETRY_CALLBACK_ATTEMPTS Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile + /// The metrics to retrieve. Specify the name, groupings, and filters for each metric. The following historical metrics are available. For a description of each metric, see [Historical metrics definitions](https://docs.aws.amazon.com/connect/latest/adminguide/historical-metrics-definitions.html) in the Amazon Connect Administrator's Guide. AGENT_ADHERENT_TIME This metric is available only in Amazon Web Services Regions where [Forecasting, capacity planning, and scheduling](https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region) is available. Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AGENT_NON_RESPONSE Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AGENT_OCCUPANCY Unit: Percentage Valid groupings and filters: Routing Profile, Agent, Agent Hierarchy AGENT_SCHEDULE_ADHERENCE This metric is available only in Amazon Web Services Regions where [Forecasting, capacity planning, and scheduling](https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region) is available. Unit: Percent Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AGENT_SCHEDULED_TIME This metric is available only in Amazon Web Services Regions where [Forecasting, capacity planning, and scheduling](https://docs.aws.amazon.com/connect/latest/adminguide/regions.html#optimization_region) is available. Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_ABANDON_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_AFTER_CONTACT_WORK_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature Feature is a valid filter but not a valid grouping. AVG_AGENT_CONNECTING_TIME Unit: Seconds Valid metric filter key: INITIATION_METHOD. For now, this metric only supports the following as INITIATION_METHOD: INBOUND | OUTBOUND | CALLBACK | API Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_AGENT_CONNECTING_TIME Unit: Seconds Valid metric filter key: INITIATION_METHOD. For now, this metric only supports the following as INITIATION_METHOD: INBOUND | OUTBOUND | CALLBACK | API Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_CONTACT_DURATION Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature Feature is a valid filter but not a valid grouping. AVG_CONVERSATION_DURATION Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_GREETING_TIME_AGENT This metric is available only for contacts analyzed by Contact Lens conversational analytics. Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_HANDLE_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature Feature is a valid filter but not a valid grouping. AVG_HOLD_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature Feature is a valid filter but not a valid grouping. AVG_HOLDS Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature Feature is a valid filter but not a valid grouping. AVG_INTERACTION_AND_HOLD_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_INTERACTION_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Feature Feature is a valid filter but not a valid grouping. AVG_INTERRUPTIONS_AGENT This metric is available only for contacts analyzed by Contact Lens conversational analytics. Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_INTERRUPTION_TIME_AGENT This metric is available only for contacts analyzed by Contact Lens conversational analytics. Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_NON_TALK_TIME This metric is available only for contacts analyzed by Contact Lens conversational analytics. Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_QUEUE_ANSWER_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Feature Feature is a valid filter but not a valid grouping. AVG_TALK_TIME This metric is available only for contacts analyzed by Contact Lens conversational analytics. Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_TALK_TIME_AGENT This metric is available only for contacts analyzed by Contact Lens conversational analytics. Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy AVG_TALK_TIME_CUSTOMER This metric is available only for contacts analyzed by Contact Lens conversational analytics. Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy CONTACTS_ABANDONED Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy CONTACTS_CREATED Unit: Count Valid metric filter key: INITIATION_METHOD Valid groupings and filters: Queue, Channel, Routing Profile, Feature Feature is a valid filter but not a valid grouping. CONTACTS_HANDLED Unit: Count Valid metric filter key: INITIATION_METHOD, DISCONNECT_REASON Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature Feature is a valid filter but not a valid grouping. CONTACTS_HOLD_ABANDONS Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy CONTACTS_QUEUED Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy CONTACTS_TRANSFERRED_OUT Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy, Feature Feature is a valid filter but not a valid grouping. CONTACTS_TRANSFERRED_OUT_BY_AGENT Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy CONTACTS_TRANSFERRED_OUT_FROM_QUEUE Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy MAX_QUEUED_TIME Unit: Seconds Valid groupings and filters: Queue, Channel, Routing Profile, Agent, Agent Hierarchy SERVICE_LEVEL You can include up to 20 SERVICE_LEVEL metrics in a request. Unit: Percent Valid groupings and filters: Queue, Channel, Routing Profile Threshold: For ThresholdValue, enter any whole number from 1 to 604800 (inclusive), in seconds. For Comparison, you must enter LT (for "Less than"). SUM_CONTACTS_ANSWERED_IN_X Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile Threshold: For ThresholdValue, enter any whole number from 1 to 604800 (inclusive), in seconds. For Comparison, you must enter LT (for "Less than"). SUM_CONTACTS_ABANDONED_IN_X Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile Threshold: For ThresholdValue, enter any whole number from 1 to 604800 (inclusive), in seconds. For Comparison, you must enter LT (for "Less than"). SUM_CONTACTS_DISCONNECTED Valid metric filter key: DISCONNECT_REASON Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile SUM_RETRY_CALLBACK_ATTEMPTS Unit: Count Valid groupings and filters: Queue, Channel, Routing Profile /// This member is required. public var metrics: [ConnectClientTypes.MetricV2]? /// The token for the next set of results. Use the value returned in the previous response in the next request to retrieve the next set of results. @@ -17935,7 +18067,7 @@ extension ConnectClientTypes { public var identityManagementType: ConnectClientTypes.DirectoryType? /// Whether inbound calls are enabled. public var inboundCallsEnabled: Swift.Bool? - /// This URL allows contact center users to access Amazon Connect admin website. + /// This URL allows contact center users to access the Amazon Connect admin website. public var instanceAccessUrl: Swift.String? /// The alias of instance. public var instanceAlias: Swift.String? @@ -18337,7 +18469,7 @@ extension ConnectClientTypes { public var identityManagementType: ConnectClientTypes.DirectoryType? /// Whether inbound calls are enabled. public var inboundCallsEnabled: Swift.Bool? - /// This URL allows contact center users to access Amazon Connect admin website. + /// This URL allows contact center users to access the Amazon Connect admin website. public var instanceAccessUrl: Swift.String? /// The alias of the instance. public var instanceAlias: Swift.String? @@ -26306,13 +26438,21 @@ extension ConnectClientTypes { extension ConnectClientTypes { public enum PhoneNumberType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case did + case shared + case thirdPartyDid + case thirdPartyTf case tollFree + case uifn case sdkUnknown(Swift.String) public static var allCases: [PhoneNumberType] { return [ .did, + .shared, + .thirdPartyDid, + .thirdPartyTf, .tollFree, + .uifn, .sdkUnknown("") ] } @@ -26323,7 +26463,11 @@ extension ConnectClientTypes { public var rawValue: Swift.String { switch self { case .did: return "DID" + case .shared: return "SHARED" + case .thirdPartyDid: return "THIRD_PARTY_DID" + case .thirdPartyTf: return "THIRD_PARTY_TF" case .tollFree: return "TOLL_FREE" + case .uifn: return "UIFN" case let .sdkUnknown(s): return s } } diff --git a/Sources/Services/AWSConnectCases/ConnectCasesClient.swift b/Sources/Services/AWSConnectCases/ConnectCasesClient.swift index 6b6f4629c0c..5c053bff090 100644 --- a/Sources/Services/AWSConnectCases/ConnectCasesClient.swift +++ b/Sources/Services/AWSConnectCases/ConnectCasesClient.swift @@ -374,7 +374,7 @@ extension ConnectCasesClient: ConnectCasesClientProtocol { return result } - /// Deletes a domain. + /// Deletes a Cases domain. After deleting your domain you must disassociate the deleted domain from your Amazon Connect instance with another API call before being able to use Cases again with this Amazon Connect instance. See [DeleteIntegrationAssociation](https://docs.aws.amazon.com/connect/latest/APIReference/API_DeleteIntegrationAssociation.html). public func deleteDomain(input: DeleteDomainInput) async throws -> DeleteDomainOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSConnectCases/ConnectCasesClientProtocol.swift b/Sources/Services/AWSConnectCases/ConnectCasesClientProtocol.swift index 7fd8e31a398..141ba16399f 100644 --- a/Sources/Services/AWSConnectCases/ConnectCasesClientProtocol.swift +++ b/Sources/Services/AWSConnectCases/ConnectCasesClientProtocol.swift @@ -31,7 +31,7 @@ public protocol ConnectCasesClientProtocol { func createRelatedItem(input: CreateRelatedItemInput) async throws -> CreateRelatedItemOutputResponse /// Creates a template in the Cases domain. This template is used to define the case object model (that is, to define what data can be captured on cases) in a Cases domain. A template must have a unique name within a domain, and it must reference existing field IDs and layout IDs. Additionally, multiple fields with same IDs are not allowed within the same Template. A template can be either Active or Inactive, as indicated by its status. Inactive templates cannot be used to create cases. func createTemplate(input: CreateTemplateInput) async throws -> CreateTemplateOutputResponse - /// Deletes a domain. + /// Deletes a Cases domain. After deleting your domain you must disassociate the deleted domain from your Amazon Connect instance with another API call before being able to use Cases again with this Amazon Connect instance. See [DeleteIntegrationAssociation](https://docs.aws.amazon.com/connect/latest/APIReference/API_DeleteIntegrationAssociation.html). func deleteDomain(input: DeleteDomainInput) async throws -> DeleteDomainOutputResponse /// Returns information about a specific case if it exists. func getCase(input: GetCaseInput) async throws -> GetCaseOutputResponse diff --git a/Sources/Services/AWSConnectCases/models/Models.swift b/Sources/Services/AWSConnectCases/models/Models.swift index de4e4db8eb7..b76729ea8f5 100644 --- a/Sources/Services/AWSConnectCases/models/Models.swift +++ b/Sources/Services/AWSConnectCases/models/Models.swift @@ -450,6 +450,7 @@ extension ConnectCasesClientTypes.CaseFilter: Swift.Codable { case andall = "andAll" case field case not + case orall = "orAll" case sdkUnknown } @@ -465,6 +466,11 @@ extension ConnectCasesClientTypes.CaseFilter: Swift.Codable { try container.encode(field, forKey: .field) case let .not(not): try container.encode(not, forKey: .not) + case let .orall(orall): + var orallContainer = container.nestedUnkeyedContainer(forKey: .orall) + for casefilter0 in orall { + try orallContainer.encode(casefilter0) + } case let .sdkUnknown(sdkUnknown): try container.encode(sdkUnknown, forKey: .sdkUnknown) } @@ -496,6 +502,20 @@ extension ConnectCasesClientTypes.CaseFilter: Swift.Codable { self = .andall(andall) return } + let orallContainer = try values.decodeIfPresent([ConnectCasesClientTypes.CaseFilter?].self, forKey: .orall) + var orallDecoded0:[ConnectCasesClientTypes.CaseFilter]? = nil + if let orallContainer = orallContainer { + orallDecoded0 = [ConnectCasesClientTypes.CaseFilter]() + for union0 in orallContainer { + if let union0 = union0 { + orallDecoded0?.append(union0) + } + } + } + if let orall = orallDecoded0 { + self = .orall(orall) + return + } self = .sdkUnknown("") } } @@ -509,6 +529,8 @@ extension ConnectCasesClientTypes { case not(ConnectCasesClientTypes.CaseFilter) /// Provides "and all" filtering. case andall([ConnectCasesClientTypes.CaseFilter]) + /// Provides "or all" filtering. + case orall([ConnectCasesClientTypes.CaseFilter]) case sdkUnknown(Swift.String) } @@ -1920,6 +1942,26 @@ extension ConnectCasesClientTypes { } +extension ConnectCasesClientTypes.EmptyFieldValue: Swift.Codable { + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.singleValueContainer() + try container.encode([String:String]()) + } + + public init(from decoder: Swift.Decoder) throws { + } +} + +extension ConnectCasesClientTypes { + /// An empty value. You cannot set EmptyFieldValue on a field that is required on a case template. This structure will never have any data members. It signifies an empty value on a case field. + public struct EmptyFieldValue: Swift.Equatable { + + public init() { } + } + +} + extension ConnectCasesClientTypes.EventBridgeConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case enabled @@ -2608,6 +2650,7 @@ extension ConnectCasesClientTypes.FieldValueUnion: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case booleanvalue = "booleanValue" case doublevalue = "doubleValue" + case emptyvalue = "emptyValue" case sdkUnknown case stringvalue = "stringValue" } @@ -2619,6 +2662,8 @@ extension ConnectCasesClientTypes.FieldValueUnion: Swift.Codable { try container.encode(booleanvalue, forKey: .booleanvalue) case let .doublevalue(doublevalue): try container.encode(doublevalue, forKey: .doublevalue) + case let .emptyvalue(emptyvalue): + try container.encode(emptyvalue, forKey: .emptyvalue) case let .stringvalue(stringvalue): try container.encode(stringvalue, forKey: .stringvalue) case let .sdkUnknown(sdkUnknown): @@ -2643,6 +2688,11 @@ extension ConnectCasesClientTypes.FieldValueUnion: Swift.Codable { self = .booleanvalue(booleanvalue) return } + let emptyvalueDecoded = try values.decodeIfPresent(ConnectCasesClientTypes.EmptyFieldValue.self, forKey: .emptyvalue) + if let emptyvalue = emptyvalueDecoded { + self = .emptyvalue(emptyvalue) + return + } self = .sdkUnknown("") } } @@ -2656,6 +2706,8 @@ extension ConnectCasesClientTypes { case doublevalue(Swift.Double) /// Can be either null, or have a Boolean value type. Only one value can be provided. case booleanvalue(Swift.Bool) + /// An empty value. + case emptyvalue(ConnectCasesClientTypes.EmptyFieldValue) case sdkUnknown(Swift.String) } diff --git a/Sources/Services/AWSCostExplorer/CostExplorerClient.swift b/Sources/Services/AWSCostExplorer/CostExplorerClient.swift index 0183e8f981c..884b48cb246 100644 --- a/Sources/Services/AWSCostExplorer/CostExplorerClient.swift +++ b/Sources/Services/AWSCostExplorer/CostExplorerClient.swift @@ -797,6 +797,43 @@ extension CostExplorerClient: CostExplorerClientProtocol { return result } + /// Retrieves the details for a Savings Plan recommendation. These details include the hourly data-points that construct the new cost, coverage, and utilization charts. + public func getSavingsPlanPurchaseRecommendationDetails(input: GetSavingsPlanPurchaseRecommendationDetailsInput) async throws -> GetSavingsPlanPurchaseRecommendationDetailsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getSavingsPlanPurchaseRecommendationDetails") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "ce") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getSavingsPlanPurchaseRecommendationDetails") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSInsightsIndexService.GetSavingsPlanPurchaseRecommendationDetails")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "GetSavingsPlanPurchaseRecommendationDetailsRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Retrieves the Savings Plans covered for your account. This enables you to see how much of your cost is covered by a Savings Plan. An organization’s management account can see the coverage of the associated member accounts. This supports dimensions, Cost Categories, and nested expressions. For any time period, you can filter data for Savings Plans usage with the following dimensions: /// /// * LINKED_ACCOUNT @@ -1363,7 +1400,7 @@ extension CostExplorerClient: CostExplorerClientProtocol { return result } - /// Updates an existing cost anomaly monitor subscription. + /// Updates an existing cost anomaly subscription. Specify the fields that you want to update. Omitted fields are unchanged. The JSON below describes the generic construct for each type. See [Request Parameters](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_UpdateAnomalySubscription.html#API_UpdateAnomalySubscription_RequestParameters) for possible values as they apply to AnomalySubscription. public func updateAnomalySubscription(input: UpdateAnomalySubscriptionInput) async throws -> UpdateAnomalySubscriptionOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSCostExplorer/CostExplorerClientProtocol.swift b/Sources/Services/AWSCostExplorer/CostExplorerClientProtocol.swift index 4f48281ce81..77a0671cb3f 100644 --- a/Sources/Services/AWSCostExplorer/CostExplorerClientProtocol.swift +++ b/Sources/Services/AWSCostExplorer/CostExplorerClientProtocol.swift @@ -74,6 +74,8 @@ public protocol CostExplorerClientProtocol { func getReservationUtilization(input: GetReservationUtilizationInput) async throws -> GetReservationUtilizationOutputResponse /// Creates recommendations that help you save cost by identifying idle and underutilized Amazon EC2 instances. Recommendations are generated to either downsize or terminate instances, along with providing savings detail and metrics. For more information about calculation and function, see [Optimizing Your Cost with Rightsizing Recommendations](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/ce-rightsizing.html) in the Billing and Cost Management User Guide. func getRightsizingRecommendation(input: GetRightsizingRecommendationInput) async throws -> GetRightsizingRecommendationOutputResponse + /// Retrieves the details for a Savings Plan recommendation. These details include the hourly data-points that construct the new cost, coverage, and utilization charts. + func getSavingsPlanPurchaseRecommendationDetails(input: GetSavingsPlanPurchaseRecommendationDetailsInput) async throws -> GetSavingsPlanPurchaseRecommendationDetailsOutputResponse /// Retrieves the Savings Plans covered for your account. This enables you to see how much of your cost is covered by a Savings Plan. An organization’s management account can see the coverage of the associated member accounts. This supports dimensions, Cost Categories, and nested expressions. For any time period, you can filter data for Savings Plans usage with the following dimensions: /// /// * LINKED_ACCOUNT @@ -115,7 +117,7 @@ public protocol CostExplorerClientProtocol { func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse /// Updates an existing cost anomaly monitor. The changes made are applied going forward, and doesn't change anomalies detected in the past. func updateAnomalyMonitor(input: UpdateAnomalyMonitorInput) async throws -> UpdateAnomalyMonitorOutputResponse - /// Updates an existing cost anomaly monitor subscription. + /// Updates an existing cost anomaly subscription. Specify the fields that you want to update. Omitted fields are unchanged. The JSON below describes the generic construct for each type. See [Request Parameters](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_UpdateAnomalySubscription.html#API_UpdateAnomalySubscription_RequestParameters) for possible values as they apply to AnomalySubscription. func updateAnomalySubscription(input: UpdateAnomalySubscriptionInput) async throws -> UpdateAnomalySubscriptionOutputResponse /// Updates status for cost allocation tags in bulk, with maximum batch size of 20. If the tag status that's updated is the same as the existing tag status, the request doesn't fail. Instead, it doesn't have any effect on the tag status (for example, activating the active tag). func updateCostAllocationTagsStatus(input: UpdateCostAllocationTagsStatusInput) async throws -> UpdateCostAllocationTagsStatusOutputResponse diff --git a/Sources/Services/AWSCostExplorer/models/Models.swift b/Sources/Services/AWSCostExplorer/models/Models.swift index 54c176ee725..43649673472 100644 --- a/Sources/Services/AWSCostExplorer/models/Models.swift +++ b/Sources/Services/AWSCostExplorer/models/Models.swift @@ -350,7 +350,7 @@ extension CostExplorerClientTypes { /// /// * For example, you can filter for REGION==us-east-1 OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is a full name (for example, REGION==US East (N. Virginia). /// - /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", “us-west-1” ] } } + /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", "us-west-1" ] } } /// /// * As shown in the previous example, lists of dimension values are combined with OR when applying the filter. /// @@ -359,7 +359,7 @@ extension CostExplorerClientTypes { /// /// * You can also set different match options to further control how the filter behaves. Not all APIs support match options. Refer to the documentation for each specific API to see what is supported. /// - /// * For example, you can filter for linked account names that start with “a”. + /// * For example, you can filter for linked account names that start with "a". /// /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME", "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } } /// @@ -546,11 +546,11 @@ extension CostExplorerClientTypes.AnomalySubscription: Swift.Codable { } extension CostExplorerClientTypes { - /// The association between a monitor, threshold, and list of subscribers used to deliver notifications about anomalies detected by a monitor that exceeds a threshold. The content consists of the detailed metadata and the current status of the AnomalySubscription object. + /// An AnomalySubscription resource (also referred to as an alert subscription) sends notifications about specific anomalies that meet an alerting criteria defined by you. You can specify the frequency of the alerts and the subscribers to notify. Anomaly subscriptions can be associated with one or more [AnomalyMonitor](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_AnomalyMonitor.html) resources, and they only send notifications about anomalies detected by those associated monitors. You can also configure a threshold to further control which anomalies are included in the notifications. Anomalies that don’t exceed the chosen threshold and therefore don’t trigger notifications from an anomaly subscription will still be available on the console and from the [GetAnomalies](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_GetAnomalies.html) API. public struct AnomalySubscription: Swift.Equatable { /// Your unique account identifier. public var accountId: Swift.String? - /// The frequency that anomaly reports are sent over email. + /// The frequency that anomaly notifications are sent. Notifications are sent either over email (for DAILY and WEEKLY frequencies) or SNS (for IMMEDIATE frequency). For more information, see [Creating an Amazon SNS topic for anomaly notifications](https://docs.aws.amazon.com/cost-management/latest/userguide/ad-SNS.html). /// This member is required. public var frequency: CostExplorerClientTypes.AnomalySubscriptionFrequency? /// A list of cost anomaly monitors. @@ -564,10 +564,10 @@ extension CostExplorerClientTypes { /// The name for the subscription. /// This member is required. public var subscriptionName: Swift.String? - /// (deprecated) The dollar value that triggers a notification if the threshold is exceeded. This field has been deprecated. To specify a threshold, use ThresholdExpression. Continued use of Threshold will be treated as shorthand syntax for a ThresholdExpression. One of Threshold or ThresholdExpression is required for this resource. + /// (deprecated) An absolute dollar value that must be exceeded by the anomaly's total impact (see [Impact](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Impact.html) for more details) for an anomaly notification to be generated. This field has been deprecated. To specify a threshold, use ThresholdExpression. Continued use of Threshold will be treated as shorthand syntax for a ThresholdExpression. One of Threshold or ThresholdExpression is required for this resource. You cannot specify both. @available(*, deprecated, message: "Threshold has been deprecated in favor of ThresholdExpression") public var threshold: Swift.Double? - /// An [Expression](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html) object used to specify the anomalies that you want to generate alerts for. This supports dimensions and nested expressions. The supported dimensions are ANOMALY_TOTAL_IMPACT_ABSOLUTE and ANOMALY_TOTAL_IMPACT_PERCENTAGE. The supported nested expression types are AND and OR. The match option GREATER_THAN_OR_EQUAL is required. Values must be numbers between 0 and 10,000,000,000. One of Threshold or ThresholdExpression is required for this resource. The following are examples of valid ThresholdExpressions: + /// An [Expression](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html) object used to specify the anomalies that you want to generate alerts for. This supports dimensions and nested expressions. The supported dimensions are ANOMALY_TOTAL_IMPACT_ABSOLUTE and ANOMALY_TOTAL_IMPACT_PERCENTAGE, corresponding to an anomaly’s TotalImpact and TotalImpactPercentage, respectively (see [Impact](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Impact.html) for more details). The supported nested expression types are AND and OR. The match option GREATER_THAN_OR_EQUAL is required. Values must be numbers between 0 and 10,000,000,000 in string format. One of Threshold or ThresholdExpression is required for this resource. You cannot specify both. The following are examples of valid ThresholdExpressions: /// /// * Absolute threshold: { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE", "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } } /// @@ -1345,7 +1345,7 @@ extension CostExplorerClientTypes { public struct CostCategoryRule: Swift.Equatable { /// The value the line item is categorized as if the line item contains the matched dimension. public var inheritedValue: CostExplorerClientTypes.CostCategoryInheritedValueDimension? - /// An [Expression](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html) object used to categorize costs. This supports dimensions, tags, and nested expressions. Currently the only dimensions supported are LINKED_ACCOUNT, SERVICE_CODE, RECORD_TYPE, and LINKED_ACCOUNT_NAME. Root level OR isn't supported. We recommend that you create a separate rule instead. RECORD_TYPE is a dimension used for Cost Explorer APIs, and is also supported for Cost Category expressions. This dimension uses different terms, depending on whether you're using the console or API/JSON editor. For a detailed comparison, see [Term Comparisons](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/manage-cost-categories.html#cost-categories-terms) in the Billing and Cost Management User Guide. + /// An [Expression](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html) object used to categorize costs. This supports dimensions, tags, and nested expressions. Currently the only dimensions supported are LINKED_ACCOUNT, SERVICE_CODE, RECORD_TYPE, LINKED_ACCOUNT_NAME, REGION, and USAGE_TYPE. RECORD_TYPE is a dimension used for Cost Explorer APIs, and is also supported for Cost Category expressions. This dimension uses different terms, depending on whether you're using the console or API/JSON editor. For a detailed comparison, see [Term Comparisons](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/manage-cost-categories.html#cost-categories-terms) in the Billing and Cost Management User Guide. public var rule: CostExplorerClientTypes.Expression? /// You can define the CostCategoryRule rule type as either REGULAR or INHERITED_VALUE. The INHERITED_VALUE rule type adds the flexibility to define a rule that dynamically inherits the cost category value. This value is from the dimension value that's defined by CostCategoryInheritedValueDimension. For example, suppose that you want to costs to be dynamically grouped based on the value of a specific tag key. First, choose an inherited value rule type, and then choose the tag dimension and specify the tag key to use. public var type: CostExplorerClientTypes.CostCategoryRuleType? @@ -4181,7 +4181,7 @@ extension CostExplorerClientTypes { /// /// * For example, you can filter for REGION==us-east-1 OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is a full name (for example, REGION==US East (N. Virginia). /// - /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", “us-west-1” ] } } + /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", "us-west-1" ] } } /// /// * As shown in the previous example, lists of dimension values are combined with OR when applying the filter. /// @@ -4190,7 +4190,7 @@ extension CostExplorerClientTypes { /// /// * You can also set different match options to further control how the filter behaves. Not all APIs support match options. Refer to the documentation for each specific API to see what is supported. /// - /// * For example, you can filter for linked account names that start with “a”. + /// * For example, you can filter for linked account names that start with "a". /// /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME", "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } } /// @@ -5566,7 +5566,7 @@ extension GetCostCategoriesInput: Swift.Encodable { if let filter = self.filter { try encodeContainer.encode(filter, forKey: .filter) } - if maxResults != 0 { + if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextPageToken = self.nextPageToken { @@ -5615,7 +5615,7 @@ public struct GetCostCategoriesInput: Swift.Equatable { /// /// * For example, you can filter for REGION==us-east-1 OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is a full name (for example, REGION==US East (N. Virginia). /// - /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", “us-west-1” ] } } + /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", "us-west-1" ] } } /// /// * As shown in the previous example, lists of dimension values are combined with OR when applying the filter. /// @@ -5624,7 +5624,7 @@ public struct GetCostCategoriesInput: Swift.Equatable { /// /// * You can also set different match options to further control how the filter behaves. Not all APIs support match options. Refer to the documentation for each specific API to see what is supported. /// - /// * For example, you can filter for linked account names that start with “a”. + /// * For example, you can filter for linked account names that start with "a". /// /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME", "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } } /// @@ -5649,7 +5649,7 @@ public struct GetCostCategoriesInput: Swift.Equatable { /// For the GetRightsizingRecommendation action, a combination of OR and NOT isn't supported. OR isn't supported between different dimensions, or dimensions and tags. NOT operators aren't supported. Dimensions are also limited to LINKED_ACCOUNT, REGION, or RIGHTSIZING_TYPE. For the GetReservationPurchaseRecommendation action, only NOT is supported. AND and OR aren't supported. Dimensions are limited to LINKED_ACCOUNT. public var filter: CostExplorerClientTypes.Expression? /// This field is only used when the SortBy value is provided in the request. The maximum number of objects that are returned for this request. If MaxResults isn't specified with the SortBy value, the request returns 1000 results as the default value for this parameter. For GetCostCategories, MaxResults has an upper quota of 1000. - public var maxResults: Swift.Int + public var maxResults: Swift.Int? /// If the number of objects that are still available for retrieval exceeds the quota, Amazon Web Services returns a NextPageToken value in the response. To retrieve the next batch of objects, provide the NextPageToken from the previous call in your next request. public var nextPageToken: Swift.String? /// The value that you want to search the filter values for. If you don't specify a CostCategoryName, SearchString is used to filter Cost Category names that match the SearchString pattern. If you specify a CostCategoryName, SearchString is used to filter Cost Category values that match the SearchString pattern. @@ -5680,7 +5680,7 @@ public struct GetCostCategoriesInput: Swift.Equatable { public init( costCategoryName: Swift.String? = nil, filter: CostExplorerClientTypes.Expression? = nil, - maxResults: Swift.Int = 0, + maxResults: Swift.Int? = nil, nextPageToken: Swift.String? = nil, searchString: Swift.String? = nil, sortBy: [CostExplorerClientTypes.SortDefinition]? = nil, @@ -5703,7 +5703,7 @@ struct GetCostCategoriesInputBody: Swift.Equatable { let costCategoryName: Swift.String? let filter: CostExplorerClientTypes.Expression? let sortBy: [CostExplorerClientTypes.SortDefinition]? - let maxResults: Swift.Int + let maxResults: Swift.Int? let nextPageToken: Swift.String? } @@ -5739,7 +5739,7 @@ extension GetCostCategoriesInputBody: Swift.Decodable { } } sortBy = sortByDecoded0 - let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) ?? 0 + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextPageTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextPageToken) nextPageToken = nextPageTokenDecoded @@ -6109,7 +6109,7 @@ extension GetDimensionValuesInput: Swift.Encodable { if let filter = self.filter { try encodeContainer.encode(filter, forKey: .filter) } - if maxResults != 0 { + if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextPageToken = self.nextPageToken { @@ -6247,7 +6247,7 @@ public struct GetDimensionValuesInput: Swift.Equatable { /// /// * For example, you can filter for REGION==us-east-1 OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is a full name (for example, REGION==US East (N. Virginia). /// - /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", “us-west-1” ] } } + /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", "us-west-1" ] } } /// /// * As shown in the previous example, lists of dimension values are combined with OR when applying the filter. /// @@ -6256,7 +6256,7 @@ public struct GetDimensionValuesInput: Swift.Equatable { /// /// * You can also set different match options to further control how the filter behaves. Not all APIs support match options. Refer to the documentation for each specific API to see what is supported. /// - /// * For example, you can filter for linked account names that start with “a”. + /// * For example, you can filter for linked account names that start with "a". /// /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME", "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } } /// @@ -6281,7 +6281,7 @@ public struct GetDimensionValuesInput: Swift.Equatable { /// For the GetRightsizingRecommendation action, a combination of OR and NOT isn't supported. OR isn't supported between different dimensions, or dimensions and tags. NOT operators aren't supported. Dimensions are also limited to LINKED_ACCOUNT, REGION, or RIGHTSIZING_TYPE. For the GetReservationPurchaseRecommendation action, only NOT is supported. AND and OR aren't supported. Dimensions are limited to LINKED_ACCOUNT. public var filter: CostExplorerClientTypes.Expression? /// This field is only used when SortBy is provided in the request. The maximum number of objects that are returned for this request. If MaxResults isn't specified with SortBy, the request returns 1000 results as the default value for this parameter. For GetDimensionValues, MaxResults has an upper limit of 1000. - public var maxResults: Swift.Int + public var maxResults: Swift.Int? /// The token to retrieve the next set of results. Amazon Web Services provides the token when the response from a previous call has more results than the maximum page size. public var nextPageToken: Swift.String? /// The value that you want to search the filter values for. @@ -6313,7 +6313,7 @@ public struct GetDimensionValuesInput: Swift.Equatable { context: CostExplorerClientTypes.Context? = nil, dimension: CostExplorerClientTypes.Dimension? = nil, filter: CostExplorerClientTypes.Expression? = nil, - maxResults: Swift.Int = 0, + maxResults: Swift.Int? = nil, nextPageToken: Swift.String? = nil, searchString: Swift.String? = nil, sortBy: [CostExplorerClientTypes.SortDefinition]? = nil, @@ -6338,7 +6338,7 @@ struct GetDimensionValuesInputBody: Swift.Equatable { let context: CostExplorerClientTypes.Context? let filter: CostExplorerClientTypes.Expression? let sortBy: [CostExplorerClientTypes.SortDefinition]? - let maxResults: Swift.Int + let maxResults: Swift.Int? let nextPageToken: Swift.String? } @@ -6377,7 +6377,7 @@ extension GetDimensionValuesInputBody: Swift.Decodable { } } sortBy = sortByDecoded0 - let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) ?? 0 + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextPageTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextPageToken) nextPageToken = nextPageTokenDecoded @@ -6890,7 +6890,7 @@ extension GetReservationPurchaseRecommendationInput: Swift.Encodable { if let nextPageToken = self.nextPageToken { try encodeContainer.encode(nextPageToken, forKey: .nextPageToken) } - if pageSize != 0 { + if let pageSize = self.pageSize { try encodeContainer.encode(pageSize, forKey: .pageSize) } if let paymentOption = self.paymentOption { @@ -6938,7 +6938,7 @@ public struct GetReservationPurchaseRecommendationInput: Swift.Equatable { /// /// * For example, you can filter for REGION==us-east-1 OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is a full name (for example, REGION==US East (N. Virginia). /// - /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", “us-west-1” ] } } + /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", "us-west-1" ] } } /// /// * As shown in the previous example, lists of dimension values are combined with OR when applying the filter. /// @@ -6947,7 +6947,7 @@ public struct GetReservationPurchaseRecommendationInput: Swift.Equatable { /// /// * You can also set different match options to further control how the filter behaves. Not all APIs support match options. Refer to the documentation for each specific API to see what is supported. /// - /// * For example, you can filter for linked account names that start with “a”. + /// * For example, you can filter for linked account names that start with "a". /// /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME", "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } } /// @@ -6976,7 +6976,7 @@ public struct GetReservationPurchaseRecommendationInput: Swift.Equatable { /// The pagination token that indicates the next set of results that you want to retrieve. public var nextPageToken: Swift.String? /// The number of recommendations that you want returned in a single response object. - public var pageSize: Swift.Int + public var pageSize: Swift.Int? /// The reservation purchase option that you want recommendations for. public var paymentOption: CostExplorerClientTypes.PaymentOption? /// The specific service that you want recommendations for. @@ -6993,7 +6993,7 @@ public struct GetReservationPurchaseRecommendationInput: Swift.Equatable { filter: CostExplorerClientTypes.Expression? = nil, lookbackPeriodInDays: CostExplorerClientTypes.LookbackPeriodInDays? = nil, nextPageToken: Swift.String? = nil, - pageSize: Swift.Int = 0, + pageSize: Swift.Int? = nil, paymentOption: CostExplorerClientTypes.PaymentOption? = nil, service: Swift.String? = nil, serviceSpecification: CostExplorerClientTypes.ServiceSpecification? = nil, @@ -7022,7 +7022,7 @@ struct GetReservationPurchaseRecommendationInputBody: Swift.Equatable { let termInYears: CostExplorerClientTypes.TermInYears? let paymentOption: CostExplorerClientTypes.PaymentOption? let serviceSpecification: CostExplorerClientTypes.ServiceSpecification? - let pageSize: Swift.Int + let pageSize: Swift.Int? let nextPageToken: Swift.String? } @@ -7058,7 +7058,7 @@ extension GetReservationPurchaseRecommendationInputBody: Swift.Decodable { paymentOption = paymentOptionDecoded let serviceSpecificationDecoded = try containerValues.decodeIfPresent(CostExplorerClientTypes.ServiceSpecification.self, forKey: .serviceSpecification) serviceSpecification = serviceSpecificationDecoded - let pageSizeDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .pageSize) ?? 0 + let pageSizeDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .pageSize) pageSize = pageSizeDecoded let nextPageTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextPageToken) nextPageToken = nextPageTokenDecoded @@ -7444,7 +7444,7 @@ extension GetRightsizingRecommendationInput: Swift.Encodable { if let nextPageToken = self.nextPageToken { try encodeContainer.encode(nextPageToken, forKey: .nextPageToken) } - if pageSize != 0 { + if let pageSize = self.pageSize { try encodeContainer.encode(pageSize, forKey: .pageSize) } if let service = self.service { @@ -7481,7 +7481,7 @@ public struct GetRightsizingRecommendationInput: Swift.Equatable { /// /// * For example, you can filter for REGION==us-east-1 OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is a full name (for example, REGION==US East (N. Virginia). /// - /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", “us-west-1” ] } } + /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", "us-west-1" ] } } /// /// * As shown in the previous example, lists of dimension values are combined with OR when applying the filter. /// @@ -7490,7 +7490,7 @@ public struct GetRightsizingRecommendationInput: Swift.Equatable { /// /// * You can also set different match options to further control how the filter behaves. Not all APIs support match options. Refer to the documentation for each specific API to see what is supported. /// - /// * For example, you can filter for linked account names that start with “a”. + /// * For example, you can filter for linked account names that start with "a". /// /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME", "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } } /// @@ -7517,7 +7517,7 @@ public struct GetRightsizingRecommendationInput: Swift.Equatable { /// The pagination token that indicates the next set of results that you want to retrieve. public var nextPageToken: Swift.String? /// The number of recommendations that you want returned in a single response object. - public var pageSize: Swift.Int + public var pageSize: Swift.Int? /// The specific service that you want recommendations for. The only valid value for GetRightsizingRecommendation is "AmazonEC2". /// This member is required. public var service: Swift.String? @@ -7526,7 +7526,7 @@ public struct GetRightsizingRecommendationInput: Swift.Equatable { configuration: CostExplorerClientTypes.RightsizingRecommendationConfiguration? = nil, filter: CostExplorerClientTypes.Expression? = nil, nextPageToken: Swift.String? = nil, - pageSize: Swift.Int = 0, + pageSize: Swift.Int? = nil, service: Swift.String? = nil ) { @@ -7542,7 +7542,7 @@ struct GetRightsizingRecommendationInputBody: Swift.Equatable { let filter: CostExplorerClientTypes.Expression? let configuration: CostExplorerClientTypes.RightsizingRecommendationConfiguration? let service: Swift.String? - let pageSize: Swift.Int + let pageSize: Swift.Int? let nextPageToken: Swift.String? } @@ -7563,7 +7563,7 @@ extension GetRightsizingRecommendationInputBody: Swift.Decodable { configuration = configurationDecoded let serviceDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .service) service = serviceDecoded - let pageSizeDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .pageSize) ?? 0 + let pageSizeDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .pageSize) pageSize = pageSizeDecoded let nextPageTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextPageToken) nextPageToken = nextPageTokenDecoded @@ -7671,6 +7671,116 @@ extension GetRightsizingRecommendationOutputResponseBody: Swift.Decodable { } } +extension GetSavingsPlanPurchaseRecommendationDetailsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case recommendationDetailId = "RecommendationDetailId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let recommendationDetailId = self.recommendationDetailId { + try encodeContainer.encode(recommendationDetailId, forKey: .recommendationDetailId) + } + } +} + +extension GetSavingsPlanPurchaseRecommendationDetailsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct GetSavingsPlanPurchaseRecommendationDetailsInput: Swift.Equatable { + /// The ID that is associated with the Savings Plan recommendation. + /// This member is required. + public var recommendationDetailId: Swift.String? + + public init( + recommendationDetailId: Swift.String? = nil + ) + { + self.recommendationDetailId = recommendationDetailId + } +} + +struct GetSavingsPlanPurchaseRecommendationDetailsInputBody: Swift.Equatable { + let recommendationDetailId: Swift.String? +} + +extension GetSavingsPlanPurchaseRecommendationDetailsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case recommendationDetailId = "RecommendationDetailId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let recommendationDetailIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .recommendationDetailId) + recommendationDetailId = recommendationDetailIdDecoded + } +} + +public enum GetSavingsPlanPurchaseRecommendationDetailsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "DataUnavailableException": return try await DataUnavailableException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "LimitExceededException": return try await LimitExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetSavingsPlanPurchaseRecommendationDetailsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetSavingsPlanPurchaseRecommendationDetailsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.recommendationDetailData = output.recommendationDetailData + self.recommendationDetailId = output.recommendationDetailId + } else { + self.recommendationDetailData = nil + self.recommendationDetailId = nil + } + } +} + +public struct GetSavingsPlanPurchaseRecommendationDetailsOutputResponse: Swift.Equatable { + /// Contains detailed information about a specific Savings Plan recommendation. + public var recommendationDetailData: CostExplorerClientTypes.RecommendationDetailData? + /// The ID that is associated with the Savings Plan recommendation. + public var recommendationDetailId: Swift.String? + + public init( + recommendationDetailData: CostExplorerClientTypes.RecommendationDetailData? = nil, + recommendationDetailId: Swift.String? = nil + ) + { + self.recommendationDetailData = recommendationDetailData + self.recommendationDetailId = recommendationDetailId + } +} + +struct GetSavingsPlanPurchaseRecommendationDetailsOutputResponseBody: Swift.Equatable { + let recommendationDetailId: Swift.String? + let recommendationDetailData: CostExplorerClientTypes.RecommendationDetailData? +} + +extension GetSavingsPlanPurchaseRecommendationDetailsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case recommendationDetailData = "RecommendationDetailData" + case recommendationDetailId = "RecommendationDetailId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let recommendationDetailIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .recommendationDetailId) + recommendationDetailId = recommendationDetailIdDecoded + let recommendationDetailDataDecoded = try containerValues.decodeIfPresent(CostExplorerClientTypes.RecommendationDetailData.self, forKey: .recommendationDetailData) + recommendationDetailData = recommendationDetailDataDecoded + } +} + extension GetSavingsPlansCoverageInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case filter = "Filter" @@ -7954,7 +8064,7 @@ extension GetSavingsPlansPurchaseRecommendationInput: Swift.Encodable { if let nextPageToken = self.nextPageToken { try encodeContainer.encode(nextPageToken, forKey: .nextPageToken) } - if pageSize != 0 { + if let pageSize = self.pageSize { try encodeContainer.encode(pageSize, forKey: .pageSize) } if let paymentOption = self.paymentOption { @@ -7986,7 +8096,7 @@ public struct GetSavingsPlansPurchaseRecommendationInput: Swift.Equatable { /// The token to retrieve the next set of results. Amazon Web Services provides the token when the response from a previous call has more results than the maximum page size. public var nextPageToken: Swift.String? /// The number of recommendations that you want returned in a single response object. - public var pageSize: Swift.Int + public var pageSize: Swift.Int? /// The payment option that's used to generate these recommendations. /// This member is required. public var paymentOption: CostExplorerClientTypes.PaymentOption? @@ -8002,7 +8112,7 @@ public struct GetSavingsPlansPurchaseRecommendationInput: Swift.Equatable { filter: CostExplorerClientTypes.Expression? = nil, lookbackPeriodInDays: CostExplorerClientTypes.LookbackPeriodInDays? = nil, nextPageToken: Swift.String? = nil, - pageSize: Swift.Int = 0, + pageSize: Swift.Int? = nil, paymentOption: CostExplorerClientTypes.PaymentOption? = nil, savingsPlansType: CostExplorerClientTypes.SupportedSavingsPlansType? = nil, termInYears: CostExplorerClientTypes.TermInYears? = nil @@ -8025,7 +8135,7 @@ struct GetSavingsPlansPurchaseRecommendationInputBody: Swift.Equatable { let paymentOption: CostExplorerClientTypes.PaymentOption? let accountScope: CostExplorerClientTypes.AccountScope? let nextPageToken: Swift.String? - let pageSize: Swift.Int + let pageSize: Swift.Int? let lookbackPeriodInDays: CostExplorerClientTypes.LookbackPeriodInDays? let filter: CostExplorerClientTypes.Expression? } @@ -8054,7 +8164,7 @@ extension GetSavingsPlansPurchaseRecommendationInputBody: Swift.Decodable { accountScope = accountScopeDecoded let nextPageTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextPageToken) nextPageToken = nextPageTokenDecoded - let pageSizeDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .pageSize) ?? 0 + let pageSizeDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .pageSize) pageSize = pageSizeDecoded let lookbackPeriodInDaysDecoded = try containerValues.decodeIfPresent(CostExplorerClientTypes.LookbackPeriodInDays.self, forKey: .lookbackPeriodInDays) lookbackPeriodInDays = lookbackPeriodInDaysDecoded @@ -8579,7 +8689,7 @@ extension GetTagsInput: Swift.Encodable { if let filter = self.filter { try encodeContainer.encode(filter, forKey: .filter) } - if maxResults != 0 { + if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextPageToken = self.nextPageToken { @@ -8629,7 +8739,7 @@ public struct GetTagsInput: Swift.Equatable { /// /// * For example, you can filter for REGION==us-east-1 OR REGION==us-west-1. For GetRightsizingRecommendation, the Region is a full name (for example, REGION==US East (N. Virginia). /// - /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", “us-west-1” ] } } + /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "REGION", "Values": [ "us-east-1", "us-west-1" ] } } /// /// * As shown in the previous example, lists of dimension values are combined with OR when applying the filter. /// @@ -8638,7 +8748,7 @@ public struct GetTagsInput: Swift.Equatable { /// /// * You can also set different match options to further control how the filter behaves. Not all APIs support match options. Refer to the documentation for each specific API to see what is supported. /// - /// * For example, you can filter for linked account names that start with “a”. + /// * For example, you can filter for linked account names that start with "a". /// /// * The corresponding Expression for this example is as follows: { "Dimensions": { "Key": "LINKED_ACCOUNT_NAME", "MatchOptions": [ "STARTS_WITH" ], "Values": [ "a" ] } } /// @@ -8663,7 +8773,7 @@ public struct GetTagsInput: Swift.Equatable { /// For the GetRightsizingRecommendation action, a combination of OR and NOT isn't supported. OR isn't supported between different dimensions, or dimensions and tags. NOT operators aren't supported. Dimensions are also limited to LINKED_ACCOUNT, REGION, or RIGHTSIZING_TYPE. For the GetReservationPurchaseRecommendation action, only NOT is supported. AND and OR aren't supported. Dimensions are limited to LINKED_ACCOUNT. public var filter: CostExplorerClientTypes.Expression? /// This field is only used when SortBy is provided in the request. The maximum number of objects that are returned for this request. If MaxResults isn't specified with SortBy, the request returns 1000 results as the default value for this parameter. For GetTags, MaxResults has an upper quota of 1000. - public var maxResults: Swift.Int + public var maxResults: Swift.Int? /// The token to retrieve the next set of results. Amazon Web Services provides the token when the response from a previous call has more results than the maximum page size. public var nextPageToken: Swift.String? /// The value that you want to search for. @@ -8695,7 +8805,7 @@ public struct GetTagsInput: Swift.Equatable { public init( filter: CostExplorerClientTypes.Expression? = nil, - maxResults: Swift.Int = 0, + maxResults: Swift.Int? = nil, nextPageToken: Swift.String? = nil, searchString: Swift.String? = nil, sortBy: [CostExplorerClientTypes.SortDefinition]? = nil, @@ -8719,7 +8829,7 @@ struct GetTagsInputBody: Swift.Equatable { let tagKey: Swift.String? let filter: CostExplorerClientTypes.Expression? let sortBy: [CostExplorerClientTypes.SortDefinition]? - let maxResults: Swift.Int + let maxResults: Swift.Int? let nextPageToken: Swift.String? } @@ -8755,7 +8865,7 @@ extension GetTagsInputBody: Swift.Decodable { } } sortBy = sortByDecoded0 - let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) ?? 0 + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextPageTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextPageToken) nextPageToken = nextPageTokenDecoded @@ -9859,7 +9969,7 @@ extension ListSavingsPlansPurchaseRecommendationGenerationInput: Swift.Encodable if let nextPageToken = self.nextPageToken { try encodeContainer.encode(nextPageToken, forKey: .nextPageToken) } - if pageSize != 0 { + if let pageSize = self.pageSize { try encodeContainer.encode(pageSize, forKey: .pageSize) } if let recommendationIds = recommendationIds { @@ -9883,14 +9993,14 @@ public struct ListSavingsPlansPurchaseRecommendationGenerationInput: Swift.Equat /// The token to retrieve the next set of results. public var nextPageToken: Swift.String? /// The number of recommendations that you want returned in a single response object. - public var pageSize: Swift.Int + public var pageSize: Swift.Int? /// The IDs for each specific recommendation. public var recommendationIds: [Swift.String]? public init( generationStatus: CostExplorerClientTypes.GenerationStatus? = nil, nextPageToken: Swift.String? = nil, - pageSize: Swift.Int = 0, + pageSize: Swift.Int? = nil, recommendationIds: [Swift.String]? = nil ) { @@ -9904,7 +10014,7 @@ public struct ListSavingsPlansPurchaseRecommendationGenerationInput: Swift.Equat struct ListSavingsPlansPurchaseRecommendationGenerationInputBody: Swift.Equatable { let generationStatus: CostExplorerClientTypes.GenerationStatus? let recommendationIds: [Swift.String]? - let pageSize: Swift.Int + let pageSize: Swift.Int? let nextPageToken: Swift.String? } @@ -9931,7 +10041,7 @@ extension ListSavingsPlansPurchaseRecommendationGenerationInputBody: Swift.Decod } } recommendationIds = recommendationIdsDecoded0 - let pageSizeDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .pageSize) ?? 0 + let pageSizeDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .pageSize) pageSize = pageSizeDecoded let nextPageTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextPageToken) nextPageToken = nextPageTokenDecoded @@ -9943,6 +10053,7 @@ public enum ListSavingsPlansPurchaseRecommendationGenerationOutputError: ClientR let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "DataUnavailableException": return try await DataUnavailableException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InvalidNextTokenException": return try await InvalidNextTokenException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "LimitExceededException": return try await LimitExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -10857,6 +10968,408 @@ extension CostExplorerClientTypes { } +extension CostExplorerClientTypes.RecommendationDetailData: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case accountId = "AccountId" + case accountScope = "AccountScope" + case currencyCode = "CurrencyCode" + case currentAverageCoverage = "CurrentAverageCoverage" + case currentAverageHourlyOnDemandSpend = "CurrentAverageHourlyOnDemandSpend" + case currentMaximumHourlyOnDemandSpend = "CurrentMaximumHourlyOnDemandSpend" + case currentMinimumHourlyOnDemandSpend = "CurrentMinimumHourlyOnDemandSpend" + case estimatedAverageCoverage = "EstimatedAverageCoverage" + case estimatedAverageUtilization = "EstimatedAverageUtilization" + case estimatedMonthlySavingsAmount = "EstimatedMonthlySavingsAmount" + case estimatedOnDemandCost = "EstimatedOnDemandCost" + case estimatedOnDemandCostWithCurrentCommitment = "EstimatedOnDemandCostWithCurrentCommitment" + case estimatedROI = "EstimatedROI" + case estimatedSPCost = "EstimatedSPCost" + case estimatedSavingsAmount = "EstimatedSavingsAmount" + case estimatedSavingsPercentage = "EstimatedSavingsPercentage" + case existingHourlyCommitment = "ExistingHourlyCommitment" + case generationTimestamp = "GenerationTimestamp" + case hourlyCommitmentToPurchase = "HourlyCommitmentToPurchase" + case instanceFamily = "InstanceFamily" + case latestUsageTimestamp = "LatestUsageTimestamp" + case lookbackPeriodInDays = "LookbackPeriodInDays" + case metricsOverLookbackPeriod = "MetricsOverLookbackPeriod" + case offeringId = "OfferingId" + case paymentOption = "PaymentOption" + case region = "Region" + case savingsPlansType = "SavingsPlansType" + case termInYears = "TermInYears" + case upfrontCost = "UpfrontCost" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accountId = self.accountId { + try encodeContainer.encode(accountId, forKey: .accountId) + } + if let accountScope = self.accountScope { + try encodeContainer.encode(accountScope.rawValue, forKey: .accountScope) + } + if let currencyCode = self.currencyCode { + try encodeContainer.encode(currencyCode, forKey: .currencyCode) + } + if let currentAverageCoverage = self.currentAverageCoverage { + try encodeContainer.encode(currentAverageCoverage, forKey: .currentAverageCoverage) + } + if let currentAverageHourlyOnDemandSpend = self.currentAverageHourlyOnDemandSpend { + try encodeContainer.encode(currentAverageHourlyOnDemandSpend, forKey: .currentAverageHourlyOnDemandSpend) + } + if let currentMaximumHourlyOnDemandSpend = self.currentMaximumHourlyOnDemandSpend { + try encodeContainer.encode(currentMaximumHourlyOnDemandSpend, forKey: .currentMaximumHourlyOnDemandSpend) + } + if let currentMinimumHourlyOnDemandSpend = self.currentMinimumHourlyOnDemandSpend { + try encodeContainer.encode(currentMinimumHourlyOnDemandSpend, forKey: .currentMinimumHourlyOnDemandSpend) + } + if let estimatedAverageCoverage = self.estimatedAverageCoverage { + try encodeContainer.encode(estimatedAverageCoverage, forKey: .estimatedAverageCoverage) + } + if let estimatedAverageUtilization = self.estimatedAverageUtilization { + try encodeContainer.encode(estimatedAverageUtilization, forKey: .estimatedAverageUtilization) + } + if let estimatedMonthlySavingsAmount = self.estimatedMonthlySavingsAmount { + try encodeContainer.encode(estimatedMonthlySavingsAmount, forKey: .estimatedMonthlySavingsAmount) + } + if let estimatedOnDemandCost = self.estimatedOnDemandCost { + try encodeContainer.encode(estimatedOnDemandCost, forKey: .estimatedOnDemandCost) + } + if let estimatedOnDemandCostWithCurrentCommitment = self.estimatedOnDemandCostWithCurrentCommitment { + try encodeContainer.encode(estimatedOnDemandCostWithCurrentCommitment, forKey: .estimatedOnDemandCostWithCurrentCommitment) + } + if let estimatedROI = self.estimatedROI { + try encodeContainer.encode(estimatedROI, forKey: .estimatedROI) + } + if let estimatedSPCost = self.estimatedSPCost { + try encodeContainer.encode(estimatedSPCost, forKey: .estimatedSPCost) + } + if let estimatedSavingsAmount = self.estimatedSavingsAmount { + try encodeContainer.encode(estimatedSavingsAmount, forKey: .estimatedSavingsAmount) + } + if let estimatedSavingsPercentage = self.estimatedSavingsPercentage { + try encodeContainer.encode(estimatedSavingsPercentage, forKey: .estimatedSavingsPercentage) + } + if let existingHourlyCommitment = self.existingHourlyCommitment { + try encodeContainer.encode(existingHourlyCommitment, forKey: .existingHourlyCommitment) + } + if let generationTimestamp = self.generationTimestamp { + try encodeContainer.encode(generationTimestamp, forKey: .generationTimestamp) + } + if let hourlyCommitmentToPurchase = self.hourlyCommitmentToPurchase { + try encodeContainer.encode(hourlyCommitmentToPurchase, forKey: .hourlyCommitmentToPurchase) + } + if let instanceFamily = self.instanceFamily { + try encodeContainer.encode(instanceFamily, forKey: .instanceFamily) + } + if let latestUsageTimestamp = self.latestUsageTimestamp { + try encodeContainer.encode(latestUsageTimestamp, forKey: .latestUsageTimestamp) + } + if let lookbackPeriodInDays = self.lookbackPeriodInDays { + try encodeContainer.encode(lookbackPeriodInDays.rawValue, forKey: .lookbackPeriodInDays) + } + if let metricsOverLookbackPeriod = metricsOverLookbackPeriod { + var metricsOverLookbackPeriodContainer = encodeContainer.nestedUnkeyedContainer(forKey: .metricsOverLookbackPeriod) + for recommendationdetailhourlymetrics0 in metricsOverLookbackPeriod { + try metricsOverLookbackPeriodContainer.encode(recommendationdetailhourlymetrics0) + } + } + if let offeringId = self.offeringId { + try encodeContainer.encode(offeringId, forKey: .offeringId) + } + if let paymentOption = self.paymentOption { + try encodeContainer.encode(paymentOption.rawValue, forKey: .paymentOption) + } + if let region = self.region { + try encodeContainer.encode(region, forKey: .region) + } + if let savingsPlansType = self.savingsPlansType { + try encodeContainer.encode(savingsPlansType.rawValue, forKey: .savingsPlansType) + } + if let termInYears = self.termInYears { + try encodeContainer.encode(termInYears.rawValue, forKey: .termInYears) + } + if let upfrontCost = self.upfrontCost { + try encodeContainer.encode(upfrontCost, forKey: .upfrontCost) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let accountScopeDecoded = try containerValues.decodeIfPresent(CostExplorerClientTypes.AccountScope.self, forKey: .accountScope) + accountScope = accountScopeDecoded + let lookbackPeriodInDaysDecoded = try containerValues.decodeIfPresent(CostExplorerClientTypes.LookbackPeriodInDays.self, forKey: .lookbackPeriodInDays) + lookbackPeriodInDays = lookbackPeriodInDaysDecoded + let savingsPlansTypeDecoded = try containerValues.decodeIfPresent(CostExplorerClientTypes.SupportedSavingsPlansType.self, forKey: .savingsPlansType) + savingsPlansType = savingsPlansTypeDecoded + let termInYearsDecoded = try containerValues.decodeIfPresent(CostExplorerClientTypes.TermInYears.self, forKey: .termInYears) + termInYears = termInYearsDecoded + let paymentOptionDecoded = try containerValues.decodeIfPresent(CostExplorerClientTypes.PaymentOption.self, forKey: .paymentOption) + paymentOption = paymentOptionDecoded + let accountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .accountId) + accountId = accountIdDecoded + let currencyCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currencyCode) + currencyCode = currencyCodeDecoded + let instanceFamilyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .instanceFamily) + instanceFamily = instanceFamilyDecoded + let regionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .region) + region = regionDecoded + let offeringIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .offeringId) + offeringId = offeringIdDecoded + let generationTimestampDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .generationTimestamp) + generationTimestamp = generationTimestampDecoded + let latestUsageTimestampDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .latestUsageTimestamp) + latestUsageTimestamp = latestUsageTimestampDecoded + let currentAverageHourlyOnDemandSpendDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currentAverageHourlyOnDemandSpend) + currentAverageHourlyOnDemandSpend = currentAverageHourlyOnDemandSpendDecoded + let currentMaximumHourlyOnDemandSpendDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currentMaximumHourlyOnDemandSpend) + currentMaximumHourlyOnDemandSpend = currentMaximumHourlyOnDemandSpendDecoded + let currentMinimumHourlyOnDemandSpendDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currentMinimumHourlyOnDemandSpend) + currentMinimumHourlyOnDemandSpend = currentMinimumHourlyOnDemandSpendDecoded + let estimatedAverageUtilizationDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedAverageUtilization) + estimatedAverageUtilization = estimatedAverageUtilizationDecoded + let estimatedMonthlySavingsAmountDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedMonthlySavingsAmount) + estimatedMonthlySavingsAmount = estimatedMonthlySavingsAmountDecoded + let estimatedOnDemandCostDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedOnDemandCost) + estimatedOnDemandCost = estimatedOnDemandCostDecoded + let estimatedOnDemandCostWithCurrentCommitmentDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedOnDemandCostWithCurrentCommitment) + estimatedOnDemandCostWithCurrentCommitment = estimatedOnDemandCostWithCurrentCommitmentDecoded + let estimatedROIDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedROI) + estimatedROI = estimatedROIDecoded + let estimatedSPCostDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedSPCost) + estimatedSPCost = estimatedSPCostDecoded + let estimatedSavingsAmountDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedSavingsAmount) + estimatedSavingsAmount = estimatedSavingsAmountDecoded + let estimatedSavingsPercentageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedSavingsPercentage) + estimatedSavingsPercentage = estimatedSavingsPercentageDecoded + let existingHourlyCommitmentDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .existingHourlyCommitment) + existingHourlyCommitment = existingHourlyCommitmentDecoded + let hourlyCommitmentToPurchaseDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .hourlyCommitmentToPurchase) + hourlyCommitmentToPurchase = hourlyCommitmentToPurchaseDecoded + let upfrontCostDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .upfrontCost) + upfrontCost = upfrontCostDecoded + let currentAverageCoverageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currentAverageCoverage) + currentAverageCoverage = currentAverageCoverageDecoded + let estimatedAverageCoverageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedAverageCoverage) + estimatedAverageCoverage = estimatedAverageCoverageDecoded + let metricsOverLookbackPeriodContainer = try containerValues.decodeIfPresent([CostExplorerClientTypes.RecommendationDetailHourlyMetrics?].self, forKey: .metricsOverLookbackPeriod) + var metricsOverLookbackPeriodDecoded0:[CostExplorerClientTypes.RecommendationDetailHourlyMetrics]? = nil + if let metricsOverLookbackPeriodContainer = metricsOverLookbackPeriodContainer { + metricsOverLookbackPeriodDecoded0 = [CostExplorerClientTypes.RecommendationDetailHourlyMetrics]() + for structure0 in metricsOverLookbackPeriodContainer { + if let structure0 = structure0 { + metricsOverLookbackPeriodDecoded0?.append(structure0) + } + } + } + metricsOverLookbackPeriod = metricsOverLookbackPeriodDecoded0 + } +} + +extension CostExplorerClientTypes { + /// The details and metrics for the given recommendation. + public struct RecommendationDetailData: Swift.Equatable { + /// The AccountID that the recommendation is generated for. + public var accountId: Swift.String? + /// The account scope that you want your recommendations for. Amazon Web Services calculates recommendations including the management account and member accounts if the value is set to PAYER. If the value is LINKED, recommendations are calculated for individual member accounts only. + public var accountScope: CostExplorerClientTypes.AccountScope? + /// The currency code that Amazon Web Services used to generate the recommendation and present potential savings. + public var currencyCode: Swift.String? + /// The average value of hourly coverage over the lookback period. + public var currentAverageCoverage: Swift.String? + /// The average value of hourly On-Demand spend over the lookback period of the applicable usage type. + public var currentAverageHourlyOnDemandSpend: Swift.String? + /// The highest value of hourly On-Demand spend over the lookback period of the applicable usage type. + public var currentMaximumHourlyOnDemandSpend: Swift.String? + /// The lowest value of hourly On-Demand spend over the lookback period of the applicable usage type. + public var currentMinimumHourlyOnDemandSpend: Swift.String? + /// The estimated coverage of the recommended Savings Plan. + public var estimatedAverageCoverage: Swift.String? + /// The estimated utilization of the recommended Savings Plan. + public var estimatedAverageUtilization: Swift.String? + /// The estimated monthly savings amount based on the recommended Savings Plan. + public var estimatedMonthlySavingsAmount: Swift.String? + /// The remaining On-Demand cost estimated to not be covered by the recommended Savings Plan, over the length of the lookback period. + public var estimatedOnDemandCost: Swift.String? + /// The estimated On-Demand costs you expect with no additional commitment, based on your usage of the selected time period and the Savings Plan you own. + public var estimatedOnDemandCostWithCurrentCommitment: Swift.String? + /// The estimated return on investment that's based on the recommended Savings Plan that you purchased. This is calculated as estimatedSavingsAmount/estimatedSPCost*100. + public var estimatedROI: Swift.String? + /// The cost of the recommended Savings Plan over the length of the lookback period. + public var estimatedSPCost: Swift.String? + /// The estimated savings amount that's based on the recommended Savings Plan over the length of the lookback period. + public var estimatedSavingsAmount: Swift.String? + /// The estimated savings percentage relative to the total cost of applicable On-Demand usage over the lookback period. + public var estimatedSavingsPercentage: Swift.String? + /// The existing hourly commitment for the Savings Plan type. + public var existingHourlyCommitment: Swift.String? + /// The period of time that you want the usage and costs for. + public var generationTimestamp: Swift.String? + /// The recommended hourly commitment level for the Savings Plan type and the configuration that's based on the usage during the lookback period. + public var hourlyCommitmentToPurchase: Swift.String? + /// The instance family of the recommended Savings Plan. + public var instanceFamily: Swift.String? + /// The period of time that you want the usage and costs for. + public var latestUsageTimestamp: Swift.String? + /// How many days of previous usage that Amazon Web Services considers when making this recommendation. + public var lookbackPeriodInDays: CostExplorerClientTypes.LookbackPeriodInDays? + /// The related hourly cost, coverage, and utilization metrics over the lookback period. + public var metricsOverLookbackPeriod: [CostExplorerClientTypes.RecommendationDetailHourlyMetrics]? + /// The unique ID that's used to distinguish Savings Plans from one another. + public var offeringId: Swift.String? + /// The payment option for the commitment (for example, All Upfront or No Upfront). + public var paymentOption: CostExplorerClientTypes.PaymentOption? + /// The region the recommendation is generated for. + public var region: Swift.String? + /// The requested Savings Plan recommendation type. + public var savingsPlansType: CostExplorerClientTypes.SupportedSavingsPlansType? + /// The term of the commitment in years. + public var termInYears: CostExplorerClientTypes.TermInYears? + /// The upfront cost of the recommended Savings Plan, based on the selected payment option. + public var upfrontCost: Swift.String? + + public init( + accountId: Swift.String? = nil, + accountScope: CostExplorerClientTypes.AccountScope? = nil, + currencyCode: Swift.String? = nil, + currentAverageCoverage: Swift.String? = nil, + currentAverageHourlyOnDemandSpend: Swift.String? = nil, + currentMaximumHourlyOnDemandSpend: Swift.String? = nil, + currentMinimumHourlyOnDemandSpend: Swift.String? = nil, + estimatedAverageCoverage: Swift.String? = nil, + estimatedAverageUtilization: Swift.String? = nil, + estimatedMonthlySavingsAmount: Swift.String? = nil, + estimatedOnDemandCost: Swift.String? = nil, + estimatedOnDemandCostWithCurrentCommitment: Swift.String? = nil, + estimatedROI: Swift.String? = nil, + estimatedSPCost: Swift.String? = nil, + estimatedSavingsAmount: Swift.String? = nil, + estimatedSavingsPercentage: Swift.String? = nil, + existingHourlyCommitment: Swift.String? = nil, + generationTimestamp: Swift.String? = nil, + hourlyCommitmentToPurchase: Swift.String? = nil, + instanceFamily: Swift.String? = nil, + latestUsageTimestamp: Swift.String? = nil, + lookbackPeriodInDays: CostExplorerClientTypes.LookbackPeriodInDays? = nil, + metricsOverLookbackPeriod: [CostExplorerClientTypes.RecommendationDetailHourlyMetrics]? = nil, + offeringId: Swift.String? = nil, + paymentOption: CostExplorerClientTypes.PaymentOption? = nil, + region: Swift.String? = nil, + savingsPlansType: CostExplorerClientTypes.SupportedSavingsPlansType? = nil, + termInYears: CostExplorerClientTypes.TermInYears? = nil, + upfrontCost: Swift.String? = nil + ) + { + self.accountId = accountId + self.accountScope = accountScope + self.currencyCode = currencyCode + self.currentAverageCoverage = currentAverageCoverage + self.currentAverageHourlyOnDemandSpend = currentAverageHourlyOnDemandSpend + self.currentMaximumHourlyOnDemandSpend = currentMaximumHourlyOnDemandSpend + self.currentMinimumHourlyOnDemandSpend = currentMinimumHourlyOnDemandSpend + self.estimatedAverageCoverage = estimatedAverageCoverage + self.estimatedAverageUtilization = estimatedAverageUtilization + self.estimatedMonthlySavingsAmount = estimatedMonthlySavingsAmount + self.estimatedOnDemandCost = estimatedOnDemandCost + self.estimatedOnDemandCostWithCurrentCommitment = estimatedOnDemandCostWithCurrentCommitment + self.estimatedROI = estimatedROI + self.estimatedSPCost = estimatedSPCost + self.estimatedSavingsAmount = estimatedSavingsAmount + self.estimatedSavingsPercentage = estimatedSavingsPercentage + self.existingHourlyCommitment = existingHourlyCommitment + self.generationTimestamp = generationTimestamp + self.hourlyCommitmentToPurchase = hourlyCommitmentToPurchase + self.instanceFamily = instanceFamily + self.latestUsageTimestamp = latestUsageTimestamp + self.lookbackPeriodInDays = lookbackPeriodInDays + self.metricsOverLookbackPeriod = metricsOverLookbackPeriod + self.offeringId = offeringId + self.paymentOption = paymentOption + self.region = region + self.savingsPlansType = savingsPlansType + self.termInYears = termInYears + self.upfrontCost = upfrontCost + } + } + +} + +extension CostExplorerClientTypes.RecommendationDetailHourlyMetrics: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case currentCoverage = "CurrentCoverage" + case estimatedCoverage = "EstimatedCoverage" + case estimatedNewCommitmentUtilization = "EstimatedNewCommitmentUtilization" + case estimatedOnDemandCost = "EstimatedOnDemandCost" + case startTime = "StartTime" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let currentCoverage = self.currentCoverage { + try encodeContainer.encode(currentCoverage, forKey: .currentCoverage) + } + if let estimatedCoverage = self.estimatedCoverage { + try encodeContainer.encode(estimatedCoverage, forKey: .estimatedCoverage) + } + if let estimatedNewCommitmentUtilization = self.estimatedNewCommitmentUtilization { + try encodeContainer.encode(estimatedNewCommitmentUtilization, forKey: .estimatedNewCommitmentUtilization) + } + if let estimatedOnDemandCost = self.estimatedOnDemandCost { + try encodeContainer.encode(estimatedOnDemandCost, forKey: .estimatedOnDemandCost) + } + if let startTime = self.startTime { + try encodeContainer.encode(startTime, forKey: .startTime) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let startTimeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .startTime) + startTime = startTimeDecoded + let estimatedOnDemandCostDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedOnDemandCost) + estimatedOnDemandCost = estimatedOnDemandCostDecoded + let currentCoverageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currentCoverage) + currentCoverage = currentCoverageDecoded + let estimatedCoverageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedCoverage) + estimatedCoverage = estimatedCoverageDecoded + let estimatedNewCommitmentUtilizationDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .estimatedNewCommitmentUtilization) + estimatedNewCommitmentUtilization = estimatedNewCommitmentUtilizationDecoded + } +} + +extension CostExplorerClientTypes { + /// Contains the hourly metrics for the given recommendation over the lookback period. + public struct RecommendationDetailHourlyMetrics: Swift.Equatable { + /// The current amount of Savings Plans eligible usage that the Savings Plan covered. + public var currentCoverage: Swift.String? + /// The estimated coverage amount based on the recommended Savings Plan. + public var estimatedCoverage: Swift.String? + /// The estimated utilization for the recommended Savings Plan. + public var estimatedNewCommitmentUtilization: Swift.String? + /// The remaining On-Demand cost estimated to not be covered by the recommended Savings Plan, over the length of the lookback period. + public var estimatedOnDemandCost: Swift.String? + /// The period of time that you want the usage and costs for. + public var startTime: Swift.String? + + public init( + currentCoverage: Swift.String? = nil, + estimatedCoverage: Swift.String? = nil, + estimatedNewCommitmentUtilization: Swift.String? = nil, + estimatedOnDemandCost: Swift.String? = nil, + startTime: Swift.String? = nil + ) + { + self.currentCoverage = currentCoverage + self.estimatedCoverage = estimatedCoverage + self.estimatedNewCommitmentUtilization = estimatedNewCommitmentUtilization + self.estimatedOnDemandCost = estimatedOnDemandCost + self.startTime = startTime + } + } + +} + extension CostExplorerClientTypes { public enum RecommendationTarget: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case crossInstanceFamily @@ -12824,6 +13337,7 @@ extension CostExplorerClientTypes.SavingsPlansPurchaseRecommendationDetail: Swif case estimatedSavingsAmount = "EstimatedSavingsAmount" case estimatedSavingsPercentage = "EstimatedSavingsPercentage" case hourlyCommitmentToPurchase = "HourlyCommitmentToPurchase" + case recommendationDetailId = "RecommendationDetailId" case savingsPlansDetails = "SavingsPlansDetails" case upfrontCost = "UpfrontCost" } @@ -12872,6 +13386,9 @@ extension CostExplorerClientTypes.SavingsPlansPurchaseRecommendationDetail: Swif if let hourlyCommitmentToPurchase = self.hourlyCommitmentToPurchase { try encodeContainer.encode(hourlyCommitmentToPurchase, forKey: .hourlyCommitmentToPurchase) } + if let recommendationDetailId = self.recommendationDetailId { + try encodeContainer.encode(recommendationDetailId, forKey: .recommendationDetailId) + } if let savingsPlansDetails = self.savingsPlansDetails { try encodeContainer.encode(savingsPlansDetails, forKey: .savingsPlansDetails) } @@ -12914,6 +13431,8 @@ extension CostExplorerClientTypes.SavingsPlansPurchaseRecommendationDetail: Swif currentMaximumHourlyOnDemandSpend = currentMaximumHourlyOnDemandSpendDecoded let currentAverageHourlyOnDemandSpendDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currentAverageHourlyOnDemandSpend) currentAverageHourlyOnDemandSpend = currentAverageHourlyOnDemandSpendDecoded + let recommendationDetailIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .recommendationDetailId) + recommendationDetailId = recommendationDetailIdDecoded } } @@ -12948,6 +13467,8 @@ extension CostExplorerClientTypes { public var estimatedSavingsPercentage: Swift.String? /// The recommended hourly commitment level for the Savings Plans type and the configuration that's based on the usage during the lookback period. public var hourlyCommitmentToPurchase: Swift.String? + /// Contains detailed information about a specific Savings Plan recommendation. + public var recommendationDetailId: Swift.String? /// Details for your recommended Savings Plans. public var savingsPlansDetails: CostExplorerClientTypes.SavingsPlansDetails? /// The upfront cost of the recommended Savings Plans, based on the selected payment option. @@ -12968,6 +13489,7 @@ extension CostExplorerClientTypes { estimatedSavingsAmount: Swift.String? = nil, estimatedSavingsPercentage: Swift.String? = nil, hourlyCommitmentToPurchase: Swift.String? = nil, + recommendationDetailId: Swift.String? = nil, savingsPlansDetails: CostExplorerClientTypes.SavingsPlansDetails? = nil, upfrontCost: Swift.String? = nil ) @@ -12986,6 +13508,7 @@ extension CostExplorerClientTypes { self.estimatedSavingsAmount = estimatedSavingsAmount self.estimatedSavingsPercentage = estimatedSavingsPercentage self.hourlyCommitmentToPurchase = hourlyCommitmentToPurchase + self.recommendationDetailId = recommendationDetailId self.savingsPlansDetails = savingsPlansDetails self.upfrontCost = upfrontCost } @@ -13704,6 +14227,7 @@ public enum StartSavingsPlansPurchaseRecommendationGenerationOutputError: Client let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "DataUnavailableException": return try await DataUnavailableException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "GenerationExistsException": return try await GenerationExistsException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "LimitExceededException": return try await LimitExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -14854,10 +15378,10 @@ public struct UpdateAnomalySubscriptionInput: Swift.Equatable { public var subscriptionArn: Swift.String? /// The new name of the subscription. public var subscriptionName: Swift.String? - /// (deprecated) The update to the threshold value for receiving notifications. This field has been deprecated. To update a threshold, use ThresholdExpression. Continued use of Threshold will be treated as shorthand syntax for a ThresholdExpression. + /// (deprecated) The update to the threshold value for receiving notifications. This field has been deprecated. To update a threshold, use ThresholdExpression. Continued use of Threshold will be treated as shorthand syntax for a ThresholdExpression. You can specify either Threshold or ThresholdExpression, but not both. @available(*, deprecated, message: "Threshold has been deprecated in favor of ThresholdExpression") public var threshold: Swift.Double? - /// The update to the [Expression](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html) object used to specify the anomalies that you want to generate alerts for. This supports dimensions and nested expressions. The supported dimensions are ANOMALY_TOTAL_IMPACT_ABSOLUTE and ANOMALY_TOTAL_IMPACT_PERCENTAGE. The supported nested expression types are AND and OR. The match option GREATER_THAN_OR_EQUAL is required. Values must be numbers between 0 and 10,000,000,000. The following are examples of valid ThresholdExpressions: + /// The update to the [Expression](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Expression.html) object used to specify the anomalies that you want to generate alerts for. This supports dimensions and nested expressions. The supported dimensions are ANOMALY_TOTAL_IMPACT_ABSOLUTE and ANOMALY_TOTAL_IMPACT_PERCENTAGE, corresponding to an anomaly’s TotalImpact and TotalImpactPercentage, respectively (see [Impact](https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_Impact.html) for more details). The supported nested expression types are AND and OR. The match option GREATER_THAN_OR_EQUAL is required. Values must be numbers between 0 and 10,000,000,000 in string format. You can specify either Threshold or ThresholdExpression, but not both. The following are examples of valid ThresholdExpressions: /// /// * Absolute threshold: { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE", "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ "100" ] } } /// diff --git a/Sources/Services/AWSCustomerProfiles/CustomerProfilesClient.swift b/Sources/Services/AWSCustomerProfiles/CustomerProfilesClient.swift index deb0ebd6830..74ae3ef3bef 100644 --- a/Sources/Services/AWSCustomerProfiles/CustomerProfilesClient.swift +++ b/Sources/Services/AWSCustomerProfiles/CustomerProfilesClient.swift @@ -948,6 +948,43 @@ extension CustomerProfilesClient: CustomerProfilesClientProtocol { return result } + /// Returns a set of profiles that belong to the same matching group using the matchId or profileId. You can also specify the type of matching that you want for finding similar profiles using either RULE_BASED_MATCHING or ML_BASED_MATCHING. + public func getSimilarProfiles(input: GetSimilarProfilesInput) async throws -> GetSimilarProfilesOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getSimilarProfiles") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "profile") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getSimilarProfiles") + 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.serviceSpecific.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.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "GetSimilarProfilesRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Get details of specified workflow. public func getWorkflow(input: GetWorkflowInput) async throws -> GetWorkflowOutputResponse { @@ -1361,6 +1398,40 @@ extension CustomerProfilesClient: CustomerProfilesClientProtocol { return result } + /// Returns a set of MatchIds that belong to the given domain. + public func listRuleBasedMatches(input: ListRuleBasedMatchesInput) async throws -> ListRuleBasedMatchesOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listRuleBasedMatches") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "profile") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listRuleBasedMatches") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Displays the tags associated with an Amazon Connect Customer Profiles resource. In Connect Customer Profiles, domains, profile object types, and integrations can be tagged. public func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse { diff --git a/Sources/Services/AWSCustomerProfiles/CustomerProfilesClientProtocol.swift b/Sources/Services/AWSCustomerProfiles/CustomerProfilesClientProtocol.swift index 3bbb460b3a5..28a783d0ac5 100644 --- a/Sources/Services/AWSCustomerProfiles/CustomerProfilesClientProtocol.swift +++ b/Sources/Services/AWSCustomerProfiles/CustomerProfilesClientProtocol.swift @@ -73,6 +73,8 @@ public protocol CustomerProfilesClientProtocol { func getProfileObjectType(input: GetProfileObjectTypeInput) async throws -> GetProfileObjectTypeOutputResponse /// Returns the template information for a specific object type. A template is a predefined ProfileObjectType, such as “Salesforce-Account” or “Salesforce-Contact.” When a user sends a ProfileObject, using the PutProfileObject API, with an ObjectTypeName that matches one of the TemplateIds, it uses the mappings from the template. func getProfileObjectTypeTemplate(input: GetProfileObjectTypeTemplateInput) async throws -> GetProfileObjectTypeTemplateOutputResponse + /// Returns a set of profiles that belong to the same matching group using the matchId or profileId. You can also specify the type of matching that you want for finding similar profiles using either RULE_BASED_MATCHING or ML_BASED_MATCHING. + func getSimilarProfiles(input: GetSimilarProfilesInput) async throws -> GetSimilarProfilesOutputResponse /// Get details of specified workflow. func getWorkflow(input: GetWorkflowInput) async throws -> GetWorkflowOutputResponse /// Get granular list of steps in workflow. @@ -97,6 +99,8 @@ public protocol CustomerProfilesClientProtocol { func listProfileObjectTypes(input: ListProfileObjectTypesInput) async throws -> ListProfileObjectTypesOutputResponse /// Lists all of the template information for object types. func listProfileObjectTypeTemplates(input: ListProfileObjectTypeTemplatesInput) async throws -> ListProfileObjectTypeTemplatesOutputResponse + /// Returns a set of MatchIds that belong to the given domain. + func listRuleBasedMatches(input: ListRuleBasedMatchesInput) async throws -> ListRuleBasedMatchesOutputResponse /// Displays the tags associated with an Amazon Connect Customer Profiles resource. In Connect Customer Profiles, domains, profile object types, and integrations can be tagged. func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse /// Query to list all workflows. diff --git a/Sources/Services/AWSCustomerProfiles/models/Models.swift b/Sources/Services/AWSCustomerProfiles/models/Models.swift index 644facded1f..99f61b6e2f8 100644 --- a/Sources/Services/AWSCustomerProfiles/models/Models.swift +++ b/Sources/Services/AWSCustomerProfiles/models/Models.swift @@ -790,6 +790,164 @@ extension CustomerProfilesClientTypes { } +extension CustomerProfilesClientTypes { + public enum AttributeMatchingModel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case manyToMany + case oneToOne + case sdkUnknown(Swift.String) + + public static var allCases: [AttributeMatchingModel] { + return [ + .manyToMany, + .oneToOne, + .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 .manyToMany: return "MANY_TO_MANY" + case .oneToOne: return "ONE_TO_ONE" + 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 = AttributeMatchingModel(rawValue: rawValue) ?? AttributeMatchingModel.sdkUnknown(rawValue) + } + } +} + +extension CustomerProfilesClientTypes.AttributeTypesSelector: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case address = "Address" + case attributeMatchingModel = "AttributeMatchingModel" + case emailAddress = "EmailAddress" + case phoneNumber = "PhoneNumber" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let address = address { + var addressContainer = encodeContainer.nestedUnkeyedContainer(forKey: .address) + for string1to2550 in address { + try addressContainer.encode(string1to2550) + } + } + if let attributeMatchingModel = self.attributeMatchingModel { + try encodeContainer.encode(attributeMatchingModel.rawValue, forKey: .attributeMatchingModel) + } + if let emailAddress = emailAddress { + var emailAddressContainer = encodeContainer.nestedUnkeyedContainer(forKey: .emailAddress) + for string1to2550 in emailAddress { + try emailAddressContainer.encode(string1to2550) + } + } + if let phoneNumber = phoneNumber { + var phoneNumberContainer = encodeContainer.nestedUnkeyedContainer(forKey: .phoneNumber) + for string1to2550 in phoneNumber { + try phoneNumberContainer.encode(string1to2550) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let attributeMatchingModelDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.AttributeMatchingModel.self, forKey: .attributeMatchingModel) + attributeMatchingModel = attributeMatchingModelDecoded + let addressContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .address) + var addressDecoded0:[Swift.String]? = nil + if let addressContainer = addressContainer { + addressDecoded0 = [Swift.String]() + for string0 in addressContainer { + if let string0 = string0 { + addressDecoded0?.append(string0) + } + } + } + address = addressDecoded0 + let phoneNumberContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .phoneNumber) + var phoneNumberDecoded0:[Swift.String]? = nil + if let phoneNumberContainer = phoneNumberContainer { + phoneNumberDecoded0 = [Swift.String]() + for string0 in phoneNumberContainer { + if let string0 = string0 { + phoneNumberDecoded0?.append(string0) + } + } + } + phoneNumber = phoneNumberDecoded0 + let emailAddressContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .emailAddress) + var emailAddressDecoded0:[Swift.String]? = nil + if let emailAddressContainer = emailAddressContainer { + emailAddressDecoded0 = [Swift.String]() + for string0 in emailAddressContainer { + if let string0 = string0 { + emailAddressDecoded0?.append(string0) + } + } + } + emailAddress = emailAddressDecoded0 + } +} + +extension CustomerProfilesClientTypes { + /// Configuration information about the AttributeTypesSelector where the rule-based identity resolution uses to match profiles. You can choose how profiles are compared across attribute types and which attribute to use for matching from each type. There are three attribute types you can configure: + /// + /// * Email type + /// + /// * You can choose from Email, BusinessEmail, and PersonalEmail + /// + /// + /// + /// + /// * Phone number type + /// + /// * You can choose from Phone, HomePhone, and MobilePhone + /// + /// + /// + /// + /// * Address type + /// + /// * You can choose from Address, BusinessAddress, MaillingAddress, and ShippingAddress + /// + /// + /// + /// + /// + /// You can either choose ONE_TO_ONE or MANY_TO_MANY as the AttributeMatchingModel. When choosing MANY_TO_MANY, the system can match attribute across the sub-types of an attribute type. For example, if the value of the Email field of Profile A and the value of BusinessEmail field of Profile B matches, the two profiles are matched on the Email type. When choosing ONE_TO_ONE the system can only match if the sub-types are exact matches. For example, only when the value of the Email field of Profile A and the value of the Email field of Profile B matches, the two profiles are matched on the Email type. + public struct AttributeTypesSelector: Swift.Equatable { + /// The Address type. You can choose from Address, BusinessAddress, MaillingAddress, and ShippingAddress. You only can use the Address type in the MatchingRule. For example, if you want to match profile based on BusinessAddress.City or MaillingAddress.City, you need to choose the BusinessAddress and the MaillingAddress to represent the Address type and specify the Address.City on the matching rule. + public var address: [Swift.String]? + /// Configures the AttributeMatchingModel, you can either choose ONE_TO_ONE or MANY_TO_MANY. + /// This member is required. + public var attributeMatchingModel: CustomerProfilesClientTypes.AttributeMatchingModel? + /// The Email type. You can choose from EmailAddress, BusinessEmailAddress and PersonalEmailAddress. You only can use the EmailAddress type in the MatchingRule. For example, if you want to match profile based on PersonalEmailAddress or BusinessEmailAddress, you need to choose the PersonalEmailAddress and the BusinessEmailAddress to represent the EmailAddress type and only specify the EmailAddress on the matching rule. + public var emailAddress: [Swift.String]? + /// The PhoneNumber type. You can choose from PhoneNumber, HomePhoneNumber, and MobilePhoneNumber. You only can use the PhoneNumber type in the MatchingRule. For example, if you want to match a profile based on Phone or HomePhone, you need to choose the Phone and the HomePhone to represent the PhoneNumber type and only specify the PhoneNumber on the matching rule. + public var phoneNumber: [Swift.String]? + + public init( + address: [Swift.String]? = nil, + attributeMatchingModel: CustomerProfilesClientTypes.AttributeMatchingModel? = nil, + emailAddress: [Swift.String]? = nil, + phoneNumber: [Swift.String]? = nil + ) + { + self.address = address + self.attributeMatchingModel = attributeMatchingModel + self.emailAddress = emailAddress + self.phoneNumber = phoneNumber + } + } + +} + extension CustomerProfilesClientTypes.AutoMerging: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case conflictResolution = "ConflictResolution" @@ -1517,6 +1675,7 @@ extension CreateDomainInput: Swift.Encodable { case defaultEncryptionKey = "DefaultEncryptionKey" case defaultExpirationDays = "DefaultExpirationDays" case matching = "Matching" + case ruleBasedMatching = "RuleBasedMatching" case tags = "Tags" } @@ -1534,6 +1693,9 @@ extension CreateDomainInput: Swift.Encodable { if let matching = self.matching { try encodeContainer.encode(matching, forKey: .matching) } + if let ruleBasedMatching = self.ruleBasedMatching { + try encodeContainer.encode(ruleBasedMatching, forKey: .ruleBasedMatching) + } if let tags = tags { var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) for (dictKey0, tagMap0) in tags { @@ -1565,6 +1727,8 @@ public struct CreateDomainInput: Swift.Equatable { public var domainName: Swift.String? /// The process of matching duplicate profiles. If Matching = true, Amazon Connect Customer Profiles starts a weekly batch process called Identity Resolution Job. If you do not specify a date and time for Identity Resolution Job to run, by default it runs every Saturday at 12AM UTC to detect duplicate profiles in your domains. After the Identity Resolution Job completes, use the [GetMatches](https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html) API to return and review the results. Or, if you have configured ExportingConfig in the MatchingRequest, you can download the results from S3. public var matching: CustomerProfilesClientTypes.MatchingRequest? + /// The process of matching duplicate profiles using the Rule-Based matching. If RuleBasedMatching = true, Amazon Connect Customer Profiles will start to match and merge your profiles according to your configuration in the RuleBasedMatchingRequest. You can use the ListRuleBasedMatches and GetSimilarProfiles API to return and review the results. Also, if you have configured ExportingConfig in the RuleBasedMatchingRequest, you can download the results from S3. + public var ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingRequest? /// The tags used to organize, track, or control access for this resource. public var tags: [Swift.String:Swift.String]? @@ -1574,6 +1738,7 @@ public struct CreateDomainInput: Swift.Equatable { defaultExpirationDays: Swift.Int? = nil, domainName: Swift.String? = nil, matching: CustomerProfilesClientTypes.MatchingRequest? = nil, + ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingRequest? = nil, tags: [Swift.String:Swift.String]? = nil ) { @@ -1582,6 +1747,7 @@ public struct CreateDomainInput: Swift.Equatable { self.defaultExpirationDays = defaultExpirationDays self.domainName = domainName self.matching = matching + self.ruleBasedMatching = ruleBasedMatching self.tags = tags } } @@ -1591,6 +1757,7 @@ struct CreateDomainInputBody: Swift.Equatable { let defaultEncryptionKey: Swift.String? let deadLetterQueueUrl: Swift.String? let matching: CustomerProfilesClientTypes.MatchingRequest? + let ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingRequest? let tags: [Swift.String:Swift.String]? } @@ -1600,6 +1767,7 @@ extension CreateDomainInputBody: Swift.Decodable { case defaultEncryptionKey = "DefaultEncryptionKey" case defaultExpirationDays = "DefaultExpirationDays" case matching = "Matching" + case ruleBasedMatching = "RuleBasedMatching" case tags = "Tags" } @@ -1613,6 +1781,8 @@ extension CreateDomainInputBody: Swift.Decodable { deadLetterQueueUrl = deadLetterQueueUrlDecoded let matchingDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.MatchingRequest.self, forKey: .matching) matching = matchingDecoded + let ruleBasedMatchingDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.RuleBasedMatchingRequest.self, forKey: .ruleBasedMatching) + ruleBasedMatching = ruleBasedMatchingDecoded let tagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .tags) var tagsDecoded0: [Swift.String:Swift.String]? = nil if let tagsContainer = tagsContainer { @@ -1654,6 +1824,7 @@ extension CreateDomainOutputResponse: ClientRuntime.HttpResponseBinding { self.domainName = output.domainName self.lastUpdatedAt = output.lastUpdatedAt self.matching = output.matching + self.ruleBasedMatching = output.ruleBasedMatching self.tags = output.tags } else { self.createdAt = nil @@ -1663,6 +1834,7 @@ extension CreateDomainOutputResponse: ClientRuntime.HttpResponseBinding { self.domainName = nil self.lastUpdatedAt = nil self.matching = nil + self.ruleBasedMatching = nil self.tags = nil } } @@ -1687,6 +1859,8 @@ public struct CreateDomainOutputResponse: Swift.Equatable { public var lastUpdatedAt: ClientRuntime.Date? /// The process of matching duplicate profiles. If Matching = true, Amazon Connect Customer Profiles starts a weekly batch process called Identity Resolution Job. If you do not specify a date and time for Identity Resolution Job to run, by default it runs every Saturday at 12AM UTC to detect duplicate profiles in your domains. After the Identity Resolution Job completes, use the [GetMatches](https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html) API to return and review the results. Or, if you have configured ExportingConfig in the MatchingRequest, you can download the results from S3. public var matching: CustomerProfilesClientTypes.MatchingResponse? + /// The process of matching duplicate profiles using the Rule-Based matching. If RuleBasedMatching = true, Amazon Connect Customer Profiles will start to match and merge your profiles according to your configuration in the RuleBasedMatchingRequest. You can use the ListRuleBasedMatches and GetSimilarProfiles API to return and review the results. Also, if you have configured ExportingConfig in the RuleBasedMatchingRequest, you can download the results from S3. + public var ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingResponse? /// The tags used to organize, track, or control access for this resource. public var tags: [Swift.String:Swift.String]? @@ -1698,6 +1872,7 @@ public struct CreateDomainOutputResponse: Swift.Equatable { domainName: Swift.String? = nil, lastUpdatedAt: ClientRuntime.Date? = nil, matching: CustomerProfilesClientTypes.MatchingResponse? = nil, + ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingResponse? = nil, tags: [Swift.String:Swift.String]? = nil ) { @@ -1708,6 +1883,7 @@ public struct CreateDomainOutputResponse: Swift.Equatable { self.domainName = domainName self.lastUpdatedAt = lastUpdatedAt self.matching = matching + self.ruleBasedMatching = ruleBasedMatching self.tags = tags } } @@ -1718,6 +1894,7 @@ struct CreateDomainOutputResponseBody: Swift.Equatable { let defaultEncryptionKey: Swift.String? let deadLetterQueueUrl: Swift.String? let matching: CustomerProfilesClientTypes.MatchingResponse? + let ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingResponse? let createdAt: ClientRuntime.Date? let lastUpdatedAt: ClientRuntime.Date? let tags: [Swift.String:Swift.String]? @@ -1732,6 +1909,7 @@ extension CreateDomainOutputResponseBody: Swift.Decodable { case domainName = "DomainName" case lastUpdatedAt = "LastUpdatedAt" case matching = "Matching" + case ruleBasedMatching = "RuleBasedMatching" case tags = "Tags" } @@ -1747,6 +1925,8 @@ extension CreateDomainOutputResponseBody: Swift.Decodable { deadLetterQueueUrl = deadLetterQueueUrlDecoded let matchingDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.MatchingResponse.self, forKey: .matching) matching = matchingDecoded + let ruleBasedMatchingDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.RuleBasedMatchingResponse.self, forKey: .ruleBasedMatching) + ruleBasedMatching = ruleBasedMatchingDecoded let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) createdAt = createdAtDecoded let lastUpdatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedAt) @@ -4875,6 +5055,7 @@ extension GetDomainOutputResponse: ClientRuntime.HttpResponseBinding { self.domainName = output.domainName self.lastUpdatedAt = output.lastUpdatedAt self.matching = output.matching + self.ruleBasedMatching = output.ruleBasedMatching self.stats = output.stats self.tags = output.tags } else { @@ -4885,6 +5066,7 @@ extension GetDomainOutputResponse: ClientRuntime.HttpResponseBinding { self.domainName = nil self.lastUpdatedAt = nil self.matching = nil + self.ruleBasedMatching = nil self.stats = nil self.tags = nil } @@ -4909,6 +5091,8 @@ public struct GetDomainOutputResponse: Swift.Equatable { public var lastUpdatedAt: ClientRuntime.Date? /// The process of matching duplicate profiles. If Matching = true, Amazon Connect Customer Profiles starts a weekly batch process called Identity Resolution Job. If you do not specify a date and time for Identity Resolution Job to run, by default it runs every Saturday at 12AM UTC to detect duplicate profiles in your domains. After the Identity Resolution Job completes, use the [GetMatches](https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html) API to return and review the results. Or, if you have configured ExportingConfig in the MatchingRequest, you can download the results from S3. public var matching: CustomerProfilesClientTypes.MatchingResponse? + /// The process of matching duplicate profiles using the Rule-Based matching. If RuleBasedMatching = true, Amazon Connect Customer Profiles will start to match and merge your profiles according to your configuration in the RuleBasedMatchingRequest. You can use the ListRuleBasedMatches and GetSimilarProfiles API to return and review the results. Also, if you have configured ExportingConfig in the RuleBasedMatchingRequest, you can download the results from S3. + public var ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingResponse? /// Usage-specific statistics about the domain. public var stats: CustomerProfilesClientTypes.DomainStats? /// The tags used to organize, track, or control access for this resource. @@ -4922,6 +5106,7 @@ public struct GetDomainOutputResponse: Swift.Equatable { domainName: Swift.String? = nil, lastUpdatedAt: ClientRuntime.Date? = nil, matching: CustomerProfilesClientTypes.MatchingResponse? = nil, + ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingResponse? = nil, stats: CustomerProfilesClientTypes.DomainStats? = nil, tags: [Swift.String:Swift.String]? = nil ) @@ -4933,6 +5118,7 @@ public struct GetDomainOutputResponse: Swift.Equatable { self.domainName = domainName self.lastUpdatedAt = lastUpdatedAt self.matching = matching + self.ruleBasedMatching = ruleBasedMatching self.stats = stats self.tags = tags } @@ -4945,6 +5131,7 @@ struct GetDomainOutputResponseBody: Swift.Equatable { let deadLetterQueueUrl: Swift.String? let stats: CustomerProfilesClientTypes.DomainStats? let matching: CustomerProfilesClientTypes.MatchingResponse? + let ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingResponse? let createdAt: ClientRuntime.Date? let lastUpdatedAt: ClientRuntime.Date? let tags: [Swift.String:Swift.String]? @@ -4959,6 +5146,7 @@ extension GetDomainOutputResponseBody: Swift.Decodable { case domainName = "DomainName" case lastUpdatedAt = "LastUpdatedAt" case matching = "Matching" + case ruleBasedMatching = "RuleBasedMatching" case stats = "Stats" case tags = "Tags" } @@ -4977,6 +5165,8 @@ extension GetDomainOutputResponseBody: Swift.Decodable { stats = statsDecoded let matchingDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.MatchingResponse.self, forKey: .matching) matching = matchingDecoded + let ruleBasedMatchingDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.RuleBasedMatchingResponse.self, forKey: .ruleBasedMatching) + ruleBasedMatching = ruleBasedMatchingDecoded let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) createdAt = createdAtDecoded let lastUpdatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedAt) @@ -6145,6 +6335,227 @@ extension GetProfileObjectTypeTemplateOutputResponseBody: Swift.Decodable { } } +extension GetSimilarProfilesInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case matchType = "MatchType" + case searchKey = "SearchKey" + case searchValue = "SearchValue" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let matchType = self.matchType { + try encodeContainer.encode(matchType.rawValue, forKey: .matchType) + } + if let searchKey = self.searchKey { + try encodeContainer.encode(searchKey, forKey: .searchKey) + } + if let searchValue = self.searchValue { + try encodeContainer.encode(searchValue, forKey: .searchValue) + } + } +} + +extension GetSimilarProfilesInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let nextToken = nextToken { + let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "next-token".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = maxResults { + let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "max-results".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items + } + } +} + +extension GetSimilarProfilesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let domainName = domainName else { + return nil + } + return "/domains/\(domainName.urlPercentEncoding())/matches" + } +} + +public struct GetSimilarProfilesInput: Swift.Equatable { + /// The unique name of the domain. + /// This member is required. + public var domainName: Swift.String? + /// Specify the type of matching to get similar profiles for. + /// This member is required. + public var matchType: CustomerProfilesClientTypes.MatchType? + /// The maximum number of objects returned per page. + public var maxResults: Swift.Int? + /// The pagination token from the previous GetSimilarProfiles API call. + public var nextToken: Swift.String? + /// The string indicating the search key to be used. + /// This member is required. + public var searchKey: Swift.String? + /// The string based on SearchKey to be searched for similar profiles. + /// This member is required. + public var searchValue: Swift.String? + + public init( + domainName: Swift.String? = nil, + matchType: CustomerProfilesClientTypes.MatchType? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + searchKey: Swift.String? = nil, + searchValue: Swift.String? = nil + ) + { + self.domainName = domainName + self.matchType = matchType + self.maxResults = maxResults + self.nextToken = nextToken + self.searchKey = searchKey + self.searchValue = searchValue + } +} + +struct GetSimilarProfilesInputBody: Swift.Equatable { + let matchType: CustomerProfilesClientTypes.MatchType? + let searchKey: Swift.String? + let searchValue: Swift.String? +} + +extension GetSimilarProfilesInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case matchType = "MatchType" + case searchKey = "SearchKey" + case searchValue = "SearchValue" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let matchTypeDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.MatchType.self, forKey: .matchType) + matchType = matchTypeDecoded + let searchKeyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .searchKey) + searchKey = searchKeyDecoded + let searchValueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .searchValue) + searchValue = searchValueDecoded + } +} + +public enum GetSimilarProfilesOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "BadRequestException": return try await BadRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetSimilarProfilesOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetSimilarProfilesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.confidenceScore = output.confidenceScore + self.matchId = output.matchId + self.matchType = output.matchType + self.nextToken = output.nextToken + self.profileIds = output.profileIds + self.ruleLevel = output.ruleLevel + } else { + self.confidenceScore = nil + self.matchId = nil + self.matchType = nil + self.nextToken = nil + self.profileIds = nil + self.ruleLevel = nil + } + } +} + +public struct GetSimilarProfilesOutputResponse: Swift.Equatable { + /// It only has value when the MatchType is ML_BASED_MATCHING.A number between 0 and 1, where a higher score means higher similarity. Examining match confidence scores lets you distinguish between groups of similar records in which the system is highly confident (which you may decide to merge), groups of similar records about which the system is uncertain (which you may decide to have reviewed by a human), and groups of similar records that the system deems to be unlikely (which you may decide to reject). Given confidence scores vary as per the data input, it should not be used as an absolute measure of matching quality. + public var confidenceScore: Swift.Double? + /// The string matchId that the similar profiles belong to. + public var matchId: Swift.String? + /// Specify the type of matching to get similar profiles for. + public var matchType: CustomerProfilesClientTypes.MatchType? + /// The pagination token from the previous GetSimilarProfiles API call. + public var nextToken: Swift.String? + /// Set of profileIds that belong to the same matching group. + public var profileIds: [Swift.String]? + /// The integer rule level that the profiles matched on. + public var ruleLevel: Swift.Int? + + public init( + confidenceScore: Swift.Double? = nil, + matchId: Swift.String? = nil, + matchType: CustomerProfilesClientTypes.MatchType? = nil, + nextToken: Swift.String? = nil, + profileIds: [Swift.String]? = nil, + ruleLevel: Swift.Int? = nil + ) + { + self.confidenceScore = confidenceScore + self.matchId = matchId + self.matchType = matchType + self.nextToken = nextToken + self.profileIds = profileIds + self.ruleLevel = ruleLevel + } +} + +struct GetSimilarProfilesOutputResponseBody: Swift.Equatable { + let profileIds: [Swift.String]? + let matchId: Swift.String? + let matchType: CustomerProfilesClientTypes.MatchType? + let ruleLevel: Swift.Int? + let confidenceScore: Swift.Double? + let nextToken: Swift.String? +} + +extension GetSimilarProfilesOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case confidenceScore = "ConfidenceScore" + case matchId = "MatchId" + case matchType = "MatchType" + case nextToken = "NextToken" + case profileIds = "ProfileIds" + case ruleLevel = "RuleLevel" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let profileIdsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .profileIds) + var profileIdsDecoded0:[Swift.String]? = nil + if let profileIdsContainer = profileIdsContainer { + profileIdsDecoded0 = [Swift.String]() + for string0 in profileIdsContainer { + if let string0 = string0 { + profileIdsDecoded0?.append(string0) + } + } + } + profileIds = profileIdsDecoded0 + let matchIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .matchId) + matchId = matchIdDecoded + let matchTypeDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.MatchType.self, forKey: .matchType) + matchType = matchTypeDecoded + let ruleLevelDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .ruleLevel) + ruleLevel = ruleLevelDecoded + let confidenceScoreDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .confidenceScore) + confidenceScore = confidenceScoreDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + extension GetWorkflowInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let domainName = domainName else { @@ -8866,27 +9277,157 @@ extension ListProfileObjectsOutputResponseBody: Swift.Decodable { } } -extension ListTagsForResourceInput: ClientRuntime.URLPathProvider { +extension ListRuleBasedMatchesInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let nextToken = nextToken { + let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "next-token".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = maxResults { + let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "max-results".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + return items + } + } +} + +extension ListRuleBasedMatchesInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let resourceArn = resourceArn else { + guard let domainName = domainName else { return nil } - return "/tags/\(resourceArn.urlPercentEncoding())" + return "/domains/\(domainName.urlPercentEncoding())/profiles/ruleBasedMatches" } } -public struct ListTagsForResourceInput: Swift.Equatable { - /// The ARN of the resource for which you want to view tags. +public struct ListRuleBasedMatchesInput: Swift.Equatable { + /// The unique name of the domain. /// This member is required. - public var resourceArn: Swift.String? + public var domainName: Swift.String? + /// The maximum number of MatchIds returned per page. + public var maxResults: Swift.Int? + /// The pagination token from the previous ListRuleBasedMatches API call. + public var nextToken: Swift.String? public init( - resourceArn: Swift.String? = nil + domainName: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil ) { - self.resourceArn = resourceArn - } -} + self.domainName = domainName + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListRuleBasedMatchesInputBody: Swift.Equatable { +} + +extension ListRuleBasedMatchesInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum ListRuleBasedMatchesOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "BadRequestException": return try await BadRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListRuleBasedMatchesOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListRuleBasedMatchesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.matchIds = output.matchIds + self.nextToken = output.nextToken + } else { + self.matchIds = nil + self.nextToken = nil + } + } +} + +public struct ListRuleBasedMatchesOutputResponse: Swift.Equatable { + /// The list of MatchIds for the given domain. + public var matchIds: [Swift.String]? + /// The pagination token from the previous ListRuleBasedMatches API call. + public var nextToken: Swift.String? + + public init( + matchIds: [Swift.String]? = nil, + nextToken: Swift.String? = nil + ) + { + self.matchIds = matchIds + self.nextToken = nextToken + } +} + +struct ListRuleBasedMatchesOutputResponseBody: Swift.Equatable { + let matchIds: [Swift.String]? + let nextToken: Swift.String? +} + +extension ListRuleBasedMatchesOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case matchIds = "MatchIds" + case nextToken = "NextToken" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let matchIdsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .matchIds) + var matchIdsDecoded0:[Swift.String]? = nil + if let matchIdsContainer = matchIdsContainer { + matchIdsDecoded0 = [Swift.String]() + for string0 in matchIdsContainer { + if let string0 = string0 { + matchIdsDecoded0?.append(string0) + } + } + } + matchIds = matchIdsDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +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 ARN of the resource for which you want to view tags. + /// This member is required. + public var resourceArn: Swift.String? + + public init( + resourceArn: Swift.String? = nil + ) + { + self.resourceArn = resourceArn + } +} struct ListTagsForResourceInputBody: Swift.Equatable { } @@ -9449,6 +9990,38 @@ extension CustomerProfilesClientTypes { } +extension CustomerProfilesClientTypes { + public enum MatchType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case mlBasedMatching + case ruleBasedMatching + case sdkUnknown(Swift.String) + + public static var allCases: [MatchType] { + return [ + .mlBasedMatching, + .ruleBasedMatching, + .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 .mlBasedMatching: return "ML_BASED_MATCHING" + case .ruleBasedMatching: return "RULE_BASED_MATCHING" + 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 = MatchType(rawValue: rawValue) ?? MatchType.sdkUnknown(rawValue) + } + } +} + extension CustomerProfilesClientTypes.MatchingRequest: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case autoMerging = "AutoMerging" @@ -9580,6 +10153,88 @@ extension CustomerProfilesClientTypes { } +extension CustomerProfilesClientTypes.MatchingRule: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case rule = "Rule" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let rule = rule { + var ruleContainer = encodeContainer.nestedUnkeyedContainer(forKey: .rule) + for string1to2550 in rule { + try ruleContainer.encode(string1to2550) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let ruleContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .rule) + var ruleDecoded0:[Swift.String]? = nil + if let ruleContainer = ruleContainer { + ruleDecoded0 = [Swift.String]() + for string0 in ruleContainer { + if let string0 = string0 { + ruleDecoded0?.append(string0) + } + } + } + rule = ruleDecoded0 + } +} + +extension CustomerProfilesClientTypes { + /// Specifies how does the rule-based matching process should match profiles. You can choose from the following attributes to build the matching Rule: + /// + /// * AccountNumber + /// + /// * Address.Address + /// + /// * Address.City + /// + /// * Address.Country + /// + /// * Address.County + /// + /// * Address.PostalCode + /// + /// * Address.State + /// + /// * Address.Province + /// + /// * BirthDate + /// + /// * BusinessName + /// + /// * EmailAddress + /// + /// * FirstName + /// + /// * Gender + /// + /// * LastName + /// + /// * MiddleName + /// + /// * PhoneNumber + /// + /// * Any customized profile attributes that start with the Attributes + public struct MatchingRule: Swift.Equatable { + /// A single rule level of the MatchRules. Configures how the rule-based matching process should match profiles. + /// This member is required. + public var rule: [Swift.String]? + + public init( + rule: [Swift.String]? = nil + ) + { + self.rule = rule + } + } + +} + extension MergeProfilesInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case fieldSourceProfileIds = "FieldSourceProfileIds" @@ -11277,6 +11932,278 @@ extension ResourceNotFoundExceptionBody: Swift.Decodable { } } +extension CustomerProfilesClientTypes.RuleBasedMatchingRequest: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case attributeTypesSelector = "AttributeTypesSelector" + case conflictResolution = "ConflictResolution" + case enabled = "Enabled" + case exportingConfig = "ExportingConfig" + case matchingRules = "MatchingRules" + case maxAllowedRuleLevelForMatching = "MaxAllowedRuleLevelForMatching" + case maxAllowedRuleLevelForMerging = "MaxAllowedRuleLevelForMerging" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attributeTypesSelector = self.attributeTypesSelector { + try encodeContainer.encode(attributeTypesSelector, forKey: .attributeTypesSelector) + } + if let conflictResolution = self.conflictResolution { + try encodeContainer.encode(conflictResolution, forKey: .conflictResolution) + } + if let enabled = self.enabled { + try encodeContainer.encode(enabled, forKey: .enabled) + } + if let exportingConfig = self.exportingConfig { + try encodeContainer.encode(exportingConfig, forKey: .exportingConfig) + } + if let matchingRules = matchingRules { + var matchingRulesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .matchingRules) + for matchingrule0 in matchingRules { + try matchingRulesContainer.encode(matchingrule0) + } + } + if let maxAllowedRuleLevelForMatching = self.maxAllowedRuleLevelForMatching { + try encodeContainer.encode(maxAllowedRuleLevelForMatching, forKey: .maxAllowedRuleLevelForMatching) + } + if let maxAllowedRuleLevelForMerging = self.maxAllowedRuleLevelForMerging { + try encodeContainer.encode(maxAllowedRuleLevelForMerging, forKey: .maxAllowedRuleLevelForMerging) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) + enabled = enabledDecoded + let matchingRulesContainer = try containerValues.decodeIfPresent([CustomerProfilesClientTypes.MatchingRule?].self, forKey: .matchingRules) + var matchingRulesDecoded0:[CustomerProfilesClientTypes.MatchingRule]? = nil + if let matchingRulesContainer = matchingRulesContainer { + matchingRulesDecoded0 = [CustomerProfilesClientTypes.MatchingRule]() + for structure0 in matchingRulesContainer { + if let structure0 = structure0 { + matchingRulesDecoded0?.append(structure0) + } + } + } + matchingRules = matchingRulesDecoded0 + let maxAllowedRuleLevelForMergingDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxAllowedRuleLevelForMerging) + maxAllowedRuleLevelForMerging = maxAllowedRuleLevelForMergingDecoded + let maxAllowedRuleLevelForMatchingDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxAllowedRuleLevelForMatching) + maxAllowedRuleLevelForMatching = maxAllowedRuleLevelForMatchingDecoded + let attributeTypesSelectorDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.AttributeTypesSelector.self, forKey: .attributeTypesSelector) + attributeTypesSelector = attributeTypesSelectorDecoded + let conflictResolutionDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.ConflictResolution.self, forKey: .conflictResolution) + conflictResolution = conflictResolutionDecoded + let exportingConfigDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.ExportingConfig.self, forKey: .exportingConfig) + exportingConfig = exportingConfigDecoded + } +} + +extension CustomerProfilesClientTypes { + /// The request to enable the rule-based matching. + public struct RuleBasedMatchingRequest: Swift.Equatable { + /// Configures information about the AttributeTypesSelector where the rule-based identity resolution uses to match profiles. + public var attributeTypesSelector: CustomerProfilesClientTypes.AttributeTypesSelector? + /// How the auto-merging process should resolve conflicts between different profiles. + public var conflictResolution: CustomerProfilesClientTypes.ConflictResolution? + /// The flag that enables the rule-based matching process of duplicate profiles. + /// This member is required. + public var enabled: Swift.Bool? + /// Configuration information about the S3 bucket where Identity Resolution Jobs writes result files. You need to give Customer Profiles service principal write permission to your S3 bucket. Otherwise, you'll get an exception in the API response. For an example policy, see [Amazon Connect Customer Profiles cross-service confused deputy prevention](https://docs.aws.amazon.com/connect/latest/adminguide/cross-service-confused-deputy-prevention.html#customer-profiles-cross-service). + public var exportingConfig: CustomerProfilesClientTypes.ExportingConfig? + /// Configures how the rule-based matching process should match profiles. You can have up to 15 MatchingRule in the MatchingRules. + public var matchingRules: [CustomerProfilesClientTypes.MatchingRule]? + /// Indicates the maximum allowed rule level. + public var maxAllowedRuleLevelForMatching: Swift.Int? + /// [MatchingRule](https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_MatchingRule.html) + public var maxAllowedRuleLevelForMerging: Swift.Int? + + public init( + attributeTypesSelector: CustomerProfilesClientTypes.AttributeTypesSelector? = nil, + conflictResolution: CustomerProfilesClientTypes.ConflictResolution? = nil, + enabled: Swift.Bool? = nil, + exportingConfig: CustomerProfilesClientTypes.ExportingConfig? = nil, + matchingRules: [CustomerProfilesClientTypes.MatchingRule]? = nil, + maxAllowedRuleLevelForMatching: Swift.Int? = nil, + maxAllowedRuleLevelForMerging: Swift.Int? = nil + ) + { + self.attributeTypesSelector = attributeTypesSelector + self.conflictResolution = conflictResolution + self.enabled = enabled + self.exportingConfig = exportingConfig + self.matchingRules = matchingRules + self.maxAllowedRuleLevelForMatching = maxAllowedRuleLevelForMatching + self.maxAllowedRuleLevelForMerging = maxAllowedRuleLevelForMerging + } + } + +} + +extension CustomerProfilesClientTypes.RuleBasedMatchingResponse: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case attributeTypesSelector = "AttributeTypesSelector" + case conflictResolution = "ConflictResolution" + case enabled = "Enabled" + case exportingConfig = "ExportingConfig" + case matchingRules = "MatchingRules" + case maxAllowedRuleLevelForMatching = "MaxAllowedRuleLevelForMatching" + case maxAllowedRuleLevelForMerging = "MaxAllowedRuleLevelForMerging" + case status = "Status" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attributeTypesSelector = self.attributeTypesSelector { + try encodeContainer.encode(attributeTypesSelector, forKey: .attributeTypesSelector) + } + if let conflictResolution = self.conflictResolution { + try encodeContainer.encode(conflictResolution, forKey: .conflictResolution) + } + if let enabled = self.enabled { + try encodeContainer.encode(enabled, forKey: .enabled) + } + if let exportingConfig = self.exportingConfig { + try encodeContainer.encode(exportingConfig, forKey: .exportingConfig) + } + if let matchingRules = matchingRules { + var matchingRulesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .matchingRules) + for matchingrule0 in matchingRules { + try matchingRulesContainer.encode(matchingrule0) + } + } + if let maxAllowedRuleLevelForMatching = self.maxAllowedRuleLevelForMatching { + try encodeContainer.encode(maxAllowedRuleLevelForMatching, forKey: .maxAllowedRuleLevelForMatching) + } + if let maxAllowedRuleLevelForMerging = self.maxAllowedRuleLevelForMerging { + try encodeContainer.encode(maxAllowedRuleLevelForMerging, forKey: .maxAllowedRuleLevelForMerging) + } + 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 enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) + enabled = enabledDecoded + let matchingRulesContainer = try containerValues.decodeIfPresent([CustomerProfilesClientTypes.MatchingRule?].self, forKey: .matchingRules) + var matchingRulesDecoded0:[CustomerProfilesClientTypes.MatchingRule]? = nil + if let matchingRulesContainer = matchingRulesContainer { + matchingRulesDecoded0 = [CustomerProfilesClientTypes.MatchingRule]() + for structure0 in matchingRulesContainer { + if let structure0 = structure0 { + matchingRulesDecoded0?.append(structure0) + } + } + } + matchingRules = matchingRulesDecoded0 + let statusDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.RuleBasedMatchingStatus.self, forKey: .status) + status = statusDecoded + let maxAllowedRuleLevelForMergingDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxAllowedRuleLevelForMerging) + maxAllowedRuleLevelForMerging = maxAllowedRuleLevelForMergingDecoded + let maxAllowedRuleLevelForMatchingDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxAllowedRuleLevelForMatching) + maxAllowedRuleLevelForMatching = maxAllowedRuleLevelForMatchingDecoded + let attributeTypesSelectorDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.AttributeTypesSelector.self, forKey: .attributeTypesSelector) + attributeTypesSelector = attributeTypesSelectorDecoded + let conflictResolutionDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.ConflictResolution.self, forKey: .conflictResolution) + conflictResolution = conflictResolutionDecoded + let exportingConfigDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.ExportingConfig.self, forKey: .exportingConfig) + exportingConfig = exportingConfigDecoded + } +} + +extension CustomerProfilesClientTypes { + /// The response of the Rule-based matching request. + public struct RuleBasedMatchingResponse: Swift.Equatable { + /// Configures information about the AttributeTypesSelector where the rule-based identity resolution uses to match profiles. + public var attributeTypesSelector: CustomerProfilesClientTypes.AttributeTypesSelector? + /// How the auto-merging process should resolve conflicts between different profiles. + public var conflictResolution: CustomerProfilesClientTypes.ConflictResolution? + /// The flag that enables the rule-based matching process of duplicate profiles. + public var enabled: Swift.Bool? + /// Configuration information about the S3 bucket where Identity Resolution Jobs writes result files. You need to give Customer Profiles service principal write permission to your S3 bucket. Otherwise, you'll get an exception in the API response. For an example policy, see [Amazon Connect Customer Profiles cross-service confused deputy prevention](https://docs.aws.amazon.com/connect/latest/adminguide/cross-service-confused-deputy-prevention.html#customer-profiles-cross-service). + public var exportingConfig: CustomerProfilesClientTypes.ExportingConfig? + /// Configures how the rule-based matching process should match profiles. You can have up to 15 MatchingRule in the MatchingRules. + public var matchingRules: [CustomerProfilesClientTypes.MatchingRule]? + /// Indicates the maximum allowed rule level. + public var maxAllowedRuleLevelForMatching: Swift.Int? + /// [MatchingRule](https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_MatchingRule.html) + public var maxAllowedRuleLevelForMerging: Swift.Int? + /// PENDING + /// + /// * The first status after configuration a rule-based matching rule. If it is an existing domain, the rule-based Identity Resolution waits one hour before creating the matching rule. If it is a new domain, the system will skip the PENDING stage. + /// + /// + /// IN_PROGRESS + /// + /// * The system is creating the rule-based matching rule. Under this status, the system is evaluating the existing data and you can no longer change the Rule-based matching configuration. + /// + /// + /// ACTIVE + /// + /// * The rule is ready to use. You can change the rule a day after the status is in ACTIVE. + public var status: CustomerProfilesClientTypes.RuleBasedMatchingStatus? + + public init( + attributeTypesSelector: CustomerProfilesClientTypes.AttributeTypesSelector? = nil, + conflictResolution: CustomerProfilesClientTypes.ConflictResolution? = nil, + enabled: Swift.Bool? = nil, + exportingConfig: CustomerProfilesClientTypes.ExportingConfig? = nil, + matchingRules: [CustomerProfilesClientTypes.MatchingRule]? = nil, + maxAllowedRuleLevelForMatching: Swift.Int? = nil, + maxAllowedRuleLevelForMerging: Swift.Int? = nil, + status: CustomerProfilesClientTypes.RuleBasedMatchingStatus? = nil + ) + { + self.attributeTypesSelector = attributeTypesSelector + self.conflictResolution = conflictResolution + self.enabled = enabled + self.exportingConfig = exportingConfig + self.matchingRules = matchingRules + self.maxAllowedRuleLevelForMatching = maxAllowedRuleLevelForMatching + self.maxAllowedRuleLevelForMerging = maxAllowedRuleLevelForMerging + self.status = status + } + } + +} + +extension CustomerProfilesClientTypes { + public enum RuleBasedMatchingStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case active + case inProgress + case pending + case sdkUnknown(Swift.String) + + public static var allCases: [RuleBasedMatchingStatus] { + return [ + .active, + .inProgress, + .pending, + .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 .inProgress: return "IN_PROGRESS" + case .pending: return "PENDING" + 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 = RuleBasedMatchingStatus(rawValue: rawValue) ?? RuleBasedMatchingStatus.sdkUnknown(rawValue) + } + } +} + extension CustomerProfilesClientTypes { public enum S3ConnectorOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case addition @@ -13343,6 +14270,7 @@ extension UpdateDomainInput: Swift.Encodable { case defaultEncryptionKey = "DefaultEncryptionKey" case defaultExpirationDays = "DefaultExpirationDays" case matching = "Matching" + case ruleBasedMatching = "RuleBasedMatching" case tags = "Tags" } @@ -13360,6 +14288,9 @@ extension UpdateDomainInput: Swift.Encodable { if let matching = self.matching { try encodeContainer.encode(matching, forKey: .matching) } + if let ruleBasedMatching = self.ruleBasedMatching { + try encodeContainer.encode(ruleBasedMatching, forKey: .ruleBasedMatching) + } if let tags = tags { var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) for (dictKey0, tagMap0) in tags { @@ -13390,6 +14321,8 @@ public struct UpdateDomainInput: Swift.Equatable { public var domainName: Swift.String? /// The process of matching duplicate profiles. If Matching = true, Amazon Connect Customer Profiles starts a weekly batch process called Identity Resolution Job. If you do not specify a date and time for Identity Resolution Job to run, by default it runs every Saturday at 12AM UTC to detect duplicate profiles in your domains. After the Identity Resolution Job completes, use the [GetMatches](https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html) API to return and review the results. Or, if you have configured ExportingConfig in the MatchingRequest, you can download the results from S3. public var matching: CustomerProfilesClientTypes.MatchingRequest? + /// The process of matching duplicate profiles using the rule-Based matching. If RuleBasedMatching = true, Amazon Connect Customer Profiles will start to match and merge your profiles according to your configuration in the RuleBasedMatchingRequest. You can use the ListRuleBasedMatches and GetSimilarProfiles API to return and review the results. Also, if you have configured ExportingConfig in the RuleBasedMatchingRequest, you can download the results from S3. + public var ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingRequest? /// The tags used to organize, track, or control access for this resource. public var tags: [Swift.String:Swift.String]? @@ -13399,6 +14332,7 @@ public struct UpdateDomainInput: Swift.Equatable { defaultExpirationDays: Swift.Int? = nil, domainName: Swift.String? = nil, matching: CustomerProfilesClientTypes.MatchingRequest? = nil, + ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingRequest? = nil, tags: [Swift.String:Swift.String]? = nil ) { @@ -13407,6 +14341,7 @@ public struct UpdateDomainInput: Swift.Equatable { self.defaultExpirationDays = defaultExpirationDays self.domainName = domainName self.matching = matching + self.ruleBasedMatching = ruleBasedMatching self.tags = tags } } @@ -13416,6 +14351,7 @@ struct UpdateDomainInputBody: Swift.Equatable { let defaultEncryptionKey: Swift.String? let deadLetterQueueUrl: Swift.String? let matching: CustomerProfilesClientTypes.MatchingRequest? + let ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingRequest? let tags: [Swift.String:Swift.String]? } @@ -13425,6 +14361,7 @@ extension UpdateDomainInputBody: Swift.Decodable { case defaultEncryptionKey = "DefaultEncryptionKey" case defaultExpirationDays = "DefaultExpirationDays" case matching = "Matching" + case ruleBasedMatching = "RuleBasedMatching" case tags = "Tags" } @@ -13438,6 +14375,8 @@ extension UpdateDomainInputBody: Swift.Decodable { deadLetterQueueUrl = deadLetterQueueUrlDecoded let matchingDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.MatchingRequest.self, forKey: .matching) matching = matchingDecoded + let ruleBasedMatchingDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.RuleBasedMatchingRequest.self, forKey: .ruleBasedMatching) + ruleBasedMatching = ruleBasedMatchingDecoded let tagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .tags) var tagsDecoded0: [Swift.String:Swift.String]? = nil if let tagsContainer = tagsContainer { @@ -13479,6 +14418,7 @@ extension UpdateDomainOutputResponse: ClientRuntime.HttpResponseBinding { self.domainName = output.domainName self.lastUpdatedAt = output.lastUpdatedAt self.matching = output.matching + self.ruleBasedMatching = output.ruleBasedMatching self.tags = output.tags } else { self.createdAt = nil @@ -13488,6 +14428,7 @@ extension UpdateDomainOutputResponse: ClientRuntime.HttpResponseBinding { self.domainName = nil self.lastUpdatedAt = nil self.matching = nil + self.ruleBasedMatching = nil self.tags = nil } } @@ -13511,6 +14452,8 @@ public struct UpdateDomainOutputResponse: Swift.Equatable { public var lastUpdatedAt: ClientRuntime.Date? /// The process of matching duplicate profiles. If Matching = true, Amazon Connect Customer Profiles starts a weekly batch process called Identity Resolution Job. If you do not specify a date and time for Identity Resolution Job to run, by default it runs every Saturday at 12AM UTC to detect duplicate profiles in your domains. After the Identity Resolution Job completes, use the [GetMatches](https://docs.aws.amazon.com/customerprofiles/latest/APIReference/API_GetMatches.html) API to return and review the results. Or, if you have configured ExportingConfig in the MatchingRequest, you can download the results from S3. public var matching: CustomerProfilesClientTypes.MatchingResponse? + /// The process of matching duplicate profiles using the rule-Based matching. If RuleBasedMatching = true, Amazon Connect Customer Profiles will start to match and merge your profiles according to your configuration in the RuleBasedMatchingRequest. You can use the ListRuleBasedMatches and GetSimilarProfiles API to return and review the results. Also, if you have configured ExportingConfig in the RuleBasedMatchingRequest, you can download the results from S3. + public var ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingResponse? /// The tags used to organize, track, or control access for this resource. public var tags: [Swift.String:Swift.String]? @@ -13522,6 +14465,7 @@ public struct UpdateDomainOutputResponse: Swift.Equatable { domainName: Swift.String? = nil, lastUpdatedAt: ClientRuntime.Date? = nil, matching: CustomerProfilesClientTypes.MatchingResponse? = nil, + ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingResponse? = nil, tags: [Swift.String:Swift.String]? = nil ) { @@ -13532,6 +14476,7 @@ public struct UpdateDomainOutputResponse: Swift.Equatable { self.domainName = domainName self.lastUpdatedAt = lastUpdatedAt self.matching = matching + self.ruleBasedMatching = ruleBasedMatching self.tags = tags } } @@ -13542,6 +14487,7 @@ struct UpdateDomainOutputResponseBody: Swift.Equatable { let defaultEncryptionKey: Swift.String? let deadLetterQueueUrl: Swift.String? let matching: CustomerProfilesClientTypes.MatchingResponse? + let ruleBasedMatching: CustomerProfilesClientTypes.RuleBasedMatchingResponse? let createdAt: ClientRuntime.Date? let lastUpdatedAt: ClientRuntime.Date? let tags: [Swift.String:Swift.String]? @@ -13556,6 +14502,7 @@ extension UpdateDomainOutputResponseBody: Swift.Decodable { case domainName = "DomainName" case lastUpdatedAt = "LastUpdatedAt" case matching = "Matching" + case ruleBasedMatching = "RuleBasedMatching" case tags = "Tags" } @@ -13571,6 +14518,8 @@ extension UpdateDomainOutputResponseBody: Swift.Decodable { deadLetterQueueUrl = deadLetterQueueUrlDecoded let matchingDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.MatchingResponse.self, forKey: .matching) matching = matchingDecoded + let ruleBasedMatchingDecoded = try containerValues.decodeIfPresent(CustomerProfilesClientTypes.RuleBasedMatchingResponse.self, forKey: .ruleBasedMatching) + ruleBasedMatching = ruleBasedMatchingDecoded let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) createdAt = createdAtDecoded let lastUpdatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedAt) diff --git a/Sources/Services/AWSDataSync/DataSyncClient.swift b/Sources/Services/AWSDataSync/DataSyncClient.swift index f564b55dcf2..052a4d59091 100644 --- a/Sources/Services/AWSDataSync/DataSyncClient.swift +++ b/Sources/Services/AWSDataSync/DataSyncClient.swift @@ -149,7 +149,14 @@ extension DataSyncClient: DataSyncClientProtocol { return result } - /// Activates an DataSync agent that you have deployed in your storage environment. The activation process associates your agent with your account. In the activation process, you specify information such as the Amazon Web Services Region that you want to activate the agent in. You activate the agent in the Amazon Web Services Region where your target locations (in Amazon S3 or Amazon EFS) reside. Your tasks are created in this Amazon Web Services Region. You can activate the agent in a VPC (virtual private cloud) or provide the agent access to a VPC endpoint so you can run tasks without going over the public internet. You can use an agent for more than one location. If a task uses multiple agents, all of them need to have status AVAILABLE for the task to run. If you use multiple agents for a source location, the status of all the agents must be AVAILABLE for the task to run. Agents are automatically updated by Amazon Web Services on a regular basis, using a mechanism that ensures minimal interruption to your tasks. + /// Activates an DataSync agent that you've deployed in your storage environment. The activation process associates the agent with your Amazon Web Services account. If you haven't deployed an agent yet, see the following topics to learn more: + /// + /// * [Agent requirements](https://docs.aws.amazon.com/datasync/latest/userguide/agent-requirements.html) + /// + /// * [Create an agent](https://docs.aws.amazon.com/datasync/latest/userguide/configure-agent.html) + /// + /// + /// If you're transferring between Amazon Web Services storage services, you don't need a DataSync agent. public func createAgent(input: CreateAgentInput) async throws -> CreateAgentOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -186,6 +193,43 @@ extension DataSyncClient: DataSyncClientProtocol { return result } + /// Creates an endpoint for a Microsoft Azure Blob Storage container that DataSync can use as a transfer source or destination. Before you begin, make sure you know [how DataSync accesses Azure Blob Storage](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access) and works with [access tiers](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access-tiers) and [blob types](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#blob-types). You also need a [DataSync agent](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-creating-agent) that can connect to your container. + public func createLocationAzureBlob(input: CreateLocationAzureBlobInput) async throws -> CreateLocationAzureBlobOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createLocationAzureBlob") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "datasync") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createLocationAzureBlob") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "FmrsService.CreateLocationAzureBlob")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "CreateLocationAzureBlobRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Creates an endpoint for an Amazon EFS file system that DataSync can access for a transfer. For more information, see [Creating a location for Amazon EFS](https://docs.aws.amazon.com/datasync/latest/userguide/create-efs-location.html). public func createLocationEfs(input: CreateLocationEfsInput) async throws -> CreateLocationEfsOutputResponse { @@ -408,7 +452,7 @@ extension DataSyncClient: DataSyncClientProtocol { return result } - /// Defines a file system on a Network File System (NFS) server that can be read from or written to. + /// Creates an endpoint for an Network File System (NFS) file server that DataSync can use for a data transfer. public func createLocationNfs(input: CreateLocationNfsInput) async throws -> CreateLocationNfsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -526,7 +570,7 @@ extension DataSyncClient: DataSyncClientProtocol { return result } - /// Creates an endpoint for a Server Message Block (SMB) file server that DataSync can access for a transfer. For more information, see [Creating an SMB location](https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html). + /// Creates an endpoint for a Server Message Block (SMB) file server that DataSync can use for a data transfer. Before you begin, make sure that you understand how DataSync [accesses an SMB file server](https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html). public func createLocationSmb(input: CreateLocationSmbInput) async throws -> CreateLocationSmbOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -785,6 +829,43 @@ extension DataSyncClient: DataSyncClientProtocol { return result } + /// Provides details about how an DataSync transfer location for Microsoft Azure Blob Storage is configured. + public func describeLocationAzureBlob(input: DescribeLocationAzureBlobInput) async throws -> DescribeLocationAzureBlobOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "describeLocationAzureBlob") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "datasync") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "describeLocationAzureBlob") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "FmrsService.DescribeLocationAzureBlob")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "DescribeLocationAzureBlobRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Returns metadata about your DataSync location for an Amazon EFS file system. public func describeLocationEfs(input: DescribeLocationEfsInput) async throws -> DescribeLocationEfsOutputResponse { @@ -1266,7 +1347,7 @@ extension DataSyncClient: DataSyncClientProtocol { return result } - /// Returns metadata about a task. + /// Provides information about an DataSync transfer task. public func describeTask(input: DescribeTaskInput) async throws -> DescribeTaskOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1303,7 +1384,7 @@ extension DataSyncClient: DataSyncClientProtocol { return result } - /// Returns detailed metadata about a task that is being executed. + /// Provides information about an DataSync transfer task that's running. public func describeTaskExecution(input: DescribeTaskExecutionInput) async throws -> DescribeTaskExecutionOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1940,6 +2021,43 @@ extension DataSyncClient: DataSyncClientProtocol { return result } + /// Modifies some configurations of the Microsoft Azure Blob Storage transfer location that you're using with DataSync. + public func updateLocationAzureBlob(input: UpdateLocationAzureBlobInput) async throws -> UpdateLocationAzureBlobOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "updateLocationAzureBlob") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "datasync") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateLocationAzureBlob") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "FmrsService.UpdateLocationAzureBlob")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateLocationAzureBlobRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Updates some parameters of a previously created location for a Hadoop Distributed File System cluster. public func updateLocationHdfs(input: UpdateLocationHdfsInput) async throws -> UpdateLocationHdfsOutputResponse { diff --git a/Sources/Services/AWSDataSync/DataSyncClientProtocol.swift b/Sources/Services/AWSDataSync/DataSyncClientProtocol.swift index cd173ae8d7e..62ec246a9ac 100644 --- a/Sources/Services/AWSDataSync/DataSyncClientProtocol.swift +++ b/Sources/Services/AWSDataSync/DataSyncClientProtocol.swift @@ -2,14 +2,23 @@ import ClientRuntime -/// DataSync DataSync is a managed data transfer service that makes it simpler for you to automate moving data between on-premises storage and Amazon Web Services storage services. You also can use DataSync to transfer data between other cloud providers and Amazon Web Services storage services. This API interface reference includes documentation for using DataSync programmatically. For complete information, see the [DataSync User Guide](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html) . +/// DataSync DataSync is an online data movement and discovery service that simplifies data migration and helps you quickly, easily, and securely transfer your file or object data to, from, and between Amazon Web Services storage services. This API interface reference includes documentation for using DataSync programmatically. For complete information, see the [DataSync User Guide](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html) . public protocol DataSyncClientProtocol { /// Creates an Amazon Web Services resource for an on-premises storage system that you want DataSync Discovery to collect information about. func addStorageSystem(input: AddStorageSystemInput) async throws -> AddStorageSystemOutputResponse /// Stops an DataSync task execution that's in progress. The transfer of some files are abruptly interrupted. File contents that're transferred to the destination might be incomplete or inconsistent with the source files. However, if you start a new task execution using the same task and allow it to finish, file content on the destination will be complete and consistent. This applies to other unexpected failures that interrupt a task execution. In all of these cases, DataSync successfully completes the transfer when you start the next task execution. func cancelTaskExecution(input: CancelTaskExecutionInput) async throws -> CancelTaskExecutionOutputResponse - /// Activates an DataSync agent that you have deployed in your storage environment. The activation process associates your agent with your account. In the activation process, you specify information such as the Amazon Web Services Region that you want to activate the agent in. You activate the agent in the Amazon Web Services Region where your target locations (in Amazon S3 or Amazon EFS) reside. Your tasks are created in this Amazon Web Services Region. You can activate the agent in a VPC (virtual private cloud) or provide the agent access to a VPC endpoint so you can run tasks without going over the public internet. You can use an agent for more than one location. If a task uses multiple agents, all of them need to have status AVAILABLE for the task to run. If you use multiple agents for a source location, the status of all the agents must be AVAILABLE for the task to run. Agents are automatically updated by Amazon Web Services on a regular basis, using a mechanism that ensures minimal interruption to your tasks. + /// Activates an DataSync agent that you've deployed in your storage environment. The activation process associates the agent with your Amazon Web Services account. If you haven't deployed an agent yet, see the following topics to learn more: + /// + /// * [Agent requirements](https://docs.aws.amazon.com/datasync/latest/userguide/agent-requirements.html) + /// + /// * [Create an agent](https://docs.aws.amazon.com/datasync/latest/userguide/configure-agent.html) + /// + /// + /// If you're transferring between Amazon Web Services storage services, you don't need a DataSync agent. func createAgent(input: CreateAgentInput) async throws -> CreateAgentOutputResponse + /// Creates an endpoint for a Microsoft Azure Blob Storage container that DataSync can use as a transfer source or destination. Before you begin, make sure you know [how DataSync accesses Azure Blob Storage](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access) and works with [access tiers](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access-tiers) and [blob types](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#blob-types). You also need a [DataSync agent](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-creating-agent) that can connect to your container. + func createLocationAzureBlob(input: CreateLocationAzureBlobInput) async throws -> CreateLocationAzureBlobOutputResponse /// Creates an endpoint for an Amazon EFS file system that DataSync can access for a transfer. For more information, see [Creating a location for Amazon EFS](https://docs.aws.amazon.com/datasync/latest/userguide/create-efs-location.html). func createLocationEfs(input: CreateLocationEfsInput) async throws -> CreateLocationEfsOutputResponse /// Creates an endpoint for an Amazon FSx for Lustre file system. @@ -22,7 +31,7 @@ public protocol DataSyncClientProtocol { func createLocationFsxWindows(input: CreateLocationFsxWindowsInput) async throws -> CreateLocationFsxWindowsOutputResponse /// Creates an endpoint for a Hadoop Distributed File System (HDFS). func createLocationHdfs(input: CreateLocationHdfsInput) async throws -> CreateLocationHdfsOutputResponse - /// Defines a file system on a Network File System (NFS) server that can be read from or written to. + /// Creates an endpoint for an Network File System (NFS) file server that DataSync can use for a data transfer. func createLocationNfs(input: CreateLocationNfsInput) async throws -> CreateLocationNfsOutputResponse /// Creates an endpoint for an object storage system that DataSync can access for a transfer. For more information, see [Creating a location for object storage](https://docs.aws.amazon.com/datasync/latest/userguide/create-object-location.html). func createLocationObjectStorage(input: CreateLocationObjectStorageInput) async throws -> CreateLocationObjectStorageOutputResponse @@ -35,7 +44,7 @@ public protocol DataSyncClientProtocol { /// /// For more information, see [Creating an Amazon S3 location](https://docs.aws.amazon.com/datasync/latest/userguide/create-locations-cli.html#create-location-s3-cli). func createLocationS3(input: CreateLocationS3Input) async throws -> CreateLocationS3OutputResponse - /// Creates an endpoint for a Server Message Block (SMB) file server that DataSync can access for a transfer. For more information, see [Creating an SMB location](https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html). + /// Creates an endpoint for a Server Message Block (SMB) file server that DataSync can use for a data transfer. Before you begin, make sure that you understand how DataSync [accesses an SMB file server](https://docs.aws.amazon.com/datasync/latest/userguide/create-smb-location.html). func createLocationSmb(input: CreateLocationSmbInput) async throws -> CreateLocationSmbOutputResponse /// Configures a task, which defines where and how DataSync transfers your data. A task includes a source location, a destination location, and the preferences for how and when you want to transfer your data (such as bandwidth limits, scheduling, among other options). If you're planning to transfer data to or from an Amazon S3 location, review [how DataSync can affect your S3 request charges](https://docs.aws.amazon.com/datasync/latest/userguide/create-s3-location.html#create-s3-location-s3-requests) and the [DataSync pricing page](http://aws.amazon.com/datasync/pricing/) before you begin. func createTask(input: CreateTaskInput) async throws -> CreateTaskOutputResponse @@ -49,6 +58,8 @@ public protocol DataSyncClientProtocol { func describeAgent(input: DescribeAgentInput) async throws -> DescribeAgentOutputResponse /// Returns information about a DataSync discovery job. func describeDiscoveryJob(input: DescribeDiscoveryJobInput) async throws -> DescribeDiscoveryJobOutputResponse + /// Provides details about how an DataSync transfer location for Microsoft Azure Blob Storage is configured. + func describeLocationAzureBlob(input: DescribeLocationAzureBlobInput) async throws -> DescribeLocationAzureBlobOutputResponse /// Returns metadata about your DataSync location for an Amazon EFS file system. func describeLocationEfs(input: DescribeLocationEfsInput) async throws -> DescribeLocationEfsOutputResponse /// Provides details about how an DataSync location for an Amazon FSx for Lustre file system is configured. @@ -75,9 +86,9 @@ public protocol DataSyncClientProtocol { func describeStorageSystemResourceMetrics(input: DescribeStorageSystemResourceMetricsInput) async throws -> DescribeStorageSystemResourceMetricsOutputResponse /// Returns information that DataSync Discovery collects about resources in your on-premises storage system. func describeStorageSystemResources(input: DescribeStorageSystemResourcesInput) async throws -> DescribeStorageSystemResourcesOutputResponse - /// Returns metadata about a task. + /// Provides information about an DataSync transfer task. func describeTask(input: DescribeTaskInput) async throws -> DescribeTaskOutputResponse - /// Returns detailed metadata about a task that is being executed. + /// Provides information about an DataSync transfer task that's running. func describeTaskExecution(input: DescribeTaskExecutionInput) async throws -> DescribeTaskExecutionOutputResponse /// Creates recommendations about where to migrate your data to in Amazon Web Services. Recommendations are generated based on information that DataSync Discovery collects about your on-premises storage system's resources. For more information, see [Recommendations provided by DataSync Discovery](https://docs.aws.amazon.com/datasync/latest/userguide/discovery-understand-recommendations.html). Once generated, you can view your recommendations by using the [DescribeStorageSystemResources](https://docs.aws.amazon.com/datasync/latest/userguide/API_DescribeStorageSystemResources.html) operation. If your [discovery job completes successfully](https://docs.aws.amazon.com/datasync/latest/userguide/discovery-job-statuses.html#discovery-job-statuses-table), you don't need to use this operation. DataSync Discovery generates the recommendations for you automatically. func generateRecommendations(input: GenerateRecommendationsInput) async throws -> GenerateRecommendationsOutputResponse @@ -111,6 +122,8 @@ public protocol DataSyncClientProtocol { func updateAgent(input: UpdateAgentInput) async throws -> UpdateAgentOutputResponse /// Edits a DataSync discovery job configuration. func updateDiscoveryJob(input: UpdateDiscoveryJobInput) async throws -> UpdateDiscoveryJobOutputResponse + /// Modifies some configurations of the Microsoft Azure Blob Storage transfer location that you're using with DataSync. + func updateLocationAzureBlob(input: UpdateLocationAzureBlobInput) async throws -> UpdateLocationAzureBlobOutputResponse /// Updates some parameters of a previously created location for a Hadoop Distributed File System cluster. func updateLocationHdfs(input: UpdateLocationHdfsInput) async throws -> UpdateLocationHdfsOutputResponse /// Updates some of the parameters of a previously created location for Network File System (NFS) access. For information about creating an NFS location, see [Creating a location for NFS](https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html). diff --git a/Sources/Services/AWSDataSync/models/Models.swift b/Sources/Services/AWSDataSync/models/Models.swift index 6b595e8bfb2..00cf18f74bc 100644 --- a/Sources/Services/AWSDataSync/models/Models.swift +++ b/Sources/Services/AWSDataSync/models/Models.swift @@ -56,7 +56,7 @@ extension AddStorageSystemInput: ClientRuntime.URLPathProvider { } public struct AddStorageSystemInput: Swift.Equatable { - /// Specifies the Amazon Resource Name (ARN) of the DataSync agent that connects to and reads from your on-premises storage system's management interface. + /// Specifies the Amazon Resource Name (ARN) of the DataSync agent that connects to and reads from your on-premises storage system's management interface. You can only specify one ARN. /// This member is required. public var agentArns: [Swift.String]? /// Specifies a client token to make sure requests with this API operation are idempotent. If you don't specify a client token, DataSync generates one for you automatically. @@ -334,6 +334,140 @@ extension DataSyncClientTypes { } } +extension DataSyncClientTypes { + public enum AzureAccessTier: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case archive + case cool + case hot + case sdkUnknown(Swift.String) + + public static var allCases: [AzureAccessTier] { + return [ + .archive, + .cool, + .hot, + .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 .archive: return "ARCHIVE" + case .cool: return "COOL" + case .hot: return "HOT" + 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 = AzureAccessTier(rawValue: rawValue) ?? AzureAccessTier.sdkUnknown(rawValue) + } + } +} + +extension DataSyncClientTypes { + public enum AzureBlobAuthenticationType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case sas + case sdkUnknown(Swift.String) + + public static var allCases: [AzureBlobAuthenticationType] { + return [ + .sas, + .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 .sas: return "SAS" + 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 = AzureBlobAuthenticationType(rawValue: rawValue) ?? AzureBlobAuthenticationType.sdkUnknown(rawValue) + } + } +} + +extension DataSyncClientTypes.AzureBlobSasConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case token = "Token" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let token = self.token { + try encodeContainer.encode(token, forKey: .token) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .token) + token = tokenDecoded + } +} + +extension DataSyncClientTypes.AzureBlobSasConfiguration: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "AzureBlobSasConfiguration(token: \"CONTENT_REDACTED\")"} +} + +extension DataSyncClientTypes { + /// The shared access signature (SAS) configuration that allows DataSync to access your Microsoft Azure Blob Storage. For more information, see [SAS tokens](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-sas-tokens) for accessing your Azure Blob Storage. + public struct AzureBlobSasConfiguration: Swift.Equatable { + /// Specifies a SAS token that provides permissions at the Azure storage account, container, or folder level. The token is part of the SAS URI string that comes after the storage resource URI and a question mark. A token looks something like this: sp=r&st=2023-12-20T14:54:52Z&se=2023-12-20T22:54:52Z&spr=https&sv=2021-06-08&sr=c&sig=aBBKDWQvyuVcTPH9EBp%2FXTI9E%2F%2Fmq171%2BZU178wcwqU%3D + /// This member is required. + public var token: Swift.String? + + public init( + token: Swift.String? = nil + ) + { + self.token = token + } + } + +} + +extension DataSyncClientTypes { + public enum AzureBlobType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case block + case sdkUnknown(Swift.String) + + public static var allCases: [AzureBlobType] { + return [ + .block, + .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 .block: return "BLOCK" + 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 = AzureBlobType(rawValue: rawValue) ?? AzureBlobType.sdkUnknown(rawValue) + } + } +} + extension CancelTaskExecutionInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case taskExecutionArn = "TaskExecutionArn" @@ -510,18 +644,18 @@ extension CreateAgentInput: ClientRuntime.URLPathProvider { /// CreateAgentRequest public struct CreateAgentInput: Swift.Equatable { - /// Your agent activation key. You can get the activation key either by sending an HTTP GET request with redirects that enable you to get the agent IP address (port 80). Alternatively, you can get it from the DataSync console. The redirect URL returned in the response provides you the activation key for your agent in the query string parameter activationKey. It might also include other activation-related parameters; however, these are merely defaults. The arguments you pass to this API call determine the actual configuration of your agent. For more information, see Activating an Agent in the DataSync User Guide. + /// Specifies your DataSync agent's activation key. If you don't have an activation key, see [Activate your agent](https://docs.aws.amazon.com/datasync/latest/userguide/activate-agent.html). /// This member is required. public var activationKey: Swift.String? - /// The name you configured for your agent. This value is a text reference that is used to identify the agent in the console. + /// Specifies a name for your agent. You can see this name in the DataSync console. public var agentName: Swift.String? - /// The ARNs of the security groups used to protect your data transfer task subnets. See [SecurityGroupArns](https://docs.aws.amazon.com/datasync/latest/userguide/API_Ec2Config.html#DataSync-Type-Ec2Config-SecurityGroupArns). + /// Specifies the Amazon Resource Name (ARN) of the security group that protects your task's [network interfaces](https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html#required-network-interfaces) when [using a virtual private cloud (VPC) endpoint](https://docs.aws.amazon.com/datasync/latest/userguide/choose-service-endpoint.html#choose-service-endpoint-vpc). You can only specify one ARN. public var securityGroupArns: [Swift.String]? - /// The Amazon Resource Names (ARNs) of the subnets in which DataSync will create elastic network interfaces for each data transfer task. The agent that runs a task must be private. When you start a task that is associated with an agent created in a VPC, or one that has access to an IP address in a VPC, then the task is also private. In this case, DataSync creates four network interfaces for each task in your subnet. For a data transfer to work, the agent must be able to route to all these four network interfaces. + /// Specifies the ARN of the subnet where you want to run your DataSync task when using a VPC endpoint. This is the subnet where DataSync creates and manages the [network interfaces](https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html#required-network-interfaces) for your transfer. You can only specify one ARN. public var subnetArns: [Swift.String]? - /// The key-value pair that represents the tag that you want to associate with the agent. The value can be an empty string. This value helps you manage, filter, and search for your agents. Valid characters for key and value are letters, spaces, and numbers representable in UTF-8 format, and the following special characters: + - = . _ : / @. + /// Specifies labels that help you categorize, filter, and search for your Amazon Web Services resources. We recommend creating at least one tag for your agent. public var tags: [DataSyncClientTypes.TagListEntry]? - /// The ID of the VPC (virtual private cloud) endpoint that the agent has access to. This is the client-side VPC endpoint, also called a PrivateLink. If you don't have a PrivateLink VPC endpoint, see [Creating a VPC Endpoint Service Configuration](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html#create-endpoint-service) in the Amazon VPC User Guide. VPC endpoint ID looks like this: vpce-01234d5aff67890e1. + /// Specifies the ID of the VPC endpoint that you want your agent to connect to. For example, a VPC endpoint ID looks like vpce-01234d5aff67890e1. The VPC endpoint you use must include the DataSync service name (for example, com.amazonaws.us-east-2.datasync). public var vpcEndpointId: Swift.String? public init( @@ -631,7 +765,7 @@ extension CreateAgentOutputResponse: ClientRuntime.HttpResponseBinding { /// CreateAgentResponse public struct CreateAgentOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the agent. Use the ListAgents operation to return a list of agents for your account and Amazon Web Services Region. + /// The ARN of the agent that you just activated. Use the [ListAgents](https://docs.aws.amazon.com/datasync/latest/userguide/API_ListAgents.html) operation to return a list of agents in your Amazon Web Services account and Amazon Web Services Region. public var agentArn: Swift.String? public init( @@ -658,6 +792,216 @@ extension CreateAgentOutputResponseBody: Swift.Decodable { } } +extension CreateLocationAzureBlobInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case accessTier = "AccessTier" + case agentArns = "AgentArns" + case authenticationType = "AuthenticationType" + case blobType = "BlobType" + case containerUrl = "ContainerUrl" + case sasConfiguration = "SasConfiguration" + case subdirectory = "Subdirectory" + case tags = "Tags" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accessTier = self.accessTier { + try encodeContainer.encode(accessTier.rawValue, forKey: .accessTier) + } + if let agentArns = agentArns { + var agentArnsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .agentArns) + for agentarn0 in agentArns { + try agentArnsContainer.encode(agentarn0) + } + } + if let authenticationType = self.authenticationType { + try encodeContainer.encode(authenticationType.rawValue, forKey: .authenticationType) + } + if let blobType = self.blobType { + try encodeContainer.encode(blobType.rawValue, forKey: .blobType) + } + if let containerUrl = self.containerUrl { + try encodeContainer.encode(containerUrl, forKey: .containerUrl) + } + if let sasConfiguration = self.sasConfiguration { + try encodeContainer.encode(sasConfiguration, forKey: .sasConfiguration) + } + if let subdirectory = self.subdirectory { + try encodeContainer.encode(subdirectory, forKey: .subdirectory) + } + if let tags = tags { + var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) + for taglistentry0 in tags { + try tagsContainer.encode(taglistentry0) + } + } + } +} + +extension CreateLocationAzureBlobInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct CreateLocationAzureBlobInput: Swift.Equatable { + /// Specifies the access tier that you want your objects or files transferred into. This only applies when using the location as a transfer destination. For more information, see [Access tiers](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access-tiers). + public var accessTier: DataSyncClientTypes.AzureAccessTier? + /// Specifies the Amazon Resource Name (ARN) of the DataSync agent that can connect with your Azure Blob Storage container. You can specify more than one agent. For more information, see [Using multiple agents for your transfer](https://docs.aws.amazon.com/datasync/latest/userguide/multiple-agents.html). + /// This member is required. + public var agentArns: [Swift.String]? + /// Specifies the authentication method DataSync uses to access your Azure Blob Storage. DataSync can access blob storage using a shared access signature (SAS). + /// This member is required. + public var authenticationType: DataSyncClientTypes.AzureBlobAuthenticationType? + /// Specifies the type of blob that you want your objects or files to be when transferring them into Azure Blob Storage. Currently, DataSync only supports moving data into Azure Blob Storage as block blobs. For more information on blob types, see the [Azure Blob Storage documentation](https://learn.microsoft.com/en-us/rest/api/storageservices/understanding-block-blobs--append-blobs--and-page-blobs). + public var blobType: DataSyncClientTypes.AzureBlobType? + /// Specifies the URL of the Azure Blob Storage container involved in your transfer. + /// This member is required. + public var containerUrl: Swift.String? + /// Specifies the SAS configuration that allows DataSync to access your Azure Blob Storage. + public var sasConfiguration: DataSyncClientTypes.AzureBlobSasConfiguration? + /// Specifies path segments if you want to limit your transfer to a virtual directory in your container (for example, /my/images). + public var subdirectory: Swift.String? + /// Specifies labels that help you categorize, filter, and search for your Amazon Web Services resources. We recommend creating at least a name tag for your transfer location. + public var tags: [DataSyncClientTypes.TagListEntry]? + + public init( + accessTier: DataSyncClientTypes.AzureAccessTier? = nil, + agentArns: [Swift.String]? = nil, + authenticationType: DataSyncClientTypes.AzureBlobAuthenticationType? = nil, + blobType: DataSyncClientTypes.AzureBlobType? = nil, + containerUrl: Swift.String? = nil, + sasConfiguration: DataSyncClientTypes.AzureBlobSasConfiguration? = nil, + subdirectory: Swift.String? = nil, + tags: [DataSyncClientTypes.TagListEntry]? = nil + ) + { + self.accessTier = accessTier + self.agentArns = agentArns + self.authenticationType = authenticationType + self.blobType = blobType + self.containerUrl = containerUrl + self.sasConfiguration = sasConfiguration + self.subdirectory = subdirectory + self.tags = tags + } +} + +struct CreateLocationAzureBlobInputBody: Swift.Equatable { + let containerUrl: Swift.String? + let authenticationType: DataSyncClientTypes.AzureBlobAuthenticationType? + let sasConfiguration: DataSyncClientTypes.AzureBlobSasConfiguration? + let blobType: DataSyncClientTypes.AzureBlobType? + let accessTier: DataSyncClientTypes.AzureAccessTier? + let subdirectory: Swift.String? + let agentArns: [Swift.String]? + let tags: [DataSyncClientTypes.TagListEntry]? +} + +extension CreateLocationAzureBlobInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case accessTier = "AccessTier" + case agentArns = "AgentArns" + case authenticationType = "AuthenticationType" + case blobType = "BlobType" + case containerUrl = "ContainerUrl" + case sasConfiguration = "SasConfiguration" + case subdirectory = "Subdirectory" + case tags = "Tags" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let containerUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .containerUrl) + containerUrl = containerUrlDecoded + let authenticationTypeDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.AzureBlobAuthenticationType.self, forKey: .authenticationType) + authenticationType = authenticationTypeDecoded + let sasConfigurationDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.AzureBlobSasConfiguration.self, forKey: .sasConfiguration) + sasConfiguration = sasConfigurationDecoded + let blobTypeDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.AzureBlobType.self, forKey: .blobType) + blobType = blobTypeDecoded + let accessTierDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.AzureAccessTier.self, forKey: .accessTier) + accessTier = accessTierDecoded + let subdirectoryDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .subdirectory) + subdirectory = subdirectoryDecoded + let agentArnsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .agentArns) + var agentArnsDecoded0:[Swift.String]? = nil + if let agentArnsContainer = agentArnsContainer { + agentArnsDecoded0 = [Swift.String]() + for string0 in agentArnsContainer { + if let string0 = string0 { + agentArnsDecoded0?.append(string0) + } + } + } + agentArns = agentArnsDecoded0 + let tagsContainer = try containerValues.decodeIfPresent([DataSyncClientTypes.TagListEntry?].self, forKey: .tags) + var tagsDecoded0:[DataSyncClientTypes.TagListEntry]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [DataSyncClientTypes.TagListEntry]() + for structure0 in tagsContainer { + if let structure0 = structure0 { + tagsDecoded0?.append(structure0) + } + } + } + tags = tagsDecoded0 + } +} + +public enum CreateLocationAzureBlobOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalException": return try await InternalException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidRequestException": return try await InvalidRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension CreateLocationAzureBlobOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: CreateLocationAzureBlobOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.locationArn = output.locationArn + } else { + self.locationArn = nil + } + } +} + +public struct CreateLocationAzureBlobOutputResponse: Swift.Equatable { + /// The ARN of the Azure Blob Storage transfer location that you created. + public var locationArn: Swift.String? + + public init( + locationArn: Swift.String? = nil + ) + { + self.locationArn = locationArn + } +} + +struct CreateLocationAzureBlobOutputResponseBody: Swift.Equatable { + let locationArn: Swift.String? +} + +extension CreateLocationAzureBlobOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case locationArn = "LocationArn" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let locationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .locationArn) + locationArn = locationArnDecoded + } +} + extension CreateLocationEfsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case accessPointArn = "AccessPointArn" @@ -1435,7 +1779,7 @@ public struct CreateLocationFsxWindowsInput: Swift.Equatable { public var subdirectory: Swift.String? /// Specifies labels that help you categorize, filter, and search for your Amazon Web Services resources. We recommend creating at least a name tag for your location. public var tags: [DataSyncClientTypes.TagListEntry]? - /// Specifies the user who has the permissions to access files and folders in the file system. For information about choosing a user name that ensures sufficient permissions to files, folders, and metadata, see [user]. + /// Specifies the user who has the permissions to access files, folders, and metadata in your file system. For information about choosing a user with sufficient permissions, see [Required permissions](https://docs.aws.amazon.com/datasync/latest/userguide/create-fsx-location.html#create-fsx-windows-location-permissions). /// This member is required. public var user: Swift.String? @@ -1891,18 +2235,18 @@ extension CreateLocationNfsInput: ClientRuntime.URLPathProvider { /// CreateLocationNfsRequest public struct CreateLocationNfsInput: Swift.Equatable { - /// The NFS mount options that DataSync can use to mount your NFS share. + /// Specifies the mount options that DataSync can use to mount your NFS share. public var mountOptions: DataSyncClientTypes.NfsMountOptions? - /// Contains a list of Amazon Resource Names (ARNs) of agents that are used to connect to an NFS server. If you are copying data to or from your Snowcone device, see [NFS Server on Snowcone](https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone) for more information. + /// Specifies the Amazon Resource Names (ARNs) of agents that DataSync uses to connect to your NFS file server. If you are copying data to or from your Snowcone device, see [NFS Server on Snowcone](https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone) for more information. /// This member is required. public var onPremConfig: DataSyncClientTypes.OnPremConfig? - /// The name of the NFS server. This value is the IP address or Domain Name Service (DNS) name of the NFS server. An agent that is installed on-premises uses this hostname to mount the NFS server in a network. If you are copying data to or from your Snowcone device, see [NFS Server on Snowcone](https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone) for more information. This name must either be DNS-compliant or must be an IP version 4 (IPv4) address. + /// Specifies the IP address or domain name of your NFS file server. An agent that is installed on-premises uses this hostname to mount the NFS server in a network. If you are copying data to or from your Snowcone device, see [NFS Server on Snowcone](https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone) for more information. You must specify be an IP version 4 address or Domain Name System (DNS)-compliant name. /// This member is required. public var serverHostname: Swift.String? - /// The subdirectory in the NFS file system that is used to read data from the NFS source location or write data to the NFS destination. The NFS path should be a path that's exported by the NFS server, or a subdirectory of that path. The path should be such that it can be mounted by other NFS clients in your network. To see all the paths exported by your NFS server, run "showmount -e nfs-server-name" from an NFS client that has access to your server. You can specify any directory that appears in the results, and any subdirectory of that directory. Ensure that the NFS export is accessible without Kerberos authentication. To transfer all the data in the folder you specified, DataSync needs to have permissions to read all the data. To ensure this, either configure the NFS export with no_root_squash, or ensure that the permissions for all of the files that you want DataSync allow read access for all users. Doing either enables the agent to read the files. For the agent to access directories, you must additionally enable all execute access. If you are copying data to or from your Snowcone device, see [NFS Server on Snowcone](https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone) for more information. For information about NFS export configuration, see 18.7. The /etc/exports Configuration File in the Red Hat Enterprise Linux documentation. + /// Specifies the subdirectory in the NFS file server that DataSync transfers to or from. The NFS path should be a path that's exported by the NFS server, or a subdirectory of that path. The path should be such that it can be mounted by other NFS clients in your network. To see all the paths exported by your NFS server, run "showmount -e nfs-server-name" from an NFS client that has access to your server. You can specify any directory that appears in the results, and any subdirectory of that directory. Ensure that the NFS export is accessible without Kerberos authentication. To transfer all the data in the folder you specified, DataSync needs to have permissions to read all the data. To ensure this, either configure the NFS export with no_root_squash, or ensure that the permissions for all of the files that you want DataSync allow read access for all users. Doing either enables the agent to read the files. For the agent to access directories, you must additionally enable all execute access. If you are copying data to or from your Snowcone device, see [NFS Server on Snowcone](https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone) for more information. /// This member is required. public var subdirectory: Swift.String? - /// The key-value pair that represents the tag that you want to add to the location. The value can be an empty string. We recommend using tags to name your resources. + /// Specifies labels that help you categorize, filter, and search for your Amazon Web Services resources. We recommend creating at least a name tag for your location. public var tags: [DataSyncClientTypes.TagListEntry]? public init( @@ -1988,7 +2332,7 @@ extension CreateLocationNfsOutputResponse: ClientRuntime.HttpResponseBinding { /// CreateLocationNfsResponse public struct CreateLocationNfsOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the source NFS file system location that is created. + /// The ARN of the transfer location that you created for your NFS file server. public var locationArn: Swift.String? public init( @@ -2093,7 +2437,18 @@ public struct CreateLocationObjectStorageInput: Swift.Equatable { public var bucketName: Swift.String? /// Specifies the secret key (for example, a password) if credentials are required to authenticate with the object storage server. public var secretKey: Swift.String? - /// Specifies a certificate to authenticate with an object storage system that uses a private or self-signed certificate authority (CA). You must specify a Base64-encoded .pem file (for example, file:///home/user/.ssh/storage_sys_certificate.pem). The certificate can be up to 32768 bytes (before Base64 encoding). To use this parameter, configure ServerProtocol to HTTPS. + /// Specifies a file with the certificates that are used to sign the object storage server's certificate (for example, file:///home/user/.ssh/storage_sys_certificate.pem). The file you specify must include the following: + /// + /// * The certificate of the signing certificate authority (CA) + /// + /// * Any intermediate certificates + /// + /// * base64 encoding + /// + /// * A .pem extension + /// + /// + /// The file can be up to 32768 bytes (before base64 encoding). To use this parameter, configure ServerProtocol to HTTPS. public var serverCertificate: ClientRuntime.Data? /// Specifies the domain name or IP address of the object storage server. A DataSync agent uses this hostname to mount the object storage server in a network. /// This member is required. @@ -3474,6 +3829,175 @@ extension DescribeDiscoveryJobOutputResponseBody: Swift.Decodable { } } +extension DescribeLocationAzureBlobInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case locationArn = "LocationArn" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let locationArn = self.locationArn { + try encodeContainer.encode(locationArn, forKey: .locationArn) + } + } +} + +extension DescribeLocationAzureBlobInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct DescribeLocationAzureBlobInput: Swift.Equatable { + /// Specifies the Amazon Resource Name (ARN) of your Azure Blob Storage transfer location. + /// This member is required. + public var locationArn: Swift.String? + + public init( + locationArn: Swift.String? = nil + ) + { + self.locationArn = locationArn + } +} + +struct DescribeLocationAzureBlobInputBody: Swift.Equatable { + let locationArn: Swift.String? +} + +extension DescribeLocationAzureBlobInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case locationArn = "LocationArn" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let locationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .locationArn) + locationArn = locationArnDecoded + } +} + +public enum DescribeLocationAzureBlobOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalException": return try await InternalException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidRequestException": return try await InvalidRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DescribeLocationAzureBlobOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeLocationAzureBlobOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.accessTier = output.accessTier + self.agentArns = output.agentArns + self.authenticationType = output.authenticationType + self.blobType = output.blobType + self.creationTime = output.creationTime + self.locationArn = output.locationArn + self.locationUri = output.locationUri + } else { + self.accessTier = nil + self.agentArns = nil + self.authenticationType = nil + self.blobType = nil + self.creationTime = nil + self.locationArn = nil + self.locationUri = nil + } + } +} + +public struct DescribeLocationAzureBlobOutputResponse: Swift.Equatable { + /// The access tier that you want your objects or files transferred into. This only applies when using the location as a transfer destination. For more information, see [Access tiers](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access-tiers). + public var accessTier: DataSyncClientTypes.AzureAccessTier? + /// The ARNs of the DataSync agents that can connect with your Azure Blob Storage container. + public var agentArns: [Swift.String]? + /// The authentication method DataSync uses to access your Azure Blob Storage. DataSync can access blob storage using a shared access signature (SAS). + public var authenticationType: DataSyncClientTypes.AzureBlobAuthenticationType? + /// The type of blob that you want your objects or files to be when transferring them into Azure Blob Storage. Currently, DataSync only supports moving data into Azure Blob Storage as block blobs. For more information on blob types, see the [Azure Blob Storage documentation](https://learn.microsoft.com/en-us/rest/api/storageservices/understanding-block-blobs--append-blobs--and-page-blobs). + public var blobType: DataSyncClientTypes.AzureBlobType? + /// The time that your Azure Blob Storage transfer location was created. + public var creationTime: ClientRuntime.Date? + /// The ARN of your Azure Blob Storage transfer location. + public var locationArn: Swift.String? + /// The URL of the Azure Blob Storage container involved in your transfer. + public var locationUri: Swift.String? + + public init( + accessTier: DataSyncClientTypes.AzureAccessTier? = nil, + agentArns: [Swift.String]? = nil, + authenticationType: DataSyncClientTypes.AzureBlobAuthenticationType? = nil, + blobType: DataSyncClientTypes.AzureBlobType? = nil, + creationTime: ClientRuntime.Date? = nil, + locationArn: Swift.String? = nil, + locationUri: Swift.String? = nil + ) + { + self.accessTier = accessTier + self.agentArns = agentArns + self.authenticationType = authenticationType + self.blobType = blobType + self.creationTime = creationTime + self.locationArn = locationArn + self.locationUri = locationUri + } +} + +struct DescribeLocationAzureBlobOutputResponseBody: Swift.Equatable { + let locationArn: Swift.String? + let locationUri: Swift.String? + let authenticationType: DataSyncClientTypes.AzureBlobAuthenticationType? + let blobType: DataSyncClientTypes.AzureBlobType? + let accessTier: DataSyncClientTypes.AzureAccessTier? + let agentArns: [Swift.String]? + let creationTime: ClientRuntime.Date? +} + +extension DescribeLocationAzureBlobOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case accessTier = "AccessTier" + case agentArns = "AgentArns" + case authenticationType = "AuthenticationType" + case blobType = "BlobType" + case creationTime = "CreationTime" + case locationArn = "LocationArn" + case locationUri = "LocationUri" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let locationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .locationArn) + locationArn = locationArnDecoded + let locationUriDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .locationUri) + locationUri = locationUriDecoded + let authenticationTypeDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.AzureBlobAuthenticationType.self, forKey: .authenticationType) + authenticationType = authenticationTypeDecoded + let blobTypeDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.AzureBlobType.self, forKey: .blobType) + blobType = blobTypeDecoded + let accessTierDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.AzureAccessTier.self, forKey: .accessTier) + accessTier = accessTierDecoded + let agentArnsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .agentArns) + var agentArnsDecoded0:[Swift.String]? = nil + if let agentArnsContainer = agentArnsContainer { + agentArnsDecoded0 = [Swift.String]() + for string0 in agentArnsContainer { + if let string0 = string0 { + agentArnsDecoded0?.append(string0) + } + } + } + agentArns = agentArnsDecoded0 + let creationTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationTime) + creationTime = creationTimeDecoded + } +} + extension DescribeLocationEfsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case locationArn = "LocationArn" @@ -4569,7 +5093,7 @@ public struct DescribeLocationNfsOutputResponse: Swift.Equatable { public var locationArn: Swift.String? /// The URL of the source NFS location that was described. public var locationUri: Swift.String? - /// The NFS mount options that DataSync used to mount your NFS share. + /// The mount options that DataSync uses to mount your NFS share. public var mountOptions: DataSyncClientTypes.NfsMountOptions? /// A list of Amazon Resource Names (ARNs) of agents to use for a Network File System (NFS) location. public var onPremConfig: DataSyncClientTypes.OnPremConfig? @@ -5753,7 +6277,7 @@ extension DescribeTaskExecutionInput: ClientRuntime.URLPathProvider { /// DescribeTaskExecutionRequest public struct DescribeTaskExecutionInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the task that is being executed. + /// Specifies the Amazon Resource Name (ARN) of the transfer task that's running. /// This member is required. public var taskExecutionArn: Swift.String? @@ -5993,7 +6517,7 @@ extension DescribeTaskInput: ClientRuntime.URLPathProvider { /// DescribeTaskRequest public struct DescribeTaskInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the task to describe. + /// Specifies the Amazon Resource Name (ARN) of the transfer task. /// This member is required. public var taskArn: Swift.String? @@ -8783,6 +9307,7 @@ extension DataSyncClientTypes.NetAppONTAPCluster: Swift.Codable { case clusterBlockStorageSize = "ClusterBlockStorageSize" case clusterBlockStorageUsed = "ClusterBlockStorageUsed" case clusterName = "ClusterName" + case lunCount = "LunCount" case maxP95Performance = "MaxP95Performance" case nfsExportedVolumes = "NfsExportedVolumes" case recommendationStatus = "RecommendationStatus" @@ -8807,6 +9332,9 @@ extension DataSyncClientTypes.NetAppONTAPCluster: Swift.Codable { if let clusterName = self.clusterName { try encodeContainer.encode(clusterName, forKey: .clusterName) } + if let lunCount = self.lunCount { + try encodeContainer.encode(lunCount, forKey: .lunCount) + } if let maxP95Performance = self.maxP95Performance { try encodeContainer.encode(maxP95Performance, forKey: .maxP95Performance) } @@ -8858,6 +9386,8 @@ extension DataSyncClientTypes.NetAppONTAPCluster: Swift.Codable { recommendations = recommendationsDecoded0 let recommendationStatusDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.RecommendationStatus.self, forKey: .recommendationStatus) recommendationStatus = recommendationStatusDecoded + let lunCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .lunCount) + lunCount = lunCountDecoded } } @@ -8874,6 +9404,8 @@ extension DataSyncClientTypes { public var clusterBlockStorageUsed: Swift.Int? /// The name of the cluster. public var clusterName: Swift.String? + /// The number of LUNs (logical unit numbers) in the cluster. + public var lunCount: Swift.Int? /// The performance data that DataSync Discovery collects about the cluster. public var maxP95Performance: DataSyncClientTypes.MaxP95Performance? /// The number of NFS volumes in the cluster. @@ -8891,6 +9423,7 @@ extension DataSyncClientTypes { clusterBlockStorageSize: Swift.Int? = nil, clusterBlockStorageUsed: Swift.Int? = nil, clusterName: Swift.String? = nil, + lunCount: Swift.Int? = nil, maxP95Performance: DataSyncClientTypes.MaxP95Performance? = nil, nfsExportedVolumes: Swift.Int? = nil, recommendationStatus: DataSyncClientTypes.RecommendationStatus? = nil, @@ -8903,6 +9436,7 @@ extension DataSyncClientTypes { self.clusterBlockStorageSize = clusterBlockStorageSize self.clusterBlockStorageUsed = clusterBlockStorageUsed self.clusterName = clusterName + self.lunCount = lunCount self.maxP95Performance = maxP95Performance self.nfsExportedVolumes = nfsExportedVolumes self.recommendationStatus = recommendationStatus @@ -8918,6 +9452,7 @@ extension DataSyncClientTypes.NetAppONTAPSVM: Swift.Codable { case cifsShareCount = "CifsShareCount" case clusterUuid = "ClusterUuid" case enabledProtocols = "EnabledProtocols" + case lunCount = "LunCount" case maxP95Performance = "MaxP95Performance" case nfsExportedVolumes = "NfsExportedVolumes" case recommendationStatus = "RecommendationStatus" @@ -8944,6 +9479,9 @@ extension DataSyncClientTypes.NetAppONTAPSVM: Swift.Codable { try enabledProtocolsContainer.encode(ptolemystring0) } } + if let lunCount = self.lunCount { + try encodeContainer.encode(lunCount, forKey: .lunCount) + } if let maxP95Performance = self.maxP95Performance { try encodeContainer.encode(maxP95Performance, forKey: .maxP95Performance) } @@ -9025,6 +9563,8 @@ extension DataSyncClientTypes.NetAppONTAPSVM: Swift.Codable { recommendationStatus = recommendationStatusDecoded let totalSnapshotCapacityUsedDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .totalSnapshotCapacityUsed) totalSnapshotCapacityUsed = totalSnapshotCapacityUsedDecoded + let lunCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .lunCount) + lunCount = lunCountDecoded } } @@ -9037,6 +9577,8 @@ extension DataSyncClientTypes { public var clusterUuid: Swift.String? /// The data transfer protocols (such as NFS) configured for the SVM. public var enabledProtocols: [Swift.String]? + /// The number of LUNs (logical unit numbers) in the SVM. + public var lunCount: Swift.Int? /// The performance data that DataSync Discovery collects about the SVM. public var maxP95Performance: DataSyncClientTypes.MaxP95Performance? /// The number of NFS volumes in the SVM. @@ -9062,6 +9604,7 @@ extension DataSyncClientTypes { cifsShareCount: Swift.Int? = nil, clusterUuid: Swift.String? = nil, enabledProtocols: [Swift.String]? = nil, + lunCount: Swift.Int? = nil, maxP95Performance: DataSyncClientTypes.MaxP95Performance? = nil, nfsExportedVolumes: Swift.Int? = nil, recommendationStatus: DataSyncClientTypes.RecommendationStatus? = nil, @@ -9077,6 +9620,7 @@ extension DataSyncClientTypes { self.cifsShareCount = cifsShareCount self.clusterUuid = clusterUuid self.enabledProtocols = enabledProtocols + self.lunCount = lunCount self.maxP95Performance = maxP95Performance self.nfsExportedVolumes = nfsExportedVolumes self.recommendationStatus = recommendationStatus @@ -9098,6 +9642,7 @@ extension DataSyncClientTypes.NetAppONTAPVolume: Swift.Codable { case capacityUsed = "CapacityUsed" case cifsShareCount = "CifsShareCount" case logicalCapacityUsed = "LogicalCapacityUsed" + case lunCount = "LunCount" case maxP95Performance = "MaxP95Performance" case nfsExported = "NfsExported" case recommendationStatus = "RecommendationStatus" @@ -9124,6 +9669,9 @@ extension DataSyncClientTypes.NetAppONTAPVolume: Swift.Codable { if let logicalCapacityUsed = self.logicalCapacityUsed { try encodeContainer.encode(logicalCapacityUsed, forKey: .logicalCapacityUsed) } + if let lunCount = self.lunCount { + try encodeContainer.encode(lunCount, forKey: .lunCount) + } if let maxP95Performance = self.maxP95Performance { try encodeContainer.encode(maxP95Performance, forKey: .maxP95Performance) } @@ -9198,6 +9746,8 @@ extension DataSyncClientTypes.NetAppONTAPVolume: Swift.Codable { recommendations = recommendationsDecoded0 let recommendationStatusDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.RecommendationStatus.self, forKey: .recommendationStatus) recommendationStatus = recommendationStatusDecoded + let lunCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .lunCount) + lunCount = lunCountDecoded } } @@ -9212,6 +9762,8 @@ extension DataSyncClientTypes { public var cifsShareCount: Swift.Int? /// The storage space that's being used in the volume without accounting for compression or deduplication. public var logicalCapacityUsed: Swift.Int? + /// The number of LUNs (logical unit numbers) in the volume. + public var lunCount: Swift.Int? /// The performance data that DataSync Discovery collects about the volume. public var maxP95Performance: DataSyncClientTypes.MaxP95Performance? /// The number of NFS volumes in the volume. @@ -9238,6 +9790,7 @@ extension DataSyncClientTypes { capacityUsed: Swift.Int? = nil, cifsShareCount: Swift.Int? = nil, logicalCapacityUsed: Swift.Int? = nil, + lunCount: Swift.Int? = nil, maxP95Performance: DataSyncClientTypes.MaxP95Performance? = nil, nfsExported: Swift.Bool = false, recommendationStatus: DataSyncClientTypes.RecommendationStatus? = nil, @@ -9254,6 +9807,7 @@ extension DataSyncClientTypes { self.capacityUsed = capacityUsed self.cifsShareCount = cifsShareCount self.logicalCapacityUsed = logicalCapacityUsed + self.lunCount = lunCount self.maxP95Performance = maxP95Performance self.nfsExported = nfsExported self.recommendationStatus = recommendationStatus @@ -9665,7 +10219,7 @@ extension DataSyncClientTypes { /// /// NONE: None of the SMB security descriptor components are copied. Destination objects are owned by the user that was provided for accessing the destination location. DACLs and SACLs are set based on the destination server’s configuration. public var securityDescriptorCopyFlags: DataSyncClientTypes.SmbSecurityDescriptorCopyFlags? - /// Specifies whether tasks should be queued before executing the tasks. The default is ENABLED, which means the tasks will be queued. If you use the same agent to run multiple tasks, you can enable the tasks to run in series. For more information, see [Queueing task executions](https://docs.aws.amazon.com/datasync/latest/userguide/run-task.html#queue-task-execution). + /// Specifies whether your transfer tasks should be put into a queue during certain scenarios when [running multiple tasks](https://docs.aws.amazon.com/datasync/latest/userguide/run-task.html#running-multiple-tasks). This is ENABLED by default. public var taskQueueing: DataSyncClientTypes.TaskQueueing? /// Determines whether DataSync transfers only the data and metadata that differ between the source and the destination location or transfers all the content from the source (without comparing what's in the destination). CHANGED: DataSync copies only data or metadata that is new or different content from the source location to the destination location. ALL: DataSync copies all source location content to the destination (without comparing what's in the destination). public var transferMode: DataSyncClientTypes.TransferMode? @@ -9992,15 +10546,15 @@ extension DataSyncClientTypes.PrivateLinkConfig: Swift.Codable { } extension DataSyncClientTypes { - /// The VPC endpoint, subnet, and security group that an agent uses to access IP addresses in a VPC (Virtual Private Cloud). + /// Specifies how your DataSync agent connects to Amazon Web Services using a virtual private cloud (VPC) service endpoint. An agent that uses a VPC endpoint isn't accessible over the public internet. public struct PrivateLinkConfig: Swift.Equatable { - /// The private endpoint that is configured for an agent that has access to IP addresses in a [PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html). An agent that is configured with this endpoint will not be accessible over the public internet. + /// Specifies the VPC endpoint provided by [Amazon Web Services PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) that your agent connects to. public var privateLinkEndpoint: Swift.String? - /// The Amazon Resource Names (ARNs) of the security groups that are configured for the EC2 resource that hosts an agent activated in a VPC or an agent that has access to a VPC endpoint. + /// Specifies the Amazon Resource Names (ARN) of the security group that provides DataSync access to your VPC endpoint. You can only specify one ARN. public var securityGroupArns: [Swift.String]? - /// The Amazon Resource Names (ARNs) of the subnets that are configured for an agent activated in a VPC or an agent that has access to a VPC endpoint. + /// Specifies the ARN of the subnet where your VPC endpoint is located. You can only specify one ARN. public var subnetArns: [Swift.String]? - /// The ID of the VPC endpoint that is configured for an agent. An agent that is configured with a VPC endpoint will not be accessible over the public internet. + /// Specifies the ID of the VPC endpoint that your agent connects to. public var vpcEndpointId: Swift.String? public init( @@ -12110,6 +12664,160 @@ public struct UpdateDiscoveryJobOutputResponse: Swift.Equatable { public init() { } } +extension UpdateLocationAzureBlobInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case accessTier = "AccessTier" + case agentArns = "AgentArns" + case authenticationType = "AuthenticationType" + case blobType = "BlobType" + case locationArn = "LocationArn" + case sasConfiguration = "SasConfiguration" + case subdirectory = "Subdirectory" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let accessTier = self.accessTier { + try encodeContainer.encode(accessTier.rawValue, forKey: .accessTier) + } + if let agentArns = agentArns { + var agentArnsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .agentArns) + for agentarn0 in agentArns { + try agentArnsContainer.encode(agentarn0) + } + } + if let authenticationType = self.authenticationType { + try encodeContainer.encode(authenticationType.rawValue, forKey: .authenticationType) + } + if let blobType = self.blobType { + try encodeContainer.encode(blobType.rawValue, forKey: .blobType) + } + if let locationArn = self.locationArn { + try encodeContainer.encode(locationArn, forKey: .locationArn) + } + if let sasConfiguration = self.sasConfiguration { + try encodeContainer.encode(sasConfiguration, forKey: .sasConfiguration) + } + if let subdirectory = self.subdirectory { + try encodeContainer.encode(subdirectory, forKey: .subdirectory) + } + } +} + +extension UpdateLocationAzureBlobInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct UpdateLocationAzureBlobInput: Swift.Equatable { + /// Specifies the access tier that you want your objects or files transferred into. This only applies when using the location as a transfer destination. For more information, see [Access tiers](https://docs.aws.amazon.com/datasync/latest/userguide/creating-azure-blob-location.html#azure-blob-access-tiers). + public var accessTier: DataSyncClientTypes.AzureAccessTier? + /// Specifies the Amazon Resource Name (ARN) of the DataSync agent that can connect with your Azure Blob Storage container. You can specify more than one agent. For more information, see [Using multiple agents for your transfer](https://docs.aws.amazon.com/datasync/latest/userguide/multiple-agents.html). + public var agentArns: [Swift.String]? + /// Specifies the authentication method DataSync uses to access your Azure Blob Storage. DataSync can access blob storage using a shared access signature (SAS). + public var authenticationType: DataSyncClientTypes.AzureBlobAuthenticationType? + /// Specifies the type of blob that you want your objects or files to be when transferring them into Azure Blob Storage. Currently, DataSync only supports moving data into Azure Blob Storage as block blobs. For more information on blob types, see the [Azure Blob Storage documentation](https://learn.microsoft.com/en-us/rest/api/storageservices/understanding-block-blobs--append-blobs--and-page-blobs). + public var blobType: DataSyncClientTypes.AzureBlobType? + /// Specifies the ARN of the Azure Blob Storage transfer location that you're updating. + /// This member is required. + public var locationArn: Swift.String? + /// Specifies the SAS configuration that allows DataSync to access your Azure Blob Storage. + public var sasConfiguration: DataSyncClientTypes.AzureBlobSasConfiguration? + /// Specifies path segments if you want to limit your transfer to a virtual directory in your container (for example, /my/images). + public var subdirectory: Swift.String? + + public init( + accessTier: DataSyncClientTypes.AzureAccessTier? = nil, + agentArns: [Swift.String]? = nil, + authenticationType: DataSyncClientTypes.AzureBlobAuthenticationType? = nil, + blobType: DataSyncClientTypes.AzureBlobType? = nil, + locationArn: Swift.String? = nil, + sasConfiguration: DataSyncClientTypes.AzureBlobSasConfiguration? = nil, + subdirectory: Swift.String? = nil + ) + { + self.accessTier = accessTier + self.agentArns = agentArns + self.authenticationType = authenticationType + self.blobType = blobType + self.locationArn = locationArn + self.sasConfiguration = sasConfiguration + self.subdirectory = subdirectory + } +} + +struct UpdateLocationAzureBlobInputBody: Swift.Equatable { + let locationArn: Swift.String? + let subdirectory: Swift.String? + let authenticationType: DataSyncClientTypes.AzureBlobAuthenticationType? + let sasConfiguration: DataSyncClientTypes.AzureBlobSasConfiguration? + let blobType: DataSyncClientTypes.AzureBlobType? + let accessTier: DataSyncClientTypes.AzureAccessTier? + let agentArns: [Swift.String]? +} + +extension UpdateLocationAzureBlobInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case accessTier = "AccessTier" + case agentArns = "AgentArns" + case authenticationType = "AuthenticationType" + case blobType = "BlobType" + case locationArn = "LocationArn" + case sasConfiguration = "SasConfiguration" + case subdirectory = "Subdirectory" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let locationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .locationArn) + locationArn = locationArnDecoded + let subdirectoryDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .subdirectory) + subdirectory = subdirectoryDecoded + let authenticationTypeDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.AzureBlobAuthenticationType.self, forKey: .authenticationType) + authenticationType = authenticationTypeDecoded + let sasConfigurationDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.AzureBlobSasConfiguration.self, forKey: .sasConfiguration) + sasConfiguration = sasConfigurationDecoded + let blobTypeDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.AzureBlobType.self, forKey: .blobType) + blobType = blobTypeDecoded + let accessTierDecoded = try containerValues.decodeIfPresent(DataSyncClientTypes.AzureAccessTier.self, forKey: .accessTier) + accessTier = accessTierDecoded + let agentArnsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .agentArns) + var agentArnsDecoded0:[Swift.String]? = nil + if let agentArnsContainer = agentArnsContainer { + agentArnsDecoded0 = [Swift.String]() + for string0 in agentArnsContainer { + if let string0 = string0 { + agentArnsDecoded0?.append(string0) + } + } + } + agentArns = agentArnsDecoded0 + } +} + +public enum UpdateLocationAzureBlobOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalException": return try await InternalException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidRequestException": return try await InvalidRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UpdateLocationAzureBlobOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct UpdateLocationAzureBlobOutputResponse: Swift.Equatable { + + public init() { } +} + extension UpdateLocationHdfsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case agentArns = "AgentArns" @@ -12380,14 +13088,14 @@ extension UpdateLocationNfsInput: ClientRuntime.URLPathProvider { } public struct UpdateLocationNfsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the NFS location to update. + /// Specifies the Amazon Resource Name (ARN) of the NFS location that you want to update. /// This member is required. public var locationArn: Swift.String? /// Specifies how DataSync can access a location using the NFS protocol. public var mountOptions: DataSyncClientTypes.NfsMountOptions? /// A list of Amazon Resource Names (ARNs) of agents to use for a Network File System (NFS) location. public var onPremConfig: DataSyncClientTypes.OnPremConfig? - /// The subdirectory in the NFS file system that is used to read data from the NFS source location or write data to the NFS destination. The NFS path should be a path that's exported by the NFS server, or a subdirectory of that path. The path should be such that it can be mounted by other NFS clients in your network. To see all the paths exported by your NFS server, run "showmount -e nfs-server-name" from an NFS client that has access to your server. You can specify any directory that appears in the results, and any subdirectory of that directory. Ensure that the NFS export is accessible without Kerberos authentication. To transfer all the data in the folder that you specified, DataSync must have permissions to read all the data. To ensure this, either configure the NFS export with no_root_squash, or ensure that the files you want DataSync to access have permissions that allow read access for all users. Doing either option enables the agent to read the files. For the agent to access directories, you must additionally enable all execute access. If you are copying data to or from your Snowcone device, see [NFS Server on Snowcone](https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone) for more information. For information about NFS export configuration, see 18.7. The /etc/exports Configuration File in the Red Hat Enterprise Linux documentation. + /// Specifies the subdirectory in your NFS file system that DataSync uses to read from or write to during a transfer. The NFS path should be exported by the NFS server, or a subdirectory of that path. The path should be such that it can be mounted by other NFS clients in your network. To see all the paths exported by your NFS server, run "showmount -e nfs-server-name" from an NFS client that has access to your server. You can specify any directory that appears in the results, and any subdirectory of that directory. Ensure that the NFS export is accessible without Kerberos authentication. To transfer all the data in the folder that you specified, DataSync must have permissions to read all the data. To ensure this, either configure the NFS export with no_root_squash, or ensure that the files you want DataSync to access have permissions that allow read access for all users. Doing either option enables the agent to read the files. For the agent to access directories, you must additionally enable all execute access. If you are copying data to or from your Snowcone device, see [NFS Server on Snowcone](https://docs.aws.amazon.com/datasync/latest/userguide/create-nfs-location.html#nfs-on-snowcone) for more information. public var subdirectory: Swift.String? public init( @@ -12834,7 +13542,7 @@ extension UpdateStorageSystemInput: ClientRuntime.URLPathProvider { } public struct UpdateStorageSystemInput: Swift.Equatable { - /// Specifies the Amazon Resource Name (ARN) of the DataSync agent that connects to and reads your on-premises storage system. + /// Specifies the Amazon Resource Name (ARN) of the DataSync agent that connects to and reads your on-premises storage system. You can only specify one ARN. public var agentArns: [Swift.String]? /// Specifies the ARN of the Amazon CloudWatch log group for monitoring and logging discovery job events. public var cloudWatchLogGroupArn: Swift.String? diff --git a/Sources/Services/AWSDatabaseMigrationService/DatabaseMigrationClient.swift b/Sources/Services/AWSDatabaseMigrationService/DatabaseMigrationClient.swift index 62185e785a8..a1929aaadcb 100644 --- a/Sources/Services/AWSDatabaseMigrationService/DatabaseMigrationClient.swift +++ b/Sources/Services/AWSDatabaseMigrationService/DatabaseMigrationClient.swift @@ -1140,6 +1140,43 @@ extension DatabaseMigrationClient: DatabaseMigrationClientProtocol { return result } + /// Returns information about the replication instance versions used in the project. + public func describeEngineVersions(input: DescribeEngineVersionsInput) async throws -> DescribeEngineVersionsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "describeEngineVersions") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "dms") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "describeEngineVersions") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AmazonDMSv20160101.DescribeEngineVersions")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "DescribeEngineVersionsMessage")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Lists categories for all event source types, or, if specified, for a specified source type. You can see a list of the event categories and source types in [Working with Events and Notifications](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Events.html) in the Database Migration Service User Guide. public func describeEventCategories(input: DescribeEventCategoriesInput) async throws -> DescribeEventCategoriesOutputResponse { diff --git a/Sources/Services/AWSDatabaseMigrationService/DatabaseMigrationClientProtocol.swift b/Sources/Services/AWSDatabaseMigrationService/DatabaseMigrationClientProtocol.swift index 0a31f5495cb..3ac0ac8d0f5 100644 --- a/Sources/Services/AWSDatabaseMigrationService/DatabaseMigrationClientProtocol.swift +++ b/Sources/Services/AWSDatabaseMigrationService/DatabaseMigrationClientProtocol.swift @@ -62,6 +62,8 @@ public protocol DatabaseMigrationClientProtocol { func describeEndpointSettings(input: DescribeEndpointSettingsInput) async throws -> DescribeEndpointSettingsOutputResponse /// Returns information about the type of endpoints available. func describeEndpointTypes(input: DescribeEndpointTypesInput) async throws -> DescribeEndpointTypesOutputResponse + /// Returns information about the replication instance versions used in the project. + func describeEngineVersions(input: DescribeEngineVersionsInput) async throws -> DescribeEngineVersionsOutputResponse /// Lists categories for all event source types, or, if specified, for a specified source type. You can see a list of the event categories and source types in [Working with Events and Notifications](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Events.html) in the Database Migration Service User Guide. func describeEventCategories(input: DescribeEventCategoriesInput) async throws -> DescribeEventCategoriesOutputResponse /// Lists events for a given source identifier and source type. You can also specify a start and end time. For more information on DMS events, see [Working with Events and Notifications](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Events.html) in the Database Migration Service User Guide. diff --git a/Sources/Services/AWSDatabaseMigrationService/Paginators.swift b/Sources/Services/AWSDatabaseMigrationService/Paginators.swift index f4c6fedcde2..00674c8eaa5 100644 --- a/Sources/Services/AWSDatabaseMigrationService/Paginators.swift +++ b/Sources/Services/AWSDatabaseMigrationService/Paginators.swift @@ -138,6 +138,27 @@ extension DescribeEndpointTypesInput: ClientRuntime.PaginateToken { maxRecords: self.maxRecords )} } +extension DatabaseMigrationClient { + /// Paginate over `[DescribeEngineVersionsOutputResponse]` 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 `[DescribeEngineVersionsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `DescribeEngineVersionsOutputResponse` + public func describeEngineVersionsPaginated(input: DescribeEngineVersionsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \DescribeEngineVersionsInput.marker, outputKey: \DescribeEngineVersionsOutputResponse.marker, paginationFunction: self.describeEngineVersions(input:)) + } +} + +extension DescribeEngineVersionsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> DescribeEngineVersionsInput { + return DescribeEngineVersionsInput( + marker: token, + maxRecords: self.maxRecords + )} +} extension DatabaseMigrationClient { /// Paginate over `[DescribeEventsOutputResponse]` results. /// diff --git a/Sources/Services/AWSDatabaseMigrationService/models/Models.swift b/Sources/Services/AWSDatabaseMigrationService/models/Models.swift index 31b9efeeb7e..463c9386720 100644 --- a/Sources/Services/AWSDatabaseMigrationService/models/Models.swift +++ b/Sources/Services/AWSDatabaseMigrationService/models/Models.swift @@ -3609,6 +3609,38 @@ extension DatabaseMigrationClientTypes { } +extension DatabaseMigrationClientTypes { + public enum DatabaseMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case babelfish + case `default` + case sdkUnknown(Swift.String) + + public static var allCases: [DatabaseMode] { + return [ + .babelfish, + .default, + .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 .babelfish: return "babelfish" + case .default: return "default" + 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 = DatabaseMode(rawValue: rawValue) ?? DatabaseMode.sdkUnknown(rawValue) + } + } +} + extension DatabaseMigrationClientTypes.DatabaseResponse: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case collectors = "Collectors" @@ -6003,6 +6035,134 @@ extension DescribeEndpointsOutputResponseBody: Swift.Decodable { } } +extension DescribeEngineVersionsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case marker = "Marker" + case maxRecords = "MaxRecords" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let marker = self.marker { + try encodeContainer.encode(marker, forKey: .marker) + } + if let maxRecords = self.maxRecords { + try encodeContainer.encode(maxRecords, forKey: .maxRecords) + } + } +} + +extension DescribeEngineVersionsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct DescribeEngineVersionsInput: Swift.Equatable { + /// An optional pagination token provided by a previous request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords. + public var marker: Swift.String? + /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that the remaining results can be retrieved. + public var maxRecords: Swift.Int? + + public init( + marker: Swift.String? = nil, + maxRecords: Swift.Int? = nil + ) + { + self.marker = marker + self.maxRecords = maxRecords + } +} + +struct DescribeEngineVersionsInputBody: Swift.Equatable { + let maxRecords: Swift.Int? + let marker: Swift.String? +} + +extension DescribeEngineVersionsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case marker = "Marker" + case maxRecords = "MaxRecords" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let maxRecordsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxRecords) + maxRecords = maxRecordsDecoded + let markerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .marker) + marker = markerDecoded + } +} + +public enum DescribeEngineVersionsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DescribeEngineVersionsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeEngineVersionsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.engineVersions = output.engineVersions + self.marker = output.marker + } else { + self.engineVersions = nil + self.marker = nil + } + } +} + +public struct DescribeEngineVersionsOutputResponse: Swift.Equatable { + /// Returned EngineVersion objects that describe the replication instance engine versions used in the project. + public var engineVersions: [DatabaseMigrationClientTypes.EngineVersion]? + /// An optional pagination token provided by a previous request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords. + public var marker: Swift.String? + + public init( + engineVersions: [DatabaseMigrationClientTypes.EngineVersion]? = nil, + marker: Swift.String? = nil + ) + { + self.engineVersions = engineVersions + self.marker = marker + } +} + +struct DescribeEngineVersionsOutputResponseBody: Swift.Equatable { + let engineVersions: [DatabaseMigrationClientTypes.EngineVersion]? + let marker: Swift.String? +} + +extension DescribeEngineVersionsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case engineVersions = "EngineVersions" + case marker = "Marker" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let engineVersionsContainer = try containerValues.decodeIfPresent([DatabaseMigrationClientTypes.EngineVersion?].self, forKey: .engineVersions) + var engineVersionsDecoded0:[DatabaseMigrationClientTypes.EngineVersion]? = nil + if let engineVersionsContainer = engineVersionsContainer { + engineVersionsDecoded0 = [DatabaseMigrationClientTypes.EngineVersion]() + for structure0 in engineVersionsContainer { + if let structure0 = structure0 { + engineVersionsDecoded0?.append(structure0) + } + } + } + engineVersions = engineVersionsDecoded0 + let markerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .marker) + marker = markerDecoded + } +} + extension DescribeEventCategoriesInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case filters = "Filters" @@ -10925,6 +11085,123 @@ extension DatabaseMigrationClientTypes { } } +extension DatabaseMigrationClientTypes.EngineVersion: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case autoUpgradeDate = "AutoUpgradeDate" + case availableUpgrades = "AvailableUpgrades" + case deprecationDate = "DeprecationDate" + case forceUpgradeDate = "ForceUpgradeDate" + case launchDate = "LaunchDate" + case lifecycle = "Lifecycle" + case releaseStatus = "ReleaseStatus" + case version = "Version" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let autoUpgradeDate = self.autoUpgradeDate { + try encodeContainer.encodeTimestamp(autoUpgradeDate, format: .epochSeconds, forKey: .autoUpgradeDate) + } + if let availableUpgrades = availableUpgrades { + var availableUpgradesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .availableUpgrades) + for string0 in availableUpgrades { + try availableUpgradesContainer.encode(string0) + } + } + if let deprecationDate = self.deprecationDate { + try encodeContainer.encodeTimestamp(deprecationDate, format: .epochSeconds, forKey: .deprecationDate) + } + if let forceUpgradeDate = self.forceUpgradeDate { + try encodeContainer.encodeTimestamp(forceUpgradeDate, format: .epochSeconds, forKey: .forceUpgradeDate) + } + if let launchDate = self.launchDate { + try encodeContainer.encodeTimestamp(launchDate, format: .epochSeconds, forKey: .launchDate) + } + if let lifecycle = self.lifecycle { + try encodeContainer.encode(lifecycle, forKey: .lifecycle) + } + if let releaseStatus = self.releaseStatus { + try encodeContainer.encode(releaseStatus.rawValue, forKey: .releaseStatus) + } + if let version = self.version { + try encodeContainer.encode(version, forKey: .version) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let versionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .version) + version = versionDecoded + let lifecycleDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lifecycle) + lifecycle = lifecycleDecoded + let releaseStatusDecoded = try containerValues.decodeIfPresent(DatabaseMigrationClientTypes.ReleaseStatusValues.self, forKey: .releaseStatus) + releaseStatus = releaseStatusDecoded + let launchDateDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .launchDate) + launchDate = launchDateDecoded + let autoUpgradeDateDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .autoUpgradeDate) + autoUpgradeDate = autoUpgradeDateDecoded + let deprecationDateDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .deprecationDate) + deprecationDate = deprecationDateDecoded + let forceUpgradeDateDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .forceUpgradeDate) + forceUpgradeDate = forceUpgradeDateDecoded + let availableUpgradesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .availableUpgrades) + var availableUpgradesDecoded0:[Swift.String]? = nil + if let availableUpgradesContainer = availableUpgradesContainer { + availableUpgradesDecoded0 = [Swift.String]() + for string0 in availableUpgradesContainer { + if let string0 = string0 { + availableUpgradesDecoded0?.append(string0) + } + } + } + availableUpgrades = availableUpgradesDecoded0 + } +} + +extension DatabaseMigrationClientTypes { + /// Provides information about a replication instance version. + public struct EngineVersion: Swift.Equatable { + /// The date when the replication instance will be automatically upgraded. This setting only applies if the auto-minor-version setting is enabled. + public var autoUpgradeDate: ClientRuntime.Date? + /// The list of valid replication instance versions that you can upgrade to. + public var availableUpgrades: [Swift.String]? + /// The date when the replication instance version will be deprecated and can no longer be requested. + public var deprecationDate: ClientRuntime.Date? + /// The date when the replication instance will have a version upgrade forced. + public var forceUpgradeDate: ClientRuntime.Date? + /// The date when the replication instance version became publicly available. + public var launchDate: ClientRuntime.Date? + /// The lifecycle status of the replication instance version. Valid values are DEPRECATED, DEFAULT_VERSION, and ACTIVE. + public var lifecycle: Swift.String? + /// The release status of the replication instance version. + public var releaseStatus: DatabaseMigrationClientTypes.ReleaseStatusValues? + /// The version number of the replication instance. + public var version: Swift.String? + + public init( + autoUpgradeDate: ClientRuntime.Date? = nil, + availableUpgrades: [Swift.String]? = nil, + deprecationDate: ClientRuntime.Date? = nil, + forceUpgradeDate: ClientRuntime.Date? = nil, + launchDate: ClientRuntime.Date? = nil, + lifecycle: Swift.String? = nil, + releaseStatus: DatabaseMigrationClientTypes.ReleaseStatusValues? = nil, + version: Swift.String? = nil + ) + { + self.autoUpgradeDate = autoUpgradeDate + self.availableUpgrades = availableUpgrades + self.deprecationDate = deprecationDate + self.forceUpgradeDate = forceUpgradeDate + self.launchDate = launchDate + self.lifecycle = lifecycle + self.releaseStatus = releaseStatus + self.version = version + } + } + +} + extension DatabaseMigrationClientTypes.Event: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case date = "Date" @@ -16399,7 +16676,9 @@ extension DatabaseMigrationClientTypes { extension DatabaseMigrationClientTypes.PostgreSQLSettings: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case afterConnectScript = "AfterConnectScript" + case babelfishDatabaseName = "BabelfishDatabaseName" case captureDdls = "CaptureDdls" + case databaseMode = "DatabaseMode" case databaseName = "DatabaseName" case ddlArtifactsSchema = "DdlArtifactsSchema" case executeTimeout = "ExecuteTimeout" @@ -16427,9 +16706,15 @@ extension DatabaseMigrationClientTypes.PostgreSQLSettings: Swift.Codable { if let afterConnectScript = self.afterConnectScript { try encodeContainer.encode(afterConnectScript, forKey: .afterConnectScript) } + if let babelfishDatabaseName = self.babelfishDatabaseName { + try encodeContainer.encode(babelfishDatabaseName, forKey: .babelfishDatabaseName) + } if let captureDdls = self.captureDdls { try encodeContainer.encode(captureDdls, forKey: .captureDdls) } + if let databaseMode = self.databaseMode { + try encodeContainer.encode(databaseMode.rawValue, forKey: .databaseMode) + } if let databaseName = self.databaseName { try encodeContainer.encode(databaseName, forKey: .databaseName) } @@ -16538,12 +16823,16 @@ extension DatabaseMigrationClientTypes.PostgreSQLSettings: Swift.Codable { mapJsonbAsClob = mapJsonbAsClobDecoded let mapLongVarcharAsDecoded = try containerValues.decodeIfPresent(DatabaseMigrationClientTypes.LongVarcharMappingType.self, forKey: .mapLongVarcharAs) mapLongVarcharAs = mapLongVarcharAsDecoded + let databaseModeDecoded = try containerValues.decodeIfPresent(DatabaseMigrationClientTypes.DatabaseMode.self, forKey: .databaseMode) + databaseMode = databaseModeDecoded + let babelfishDatabaseNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .babelfishDatabaseName) + babelfishDatabaseName = babelfishDatabaseNameDecoded } } extension DatabaseMigrationClientTypes.PostgreSQLSettings: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "PostgreSQLSettings(afterConnectScript: \(Swift.String(describing: afterConnectScript)), captureDdls: \(Swift.String(describing: captureDdls)), databaseName: \(Swift.String(describing: databaseName)), ddlArtifactsSchema: \(Swift.String(describing: ddlArtifactsSchema)), executeTimeout: \(Swift.String(describing: executeTimeout)), failTasksOnLobTruncation: \(Swift.String(describing: failTasksOnLobTruncation)), heartbeatEnable: \(Swift.String(describing: heartbeatEnable)), heartbeatFrequency: \(Swift.String(describing: heartbeatFrequency)), heartbeatSchema: \(Swift.String(describing: heartbeatSchema)), mapBooleanAsBoolean: \(Swift.String(describing: mapBooleanAsBoolean)), mapJsonbAsClob: \(Swift.String(describing: mapJsonbAsClob)), mapLongVarcharAs: \(Swift.String(describing: mapLongVarcharAs)), maxFileSize: \(Swift.String(describing: maxFileSize)), pluginName: \(Swift.String(describing: pluginName)), port: \(Swift.String(describing: port)), secretsManagerAccessRoleArn: \(Swift.String(describing: secretsManagerAccessRoleArn)), secretsManagerSecretId: \(Swift.String(describing: secretsManagerSecretId)), serverName: \(Swift.String(describing: serverName)), slotName: \(Swift.String(describing: slotName)), trimSpaceInChar: \(Swift.String(describing: trimSpaceInChar)), username: \(Swift.String(describing: username)), password: \"CONTENT_REDACTED\")"} + "PostgreSQLSettings(afterConnectScript: \(Swift.String(describing: afterConnectScript)), babelfishDatabaseName: \(Swift.String(describing: babelfishDatabaseName)), captureDdls: \(Swift.String(describing: captureDdls)), databaseMode: \(Swift.String(describing: databaseMode)), databaseName: \(Swift.String(describing: databaseName)), ddlArtifactsSchema: \(Swift.String(describing: ddlArtifactsSchema)), executeTimeout: \(Swift.String(describing: executeTimeout)), failTasksOnLobTruncation: \(Swift.String(describing: failTasksOnLobTruncation)), heartbeatEnable: \(Swift.String(describing: heartbeatEnable)), heartbeatFrequency: \(Swift.String(describing: heartbeatFrequency)), heartbeatSchema: \(Swift.String(describing: heartbeatSchema)), mapBooleanAsBoolean: \(Swift.String(describing: mapBooleanAsBoolean)), mapJsonbAsClob: \(Swift.String(describing: mapJsonbAsClob)), mapLongVarcharAs: \(Swift.String(describing: mapLongVarcharAs)), maxFileSize: \(Swift.String(describing: maxFileSize)), pluginName: \(Swift.String(describing: pluginName)), port: \(Swift.String(describing: port)), secretsManagerAccessRoleArn: \(Swift.String(describing: secretsManagerAccessRoleArn)), secretsManagerSecretId: \(Swift.String(describing: secretsManagerSecretId)), serverName: \(Swift.String(describing: serverName)), slotName: \(Swift.String(describing: slotName)), trimSpaceInChar: \(Swift.String(describing: trimSpaceInChar)), username: \(Swift.String(describing: username)), password: \"CONTENT_REDACTED\")"} } extension DatabaseMigrationClientTypes { @@ -16551,8 +16840,12 @@ extension DatabaseMigrationClientTypes { public struct PostgreSQLSettings: Swift.Equatable { /// For use with change data capture (CDC) only, this attribute has DMS bypass foreign keys and user triggers to reduce the time it takes to bulk load data. Example: afterConnectScript=SET session_replication_role='replica' public var afterConnectScript: Swift.String? + /// The Babelfish for Aurora PostgreSQL database name for the endpoint. + public var babelfishDatabaseName: Swift.String? /// To capture DDL events, DMS creates various artifacts in the PostgreSQL database when the task starts. You can later remove these artifacts. If this value is set to N, you don't have to create tables or triggers on the source database. public var captureDdls: Swift.Bool? + /// Specifies the default behavior of the replication's handling of PostgreSQL- compatible endpoints that require some additional configuration, such as Babelfish endpoints. + public var databaseMode: DatabaseMigrationClientTypes.DatabaseMode? /// Database name for the endpoint. public var databaseName: Swift.String? /// The schema in which the operational DDL database artifacts are created. Example: ddlArtifactsSchema=xyzddlschema; @@ -16596,7 +16889,9 @@ extension DatabaseMigrationClientTypes { public init( afterConnectScript: Swift.String? = nil, + babelfishDatabaseName: Swift.String? = nil, captureDdls: Swift.Bool? = nil, + databaseMode: DatabaseMigrationClientTypes.DatabaseMode? = nil, databaseName: Swift.String? = nil, ddlArtifactsSchema: Swift.String? = nil, executeTimeout: Swift.Int? = nil, @@ -16620,7 +16915,9 @@ extension DatabaseMigrationClientTypes { ) { self.afterConnectScript = afterConnectScript + self.babelfishDatabaseName = babelfishDatabaseName self.captureDdls = captureDdls + self.databaseMode = databaseMode self.databaseName = databaseName self.ddlArtifactsSchema = ddlArtifactsSchema self.executeTimeout = executeTimeout diff --git a/Sources/Services/AWSDocDB/DocDBClientProtocol.swift b/Sources/Services/AWSDocDB/DocDBClientProtocol.swift index a603b8bb44e..fc619ad71d7 100644 --- a/Sources/Services/AWSDocDB/DocDBClientProtocol.swift +++ b/Sources/Services/AWSDocDB/DocDBClientProtocol.swift @@ -2,7 +2,7 @@ import ClientRuntime -/// Amazon DocumentDB API documentation +/// Amazon DocumentDB is a fast, reliable, and fully managed database service. Amazon DocumentDB makes it easy to set up, operate, and scale MongoDB-compatible databases in the cloud. With Amazon DocumentDB, you can run the same application code and use the same drivers and tools that you use with MongoDB. public protocol DocDBClientProtocol { /// Adds a source identifier to an existing event notification subscription. func addSourceIdentifierToSubscription(input: AddSourceIdentifierToSubscriptionInput) async throws -> AddSourceIdentifierToSubscriptionOutputResponse diff --git a/Sources/Services/AWSDocDB/models/Models.swift b/Sources/Services/AWSDocDB/models/Models.swift index f9390e70e4e..34cfb5ea10d 100644 --- a/Sources/Services/AWSDocDB/models/Models.swift +++ b/Sources/Services/AWSDocDB/models/Models.swift @@ -11623,6 +11623,9 @@ extension ListTagsForResourceOutputResponseBody: Swift.Decodable { extension ModifyDBClusterInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if allowMajorVersionUpgrade != false { + try container.encode(allowMajorVersionUpgrade, forKey: ClientRuntime.Key("AllowMajorVersionUpgrade")) + } if applyImmediately != false { try container.encode(applyImmediately, forKey: ClientRuntime.Key("ApplyImmediately")) } @@ -11684,6 +11687,8 @@ extension ModifyDBClusterInput: ClientRuntime.URLPathProvider { /// Represents the input to [ModifyDBCluster]. public struct ModifyDBClusterInput: Swift.Equatable { + /// 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. + public var allowMajorVersionUpgrade: Swift.Bool /// A value that specifies whether the changes in this request and any pending changes are asynchronously applied as soon as possible, regardless of the PreferredMaintenanceWindow setting for the cluster. If this parameter is set to false, changes to the cluster are applied during the next maintenance window. The ApplyImmediately parameter affects only the NewDBClusterIdentifier and MasterUserPassword values. If you set this parameter value to false, the changes to the NewDBClusterIdentifier and MasterUserPassword values are applied during the next maintenance window. All other changes are applied immediately, regardless of the value of the ApplyImmediately parameter. Default: false public var applyImmediately: Swift.Bool /// The number of days for which automated backups are retained. You must specify a minimum value of 1. Default: 1 Constraints: @@ -11701,7 +11706,7 @@ public struct ModifyDBClusterInput: Swift.Equatable { public var dbClusterParameterGroupName: Swift.String? /// Specifies whether this cluster can be deleted. If DeletionProtection is enabled, the cluster cannot be deleted unless it is modified and DeletionProtection is disabled. DeletionProtection protects clusters from being accidentally deleted. public var deletionProtection: Swift.Bool? - /// The version number of the database engine to which you want to upgrade. Modifying engine version is not supported on Amazon DocumentDB. + /// 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. To list all of the available engine versions for Amazon DocumentDB use the following command: aws docdb describe-db-engine-versions --engine docdb --query "DBEngineVersions[].EngineVersion" public var engineVersion: Swift.String? /// The password for the master database user. This password can contain any printable ASCII character except forward slash (/), double quote ("), or the "at" symbol (@). Constraints: Must contain from 8 to 100 characters. public var masterUserPassword: Swift.String? @@ -11734,6 +11739,7 @@ public struct ModifyDBClusterInput: Swift.Equatable { public var vpcSecurityGroupIds: [Swift.String]? public init( + allowMajorVersionUpgrade: Swift.Bool = false, applyImmediately: Swift.Bool = false, backupRetentionPeriod: Swift.Int? = nil, cloudwatchLogsExportConfiguration: DocDBClientTypes.CloudwatchLogsExportConfiguration? = nil, @@ -11749,6 +11755,7 @@ public struct ModifyDBClusterInput: Swift.Equatable { vpcSecurityGroupIds: [Swift.String]? = nil ) { + self.allowMajorVersionUpgrade = allowMajorVersionUpgrade self.applyImmediately = applyImmediately self.backupRetentionPeriod = backupRetentionPeriod self.cloudwatchLogsExportConfiguration = cloudwatchLogsExportConfiguration @@ -11778,11 +11785,13 @@ struct ModifyDBClusterInputBody: Swift.Equatable { let preferredMaintenanceWindow: Swift.String? let cloudwatchLogsExportConfiguration: DocDBClientTypes.CloudwatchLogsExportConfiguration? let engineVersion: Swift.String? + let allowMajorVersionUpgrade: Swift.Bool let deletionProtection: Swift.Bool? } extension ModifyDBClusterInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case allowMajorVersionUpgrade = "AllowMajorVersionUpgrade" case applyImmediately = "ApplyImmediately" case backupRetentionPeriod = "BackupRetentionPeriod" case cloudwatchLogsExportConfiguration = "CloudwatchLogsExportConfiguration" @@ -11841,6 +11850,8 @@ extension ModifyDBClusterInputBody: Swift.Decodable { cloudwatchLogsExportConfiguration = cloudwatchLogsExportConfigurationDecoded let engineVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .engineVersion) engineVersion = engineVersionDecoded + let allowMajorVersionUpgradeDecoded = try containerValues.decode(Swift.Bool.self, forKey: .allowMajorVersionUpgrade) + allowMajorVersionUpgrade = allowMajorVersionUpgradeDecoded let deletionProtectionDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .deletionProtection) deletionProtection = deletionProtectionDecoded } diff --git a/Sources/Services/AWSDrs/models/Models.swift b/Sources/Services/AWSDrs/models/Models.swift index edfe3e21035..8ff07077d37 100644 --- a/Sources/Services/AWSDrs/models/Models.swift +++ b/Sources/Services/AWSDrs/models/Models.swift @@ -11511,12 +11511,14 @@ public struct TagResourceOutputResponse: Swift.Equatable { extension DrsClientTypes { public enum TargetInstanceTypeRightSizingMethod: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case basic + case inAws case `none` case sdkUnknown(Swift.String) public static var allCases: [TargetInstanceTypeRightSizingMethod] { return [ .basic, + .inAws, .none, .sdkUnknown("") ] @@ -11528,6 +11530,7 @@ extension DrsClientTypes { public var rawValue: Swift.String { switch self { case .basic: return "BASIC" + case .inAws: return "IN_AWS" case .none: return "NONE" case let .sdkUnknown(s): return s } diff --git a/Sources/Services/AWSDynamoDB/DynamoDBClient.swift b/Sources/Services/AWSDynamoDB/DynamoDBClient.swift index ac888b4e4a2..83d234bdd9c 100644 --- a/Sources/Services/AWSDynamoDB/DynamoDBClient.swift +++ b/Sources/Services/AWSDynamoDB/DynamoDBClient.swift @@ -1677,7 +1677,7 @@ extension DynamoDBClient: DynamoDBClientProtocol { return result } - /// The Scan operation returns one or more items and item attributes by accessing every item in a table or a secondary index. To have DynamoDB return fewer items, you can provide a FilterExpression operation. If the total number of scanned items exceeds the maximum dataset size limit of 1 MB, the scan stops and results are returned to the user as a LastEvaluatedKey value to continue the scan in a subsequent operation. The results also include the number of items exceeding the limit. A scan can result in no table data meeting the filter criteria. A single Scan operation reads 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 need to paginate the result set. For more information, see [Paginating the Results](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.Pagination) in the Amazon DynamoDB Developer Guide. Scan operations proceed sequentially; however, for faster performance on a large table or secondary index, applications can request a parallel Scan operation by providing the Segment and TotalSegments parameters. For more information, see [Parallel Scan](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.ParallelScan) in the Amazon DynamoDB Developer Guide. Scan uses eventually consistent reads when accessing the data in a table; therefore, the result set might not include the changes to data in the table immediately before the operation began. If you need a consistent copy of the data, as of the time that the Scan begins, you can set the ConsistentRead parameter to true. + /// The Scan operation returns one or more items and item attributes by accessing every item in a table or a secondary index. To have DynamoDB return fewer items, you can provide a FilterExpression operation. If the total size of scanned items exceeds the maximum dataset size limit of 1 MB, the scan completes and results are returned to the user. The LastEvaluatedKey value is also returned and the requestor can use the LastEvaluatedKey to continue the scan in a subsequent operation. Each scan response also includes number of items that were scanned (ScannedCount) as part of the request. If using a FilterExpression, a scan result can result in no items meeting the criteria and the Count will result in zero. If you did not use a FilterExpression in the scan request, then Count is the same as ScannedCount. Count and ScannedCount only return the count of items specific to a single scan request and, unless the table is less than 1MB, do not represent the total number of items in the table. A single Scan operation first reads up to the maximum number of items set (if using the Limit parameter) or a maximum of 1 MB of data and then applies any filtering to the results if a FilterExpression is provided. If LastEvaluatedKey is present in the response, pagination is required to complete the full table scan. For more information, see [Paginating the Results](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.Pagination) in the Amazon DynamoDB Developer Guide. Scan operations proceed sequentially; however, for faster performance on a large table or secondary index, applications can request a parallel Scan operation by providing the Segment and TotalSegments parameters. For more information, see [Parallel Scan](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.ParallelScan) in the Amazon DynamoDB Developer Guide. By default, a Scan uses eventually consistent reads when accessing the items in a table. Therefore, the results from an eventually consistent Scan may not include the latest item changes at the time the scan iterates through each item in the table. If you require a strongly consistent read of each item as the scan iterates through the items in the table, you can set the ConsistentRead parameter to true. Strong consistency only relates to the consistency of the read at the item level. DynamoDB does not provide snapshot isolation for a scan operation when the ConsistentRead parameter is set to true. Thus, a DynamoDB scan operation does not guarantee that all reads in a scan see a consistent snapshot of the table when the scan operation was requested. public func scan(input: ScanInput) async throws -> ScanOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSDynamoDB/DynamoDBClientProtocol.swift b/Sources/Services/AWSDynamoDB/DynamoDBClientProtocol.swift index 2c2fb092331..b6bf8996278 100644 --- a/Sources/Services/AWSDynamoDB/DynamoDBClientProtocol.swift +++ b/Sources/Services/AWSDynamoDB/DynamoDBClientProtocol.swift @@ -190,7 +190,7 @@ public protocol DynamoDBClientProtocol { /// /// * Point in time recovery settings func restoreTableToPointInTime(input: RestoreTableToPointInTimeInput) async throws -> RestoreTableToPointInTimeOutputResponse - /// The Scan operation returns one or more items and item attributes by accessing every item in a table or a secondary index. To have DynamoDB return fewer items, you can provide a FilterExpression operation. If the total number of scanned items exceeds the maximum dataset size limit of 1 MB, the scan stops and results are returned to the user as a LastEvaluatedKey value to continue the scan in a subsequent operation. The results also include the number of items exceeding the limit. A scan can result in no table data meeting the filter criteria. A single Scan operation reads 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 need to paginate the result set. For more information, see [Paginating the Results](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.Pagination) in the Amazon DynamoDB Developer Guide. Scan operations proceed sequentially; however, for faster performance on a large table or secondary index, applications can request a parallel Scan operation by providing the Segment and TotalSegments parameters. For more information, see [Parallel Scan](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.ParallelScan) in the Amazon DynamoDB Developer Guide. Scan uses eventually consistent reads when accessing the data in a table; therefore, the result set might not include the changes to data in the table immediately before the operation began. If you need a consistent copy of the data, as of the time that the Scan begins, you can set the ConsistentRead parameter to true. + /// The Scan operation returns one or more items and item attributes by accessing every item in a table or a secondary index. To have DynamoDB return fewer items, you can provide a FilterExpression operation. If the total size of scanned items exceeds the maximum dataset size limit of 1 MB, the scan completes and results are returned to the user. The LastEvaluatedKey value is also returned and the requestor can use the LastEvaluatedKey to continue the scan in a subsequent operation. Each scan response also includes number of items that were scanned (ScannedCount) as part of the request. If using a FilterExpression, a scan result can result in no items meeting the criteria and the Count will result in zero. If you did not use a FilterExpression in the scan request, then Count is the same as ScannedCount. Count and ScannedCount only return the count of items specific to a single scan request and, unless the table is less than 1MB, do not represent the total number of items in the table. A single Scan operation first reads up to the maximum number of items set (if using the Limit parameter) or a maximum of 1 MB of data and then applies any filtering to the results if a FilterExpression is provided. If LastEvaluatedKey is present in the response, pagination is required to complete the full table scan. For more information, see [Paginating the Results](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.Pagination) in the Amazon DynamoDB Developer Guide. Scan operations proceed sequentially; however, for faster performance on a large table or secondary index, applications can request a parallel Scan operation by providing the Segment and TotalSegments parameters. For more information, see [Parallel Scan](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.ParallelScan) in the Amazon DynamoDB Developer Guide. By default, a Scan uses eventually consistent reads when accessing the items in a table. Therefore, the results from an eventually consistent Scan may not include the latest item changes at the time the scan iterates through each item in the table. If you require a strongly consistent read of each item as the scan iterates through the items in the table, you can set the ConsistentRead parameter to true. Strong consistency only relates to the consistency of the read at the item level. DynamoDB does not provide snapshot isolation for a scan operation when the ConsistentRead parameter is set to true. Thus, a DynamoDB scan operation does not guarantee that all reads in a scan see a consistent snapshot of the table when the scan operation was requested. func scan(input: ScanInput) async throws -> ScanOutputResponse /// Associate a set of tags with an Amazon DynamoDB resource. You can then activate these user-defined tags so that they appear on the Billing and Cost Management console for cost allocation tracking. You can call TagResource up to five times per second, per account. For an overview on tagging DynamoDB resources, see [Tagging for DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.html) in the Amazon DynamoDB Developer Guide. func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse diff --git a/Sources/Services/AWSDynamoDB/models/Models.swift b/Sources/Services/AWSDynamoDB/models/Models.swift index 679b35dc5eb..815ddd424f4 100644 --- a/Sources/Services/AWSDynamoDB/models/Models.swift +++ b/Sources/Services/AWSDynamoDB/models/Models.swift @@ -1403,7 +1403,7 @@ extension BatchExecuteStatementOutputResponse: ClientRuntime.HttpResponseBinding public struct BatchExecuteStatementOutputResponse: Swift.Equatable { /// The capacity units consumed by the entire operation. The values of the list are ordered according to the ordering of the statements. public var consumedCapacity: [DynamoDBClientTypes.ConsumedCapacity]? - /// The response to each PartiQL statement in the batch. + /// The response to each PartiQL statement in the batch. The values of the list are ordered according to the ordering of the request statements. public var responses: [DynamoDBClientTypes.BatchStatementResponse]? public init( @@ -18978,7 +18978,7 @@ extension DynamoDBClientTypes { /// The primary key of the item to be updated. Each element consists of an attribute name and a value for that attribute. /// This member is required. public var key: [Swift.String:DynamoDBClientTypes.AttributeValue]? - /// Use ReturnValuesOnConditionCheckFailure to get the item attributes if the Update condition fails. For ReturnValuesOnConditionCheckFailure, the valid values are: NONE, ALL_OLD, UPDATED_OLD, ALL_NEW, UPDATED_NEW. + /// Use ReturnValuesOnConditionCheckFailure to get the item attributes if the Update condition fails. For ReturnValuesOnConditionCheckFailure, the valid values are: NONE and ALL_OLD. public var returnValuesOnConditionCheckFailure: DynamoDBClientTypes.ReturnValuesOnConditionCheckFailure? /// Name of the table for the UpdateItem request. /// This member is required. diff --git a/Sources/Services/AWSEBS/EBSClient.swift b/Sources/Services/AWSEBS/EBSClient.swift index 20b8f1c91f3..41ccabff7b7 100644 --- a/Sources/Services/AWSEBS/EBSClient.swift +++ b/Sources/Services/AWSEBS/EBSClient.swift @@ -67,7 +67,7 @@ public struct EBSClientLogHandlerFactory: ClientRuntime.SDKLogHandlerFactory { } extension EBSClient: EBSClientProtocol { - /// Seals and completes the snapshot after all of the required blocks of data have been written to it. Completing the snapshot changes the status to completed. You cannot write new blocks to a snapshot after it has been completed. + /// Seals and completes the snapshot after all of the required blocks of data have been written to it. Completing the snapshot changes the status to completed. You cannot write new blocks to a snapshot after it has been completed. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. public func completeSnapshot(input: CompleteSnapshotInput) async throws -> CompleteSnapshotOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -101,7 +101,7 @@ extension EBSClient: EBSClientProtocol { return result } - /// Returns the data in a block in an Amazon Elastic Block Store snapshot. + /// Returns the data in a block in an Amazon Elastic Block Store snapshot. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. public func getSnapshotBlock(input: GetSnapshotBlockInput) async throws -> GetSnapshotBlockOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -135,7 +135,7 @@ extension EBSClient: EBSClientProtocol { return result } - /// Returns information about the blocks that are different between two Amazon Elastic Block Store snapshots of the same volume/snapshot lineage. + /// Returns information about the blocks that are different between two Amazon Elastic Block Store snapshots of the same volume/snapshot lineage. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. public func listChangedBlocks(input: ListChangedBlocksInput) async throws -> ListChangedBlocksOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -169,7 +169,7 @@ extension EBSClient: EBSClientProtocol { return result } - /// Returns information about the blocks in an Amazon Elastic Block Store snapshot. + /// Returns information about the blocks in an Amazon Elastic Block Store snapshot. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. public func listSnapshotBlocks(input: ListSnapshotBlocksInput) async throws -> ListSnapshotBlocksOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -203,7 +203,7 @@ extension EBSClient: EBSClientProtocol { return result } - /// Writes a block of data to a snapshot. If the specified block contains data, the existing data is overwritten. The target snapshot must be in the pending state. Data written to a snapshot must be aligned with 512-KiB sectors. + /// Writes a block of data to a snapshot. If the specified block contains data, the existing data is overwritten. The target snapshot must be in the pending state. Data written to a snapshot must be aligned with 512-KiB sectors. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. public func putSnapshotBlock(input: PutSnapshotBlockInput) async throws -> PutSnapshotBlockOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -240,7 +240,7 @@ extension EBSClient: EBSClientProtocol { return result } - /// Creates a new Amazon EBS snapshot. The new snapshot enters the pending state after the request completes. After creating the snapshot, use [ PutSnapshotBlock](https://docs.aws.amazon.com/ebs/latest/APIReference/API_PutSnapshotBlock.html) to write blocks of data to the snapshot. + /// Creates a new Amazon EBS snapshot. The new snapshot enters the pending state after the request completes. After creating the snapshot, use [ PutSnapshotBlock](https://docs.aws.amazon.com/ebs/latest/APIReference/API_PutSnapshotBlock.html) to write blocks of data to the snapshot. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. public func startSnapshot(input: StartSnapshotInput) async throws -> StartSnapshotOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSEBS/EBSClientProtocol.swift b/Sources/Services/AWSEBS/EBSClientProtocol.swift index e86343c5d60..b133a42174d 100644 --- a/Sources/Services/AWSEBS/EBSClientProtocol.swift +++ b/Sources/Services/AWSEBS/EBSClientProtocol.swift @@ -4,17 +4,17 @@ import ClientRuntime /// You can use the Amazon Elastic Block Store (Amazon EBS) direct APIs to create Amazon EBS snapshots, write data directly to your snapshots, read data on your snapshots, and identify the differences or changes between two snapshots. If you’re an independent software vendor (ISV) who offers backup services for Amazon EBS, the EBS direct APIs make it more efficient and cost-effective to track incremental changes on your Amazon EBS volumes through snapshots. This can be done without having to create new volumes from snapshots, and then use Amazon Elastic Compute Cloud (Amazon EC2) instances to compare the differences. You can create incremental snapshots directly from data on-premises into volumes and the cloud to use for quick disaster recovery. With the ability to write and read snapshots, you can write your on-premises data to an snapshot during a disaster. Then after recovery, you can restore it back to Amazon Web Services or on-premises from the snapshot. You no longer need to build and maintain complex mechanisms to copy data to and from Amazon EBS. This API reference provides detailed information about the actions, data types, parameters, and errors of the EBS direct APIs. For more information about the elements that make up the EBS direct APIs, and examples of how to use them effectively, see [Accessing the Contents of an Amazon EBS Snapshot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-accessing-snapshot.html) in the Amazon Elastic Compute Cloud User Guide. For more information about the supported Amazon Web Services Regions, endpoints, and service quotas for the EBS direct APIs, see [Amazon Elastic Block Store Endpoints and Quotas](https://docs.aws.amazon.com/general/latest/gr/ebs-service.html) in the Amazon Web Services General Reference. public protocol EBSClientProtocol { - /// Seals and completes the snapshot after all of the required blocks of data have been written to it. Completing the snapshot changes the status to completed. You cannot write new blocks to a snapshot after it has been completed. + /// Seals and completes the snapshot after all of the required blocks of data have been written to it. Completing the snapshot changes the status to completed. You cannot write new blocks to a snapshot after it has been completed. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. func completeSnapshot(input: CompleteSnapshotInput) async throws -> CompleteSnapshotOutputResponse - /// Returns the data in a block in an Amazon Elastic Block Store snapshot. + /// Returns the data in a block in an Amazon Elastic Block Store snapshot. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. func getSnapshotBlock(input: GetSnapshotBlockInput) async throws -> GetSnapshotBlockOutputResponse - /// Returns information about the blocks that are different between two Amazon Elastic Block Store snapshots of the same volume/snapshot lineage. + /// Returns information about the blocks that are different between two Amazon Elastic Block Store snapshots of the same volume/snapshot lineage. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. func listChangedBlocks(input: ListChangedBlocksInput) async throws -> ListChangedBlocksOutputResponse - /// Returns information about the blocks in an Amazon Elastic Block Store snapshot. + /// Returns information about the blocks in an Amazon Elastic Block Store snapshot. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. func listSnapshotBlocks(input: ListSnapshotBlocksInput) async throws -> ListSnapshotBlocksOutputResponse - /// Writes a block of data to a snapshot. If the specified block contains data, the existing data is overwritten. The target snapshot must be in the pending state. Data written to a snapshot must be aligned with 512-KiB sectors. + /// Writes a block of data to a snapshot. If the specified block contains data, the existing data is overwritten. The target snapshot must be in the pending state. Data written to a snapshot must be aligned with 512-KiB sectors. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. func putSnapshotBlock(input: PutSnapshotBlockInput) async throws -> PutSnapshotBlockOutputResponse - /// Creates a new Amazon EBS snapshot. The new snapshot enters the pending state after the request completes. After creating the snapshot, use [ PutSnapshotBlock](https://docs.aws.amazon.com/ebs/latest/APIReference/API_PutSnapshotBlock.html) to write blocks of data to the snapshot. + /// Creates a new Amazon EBS snapshot. The new snapshot enters the pending state after the request completes. After creating the snapshot, use [ PutSnapshotBlock](https://docs.aws.amazon.com/ebs/latest/APIReference/API_PutSnapshotBlock.html) to write blocks of data to the snapshot. You should always retry requests that receive server (5xx) error responses, and ThrottlingException and RequestThrottledException client error responses. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html) in the Amazon Elastic Compute Cloud User Guide. func startSnapshot(input: StartSnapshotInput) async throws -> StartSnapshotOutputResponse } diff --git a/Sources/Services/AWSEBS/models/Models.swift b/Sources/Services/AWSEBS/models/Models.swift index cf2c7068f28..5eaa1ecb801 100644 --- a/Sources/Services/AWSEBS/models/Models.swift +++ b/Sources/Services/AWSEBS/models/Models.swift @@ -660,7 +660,7 @@ extension InternalServerException { } } -/// An internal error has occurred. +/// An internal error has occurred. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html). public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { @@ -1247,7 +1247,7 @@ extension RequestThrottledException { } } -/// The number of API requests has exceed the maximum allowed API request throttling limit. +/// The number of API requests has exceeded the maximum allowed API request throttling limit for the snapshot. For more information see [Error retries](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/error-retries.html). public struct RequestThrottledException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { @@ -1398,12 +1398,16 @@ extension ResourceNotFoundExceptionBody: Swift.Decodable { extension EBSClientTypes { public enum ResourceNotFoundExceptionReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case dependencyResourceNotFound + case grantNotFound + case imageNotFound case snapshotNotFound case sdkUnknown(Swift.String) public static var allCases: [ResourceNotFoundExceptionReason] { return [ .dependencyResourceNotFound, + .grantNotFound, + .imageNotFound, .snapshotNotFound, .sdkUnknown("") ] @@ -1415,6 +1419,8 @@ extension EBSClientTypes { public var rawValue: Swift.String { switch self { case .dependencyResourceNotFound: return "DEPENDENCY_RESOURCE_NOT_FOUND" + case .grantNotFound: return "GRANT_NOT_FOUND" + case .imageNotFound: return "IMAGE_NOT_FOUND" case .snapshotNotFound: return "SNAPSHOT_NOT_FOUND" case let .sdkUnknown(s): return s } @@ -1427,6 +1433,41 @@ extension EBSClientTypes { } } +extension EBSClientTypes { + public enum SSEType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case `none` + case sseEbs + case sseKms + case sdkUnknown(Swift.String) + + public static var allCases: [SSEType] { + return [ + .none, + .sseEbs, + .sseKms, + .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 .none: return "none" + case .sseEbs: return "sse-ebs" + case .sseKms: return "sse-kms" + 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 = SSEType(rawValue: rawValue) ?? SSEType.sdkUnknown(rawValue) + } + } +} + extension ServiceQuotaExceededException { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -1697,7 +1738,7 @@ public enum StartSnapshotOutputError: ClientRuntime.HttpResponseErrorBinding { extension StartSnapshotOutputResponse: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "StartSnapshotOutputResponse(blockSize: \(Swift.String(describing: blockSize)), description: \(Swift.String(describing: description)), ownerId: \(Swift.String(describing: ownerId)), parentSnapshotId: \(Swift.String(describing: parentSnapshotId)), snapshotId: \(Swift.String(describing: snapshotId)), startTime: \(Swift.String(describing: startTime)), status: \(Swift.String(describing: status)), tags: \(Swift.String(describing: tags)), volumeSize: \(Swift.String(describing: volumeSize)), kmsKeyArn: \"CONTENT_REDACTED\")"} + "StartSnapshotOutputResponse(blockSize: \(Swift.String(describing: blockSize)), description: \(Swift.String(describing: description)), ownerId: \(Swift.String(describing: ownerId)), parentSnapshotId: \(Swift.String(describing: parentSnapshotId)), snapshotId: \(Swift.String(describing: snapshotId)), sseType: \(Swift.String(describing: sseType)), startTime: \(Swift.String(describing: startTime)), status: \(Swift.String(describing: status)), tags: \(Swift.String(describing: tags)), volumeSize: \(Swift.String(describing: volumeSize)), kmsKeyArn: \"CONTENT_REDACTED\")"} } extension StartSnapshotOutputResponse: ClientRuntime.HttpResponseBinding { @@ -1711,6 +1752,7 @@ extension StartSnapshotOutputResponse: ClientRuntime.HttpResponseBinding { self.ownerId = output.ownerId self.parentSnapshotId = output.parentSnapshotId self.snapshotId = output.snapshotId + self.sseType = output.sseType self.startTime = output.startTime self.status = output.status self.tags = output.tags @@ -1722,6 +1764,7 @@ extension StartSnapshotOutputResponse: ClientRuntime.HttpResponseBinding { self.ownerId = nil self.parentSnapshotId = nil self.snapshotId = nil + self.sseType = nil self.startTime = nil self.status = nil self.tags = nil @@ -1743,6 +1786,8 @@ public struct StartSnapshotOutputResponse: Swift.Equatable { public var parentSnapshotId: Swift.String? /// The ID of the snapshot. public var snapshotId: Swift.String? + /// Reserved for future use. + public var sseType: EBSClientTypes.SSEType? /// The timestamp when the snapshot was created. public var startTime: ClientRuntime.Date? /// The status of the snapshot. @@ -1759,6 +1804,7 @@ public struct StartSnapshotOutputResponse: Swift.Equatable { ownerId: Swift.String? = nil, parentSnapshotId: Swift.String? = nil, snapshotId: Swift.String? = nil, + sseType: EBSClientTypes.SSEType? = nil, startTime: ClientRuntime.Date? = nil, status: EBSClientTypes.Status? = nil, tags: [EBSClientTypes.Tag]? = nil, @@ -1771,6 +1817,7 @@ public struct StartSnapshotOutputResponse: Swift.Equatable { self.ownerId = ownerId self.parentSnapshotId = parentSnapshotId self.snapshotId = snapshotId + self.sseType = sseType self.startTime = startTime self.status = status self.tags = tags @@ -1789,6 +1836,7 @@ struct StartSnapshotOutputResponseBody: Swift.Equatable { let tags: [EBSClientTypes.Tag]? let parentSnapshotId: Swift.String? let kmsKeyArn: Swift.String? + let sseType: EBSClientTypes.SSEType? } extension StartSnapshotOutputResponseBody: Swift.Decodable { @@ -1799,6 +1847,7 @@ extension StartSnapshotOutputResponseBody: Swift.Decodable { case ownerId = "OwnerId" case parentSnapshotId = "ParentSnapshotId" case snapshotId = "SnapshotId" + case sseType = "SseType" case startTime = "StartTime" case status = "Status" case tags = "Tags" @@ -1836,6 +1885,8 @@ extension StartSnapshotOutputResponseBody: Swift.Decodable { parentSnapshotId = parentSnapshotIdDecoded let kmsKeyArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kmsKeyArn) kmsKeyArn = kmsKeyArnDecoded + let sseTypeDecoded = try containerValues.decodeIfPresent(EBSClientTypes.SSEType.self, forKey: .sseType) + sseType = sseTypeDecoded } } @@ -1992,12 +2043,15 @@ extension EBSClientTypes { case invalidContentEncoding case invalidCustomerKey case invalidDependencyRequest + case invalidGrantToken + case invalidImageId case invalidPageToken case invalidParameterValue case invalidSnapshotId case invalidTag case invalidVolumeSize case unrelatedSnapshots + case writeRequestTimeout case sdkUnknown(Swift.String) public static var allCases: [ValidationExceptionReason] { @@ -2008,12 +2062,15 @@ extension EBSClientTypes { .invalidContentEncoding, .invalidCustomerKey, .invalidDependencyRequest, + .invalidGrantToken, + .invalidImageId, .invalidPageToken, .invalidParameterValue, .invalidSnapshotId, .invalidTag, .invalidVolumeSize, .unrelatedSnapshots, + .writeRequestTimeout, .sdkUnknown("") ] } @@ -2029,12 +2086,15 @@ extension EBSClientTypes { case .invalidContentEncoding: return "INVALID_CONTENT_ENCODING" case .invalidCustomerKey: return "INVALID_CUSTOMER_KEY" case .invalidDependencyRequest: return "INVALID_DEPENDENCY_REQUEST" + case .invalidGrantToken: return "INVALID_GRANT_TOKEN" + case .invalidImageId: return "INVALID_IMAGE_ID" case .invalidPageToken: return "INVALID_PAGE_TOKEN" case .invalidParameterValue: return "INVALID_PARAMETER_VALUE" case .invalidSnapshotId: return "INVALID_SNAPSHOT_ID" case .invalidTag: return "INVALID_TAG" case .invalidVolumeSize: return "INVALID_VOLUME_SIZE" case .unrelatedSnapshots: return "UNRELATED_SNAPSHOTS" + case .writeRequestTimeout: return "WRITE_REQUEST_TIMEOUT" case let .sdkUnknown(s): return s } } diff --git a/Sources/Services/AWSEC2/EC2Client.swift b/Sources/Services/AWSEC2/EC2Client.swift index 01f24f77e75..f739b112fc1 100644 --- a/Sources/Services/AWSEC2/EC2Client.swift +++ b/Sources/Services/AWSEC2/EC2Client.swift @@ -575,7 +575,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Assigns one or more private IPv4 addresses to a private NAT gateway. For more information, see [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) in the Amazon Virtual Private Cloud User Guide. + /// Assigns one or more private IPv4 addresses to a private NAT gateway. For more information, see [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) in the Amazon VPC User Guide. public func assignPrivateNatGatewayAddress(input: AssignPrivateNatGatewayAddressInput) async throws -> AssignPrivateNatGatewayAddressOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -691,7 +691,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Associates a set of DHCP options (that you've previously created) with the specified VPC, or associates no DHCP options with the VPC. After you associate the options with the VPC, any existing instances and all new instances that you launch in that VPC use the options. You don't need to restart or relaunch the instances. They automatically pick up the changes within a few hours, depending on how frequently the instance renews its DHCP lease. You can explicitly renew the lease using the operating system on the instance. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon Virtual Private Cloud User Guide. + /// Associates a set of DHCP options (that you've previously created) with the specified VPC, or associates no DHCP options with the VPC. After you associate the options with the VPC, any existing instances and all new instances that you launch in that VPC use the options. You don't need to restart or relaunch the instances. They automatically pick up the changes within a few hours, depending on how frequently the instance renews its DHCP lease. You can explicitly renew the lease using the operating system on the instance. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. public func associateDhcpOptions(input: AssociateDhcpOptionsInput) async throws -> AssociateDhcpOptionsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -879,7 +879,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Associates Elastic IP addresses (EIPs) and private IPv4 addresses with a public NAT gateway. For more information, see [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) in the Amazon Virtual Private Cloud User Guide. By default, you can associate up to 2 Elastic IP addresses per public NAT gateway. You can increase the limit by requesting a quota adjustment. For more information, see [Elastic IP address quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-eips) in the Amazon Virtual Private Cloud User Guide. + /// Associates Elastic IP addresses (EIPs) and private IPv4 addresses with a public NAT gateway. For more information, see [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) in the Amazon VPC User Guide. By default, you can associate up to 2 Elastic IP addresses per public NAT gateway. You can increase the limit by requesting a quota adjustment. For more information, see [Elastic IP address quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-eips) in the Amazon VPC User Guide. public func associateNatGatewayAddress(input: AssociateNatGatewayAddressInput) async throws -> AssociateNatGatewayAddressOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -915,7 +915,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Associates a subnet in your VPC or an internet gateway or virtual private gateway attached to your VPC with a route table in your VPC. This association causes traffic from the subnet or gateway to be routed according to the routes in the route table. The action returns an association ID, which you need in order to disassociate the route table later. A route table can be associated with multiple subnets. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Associates a subnet in your VPC or an internet gateway or virtual private gateway attached to your VPC with a route table in your VPC. This association causes traffic from the subnet or gateway to be routed according to the routes in the route table. The action returns an association ID, which you need in order to disassociate the route table later. A route table can be associated with multiple subnets. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. public func associateRouteTable(input: AssociateRouteTableInput) async throws -> AssociateRouteTableOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1139,7 +1139,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Associates a CIDR block with your VPC. You can associate a secondary IPv4 CIDR block, an Amazon-provided IPv6 CIDR block, or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses ([BYOIP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)). The IPv6 CIDR block size is fixed at /56. You must specify one of the following in the request: an IPv4 CIDR block, an IPv6 pool, or an Amazon-provided IPv6 CIDR block. For more information about associating CIDR blocks with your VPC and applicable restrictions, see [VPC and subnet sizing](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing) in the Amazon Virtual Private Cloud User Guide. + /// Associates a CIDR block with your VPC. You can associate a secondary IPv4 CIDR block, an Amazon-provided IPv6 CIDR block, or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses ([BYOIP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)). The IPv6 CIDR block size is fixed at /56. You must specify one of the following in the request: an IPv4 CIDR block, an IPv6 pool, or an Amazon-provided IPv6 CIDR block. For more information about associating CIDR blocks with your VPC and applicable restrictions, see [IP addressing for your VPCs and subnets](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html) in the Amazon VPC User Guide. public func associateVpcCidrBlock(input: AssociateVpcCidrBlockInput) async throws -> AssociateVpcCidrBlockOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1175,7 +1175,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or more of the VPC's security groups. You cannot link an EC2-Classic instance to more than one VPC at a time. You can only link an instance that's in the running state. An instance is automatically unlinked from a VPC when it's stopped - you can link it to the VPC again when you restart it. After you've linked an instance, you cannot change the VPC security groups that are associated with it. To change the security groups, you must first unlink the instance, and then link it again. Linking your instance to a VPC is sometimes referred to as attaching your instance. + /// This action is deprecated. Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or more of the VPC security groups. You cannot link an EC2-Classic instance to more than one VPC at a time. You can only link an instance that's in the running state. An instance is automatically unlinked from a VPC when it's stopped - you can link it to the VPC again when you restart it. After you've linked an instance, you cannot change the VPC security groups that are associated with it. To change the security groups, you must first unlink the instance, and then link it again. Linking your instance to a VPC is sometimes referred to as attaching your instance. public func attachClassicLinkVpc(input: AttachClassicLinkVpcInput) async throws -> AttachClassicLinkVpcOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1211,7 +1211,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Attaches an internet gateway or a virtual private gateway to a VPC, enabling connectivity between the internet and the VPC. For more information about your VPC and internet gateway, see the [Amazon Virtual Private Cloud User Guide](https://docs.aws.amazon.com/vpc/latest/userguide/). + /// Attaches an internet gateway or a virtual private gateway to a VPC, enabling connectivity between the internet and the VPC. For more information, see [Internet gateways](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) in the Amazon VPC User Guide. public func attachInternetGateway(input: AttachInternetGatewayInput) async throws -> AttachInternetGatewayOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1454,7 +1454,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// [VPC only] Adds the specified outbound (egress) rules to a security group for use with a VPC. An outbound rule permits instances to send traffic to the specified IPv4 or IPv6 CIDR address ranges, or to the instances that are associated with the specified source security groups. When specifying an outbound rule for your security group in a VPC, the IpPermissions must include a destination for the traffic. You specify a protocol for each rule (for example, TCP). For the TCP and UDP protocols, you must also specify the destination port or port range. For the ICMP protocol, you must also specify the ICMP type and code. You can use -1 for the type or code to mean all types or all codes. Rule changes are propagated to affected instances as quickly as possible. However, a small delay might occur. For information about VPC security group quotas, see [Amazon VPC quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). + /// Adds the specified outbound (egress) rules to a security group for use with a VPC. An outbound rule permits instances to send traffic to the specified IPv4 or IPv6 CIDR address ranges, or to the instances that are associated with the specified source security groups. When specifying an outbound rule for your security group in a VPC, the IpPermissions must include a destination for the traffic. You specify a protocol for each rule (for example, TCP). For the TCP and UDP protocols, you must also specify the destination port or port range. For the ICMP protocol, you must also specify the ICMP type and code. You can use -1 for the type or code to mean all types or all codes. Rule changes are propagated to affected instances as quickly as possible. However, a small delay might occur. For information about VPC security group quotas, see [Amazon VPC quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). public func authorizeSecurityGroupEgress(input: AuthorizeSecurityGroupEgressInput) async throws -> AuthorizeSecurityGroupEgressOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1490,7 +1490,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Adds the specified inbound (ingress) rules to a security group. An inbound rule permits instances to receive traffic from the specified IPv4 or IPv6 CIDR address range, or from the instances that are associated with the specified destination security groups. When specifying an inbound rule for your security group in a VPC, the IpPermissions must include a source for the traffic. You specify a protocol for each rule (for example, TCP). For TCP and UDP, you must also specify the destination port or port range. For ICMP/ICMPv6, you must also specify the ICMP/ICMPv6 type and code. You can use -1 to mean all types or all codes. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. For more information about VPC security group quotas, see [Amazon VPC quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Adds the specified inbound (ingress) rules to a security group. An inbound rule permits instances to receive traffic from the specified IPv4 or IPv6 CIDR address range, or from the instances that are associated with the specified destination security groups. When specifying an inbound rule for your security group in a VPC, the IpPermissions must include a source for the traffic. You specify a protocol for each rule (for example, TCP). For TCP and UDP, you must also specify the destination port or port range. For ICMP/ICMPv6, you must also specify the ICMP/ICMPv6 type and code. You can use -1 to mean all types or all codes. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. For more information about VPC security group quotas, see [Amazon VPC quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). public func authorizeSecurityGroupIngress(input: AuthorizeSecurityGroupIngressInput) async throws -> AuthorizeSecurityGroupIngressOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2392,7 +2392,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates a default subnet with a size /20 IPv4 CIDR block in the specified Availability Zone in your default VPC. You can have only one default subnet per Availability Zone. For more information, see [Creating a default subnet](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html#create-default-subnet) in the Amazon Virtual Private Cloud User Guide. + /// Creates a default subnet with a size /20 IPv4 CIDR block in the specified Availability Zone in your default VPC. You can have only one default subnet per Availability Zone. For more information, see [Create a default subnet](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html#create-default-subnet) in the Amazon VPC User Guide. public func createDefaultSubnet(input: CreateDefaultSubnetInput) async throws -> CreateDefaultSubnetOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2428,7 +2428,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates a default VPC with a size /16 IPv4 CIDR block and a default subnet in each Availability Zone. For more information about the components of a default VPC, see [Default VPC and default subnets](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) in the Amazon Virtual Private Cloud User Guide. You cannot specify the components of the default VPC yourself. If you deleted your previous default VPC, you can create a default VPC. You cannot have more than one default VPC per Region. If your account supports EC2-Classic, you cannot use this action to create a default VPC in a Region that supports EC2-Classic. If you want a default VPC in a Region that supports EC2-Classic, see "I really want a default VPC for my existing EC2 account. Is that possible?" in the [Default VPCs FAQ](http://aws.amazon.com/vpc/faqs/#Default_VPCs). We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Creates a default VPC with a size /16 IPv4 CIDR block and a default subnet in each Availability Zone. For more information about the components of a default VPC, see [Default VPCs](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) in the Amazon VPC User Guide. You cannot specify the components of the default VPC yourself. If you deleted your previous default VPC, you can create a default VPC. You cannot have more than one default VPC per Region. public func createDefaultVpc(input: CreateDefaultVpcInput) async throws -> CreateDefaultVpcOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2477,7 +2477,7 @@ extension EC2Client: EC2ClientProtocol { /// * netbios-node-type - The NetBIOS node type (1, 2, 4, or 8). We recommend that you specify 2 (broadcast and multicast are not currently supported). For more information about these node types, see [RFC 2132](http://www.ietf.org/rfc/rfc2132.txt). /// /// - /// Your VPC automatically starts out with a set of DHCP options that includes only a DNS server that we provide (AmazonProvidedDNS). If you create a set of options, and if your VPC has an internet gateway, make sure to set the domain-name-servers option either to AmazonProvidedDNS or to a domain name server of your choice. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon Virtual Private Cloud User Guide. + /// Your VPC automatically starts out with a set of DHCP options that includes only a DNS server that we provide (AmazonProvidedDNS). If you create a set of options, and if your VPC has an internet gateway, make sure to set the domain-name-servers option either to AmazonProvidedDNS or to a domain name server of your choice. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. public func createDhcpOptions(input: CreateDhcpOptionsInput) async throws -> CreateDhcpOptionsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2657,7 +2657,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that is either running or stopped. By default, when Amazon EC2 creates the new AMI, it reboots the instance so that it can take snapshots of the attached volumes while data is at rest, in order to ensure a consistent state. You can set the NoReboot parameter to true in the API request, or use the --no-reboot option in the CLI to prevent Amazon EC2 from shutting down and rebooting the instance. If you choose to bypass the shutdown and reboot process by setting the NoReboot parameter to true in the API request, or by using the --no-reboot option in the CLI, we can't guarantee the file system integrity of the created image. If you customized your instance with instance store volumes or Amazon EBS volumes in addition to the root device volume, the new AMI contains block device mapping information for those volumes. When you launch an instance from this new AMI, the instance automatically launches with those additional volumes. For more information, see [Create an Amazon EBS-backed Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html) in the Amazon Elastic Compute Cloud User Guide. + /// Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that is either running or stopped. If you customized your instance with instance store volumes or Amazon EBS volumes in addition to the root device volume, the new AMI contains block device mapping information for those volumes. When you launch an instance from this new AMI, the instance automatically launches with those additional volumes. For more information, see [Create an Amazon EBS-backed Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html) in the Amazon Elastic Compute Cloud User Guide. public func createImage(input: CreateImageInput) async throws -> CreateImageOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2693,7 +2693,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates an EC2 Instance Connect Endpoint. An EC2 Instance Connect Endpoint allows you to connect to a resource, without requiring the resource to have a public IPv4 address. For more information, see [Connect to your resources without requiring a public IPv4 address using EC2 Instance Connect Endpoint](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect-Endpoint.html) in the Amazon EC2 User Guide. + /// Creates an EC2 Instance Connect Endpoint. An EC2 Instance Connect Endpoint allows you to connect to an instance, without requiring the instance to have a public IPv4 address. For more information, see [Connect to your instances without requiring a public IPv4 address using EC2 Instance Connect Endpoint](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect-Endpoint.html) in the Amazon EC2 User Guide. public func createInstanceConnectEndpoint(input: CreateInstanceConnectEndpointInput) async throws -> CreateInstanceConnectEndpointOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2780,7 +2780,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Exports a running or stopped instance to an Amazon S3 bucket. For information about the supported operating systems, image formats, and known limitations for the types of instances you can export, see [Exporting an instance as a VM Using VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html) in the VM Import/Export User Guide. + /// Exports a running or stopped instance to an Amazon S3 bucket. For information about the prerequisites for your Amazon S3 bucket, supported operating systems, image formats, and known limitations for the types of instances you can export, see [Exporting an instance as a VM Using VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html) in the VM Import/Export User Guide. public func createInstanceExportTask(input: CreateInstanceExportTaskInput) async throws -> CreateInstanceExportTaskOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2816,7 +2816,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates an internet gateway for use with a VPC. After creating the internet gateway, you attach it to a VPC using [AttachInternetGateway]. For more information about your VPC and internet gateway, see the [Amazon Virtual Private Cloud User Guide](https://docs.aws.amazon.com/vpc/latest/userguide/). + /// Creates an internet gateway for use with a VPC. After creating the internet gateway, you attach it to a VPC using [AttachInternetGateway]. For more information, see [Internet gateways](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) in the Amazon VPC User Guide. public func createInternetGateway(input: CreateInternetGatewayInput) async throws -> CreateInternetGatewayOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3328,7 +3328,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates a NAT gateway in the specified subnet. This action creates a network interface in the specified subnet with a private IP address from the IP address range of the subnet. You can create either a public NAT gateway or a private NAT gateway. With a public NAT gateway, internet-bound traffic from a private subnet can be routed to the NAT gateway, so that instances in a private subnet can connect to the internet. With a private NAT gateway, private communication is routed across VPCs and on-premises networks through a transit gateway or virtual private gateway. Common use cases include running large workloads behind a small pool of allowlisted IPv4 addresses, preserving private IPv4 addresses, and communicating between overlapping networks. For more information, see [NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) in the Amazon Virtual Private Cloud User Guide. + /// Creates a NAT gateway in the specified subnet. This action creates a network interface in the specified subnet with a private IP address from the IP address range of the subnet. You can create either a public NAT gateway or a private NAT gateway. With a public NAT gateway, internet-bound traffic from a private subnet can be routed to the NAT gateway, so that instances in a private subnet can connect to the internet. With a private NAT gateway, private communication is routed across VPCs and on-premises networks through a transit gateway or virtual private gateway. Common use cases include running large workloads behind a small pool of allowlisted IPv4 addresses, preserving private IPv4 addresses, and communicating between overlapping networks. For more information, see [NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) in the Amazon VPC User Guide. public func createNatGateway(input: CreateNatGatewayInput) async throws -> CreateNatGatewayOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3372,7 +3372,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates a network ACL in a VPC. Network ACLs provide an optional layer of security (in addition to security groups) for the instances in your VPC. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in the Amazon Virtual Private Cloud User Guide. + /// Creates a network ACL in a VPC. Network ACLs provide an optional layer of security (in addition to security groups) for the instances in your VPC. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. public func createNetworkAcl(input: CreateNetworkAclInput) async throws -> CreateNetworkAclOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3408,7 +3408,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates an entry (a rule) in a network ACL with the specified rule number. Each network ACL has a set of numbered ingress rules and a separate set of numbered egress rules. When determining whether a packet should be allowed in or out of a subnet associated with the ACL, we process the entries in the ACL according to the rule numbers, in ascending order. Each network ACL has a set of ingress rules and a separate set of egress rules. We recommend that you leave room between the rule numbers (for example, 100, 110, 120, ...), and not number them one right after the other (for example, 101, 102, 103, ...). This makes it easier to add a rule between existing ones without having to renumber the rules. After you add an entry, you can't modify it; you must either replace it, or create an entry and delete the old one. For more information about network ACLs, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in the Amazon Virtual Private Cloud User Guide. + /// Creates an entry (a rule) in a network ACL with the specified rule number. Each network ACL has a set of numbered ingress rules and a separate set of numbered egress rules. When determining whether a packet should be allowed in or out of a subnet associated with the ACL, we process the entries in the ACL according to the rule numbers, in ascending order. Each network ACL has a set of ingress rules and a separate set of egress rules. We recommend that you leave room between the rule numbers (for example, 100, 110, 120, ...), and not number them one right after the other (for example, 101, 102, 103, ...). This makes it easier to add a rule between existing ones without having to renumber the rules. After you add an entry, you can't modify it; you must either replace it, or create an entry and delete the old one. For more information about network ACLs, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. public func createNetworkAclEntry(input: CreateNetworkAclEntryInput) async throws -> CreateNetworkAclEntryOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3807,7 +3807,7 @@ extension EC2Client: EC2ClientProtocol { /// * 192.0.2.0/28 (goes to some target B) /// /// - /// Both routes apply to the traffic destined for 192.0.2.3. However, the second route in the list covers a smaller number of IP addresses and is therefore more specific, so we use that route to determine where to target the traffic. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Both routes apply to the traffic destined for 192.0.2.3. However, the second route in the list covers a smaller number of IP addresses and is therefore more specific, so we use that route to determine where to target the traffic. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. public func createRoute(input: CreateRouteInput) async throws -> CreateRouteOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3843,7 +3843,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates a route table for the specified VPC. After you create a route table, you can add routes and associate the table with a subnet. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Creates a route table for the specified VPC. After you create a route table, you can add routes and associate the table with a subnet. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. public func createRouteTable(input: CreateRouteTableInput) async throws -> CreateRouteTableOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3879,7 +3879,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates a security group. A security group acts as a virtual firewall for your instance to control inbound and outbound traffic. For more information, see [Amazon EC2 security groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) in the Amazon Elastic Compute Cloud User Guide and [Security groups for your VPC](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) in the Amazon Virtual Private Cloud User Guide. When you create a security group, you specify a friendly name of your choice. You can have a security group for use in EC2-Classic with the same name as a security group for use in a VPC. However, you can't have two security groups for use in EC2-Classic with the same name or two security groups for use in a VPC with the same name. You have a default security group for use in EC2-Classic and a default security group for use in your VPC. If you don't specify a security group when you launch an instance, the instance is launched into the appropriate default security group. A default security group includes a default rule that grants instances unrestricted network access to each other. You can add or remove rules from your security groups using [AuthorizeSecurityGroupIngress], [AuthorizeSecurityGroupEgress], [RevokeSecurityGroupIngress], and [RevokeSecurityGroupEgress]. For more information about VPC security group limits, see [Amazon VPC Limits](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Creates a security group. A security group acts as a virtual firewall for your instance to control inbound and outbound traffic. For more information, see [Amazon EC2 security groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) in the Amazon Elastic Compute Cloud User Guide and [Security groups for your VPC](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) in the Amazon Virtual Private Cloud User Guide. When you create a security group, you specify a friendly name of your choice. You can't have two security groups for the same VPC with the same name. You have a default security group for use in your VPC. If you don't specify a security group when you launch an instance, the instance is launched into the appropriate default security group. A default security group includes a default rule that grants instances unrestricted network access to each other. You can add or remove rules from your security groups using [AuthorizeSecurityGroupIngress], [AuthorizeSecurityGroupEgress], [RevokeSecurityGroupIngress], and [RevokeSecurityGroupEgress]. For more information about VPC security group limits, see [Amazon VPC Limits](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). public func createSecurityGroup(input: CreateSecurityGroupInput) async throws -> CreateSecurityGroupOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -4059,7 +4059,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates a subnet in the specified VPC. For an IPv4 only subnet, specify an IPv4 CIDR block. If the VPC has an IPv6 CIDR block, you can create an IPv6 only subnet or a dual stack subnet instead. For an IPv6 only subnet, specify an IPv6 CIDR block. For a dual stack subnet, specify both an IPv4 CIDR block and an IPv6 CIDR block. A subnet CIDR block must not overlap the CIDR block of an existing subnet in the VPC. After you create a subnet, you can't change its CIDR block. The allowed size for an IPv4 subnet is between a /28 netmask (16 IP addresses) and a /16 netmask (65,536 IP addresses). Amazon Web Services reserves both the first four and the last IPv4 address in each subnet's CIDR block. They're not available for your use. If you've associated an IPv6 CIDR block with your VPC, you can associate an IPv6 CIDR block with a subnet when you create it. The allowed block size for an IPv6 subnet is a /64 netmask. If you add more than one subnet to a VPC, they're set up in a star topology with a logical router in the middle. When you stop an instance in a subnet, it retains its private IPv4 address. It's therefore possible to have a subnet with no running instances (they're all stopped), but no remaining IP addresses available. For more information, see [Subnets](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html) in the Amazon Virtual Private Cloud User Guide. + /// Creates a subnet in the specified VPC. For an IPv4 only subnet, specify an IPv4 CIDR block. If the VPC has an IPv6 CIDR block, you can create an IPv6 only subnet or a dual stack subnet instead. For an IPv6 only subnet, specify an IPv6 CIDR block. For a dual stack subnet, specify both an IPv4 CIDR block and an IPv6 CIDR block. A subnet CIDR block must not overlap the CIDR block of an existing subnet in the VPC. After you create a subnet, you can't change its CIDR block. The allowed size for an IPv4 subnet is between a /28 netmask (16 IP addresses) and a /16 netmask (65,536 IP addresses). Amazon Web Services reserves both the first four and the last IPv4 address in each subnet's CIDR block. They're not available for your use. If you've associated an IPv6 CIDR block with your VPC, you can associate an IPv6 CIDR block with a subnet when you create it. The allowed block size for an IPv6 subnet is a /64 netmask. If you add more than one subnet to a VPC, they're set up in a star topology with a logical router in the middle. When you stop an instance in a subnet, it retains its private IPv4 address. It's therefore possible to have a subnet with no running instances (they're all stopped), but no remaining IP addresses available. For more information, see [Subnets](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html) in the Amazon VPC User Guide. public func createSubnet(input: CreateSubnetInput) async throws -> CreateSubnetOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -4959,7 +4959,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates a VPC with the specified CIDR blocks. For more information, see [VPC CIDR blocks](https://docs.aws.amazon.com/vpc/latest/userguide/configure-your-vpc.html#vpc-cidr-blocks) in the Amazon Virtual Private Cloud User Guide. You can optionally request an IPv6 CIDR block for the VPC. You can request an Amazon-provided IPv6 CIDR block from Amazon's pool of IPv6 addresses, or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses ([BYOIP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)). By default, each instance that you launch in the VPC has the default DHCP options, which include only a default DNS server that we provide (AmazonProvidedDNS). For more information, see [DHCP option sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon Virtual Private Cloud User Guide. You can specify the instance tenancy value for the VPC when you create it. You can't change this value for the VPC after you create it. For more information, see [Dedicated Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) in the Amazon Elastic Compute Cloud User Guide. + /// Creates a VPC with the specified CIDR blocks. For more information, see [IP addressing for your VPCs and subnets](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html) in the Amazon VPC User Guide. You can optionally request an IPv6 CIDR block for the VPC. You can request an Amazon-provided IPv6 CIDR block from Amazon's pool of IPv6 addresses, or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses ([BYOIP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)). By default, each instance that you launch in the VPC has the default DHCP options, which include only a default DNS server that we provide (AmazonProvidedDNS). For more information, see [DHCP option sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. You can specify the instance tenancy value for the VPC when you create it. You can't change this value for the VPC after you create it. For more information, see [Dedicated Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) in the Amazon EC2 User Guide. public func createVpc(input: CreateVpcInput) async throws -> CreateVpcOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -4995,7 +4995,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates a VPC endpoint for a specified service. An endpoint enables you to create a private connection between your VPC and the service. The service may be provided by Amazon Web Services, an Amazon Web Services Marketplace Partner, or another Amazon Web Services account. For more information, see the [Amazon Web Services PrivateLink Guide](https://docs.aws.amazon.com/vpc/latest/privatelink/). + /// Creates a VPC endpoint. A VPC endpoint provides a private connection between the specified VPC and the specified endpoint service. You can use an endpoint service provided by Amazon Web Services, an Amazon Web Services Marketplace Partner, or another Amazon Web Services account. For more information, see the [Amazon Web Services PrivateLink User Guide](https://docs.aws.amazon.com/vpc/latest/privatelink/). public func createVpcEndpoint(input: CreateVpcEndpointInput) async throws -> CreateVpcEndpointOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -6701,7 +6701,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Deletes a security group. If you attempt to delete a security group that is associated with an instance, or is referenced by another security group, the operation fails with InvalidGroup.InUse in EC2-Classic or DependencyViolation in EC2-VPC. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Deletes a security group. If you attempt to delete a security group that is associated with an instance or network interface or is referenced by another security group, the operation fails with DependencyViolation. public func deleteSecurityGroup(input: DeleteSecurityGroupInput) async throws -> DeleteSecurityGroupOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -8653,7 +8653,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Describes one or more of your linked EC2-Classic instances. This request only returns information about EC2-Classic instances linked to a VPC through ClassicLink. You cannot use this request to return information about other instances. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Describes one or more of your linked EC2-Classic instances. This request only returns information about EC2-Classic instances linked to a VPC through ClassicLink. You cannot use this request to return information about other instances. public func describeClassicLinkInstances(input: DescribeClassicLinkInstancesInput) async throws -> DescribeClassicLinkInstancesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -8977,7 +8977,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Describes one or more of your DHCP options sets. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon Virtual Private Cloud User Guide. + /// Describes one or more of your DHCP options sets. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. public func describeDhcpOptions(input: DescribeDhcpOptionsInput) async throws -> DescribeDhcpOptionsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -10819,7 +10819,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Describes one or more of your network ACLs. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in the Amazon Virtual Private Cloud User Guide. + /// Describes one or more of your network ACLs. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. public func describeNetworkAcls(input: DescribeNetworkAclsInput) async throws -> DescribeNetworkAclsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -11467,7 +11467,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Describes one or more of your route tables. Each subnet in your VPC must be associated with a route table. If a subnet is not explicitly associated with any route table, it is implicitly associated with the main route table. This command does not return the subnet ID for implicit associations. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Describes one or more of your route tables. Each subnet in your VPC must be associated with a route table. If a subnet is not explicitly associated with any route table, it is implicitly associated with the main route table. This command does not return the subnet ID for implicit associations. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. public func describeRouteTables(input: DescribeRouteTablesInput) async throws -> DescribeRouteTablesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -11575,7 +11575,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// [VPC only] Describes the VPCs on the other side of a VPC peering connection that are referencing the security groups you've specified in this request. + /// Describes the VPCs on the other side of a VPC peering connection that are referencing the security groups you've specified in this request. public func describeSecurityGroupReferences(input: DescribeSecurityGroupReferencesInput) async throws -> DescribeSecurityGroupReferencesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -11647,7 +11647,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Describes the specified security groups or all of your security groups. A security group is for use with instances either in the EC2-Classic platform or in a specific VPC. For more information, see [Amazon EC2 security groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) in the Amazon Elastic Compute Cloud User Guide and [Security groups for your VPC](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) in the Amazon Virtual Private Cloud User Guide. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Describes the specified security groups or all of your security groups. public func describeSecurityGroups(input: DescribeSecurityGroupsInput) async throws -> DescribeSecurityGroupsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -12016,7 +12016,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// [VPC only] Describes the stale security group rules for security groups in a specified VPC. Rules are stale when they reference a deleted security group in the same VPC or in a peer VPC, or if they reference a security group in a peer VPC for which the VPC peering connection has been deleted. + /// Describes the stale security group rules for security groups in a specified VPC. Rules are stale when they reference a deleted security group in the same VPC or in a peer VPC, or if they reference a security group in a peer VPC for which the VPC peering connection has been deleted. public func describeStaleSecurityGroups(input: DescribeStaleSecurityGroupsInput) async throws -> DescribeStaleSecurityGroupsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -12088,7 +12088,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Describes one or more of your subnets. For more information, see [Your VPC and subnets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html) in the Amazon Virtual Private Cloud User Guide. + /// Describes one or more of your subnets. For more information, see [Subnets](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html) in the Amazon VPC User Guide. public func describeSubnets(input: DescribeSubnetsInput) async throws -> DescribeSubnetsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -13024,7 +13024,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Describes the ClassicLink status of one or more VPCs. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Describes the ClassicLink status of the specified VPCs. public func describeVpcClassicLink(input: DescribeVpcClassicLinkInput) async throws -> DescribeVpcClassicLinkOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -13060,7 +13060,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Describes the ClassicLink DNS support status of one or more VPCs. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. For more information, see [ClassicLink](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Describes the ClassicLink DNS support status of one or more VPCs. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. public func describeVpcClassicLinkDnsSupport(input: DescribeVpcClassicLinkDnsSupportInput) async throws -> DescribeVpcClassicLinkDnsSupportOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -13456,7 +13456,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Unlinks (detaches) a linked EC2-Classic instance from a VPC. After the instance has been unlinked, the VPC security groups are no longer associated with it. An instance is automatically unlinked from a VPC when it's stopped. + /// This action is deprecated. Unlinks (detaches) a linked EC2-Classic instance from a VPC. After the instance has been unlinked, the VPC security groups are no longer associated with it. An instance is automatically unlinked from a VPC when it's stopped. public func detachClassicLinkVpc(input: DetachClassicLinkVpcInput) async throws -> DetachClassicLinkVpcOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -14040,7 +14040,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC that has EC2-Classic instances linked to it. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC that has EC2-Classic instances linked to it. public func disableVpcClassicLink(input: DisableVpcClassicLinkInput) async throws -> DisableVpcClassicLinkOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -14076,7 +14076,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames resolve to public IP addresses when addressed between a linked EC2-Classic instance and instances in the VPC to which it's linked. For more information, see [ClassicLink](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) in the Amazon Elastic Compute Cloud User Guide. You must specify a VPC ID in the request. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames resolve to public IP addresses when addressed between a linked EC2-Classic instance and instances in the VPC to which it's linked. You must specify a VPC ID in the request. public func disableVpcClassicLinkDnsSupport(input: DisableVpcClassicLinkDnsSupportInput) async throws -> DisableVpcClassicLinkDnsSupportOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -14336,7 +14336,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Disassociates secondary Elastic IP addresses (EIPs) from a public NAT gateway. You cannot disassociate your primary EIP. For more information, see [Edit secondary IP address associations](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-edit-secondary) in the Amazon Virtual Private Cloud User Guide. While disassociating is in progress, you cannot associate/disassociate additional EIPs while the connections are being drained. You are, however, allowed to delete the NAT gateway. An EIP will only be released at the end of MaxDrainDurationSeconds. The EIPs stay associated and support the existing connections but do not support any new connections (new connections are distributed across the remaining associated EIPs). As the existing connections drain out, the EIPs (and the corresponding private IPs mapped to them) get released. + /// Disassociates secondary Elastic IP addresses (EIPs) from a public NAT gateway. You cannot disassociate your primary EIP. For more information, see [Edit secondary IP address associations](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-edit-secondary) in the Amazon VPC User Guide. While disassociating is in progress, you cannot associate/disassociate additional EIPs while the connections are being drained. You are, however, allowed to delete the NAT gateway. An EIP is released only at the end of MaxDrainDurationSeconds. It stays associated and supports the existing connections but does not support any new connections (new connections are distributed across the remaining associated EIPs). As the existing connections drain out, the EIPs (and the corresponding private IP addresses mapped to them) are released. public func disassociateNatGatewayAddress(input: DisassociateNatGatewayAddressInput) async throws -> DisassociateNatGatewayAddressOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -14372,7 +14372,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Disassociates a subnet or gateway from a route table. After you perform this action, the subnet no longer uses the routes in the route table. Instead, it uses the routes in the VPC's main route table. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Disassociates a subnet or gateway from a route table. After you perform this action, the subnet no longer uses the routes in the route table. Instead, it uses the routes in the VPC's main route table. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. public func disassociateRouteTable(input: DisassociateRouteTableInput) async throws -> DisassociateRouteTableOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -15064,7 +15064,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Enables a VPC for ClassicLink. You can then link EC2-Classic instances to your ClassicLink-enabled VPC to allow communication over private IP addresses. You cannot enable your VPC for ClassicLink if any of your VPC route tables have existing routes for address ranges within the 10.0.0.0/8 IP address range, excluding local routes for VPCs in the 10.0.0.0/16 and 10.1.0.0/16 IP address ranges. For more information, see [ClassicLink](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Enables a VPC for ClassicLink. You can then link EC2-Classic instances to your ClassicLink-enabled VPC to allow communication over private IP addresses. You cannot enable your VPC for ClassicLink if any of your VPC route tables have existing routes for address ranges within the 10.0.0.0/8 IP address range, excluding local routes for VPCs in the 10.0.0.0/16 and 10.1.0.0/16 IP address ranges. public func enableVpcClassicLink(input: EnableVpcClassicLinkInput) async throws -> EnableVpcClassicLinkOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -15100,7 +15100,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Enables a VPC to support DNS hostname resolution for ClassicLink. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. For more information, see [ClassicLink](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) in the Amazon Elastic Compute Cloud User Guide. You must specify a VPC ID in the request. + /// This action is deprecated. Enables a VPC to support DNS hostname resolution for ClassicLink. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. You must specify a VPC ID in the request. public func enableVpcClassicLinkDnsSupport(input: EnableVpcClassicLinkDnsSupportInput) async throws -> EnableVpcClassicLinkDnsSupportOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -15657,6 +15657,9 @@ extension EC2Client: EC2ClientProtocol { /// * Create a table partitioned between two timestamps in the past /// /// * Create a set of named queries in Athena that you can use to get started quickly + /// + /// + /// GetFlowLogsIntegrationTemplate does not support integration between Amazon Web Services Transit Gateway Flow Logs and Amazon Athena. public func getFlowLogsIntegrationTemplate(input: GetFlowLogsIntegrationTemplateInput) async throws -> GetFlowLogsIntegrationTemplateOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -16916,7 +16919,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Creates an import instance task using metadata from the specified disk image. This API action supports only single-volume VMs. To import multi-volume VMs, use [ImportImage] instead. This API action is not supported by the Command Line Interface (CLI). For information about using the Amazon EC2 CLI, which is deprecated, see [Importing a VM to Amazon EC2](https://awsdocs.s3.amazonaws.com/EC2/ec2-clt.pdf#UsingVirtualMachinesinAmazonEC2) in the Amazon EC2 CLI Reference PDF file. For information about the import manifest referenced by this API action, see [VM Import Manifest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). + /// We recommend that you use the [ImportImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportImage.html) API. For more information, see [Importing a VM as an image using VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html) in the VM Import/Export User Guide. Creates an import instance task using metadata from the specified disk image. This API action is not supported by the Command Line Interface (CLI). For information about using the Amazon EC2 CLI, which is deprecated, see [Importing a VM to Amazon EC2](https://awsdocs.s3.amazonaws.com/EC2/ec2-clt.pdf#UsingVirtualMachinesinAmazonEC2) in the Amazon EC2 CLI Reference PDF file. This API action supports only single-volume VMs. To import multi-volume VMs, use [ImportImage] instead. For information about the import manifest referenced by this API action, see [VM Import Manifest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). public func importInstance(input: ImportInstanceInput) async throws -> ImportInstanceOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -19298,16 +19301,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Modifies the VPC peering connection options on one side of a VPC peering connection. You can do the following: - /// - /// * Enable/disable communication over the peering connection between an EC2-Classic instance that's linked to your VPC (using ClassicLink) and instances in the peer VPC. - /// - /// * Enable/disable communication over the peering connection between instances in your VPC and an EC2-Classic instance that's linked to the peer VPC. - /// - /// * Enable/disable the ability to resolve public DNS hostnames to private IP addresses when queried from instances in the peer VPC. - /// - /// - /// If the peered VPCs are in the same Amazon Web Services account, you can enable DNS resolution for queries from the local VPC. This ensures that queries from the local VPC resolve to private IP addresses in the peer VPC. This option is not available if the peered VPCs are in different Amazon Web Services accounts or different Regions. For peered VPCs in different Amazon Web Services accounts, each Amazon Web Services account owner must initiate a separate request to modify the peering connection options. For inter-region peering connections, you must use the Region for the requester VPC to modify the requester VPC peering options and the Region for the accepter VPC to modify the accepter VPC peering options. To verify which VPCs are the accepter and the requester for a VPC peering connection, use the [DescribeVpcPeeringConnections] command. + /// Modifies the VPC peering connection options on one side of a VPC peering connection. If the peered VPCs are in the same Amazon Web Services account, you can enable DNS resolution for queries from the local VPC. This ensures that queries from the local VPC resolve to private IP addresses in the peer VPC. This option is not available if the peered VPCs are in different Amazon Web Services accounts or different Regions. For peered VPCs in different Amazon Web Services accounts, each Amazon Web Services account owner must initiate a separate request to modify the peering connection options. For inter-region peering connections, you must use the Region for the requester VPC to modify the requester VPC peering options and the Region for the accepter VPC to modify the accepter VPC peering options. To verify which VPCs are the accepter and the requester for a VPC peering connection, use the [DescribeVpcPeeringConnections] command. public func modifyVpcPeeringConnectionOptions(input: ModifyVpcPeeringConnectionOptionsInput) async throws -> ModifyVpcPeeringConnectionOptionsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -19343,7 +19337,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Modifies the instance tenancy attribute of the specified VPC. You can change the instance tenancy attribute of a VPC to default only. You cannot change the instance tenancy attribute to dedicated. After you modify the tenancy of the VPC, any new instances that you launch into the VPC have a tenancy of default, unless you specify otherwise during launch. The tenancy of any existing instances in the VPC is not affected. For more information, see [Dedicated Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) in the Amazon Elastic Compute Cloud User Guide. + /// Modifies the instance tenancy attribute of the specified VPC. You can change the instance tenancy attribute of a VPC to default only. You cannot change the instance tenancy attribute to dedicated. After you modify the tenancy of the VPC, any new instances that you launch into the VPC have a tenancy of default, unless you specify otherwise during launch. The tenancy of any existing instances in the VPC is not affected. For more information, see [Dedicated Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) in the Amazon EC2 User Guide. public func modifyVpcTenancy(input: ModifyVpcTenancyInput) async throws -> ModifyVpcTenancyOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -20315,7 +20309,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Release an allocation within an IPAM pool. The Region you use should be the IPAM pool locale. The locale is the Amazon Web Services Region where this IPAM pool is available for allocations. You can only use this action to release manual allocations. To remove an allocation for a resource without deleting the resource, set its monitored state to false using [ModifyIpamResourceCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyIpamResourceCidr.html). For more information, see [Release an allocation](https://docs.aws.amazon.com/vpc/latest/ipam/release-pool-alloc-ipam.html) in the Amazon VPC IPAM User Guide. All EC2 API actions follow an [eventual consistency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-api-troubleshooting.html#eventual-consistency) model. + /// Release an allocation within an IPAM pool. The Region you use should be the IPAM pool locale. The locale is the Amazon Web Services Region where this IPAM pool is available for allocations. You can only use this action to release manual allocations. To remove an allocation for a resource without deleting the resource, set its monitored state to false using [ModifyIpamResourceCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyIpamResourceCidr.html). For more information, see [Release an allocation](https://docs.aws.amazon.com/vpc/latest/ipam/release-alloc-ipam.html) in the Amazon VPC IPAM User Guide. All EC2 API actions follow an [eventual consistency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-api-troubleshooting.html#eventual-consistency) model. public func releaseIpamPoolAllocation(input: ReleaseIpamPoolAllocationInput) async throws -> ReleaseIpamPoolAllocationOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -20387,7 +20381,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Changes which network ACL a subnet is associated with. By default when you create a subnet, it's automatically associated with the default network ACL. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in the Amazon Virtual Private Cloud User Guide. This is an idempotent operation. + /// Changes which network ACL a subnet is associated with. By default when you create a subnet, it's automatically associated with the default network ACL. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. This is an idempotent operation. public func replaceNetworkAclAssociation(input: ReplaceNetworkAclAssociationInput) async throws -> ReplaceNetworkAclAssociationOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -20423,7 +20417,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Replaces an entry (rule) in a network ACL. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in the Amazon Virtual Private Cloud User Guide. + /// Replaces an entry (rule) in a network ACL. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. public func replaceNetworkAclEntry(input: ReplaceNetworkAclEntryInput) async throws -> ReplaceNetworkAclEntryOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -20459,7 +20453,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Replaces an existing route within a route table in a VPC. You must specify either a destination CIDR block or a prefix list ID. You must also specify exactly one of the resources from the parameter list, or reset the local route to its default target. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Replaces an existing route within a route table in a VPC. You must specify either a destination CIDR block or a prefix list ID. You must also specify exactly one of the resources from the parameter list, or reset the local route to its default target. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. public func replaceRoute(input: ReplaceRouteInput) async throws -> ReplaceRouteOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -20495,7 +20489,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Changes the route table associated with a given subnet, internet gateway, or virtual private gateway in a VPC. After the operation completes, the subnet or gateway uses the routes in the new route table. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. You can also use this operation to change which table is the main route table in the VPC. Specify the main route table's association ID and the route table ID of the new main route table. + /// Changes the route table associated with a given subnet, internet gateway, or virtual private gateway in a VPC. After the operation completes, the subnet or gateway uses the routes in the new route table. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. You can also use this operation to change which table is the main route table in the VPC. Specify the main route table's association ID and the route table ID of the new main route table. public func replaceRouteTableAssociation(input: ReplaceRouteTableAssociationInput) async throws -> ReplaceRouteTableAssociationOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -21179,7 +21173,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// [VPC only] Removes the specified outbound (egress) rules from a security group for EC2-VPC. This action does not apply to security groups for use in EC2-Classic. You can specify rules using either rule IDs or security group rule properties. If you use rule properties, the values that you specify (for example, ports) must match the existing rule's values exactly. Each rule has a protocol, from and to ports, and destination (CIDR range, security group, or prefix list). For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code. If the security group rule has a description, you do not need to specify the description to revoke the rule. [Default VPC] If the values you specify do not match the existing rule's values, no error is returned, and the output describes the security group rules that were not revoked. Amazon Web Services recommends that you describe the security group to verify that the rules were removed. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. + /// Removes the specified outbound (egress) rules from the specified security group. You can specify rules using either rule IDs or security group rule properties. If you use rule properties, the values that you specify (for example, ports) must match the existing rule's values exactly. Each rule has a protocol, from and to ports, and destination (CIDR range, security group, or prefix list). For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code. If the security group rule has a description, you do not need to specify the description to revoke the rule. For a default VPC, if the values you specify do not match the existing rule's values, no error is returned, and the output describes the security group rules that were not revoked. Amazon Web Services recommends that you describe the security group to verify that the rules were removed. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. public func revokeSecurityGroupEgress(input: RevokeSecurityGroupEgressInput) async throws -> RevokeSecurityGroupEgressOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -21215,7 +21209,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Removes the specified inbound (ingress) rules from a security group. You can specify rules using either rule IDs or security group rule properties. If you use rule properties, the values that you specify (for example, ports) must match the existing rule's values exactly. Each rule has a protocol, from and to ports, and source (CIDR range, security group, or prefix list). For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code. If the security group rule has a description, you do not need to specify the description to revoke the rule. [EC2-Classic, default VPC] If the values you specify do not match the existing rule's values, no error is returned, and the output describes the security group rules that were not revoked. Amazon Web Services recommends that you describe the security group to verify that the rules were removed. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Removes the specified inbound (ingress) rules from a security group. You can specify rules using either rule IDs or security group rule properties. If you use rule properties, the values that you specify (for example, ports) must match the existing rule's values exactly. Each rule has a protocol, from and to ports, and source (CIDR range, security group, or prefix list). For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code. If the security group rule has a description, you do not need to specify the description to revoke the rule. For a default VPC, if the values you specify do not match the existing rule's values, no error is returned, and the output describes the security group rules that were not revoked. Amazon Web Services recommends that you describe the security group to verify that the rules were removed. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. public func revokeSecurityGroupIngress(input: RevokeSecurityGroupIngressInput) async throws -> RevokeSecurityGroupIngressOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -21861,7 +21855,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// Unassigns secondary private IPv4 addresses from a private NAT gateway. You cannot unassign your primary private IP. For more information, see [Edit secondary IP address associations](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-edit-secondary) in the Amazon Virtual Private Cloud User Guide. While unassigning is in progress, you cannot assign/unassign additional IP addresses while the connections are being drained. You are, however, allowed to delete the NAT gateway. A private IP address will only be released at the end of MaxDrainDurationSeconds. The private IP addresses stay associated and support the existing connections but do not support any new connections (new connections are distributed across the remaining assigned private IP address). After the existing connections drain out, the private IP addresses get released. + /// Unassigns secondary private IPv4 addresses from a private NAT gateway. You cannot unassign your primary private IP. For more information, see [Edit secondary IP address associations](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-edit-secondary) in the Amazon VPC User Guide. While unassigning is in progress, you cannot assign/unassign additional IP addresses while the connections are being drained. You are, however, allowed to delete the NAT gateway. A private IP address will only be released at the end of MaxDrainDurationSeconds. The private IP addresses stay associated and support the existing connections, but do not support any new connections (new connections are distributed across the remaining assigned private IP address). After the existing connections drain out, the private IP addresses are released. public func unassignPrivateNatGatewayAddress(input: UnassignPrivateNatGatewayAddressInput) async throws -> UnassignPrivateNatGatewayAddressOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -21933,7 +21927,7 @@ extension EC2Client: EC2ClientProtocol { return result } - /// [VPC only] Updates the description of an egress (outbound) security group rule. You can replace an existing description, or add a description to a rule that did not have one previously. You can remove a description for a security group rule by omitting the description parameter in the request. + /// Updates the description of an egress (outbound) security group rule. You can replace an existing description, or add a description to a rule that did not have one previously. You can remove a description for a security group rule by omitting the description parameter in the request. public func updateSecurityGroupRuleDescriptionsEgress(input: UpdateSecurityGroupRuleDescriptionsEgressInput) async throws -> UpdateSecurityGroupRuleDescriptionsEgressOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSEC2/EC2ClientProtocol.swift b/Sources/Services/AWSEC2/EC2ClientProtocol.swift index fccbddfdf09..092cb514922 100644 --- a/Sources/Services/AWSEC2/EC2ClientProtocol.swift +++ b/Sources/Services/AWSEC2/EC2ClientProtocol.swift @@ -43,13 +43,13 @@ public protocol EC2ClientProtocol { func assignIpv6Addresses(input: AssignIpv6AddressesInput) async throws -> AssignIpv6AddressesOutputResponse /// Assigns one or more secondary private IP addresses to the specified network interface. You can specify one or more specific secondary IP addresses, or you can specify the number of secondary IP addresses to be automatically assigned within the subnet's CIDR block range. The number of secondary IP addresses that you can assign to an instance varies by instance type. For information about instance types, see [Instance Types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon Elastic Compute Cloud User Guide. For more information about Elastic IP addresses, see [Elastic IP Addresses](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) in the Amazon Elastic Compute Cloud User Guide. When you move a secondary private IP address to another network interface, any Elastic IP address that is associated with the IP address is also moved. Remapping an IP address is an asynchronous operation. When you move an IP address from one network interface to another, check network/interfaces/macs/mac/local-ipv4s in the instance metadata to confirm that the remapping is complete. You must specify either the IP addresses or the IP address count in the request. You can optionally use Prefix Delegation on the network interface. You must specify either the IPv4 Prefix Delegation prefixes, or the IPv4 Prefix Delegation count. For information, see [ Assigning prefixes to Amazon EC2 network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html) in the Amazon Elastic Compute Cloud User Guide. func assignPrivateIpAddresses(input: AssignPrivateIpAddressesInput) async throws -> AssignPrivateIpAddressesOutputResponse - /// Assigns one or more private IPv4 addresses to a private NAT gateway. For more information, see [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) in the Amazon Virtual Private Cloud User Guide. + /// Assigns one or more private IPv4 addresses to a private NAT gateway. For more information, see [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) in the Amazon VPC User Guide. func assignPrivateNatGatewayAddress(input: AssignPrivateNatGatewayAddressInput) async throws -> AssignPrivateNatGatewayAddressOutputResponse /// Associates an Elastic IP address, or carrier IP address (for instances that are in subnets in Wavelength Zones) with an instance or a network interface. Before you can use an Elastic IP address, you must allocate it to your account. If the Elastic IP address is already associated with a different instance, it is disassociated from that instance and associated with the specified instance. If you associate an Elastic IP address with an instance that has an existing Elastic IP address, the existing address is disassociated from the instance, but remains allocated to your account. [Subnets in Wavelength Zones] You can associate an IP address from the telecommunication carrier to the instance or network interface. You cannot associate an Elastic IP address with an interface in a different network border group. This is an idempotent operation. If you perform the operation more than once, Amazon EC2 doesn't return an error, and you may be charged for each time the Elastic IP address is remapped to the same instance. For more information, see the Elastic IP Addresses section of [Amazon EC2 Pricing](http://aws.amazon.com/ec2/pricing/). func associateAddress(input: AssociateAddressInput) async throws -> AssociateAddressOutputResponse /// Associates a target network with a Client VPN endpoint. A target network is a subnet in a VPC. You can associate multiple subnets from the same VPC with a Client VPN endpoint. You can associate only one subnet in each Availability Zone. We recommend that you associate at least two subnets to provide Availability Zone redundancy. If you specified a VPC when you created the Client VPN endpoint or if you have previous subnet associations, the specified subnet must be in the same VPC. To specify a subnet that's in a different VPC, you must first modify the Client VPN endpoint ([ModifyClientVpnEndpoint]) and change the VPC that's associated with it. func associateClientVpnTargetNetwork(input: AssociateClientVpnTargetNetworkInput) async throws -> AssociateClientVpnTargetNetworkOutputResponse - /// Associates a set of DHCP options (that you've previously created) with the specified VPC, or associates no DHCP options with the VPC. After you associate the options with the VPC, any existing instances and all new instances that you launch in that VPC use the options. You don't need to restart or relaunch the instances. They automatically pick up the changes within a few hours, depending on how frequently the instance renews its DHCP lease. You can explicitly renew the lease using the operating system on the instance. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon Virtual Private Cloud User Guide. + /// Associates a set of DHCP options (that you've previously created) with the specified VPC, or associates no DHCP options with the VPC. After you associate the options with the VPC, any existing instances and all new instances that you launch in that VPC use the options. You don't need to restart or relaunch the instances. They automatically pick up the changes within a few hours, depending on how frequently the instance renews its DHCP lease. You can explicitly renew the lease using the operating system on the instance. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. func associateDhcpOptions(input: AssociateDhcpOptionsInput) async throws -> AssociateDhcpOptionsOutputResponse /// Associates an Identity and Access Management (IAM) role with an Certificate Manager (ACM) certificate. This enables the certificate to be used by the ACM for Nitro Enclaves application inside an enclave. For more information, see [Certificate Manager for Nitro Enclaves](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html) in the Amazon Web Services Nitro Enclaves User Guide. When the IAM role is associated with the ACM certificate, the certificate, certificate chain, and encrypted private key are placed in an Amazon S3 location that only the associated IAM role can access. The private key of the certificate is encrypted with an Amazon Web Services managed key that has an attached attestation-based key policy. To enable the IAM role to access the Amazon S3 object, you must grant it permission to call s3:GetObject on the Amazon S3 bucket returned by the command. To enable the IAM role to access the KMS key, you must grant it permission to call kms:Decrypt on the KMS key returned by the command. For more information, see [ Grant the role permission to access the certificate and encryption key](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html#add-policy) in the Amazon Web Services Nitro Enclaves User Guide. func associateEnclaveCertificateIamRole(input: AssociateEnclaveCertificateIamRoleInput) async throws -> AssociateEnclaveCertificateIamRoleOutputResponse @@ -59,9 +59,9 @@ public protocol EC2ClientProtocol { func associateInstanceEventWindow(input: AssociateInstanceEventWindowInput) async throws -> AssociateInstanceEventWindowOutputResponse /// Associates an IPAM resource discovery with an Amazon VPC IPAM. A resource discovery is an IPAM component that enables IPAM to manage and monitor resources that belong to the owning account. func associateIpamResourceDiscovery(input: AssociateIpamResourceDiscoveryInput) async throws -> AssociateIpamResourceDiscoveryOutputResponse - /// Associates Elastic IP addresses (EIPs) and private IPv4 addresses with a public NAT gateway. For more information, see [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) in the Amazon Virtual Private Cloud User Guide. By default, you can associate up to 2 Elastic IP addresses per public NAT gateway. You can increase the limit by requesting a quota adjustment. For more information, see [Elastic IP address quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-eips) in the Amazon Virtual Private Cloud User Guide. + /// Associates Elastic IP addresses (EIPs) and private IPv4 addresses with a public NAT gateway. For more information, see [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) in the Amazon VPC User Guide. By default, you can associate up to 2 Elastic IP addresses per public NAT gateway. You can increase the limit by requesting a quota adjustment. For more information, see [Elastic IP address quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-eips) in the Amazon VPC User Guide. func associateNatGatewayAddress(input: AssociateNatGatewayAddressInput) async throws -> AssociateNatGatewayAddressOutputResponse - /// Associates a subnet in your VPC or an internet gateway or virtual private gateway attached to your VPC with a route table in your VPC. This association causes traffic from the subnet or gateway to be routed according to the routes in the route table. The action returns an association ID, which you need in order to disassociate the route table later. A route table can be associated with multiple subnets. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Associates a subnet in your VPC or an internet gateway or virtual private gateway attached to your VPC with a route table in your VPC. This association causes traffic from the subnet or gateway to be routed according to the routes in the route table. The action returns an association ID, which you need in order to disassociate the route table later. A route table can be associated with multiple subnets. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. func associateRouteTable(input: AssociateRouteTableInput) async throws -> AssociateRouteTableOutputResponse /// Associates a CIDR block with your subnet. You can only associate a single IPv6 CIDR block with your subnet. An IPv6 CIDR block must have a prefix length of /64. func associateSubnetCidrBlock(input: AssociateSubnetCidrBlockInput) async throws -> AssociateSubnetCidrBlockOutputResponse @@ -73,11 +73,11 @@ public protocol EC2ClientProtocol { func associateTransitGatewayRouteTable(input: AssociateTransitGatewayRouteTableInput) async throws -> AssociateTransitGatewayRouteTableOutputResponse /// This API action is currently in limited preview only. If you are interested in using this feature, contact your account manager. Associates a branch network interface with a trunk network interface. Before you create the association, run the [create-network-interface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html) command and set --interface-type to trunk. You must also create a network interface for each branch network interface that you want to associate with the trunk network interface. func associateTrunkInterface(input: AssociateTrunkInterfaceInput) async throws -> AssociateTrunkInterfaceOutputResponse - /// Associates a CIDR block with your VPC. You can associate a secondary IPv4 CIDR block, an Amazon-provided IPv6 CIDR block, or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses ([BYOIP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)). The IPv6 CIDR block size is fixed at /56. You must specify one of the following in the request: an IPv4 CIDR block, an IPv6 pool, or an Amazon-provided IPv6 CIDR block. For more information about associating CIDR blocks with your VPC and applicable restrictions, see [VPC and subnet sizing](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing) in the Amazon Virtual Private Cloud User Guide. + /// Associates a CIDR block with your VPC. You can associate a secondary IPv4 CIDR block, an Amazon-provided IPv6 CIDR block, or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses ([BYOIP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)). The IPv6 CIDR block size is fixed at /56. You must specify one of the following in the request: an IPv4 CIDR block, an IPv6 pool, or an Amazon-provided IPv6 CIDR block. For more information about associating CIDR blocks with your VPC and applicable restrictions, see [IP addressing for your VPCs and subnets](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html) in the Amazon VPC User Guide. func associateVpcCidrBlock(input: AssociateVpcCidrBlockInput) async throws -> AssociateVpcCidrBlockOutputResponse - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or more of the VPC's security groups. You cannot link an EC2-Classic instance to more than one VPC at a time. You can only link an instance that's in the running state. An instance is automatically unlinked from a VPC when it's stopped - you can link it to the VPC again when you restart it. After you've linked an instance, you cannot change the VPC security groups that are associated with it. To change the security groups, you must first unlink the instance, and then link it again. Linking your instance to a VPC is sometimes referred to as attaching your instance. + /// This action is deprecated. Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or more of the VPC security groups. You cannot link an EC2-Classic instance to more than one VPC at a time. You can only link an instance that's in the running state. An instance is automatically unlinked from a VPC when it's stopped - you can link it to the VPC again when you restart it. After you've linked an instance, you cannot change the VPC security groups that are associated with it. To change the security groups, you must first unlink the instance, and then link it again. Linking your instance to a VPC is sometimes referred to as attaching your instance. func attachClassicLinkVpc(input: AttachClassicLinkVpcInput) async throws -> AttachClassicLinkVpcOutputResponse - /// Attaches an internet gateway or a virtual private gateway to a VPC, enabling connectivity between the internet and the VPC. For more information about your VPC and internet gateway, see the [Amazon Virtual Private Cloud User Guide](https://docs.aws.amazon.com/vpc/latest/userguide/). + /// Attaches an internet gateway or a virtual private gateway to a VPC, enabling connectivity between the internet and the VPC. For more information, see [Internet gateways](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) in the Amazon VPC User Guide. func attachInternetGateway(input: AttachInternetGatewayInput) async throws -> AttachInternetGatewayOutputResponse /// Attaches a network interface to an instance. func attachNetworkInterface(input: AttachNetworkInterfaceInput) async throws -> AttachNetworkInterfaceOutputResponse @@ -100,9 +100,9 @@ public protocol EC2ClientProtocol { func attachVpnGateway(input: AttachVpnGatewayInput) async throws -> AttachVpnGatewayOutputResponse /// Adds an ingress authorization rule to a Client VPN endpoint. Ingress authorization rules act as firewall rules that grant access to networks. You must configure ingress authorization rules to enable clients to access resources in Amazon Web Services or on-premises networks. func authorizeClientVpnIngress(input: AuthorizeClientVpnIngressInput) async throws -> AuthorizeClientVpnIngressOutputResponse - /// [VPC only] Adds the specified outbound (egress) rules to a security group for use with a VPC. An outbound rule permits instances to send traffic to the specified IPv4 or IPv6 CIDR address ranges, or to the instances that are associated with the specified source security groups. When specifying an outbound rule for your security group in a VPC, the IpPermissions must include a destination for the traffic. You specify a protocol for each rule (for example, TCP). For the TCP and UDP protocols, you must also specify the destination port or port range. For the ICMP protocol, you must also specify the ICMP type and code. You can use -1 for the type or code to mean all types or all codes. Rule changes are propagated to affected instances as quickly as possible. However, a small delay might occur. For information about VPC security group quotas, see [Amazon VPC quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). + /// Adds the specified outbound (egress) rules to a security group for use with a VPC. An outbound rule permits instances to send traffic to the specified IPv4 or IPv6 CIDR address ranges, or to the instances that are associated with the specified source security groups. When specifying an outbound rule for your security group in a VPC, the IpPermissions must include a destination for the traffic. You specify a protocol for each rule (for example, TCP). For the TCP and UDP protocols, you must also specify the destination port or port range. For the ICMP protocol, you must also specify the ICMP type and code. You can use -1 for the type or code to mean all types or all codes. Rule changes are propagated to affected instances as quickly as possible. However, a small delay might occur. For information about VPC security group quotas, see [Amazon VPC quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). func authorizeSecurityGroupEgress(input: AuthorizeSecurityGroupEgressInput) async throws -> AuthorizeSecurityGroupEgressOutputResponse - /// Adds the specified inbound (ingress) rules to a security group. An inbound rule permits instances to receive traffic from the specified IPv4 or IPv6 CIDR address range, or from the instances that are associated with the specified destination security groups. When specifying an inbound rule for your security group in a VPC, the IpPermissions must include a source for the traffic. You specify a protocol for each rule (for example, TCP). For TCP and UDP, you must also specify the destination port or port range. For ICMP/ICMPv6, you must also specify the ICMP/ICMPv6 type and code. You can use -1 to mean all types or all codes. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. For more information about VPC security group quotas, see [Amazon VPC quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Adds the specified inbound (ingress) rules to a security group. An inbound rule permits instances to receive traffic from the specified IPv4 or IPv6 CIDR address range, or from the instances that are associated with the specified destination security groups. When specifying an inbound rule for your security group in a VPC, the IpPermissions must include a source for the traffic. You specify a protocol for each rule (for example, TCP). For TCP and UDP, you must also specify the destination port or port range. For ICMP/ICMPv6, you must also specify the ICMP/ICMPv6 type and code. You can use -1 to mean all types or all codes. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. For more information about VPC security group quotas, see [Amazon VPC quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). func authorizeSecurityGroupIngress(input: AuthorizeSecurityGroupIngressInput) async throws -> AuthorizeSecurityGroupIngressOutputResponse /// Bundles an Amazon instance store-backed Windows instance. During bundling, only the root device volume (C:\) is bundled. Data on other instance store volumes is not preserved. This action is not applicable for Linux/Unix instances or Windows instances that are backed by Amazon EBS. func bundleInstance(input: BundleInstanceInput) async throws -> BundleInstanceOutputResponse @@ -156,9 +156,9 @@ public protocol EC2ClientProtocol { func createCoipPool(input: CreateCoipPoolInput) async throws -> CreateCoipPoolOutputResponse /// Provides information to Amazon Web Services about your customer gateway device. The customer gateway device is the appliance at your end of the VPN connection. You must provide the IP address of the customer gateway device’s external interface. The IP address must be static and can be behind a device performing network address translation (NAT). For devices that use Border Gateway Protocol (BGP), you can also provide the device's BGP Autonomous System Number (ASN). You can use an existing ASN assigned to your network. If you don't have an ASN already, you can use a private ASN. For more information, see [Customer gateway options for your Site-to-Site VPN connection](https://docs.aws.amazon.com/vpn/latest/s2svpn/cgw-options.html) in the Amazon Web Services Site-to-Site VPN User Guide. To create more than one customer gateway with the same VPN type, IP address, and BGP ASN, specify a unique device name for each customer gateway. An identical request returns information about the existing customer gateway; it doesn't create a new customer gateway. func createCustomerGateway(input: CreateCustomerGatewayInput) async throws -> CreateCustomerGatewayOutputResponse - /// Creates a default subnet with a size /20 IPv4 CIDR block in the specified Availability Zone in your default VPC. You can have only one default subnet per Availability Zone. For more information, see [Creating a default subnet](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html#create-default-subnet) in the Amazon Virtual Private Cloud User Guide. + /// Creates a default subnet with a size /20 IPv4 CIDR block in the specified Availability Zone in your default VPC. You can have only one default subnet per Availability Zone. For more information, see [Create a default subnet](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html#create-default-subnet) in the Amazon VPC User Guide. func createDefaultSubnet(input: CreateDefaultSubnetInput) async throws -> CreateDefaultSubnetOutputResponse - /// Creates a default VPC with a size /16 IPv4 CIDR block and a default subnet in each Availability Zone. For more information about the components of a default VPC, see [Default VPC and default subnets](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) in the Amazon Virtual Private Cloud User Guide. You cannot specify the components of the default VPC yourself. If you deleted your previous default VPC, you can create a default VPC. You cannot have more than one default VPC per Region. If your account supports EC2-Classic, you cannot use this action to create a default VPC in a Region that supports EC2-Classic. If you want a default VPC in a Region that supports EC2-Classic, see "I really want a default VPC for my existing EC2 account. Is that possible?" in the [Default VPCs FAQ](http://aws.amazon.com/vpc/faqs/#Default_VPCs). We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Creates a default VPC with a size /16 IPv4 CIDR block and a default subnet in each Availability Zone. For more information about the components of a default VPC, see [Default VPCs](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) in the Amazon VPC User Guide. You cannot specify the components of the default VPC yourself. If you deleted your previous default VPC, you can create a default VPC. You cannot have more than one default VPC per Region. func createDefaultVpc(input: CreateDefaultVpcInput) async throws -> CreateDefaultVpcOutputResponse /// Creates a set of DHCP options for your VPC. After creating the set, you must associate it with the VPC, causing all existing and new instances that you launch in the VPC to use this set of DHCP options. The following are the individual DHCP options you can specify. For more information about the options, see [RFC 2132](http://www.ietf.org/rfc/rfc2132.txt). /// @@ -173,7 +173,7 @@ public protocol EC2ClientProtocol { /// * netbios-node-type - The NetBIOS node type (1, 2, 4, or 8). We recommend that you specify 2 (broadcast and multicast are not currently supported). For more information about these node types, see [RFC 2132](http://www.ietf.org/rfc/rfc2132.txt). /// /// - /// Your VPC automatically starts out with a set of DHCP options that includes only a DNS server that we provide (AmazonProvidedDNS). If you create a set of options, and if your VPC has an internet gateway, make sure to set the domain-name-servers option either to AmazonProvidedDNS or to a domain name server of your choice. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon Virtual Private Cloud User Guide. + /// Your VPC automatically starts out with a set of DHCP options that includes only a DNS server that we provide (AmazonProvidedDNS). If you create a set of options, and if your VPC has an internet gateway, make sure to set the domain-name-servers option either to AmazonProvidedDNS or to a domain name server of your choice. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. func createDhcpOptions(input: CreateDhcpOptionsInput) async throws -> CreateDhcpOptionsOutputResponse /// [IPv6 only] Creates an egress-only internet gateway for your VPC. An egress-only internet gateway is used to enable outbound communication over IPv6 from instances in your VPC to the internet, and prevents hosts outside of your VPC from initiating an IPv6 connection with your instance. func createEgressOnlyInternetGateway(input: CreateEgressOnlyInternetGatewayInput) async throws -> CreateEgressOnlyInternetGatewayOutputResponse @@ -183,9 +183,9 @@ public protocol EC2ClientProtocol { func createFlowLogs(input: CreateFlowLogsInput) async throws -> CreateFlowLogsOutputResponse /// Creates an Amazon FPGA Image (AFI) from the specified design checkpoint (DCP). The create operation is asynchronous. To verify that the AFI is ready for use, check the output logs. An AFI contains the FPGA bitstream that is ready to download to an FPGA. You can securely deploy an AFI on multiple FPGA-accelerated instances. For more information, see the [Amazon Web Services FPGA Hardware Development Kit](https://github.com/aws/aws-fpga/). func createFpgaImage(input: CreateFpgaImageInput) async throws -> CreateFpgaImageOutputResponse - /// Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that is either running or stopped. By default, when Amazon EC2 creates the new AMI, it reboots the instance so that it can take snapshots of the attached volumes while data is at rest, in order to ensure a consistent state. You can set the NoReboot parameter to true in the API request, or use the --no-reboot option in the CLI to prevent Amazon EC2 from shutting down and rebooting the instance. If you choose to bypass the shutdown and reboot process by setting the NoReboot parameter to true in the API request, or by using the --no-reboot option in the CLI, we can't guarantee the file system integrity of the created image. If you customized your instance with instance store volumes or Amazon EBS volumes in addition to the root device volume, the new AMI contains block device mapping information for those volumes. When you launch an instance from this new AMI, the instance automatically launches with those additional volumes. For more information, see [Create an Amazon EBS-backed Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html) in the Amazon Elastic Compute Cloud User Guide. + /// Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that is either running or stopped. If you customized your instance with instance store volumes or Amazon EBS volumes in addition to the root device volume, the new AMI contains block device mapping information for those volumes. When you launch an instance from this new AMI, the instance automatically launches with those additional volumes. For more information, see [Create an Amazon EBS-backed Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html) in the Amazon Elastic Compute Cloud User Guide. func createImage(input: CreateImageInput) async throws -> CreateImageOutputResponse - /// Creates an EC2 Instance Connect Endpoint. An EC2 Instance Connect Endpoint allows you to connect to a resource, without requiring the resource to have a public IPv4 address. For more information, see [Connect to your resources without requiring a public IPv4 address using EC2 Instance Connect Endpoint](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect-Endpoint.html) in the Amazon EC2 User Guide. + /// Creates an EC2 Instance Connect Endpoint. An EC2 Instance Connect Endpoint allows you to connect to an instance, without requiring the instance to have a public IPv4 address. For more information, see [Connect to your instances without requiring a public IPv4 address using EC2 Instance Connect Endpoint](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect-Endpoint.html) in the Amazon EC2 User Guide. func createInstanceConnectEndpoint(input: CreateInstanceConnectEndpointInput) async throws -> CreateInstanceConnectEndpointOutputResponse /// Creates an event window in which scheduled events for the associated Amazon EC2 instances can run. You can define either a set of time ranges or a cron expression when creating the event window, but not both. All event window times are in UTC. You can create up to 200 event windows per Amazon Web Services Region. When you create the event window, targets (instance IDs, Dedicated Host IDs, or tags) are not yet associated with it. To ensure that the event window can be used, you must associate one or more targets with it by using the [AssociateInstanceEventWindow] API. Event windows are applicable only for scheduled events that stop, reboot, or terminate instances. Event windows are not applicable for: /// @@ -196,9 +196,9 @@ public protocol EC2ClientProtocol { /// /// For more information, see [Define event windows for scheduled events](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html) in the Amazon EC2 User Guide. func createInstanceEventWindow(input: CreateInstanceEventWindowInput) async throws -> CreateInstanceEventWindowOutputResponse - /// Exports a running or stopped instance to an Amazon S3 bucket. For information about the supported operating systems, image formats, and known limitations for the types of instances you can export, see [Exporting an instance as a VM Using VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html) in the VM Import/Export User Guide. + /// Exports a running or stopped instance to an Amazon S3 bucket. For information about the prerequisites for your Amazon S3 bucket, supported operating systems, image formats, and known limitations for the types of instances you can export, see [Exporting an instance as a VM Using VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html) in the VM Import/Export User Guide. func createInstanceExportTask(input: CreateInstanceExportTaskInput) async throws -> CreateInstanceExportTaskOutputResponse - /// Creates an internet gateway for use with a VPC. After creating the internet gateway, you attach it to a VPC using [AttachInternetGateway]. For more information about your VPC and internet gateway, see the [Amazon Virtual Private Cloud User Guide](https://docs.aws.amazon.com/vpc/latest/userguide/). + /// Creates an internet gateway for use with a VPC. After creating the internet gateway, you attach it to a VPC using [AttachInternetGateway]. For more information, see [Internet gateways](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) in the Amazon VPC User Guide. func createInternetGateway(input: CreateInternetGatewayInput) async throws -> CreateInternetGatewayOutputResponse /// Create an IPAM. Amazon VPC IP Address Manager (IPAM) is a VPC feature that you can use to automate your IP address management workflows including assigning, tracking, troubleshooting, and auditing IP addresses across Amazon Web Services Regions and accounts throughout your Amazon Web Services Organization. For more information, see [Create an IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html) in the Amazon VPC IPAM User Guide. func createIpam(input: CreateIpamInput) async throws -> CreateIpamOutputResponse @@ -228,11 +228,11 @@ public protocol EC2ClientProtocol { func createLocalGatewayRouteTableVpcAssociation(input: CreateLocalGatewayRouteTableVpcAssociationInput) async throws -> CreateLocalGatewayRouteTableVpcAssociationOutputResponse /// Creates a managed prefix list. You can specify one or more entries for the prefix list. Each entry consists of a CIDR block and an optional description. func createManagedPrefixList(input: CreateManagedPrefixListInput) async throws -> CreateManagedPrefixListOutputResponse - /// Creates a NAT gateway in the specified subnet. This action creates a network interface in the specified subnet with a private IP address from the IP address range of the subnet. You can create either a public NAT gateway or a private NAT gateway. With a public NAT gateway, internet-bound traffic from a private subnet can be routed to the NAT gateway, so that instances in a private subnet can connect to the internet. With a private NAT gateway, private communication is routed across VPCs and on-premises networks through a transit gateway or virtual private gateway. Common use cases include running large workloads behind a small pool of allowlisted IPv4 addresses, preserving private IPv4 addresses, and communicating between overlapping networks. For more information, see [NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) in the Amazon Virtual Private Cloud User Guide. + /// Creates a NAT gateway in the specified subnet. This action creates a network interface in the specified subnet with a private IP address from the IP address range of the subnet. You can create either a public NAT gateway or a private NAT gateway. With a public NAT gateway, internet-bound traffic from a private subnet can be routed to the NAT gateway, so that instances in a private subnet can connect to the internet. With a private NAT gateway, private communication is routed across VPCs and on-premises networks through a transit gateway or virtual private gateway. Common use cases include running large workloads behind a small pool of allowlisted IPv4 addresses, preserving private IPv4 addresses, and communicating between overlapping networks. For more information, see [NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) in the Amazon VPC User Guide. func createNatGateway(input: CreateNatGatewayInput) async throws -> CreateNatGatewayOutputResponse - /// Creates a network ACL in a VPC. Network ACLs provide an optional layer of security (in addition to security groups) for the instances in your VPC. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in the Amazon Virtual Private Cloud User Guide. + /// Creates a network ACL in a VPC. Network ACLs provide an optional layer of security (in addition to security groups) for the instances in your VPC. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. func createNetworkAcl(input: CreateNetworkAclInput) async throws -> CreateNetworkAclOutputResponse - /// Creates an entry (a rule) in a network ACL with the specified rule number. Each network ACL has a set of numbered ingress rules and a separate set of numbered egress rules. When determining whether a packet should be allowed in or out of a subnet associated with the ACL, we process the entries in the ACL according to the rule numbers, in ascending order. Each network ACL has a set of ingress rules and a separate set of egress rules. We recommend that you leave room between the rule numbers (for example, 100, 110, 120, ...), and not number them one right after the other (for example, 101, 102, 103, ...). This makes it easier to add a rule between existing ones without having to renumber the rules. After you add an entry, you can't modify it; you must either replace it, or create an entry and delete the old one. For more information about network ACLs, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in the Amazon Virtual Private Cloud User Guide. + /// Creates an entry (a rule) in a network ACL with the specified rule number. Each network ACL has a set of numbered ingress rules and a separate set of numbered egress rules. When determining whether a packet should be allowed in or out of a subnet associated with the ACL, we process the entries in the ACL according to the rule numbers, in ascending order. Each network ACL has a set of ingress rules and a separate set of egress rules. We recommend that you leave room between the rule numbers (for example, 100, 110, 120, ...), and not number them one right after the other (for example, 101, 102, 103, ...). This makes it easier to add a rule between existing ones without having to renumber the rules. After you add an entry, you can't modify it; you must either replace it, or create an entry and delete the old one. For more information about network ACLs, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. func createNetworkAclEntry(input: CreateNetworkAclEntryInput) async throws -> CreateNetworkAclEntryOutputResponse /// Creates a Network Access Scope. Amazon Web Services Network Access Analyzer enables cloud networking and cloud operations teams to verify that their networks on Amazon Web Services conform to their network security and governance objectives. For more information, see the [Amazon Web Services Network Access Analyzer Guide](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/). func createNetworkInsightsAccessScope(input: CreateNetworkInsightsAccessScopeInput) async throws -> CreateNetworkInsightsAccessScopeOutputResponse @@ -259,11 +259,11 @@ public protocol EC2ClientProtocol { /// * 192.0.2.0/28 (goes to some target B) /// /// - /// Both routes apply to the traffic destined for 192.0.2.3. However, the second route in the list covers a smaller number of IP addresses and is therefore more specific, so we use that route to determine where to target the traffic. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Both routes apply to the traffic destined for 192.0.2.3. However, the second route in the list covers a smaller number of IP addresses and is therefore more specific, so we use that route to determine where to target the traffic. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. func createRoute(input: CreateRouteInput) async throws -> CreateRouteOutputResponse - /// Creates a route table for the specified VPC. After you create a route table, you can add routes and associate the table with a subnet. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Creates a route table for the specified VPC. After you create a route table, you can add routes and associate the table with a subnet. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. func createRouteTable(input: CreateRouteTableInput) async throws -> CreateRouteTableOutputResponse - /// Creates a security group. A security group acts as a virtual firewall for your instance to control inbound and outbound traffic. For more information, see [Amazon EC2 security groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) in the Amazon Elastic Compute Cloud User Guide and [Security groups for your VPC](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) in the Amazon Virtual Private Cloud User Guide. When you create a security group, you specify a friendly name of your choice. You can have a security group for use in EC2-Classic with the same name as a security group for use in a VPC. However, you can't have two security groups for use in EC2-Classic with the same name or two security groups for use in a VPC with the same name. You have a default security group for use in EC2-Classic and a default security group for use in your VPC. If you don't specify a security group when you launch an instance, the instance is launched into the appropriate default security group. A default security group includes a default rule that grants instances unrestricted network access to each other. You can add or remove rules from your security groups using [AuthorizeSecurityGroupIngress], [AuthorizeSecurityGroupEgress], [RevokeSecurityGroupIngress], and [RevokeSecurityGroupEgress]. For more information about VPC security group limits, see [Amazon VPC Limits](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Creates a security group. A security group acts as a virtual firewall for your instance to control inbound and outbound traffic. For more information, see [Amazon EC2 security groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) in the Amazon Elastic Compute Cloud User Guide and [Security groups for your VPC](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) in the Amazon Virtual Private Cloud User Guide. When you create a security group, you specify a friendly name of your choice. You can't have two security groups for the same VPC with the same name. You have a default security group for use in your VPC. If you don't specify a security group when you launch an instance, the instance is launched into the appropriate default security group. A default security group includes a default rule that grants instances unrestricted network access to each other. You can add or remove rules from your security groups using [AuthorizeSecurityGroupIngress], [AuthorizeSecurityGroupEgress], [RevokeSecurityGroupIngress], and [RevokeSecurityGroupEgress]. For more information about VPC security group limits, see [Amazon VPC Limits](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). func createSecurityGroup(input: CreateSecurityGroupInput) async throws -> CreateSecurityGroupOutputResponse /// Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and to save data before shutting down an instance. You can create snapshots of volumes in a Region and volumes on an Outpost. If you create a snapshot of a volume in a Region, the snapshot must be stored in the same Region as the volume. If you create a snapshot of a volume on an Outpost, the snapshot can be stored on the same Outpost as the volume, or in the Region for that Outpost. When a snapshot is created, any Amazon Web Services Marketplace product codes that are associated with the source volume are propagated to the snapshot. You can take a snapshot of an attached volume that is in use. However, snapshots only capture data that has been written to your Amazon EBS volume at the time the snapshot command is issued; this might exclude any data that has been cached by any applications or the operating system. If you can pause any file systems on the volume long enough to take a snapshot, your snapshot should be complete. However, if you cannot pause all file writes to the volume, you should unmount the volume from within the instance, issue the snapshot command, and then remount the volume to ensure a consistent and complete snapshot. You may remount and use your volume while the snapshot status is pending. When you create a snapshot for an EBS volume that serves as a root device, we recommend that you stop the instance before taking the snapshot. Snapshots that are taken from encrypted volumes are automatically encrypted. Volumes that are created from encrypted snapshots are also automatically encrypted. Your encrypted volumes and any associated snapshots always remain protected. You can tag your snapshots during creation. For more information, see [Tag your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) in the Amazon Elastic Compute Cloud User Guide. For more information, see [Amazon Elastic Block Store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) and [Amazon EBS encryption](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) in the Amazon Elastic Compute Cloud User Guide. func createSnapshot(input: CreateSnapshotInput) async throws -> CreateSnapshotOutputResponse @@ -273,7 +273,7 @@ public protocol EC2ClientProtocol { func createSpotDatafeedSubscription(input: CreateSpotDatafeedSubscriptionInput) async throws -> CreateSpotDatafeedSubscriptionOutputResponse /// Stores an AMI as a single object in an Amazon S3 bucket. To use this API, you must have the required permissions. For more information, see [Permissions for storing and restoring AMIs using Amazon S3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html#ami-s3-permissions) in the Amazon EC2 User Guide. For more information, see [Store and restore an AMI using Amazon S3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html) in the Amazon EC2 User Guide. func createStoreImageTask(input: CreateStoreImageTaskInput) async throws -> CreateStoreImageTaskOutputResponse - /// Creates a subnet in the specified VPC. For an IPv4 only subnet, specify an IPv4 CIDR block. If the VPC has an IPv6 CIDR block, you can create an IPv6 only subnet or a dual stack subnet instead. For an IPv6 only subnet, specify an IPv6 CIDR block. For a dual stack subnet, specify both an IPv4 CIDR block and an IPv6 CIDR block. A subnet CIDR block must not overlap the CIDR block of an existing subnet in the VPC. After you create a subnet, you can't change its CIDR block. The allowed size for an IPv4 subnet is between a /28 netmask (16 IP addresses) and a /16 netmask (65,536 IP addresses). Amazon Web Services reserves both the first four and the last IPv4 address in each subnet's CIDR block. They're not available for your use. If you've associated an IPv6 CIDR block with your VPC, you can associate an IPv6 CIDR block with a subnet when you create it. The allowed block size for an IPv6 subnet is a /64 netmask. If you add more than one subnet to a VPC, they're set up in a star topology with a logical router in the middle. When you stop an instance in a subnet, it retains its private IPv4 address. It's therefore possible to have a subnet with no running instances (they're all stopped), but no remaining IP addresses available. For more information, see [Subnets](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html) in the Amazon Virtual Private Cloud User Guide. + /// Creates a subnet in the specified VPC. For an IPv4 only subnet, specify an IPv4 CIDR block. If the VPC has an IPv6 CIDR block, you can create an IPv6 only subnet or a dual stack subnet instead. For an IPv6 only subnet, specify an IPv6 CIDR block. For a dual stack subnet, specify both an IPv4 CIDR block and an IPv6 CIDR block. A subnet CIDR block must not overlap the CIDR block of an existing subnet in the VPC. After you create a subnet, you can't change its CIDR block. The allowed size for an IPv4 subnet is between a /28 netmask (16 IP addresses) and a /16 netmask (65,536 IP addresses). Amazon Web Services reserves both the first four and the last IPv4 address in each subnet's CIDR block. They're not available for your use. If you've associated an IPv6 CIDR block with your VPC, you can associate an IPv6 CIDR block with a subnet when you create it. The allowed block size for an IPv6 subnet is a /64 netmask. If you add more than one subnet to a VPC, they're set up in a star topology with a logical router in the middle. When you stop an instance in a subnet, it retains its private IPv4 address. It's therefore possible to have a subnet with no running instances (they're all stopped), but no remaining IP addresses available. For more information, see [Subnets](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html) in the Amazon VPC User Guide. func createSubnet(input: CreateSubnetInput) async throws -> CreateSubnetOutputResponse /// Creates a subnet CIDR reservation. For information about subnet CIDR reservations, see [Subnet CIDR reservations](https://docs.aws.amazon.com/vpc/latest/userguide/subnet-cidr-reservation.html) in the Amazon Virtual Private Cloud User Guide. func createSubnetCidrReservation(input: CreateSubnetCidrReservationInput) async throws -> CreateSubnetCidrReservationOutputResponse @@ -319,9 +319,9 @@ public protocol EC2ClientProtocol { func createVerifiedAccessTrustProvider(input: CreateVerifiedAccessTrustProviderInput) async throws -> CreateVerifiedAccessTrustProviderOutputResponse /// Creates an EBS volume that can be attached to an instance in the same Availability Zone. You can create a new empty volume or restore a volume from an EBS snapshot. Any Amazon Web Services Marketplace product codes from the snapshot are propagated to the volume. You can create encrypted volumes. Encrypted volumes must be attached to instances that support Amazon EBS encryption. Volumes that are created from encrypted snapshots are also automatically encrypted. For more information, see [Amazon EBS encryption](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) in the Amazon Elastic Compute Cloud User Guide. You can tag your volumes during creation. For more information, see [Tag your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) in the Amazon Elastic Compute Cloud User Guide. For more information, see [Create an Amazon EBS volume](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-volume.html) in the Amazon Elastic Compute Cloud User Guide. func createVolume(input: CreateVolumeInput) async throws -> CreateVolumeOutputResponse - /// Creates a VPC with the specified CIDR blocks. For more information, see [VPC CIDR blocks](https://docs.aws.amazon.com/vpc/latest/userguide/configure-your-vpc.html#vpc-cidr-blocks) in the Amazon Virtual Private Cloud User Guide. You can optionally request an IPv6 CIDR block for the VPC. You can request an Amazon-provided IPv6 CIDR block from Amazon's pool of IPv6 addresses, or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses ([BYOIP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)). By default, each instance that you launch in the VPC has the default DHCP options, which include only a default DNS server that we provide (AmazonProvidedDNS). For more information, see [DHCP option sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon Virtual Private Cloud User Guide. You can specify the instance tenancy value for the VPC when you create it. You can't change this value for the VPC after you create it. For more information, see [Dedicated Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) in the Amazon Elastic Compute Cloud User Guide. + /// Creates a VPC with the specified CIDR blocks. For more information, see [IP addressing for your VPCs and subnets](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html) in the Amazon VPC User Guide. You can optionally request an IPv6 CIDR block for the VPC. You can request an Amazon-provided IPv6 CIDR block from Amazon's pool of IPv6 addresses, or an IPv6 CIDR block from an IPv6 address pool that you provisioned through bring your own IP addresses ([BYOIP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)). By default, each instance that you launch in the VPC has the default DHCP options, which include only a default DNS server that we provide (AmazonProvidedDNS). For more information, see [DHCP option sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. You can specify the instance tenancy value for the VPC when you create it. You can't change this value for the VPC after you create it. For more information, see [Dedicated Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) in the Amazon EC2 User Guide. func createVpc(input: CreateVpcInput) async throws -> CreateVpcOutputResponse - /// Creates a VPC endpoint for a specified service. An endpoint enables you to create a private connection between your VPC and the service. The service may be provided by Amazon Web Services, an Amazon Web Services Marketplace Partner, or another Amazon Web Services account. For more information, see the [Amazon Web Services PrivateLink Guide](https://docs.aws.amazon.com/vpc/latest/privatelink/). + /// Creates a VPC endpoint. A VPC endpoint provides a private connection between the specified VPC and the specified endpoint service. You can use an endpoint service provided by Amazon Web Services, an Amazon Web Services Marketplace Partner, or another Amazon Web Services account. For more information, see the [Amazon Web Services PrivateLink User Guide](https://docs.aws.amazon.com/vpc/latest/privatelink/). func createVpcEndpoint(input: CreateVpcEndpointInput) async throws -> CreateVpcEndpointOutputResponse /// Creates a connection notification for a specified VPC endpoint or VPC endpoint service. A connection notification notifies you of specific endpoint events. You must create an SNS topic to receive notifications. For more information, see [Create a Topic](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) in the Amazon Simple Notification Service Developer Guide. You can create a connection notification for interface endpoints only. func createVpcEndpointConnectionNotification(input: CreateVpcEndpointConnectionNotificationInput) async throws -> CreateVpcEndpointConnectionNotificationOutputResponse @@ -429,7 +429,7 @@ public protocol EC2ClientProtocol { func deleteRoute(input: DeleteRouteInput) async throws -> DeleteRouteOutputResponse /// Deletes the specified route table. You must disassociate the route table from any subnets before you can delete it. You can't delete the main route table. func deleteRouteTable(input: DeleteRouteTableInput) async throws -> DeleteRouteTableOutputResponse - /// Deletes a security group. If you attempt to delete a security group that is associated with an instance, or is referenced by another security group, the operation fails with InvalidGroup.InUse in EC2-Classic or DependencyViolation in EC2-VPC. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Deletes a security group. If you attempt to delete a security group that is associated with an instance or network interface or is referenced by another security group, the operation fails with DependencyViolation. func deleteSecurityGroup(input: DeleteSecurityGroupInput) async throws -> DeleteSecurityGroupOutputResponse /// Deletes the specified snapshot. When you make periodic snapshots of a volume, the snapshots are incremental, and only the blocks on the device that have changed since your last snapshot are saved in the new snapshot. When you delete a snapshot, only the data not needed for any other snapshot is removed. So regardless of which prior snapshots have been deleted, all active snapshots will have access to all the information needed to restore the volume. You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first de-register the AMI before you can delete the snapshot. For more information, see [Delete an Amazon EBS snapshot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-snapshot.html) in the Amazon Elastic Compute Cloud User Guide. func deleteSnapshot(input: DeleteSnapshotInput) async throws -> DeleteSnapshotOutputResponse @@ -547,7 +547,7 @@ public protocol EC2ClientProtocol { func describeCapacityReservations(input: DescribeCapacityReservationsInput) async throws -> DescribeCapacityReservationsOutputResponse /// Describes one or more of your carrier gateways. func describeCarrierGateways(input: DescribeCarrierGatewaysInput) async throws -> DescribeCarrierGatewaysOutputResponse - /// Describes one or more of your linked EC2-Classic instances. This request only returns information about EC2-Classic instances linked to a VPC through ClassicLink. You cannot use this request to return information about other instances. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Describes one or more of your linked EC2-Classic instances. This request only returns information about EC2-Classic instances linked to a VPC through ClassicLink. You cannot use this request to return information about other instances. func describeClassicLinkInstances(input: DescribeClassicLinkInstancesInput) async throws -> DescribeClassicLinkInstancesOutputResponse /// Describes the authorization rules for a specified Client VPN endpoint. func describeClientVpnAuthorizationRules(input: DescribeClientVpnAuthorizationRulesInput) async throws -> DescribeClientVpnAuthorizationRulesOutputResponse @@ -565,7 +565,7 @@ public protocol EC2ClientProtocol { func describeConversionTasks(input: DescribeConversionTasksInput) async throws -> DescribeConversionTasksOutputResponse /// Describes one or more of your VPN customer gateways. For more information, see [Amazon Web Services Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) in the Amazon Web Services Site-to-Site VPN User Guide. func describeCustomerGateways(input: DescribeCustomerGatewaysInput) async throws -> DescribeCustomerGatewaysOutputResponse - /// Describes one or more of your DHCP options sets. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon Virtual Private Cloud User Guide. + /// Describes one or more of your DHCP options sets. For more information, see [DHCP options sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in the Amazon VPC User Guide. func describeDhcpOptions(input: DescribeDhcpOptionsInput) async throws -> DescribeDhcpOptionsOutputResponse /// Describes one or more of your egress-only internet gateways. func describeEgressOnlyInternetGateways(input: DescribeEgressOnlyInternetGatewaysInput) async throws -> DescribeEgressOnlyInternetGatewaysOutputResponse @@ -673,7 +673,7 @@ public protocol EC2ClientProtocol { func describeMovingAddresses(input: DescribeMovingAddressesInput) async throws -> DescribeMovingAddressesOutputResponse /// Describes one or more of your NAT gateways. func describeNatGateways(input: DescribeNatGatewaysInput) async throws -> DescribeNatGatewaysOutputResponse - /// Describes one or more of your network ACLs. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in the Amazon Virtual Private Cloud User Guide. + /// Describes one or more of your network ACLs. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. func describeNetworkAcls(input: DescribeNetworkAclsInput) async throws -> DescribeNetworkAclsOutputResponse /// Describes the specified Network Access Scope analyses. func describeNetworkInsightsAccessScopeAnalyses(input: DescribeNetworkInsightsAccessScopeAnalysesInput) async throws -> DescribeNetworkInsightsAccessScopeAnalysesOutputResponse @@ -709,17 +709,17 @@ public protocol EC2ClientProtocol { func describeReservedInstancesModifications(input: DescribeReservedInstancesModificationsInput) async throws -> DescribeReservedInstancesModificationsOutputResponse /// Describes Reserved Instance offerings that are available for purchase. With Reserved Instances, you purchase the right to launch instances for a period of time. During that time period, you do not receive insufficient capacity errors, and you pay a lower usage rate than the rate charged for On-Demand instances for the actual time used. If you have listed your own Reserved Instances for sale in the Reserved Instance Marketplace, they will be excluded from these results. This is to ensure that you do not purchase your own Reserved Instances. For more information, see [Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) in the Amazon EC2 User Guide. func describeReservedInstancesOfferings(input: DescribeReservedInstancesOfferingsInput) async throws -> DescribeReservedInstancesOfferingsOutputResponse - /// Describes one or more of your route tables. Each subnet in your VPC must be associated with a route table. If a subnet is not explicitly associated with any route table, it is implicitly associated with the main route table. This command does not return the subnet ID for implicit associations. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Describes one or more of your route tables. Each subnet in your VPC must be associated with a route table. If a subnet is not explicitly associated with any route table, it is implicitly associated with the main route table. This command does not return the subnet ID for implicit associations. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. func describeRouteTables(input: DescribeRouteTablesInput) async throws -> DescribeRouteTablesOutputResponse /// Finds available schedules that meet the specified criteria. You can search for an available schedule no more than 3 months in advance. You must meet the minimum required duration of 1,200 hours per year. For example, the minimum daily schedule is 4 hours, the minimum weekly schedule is 24 hours, and the minimum monthly schedule is 100 hours. After you find a schedule that meets your needs, call [PurchaseScheduledInstances] to purchase Scheduled Instances with that schedule. func describeScheduledInstanceAvailability(input: DescribeScheduledInstanceAvailabilityInput) async throws -> DescribeScheduledInstanceAvailabilityOutputResponse /// Describes the specified Scheduled Instances or all your Scheduled Instances. func describeScheduledInstances(input: DescribeScheduledInstancesInput) async throws -> DescribeScheduledInstancesOutputResponse - /// [VPC only] Describes the VPCs on the other side of a VPC peering connection that are referencing the security groups you've specified in this request. + /// Describes the VPCs on the other side of a VPC peering connection that are referencing the security groups you've specified in this request. func describeSecurityGroupReferences(input: DescribeSecurityGroupReferencesInput) async throws -> DescribeSecurityGroupReferencesOutputResponse /// Describes one or more of your security group rules. func describeSecurityGroupRules(input: DescribeSecurityGroupRulesInput) async throws -> DescribeSecurityGroupRulesOutputResponse - /// Describes the specified security groups or all of your security groups. A security group is for use with instances either in the EC2-Classic platform or in a specific VPC. For more information, see [Amazon EC2 security groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) in the Amazon Elastic Compute Cloud User Guide and [Security groups for your VPC](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) in the Amazon Virtual Private Cloud User Guide. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Describes the specified security groups or all of your security groups. func describeSecurityGroups(input: DescribeSecurityGroupsInput) async throws -> DescribeSecurityGroupsOutputResponse /// Describes the specified attribute of the specified snapshot. You can specify only one attribute at a time. For more information about EBS snapshots, see [Amazon EBS snapshots](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html) in the Amazon Elastic Compute Cloud User Guide. func describeSnapshotAttribute(input: DescribeSnapshotAttributeInput) async throws -> DescribeSnapshotAttributeOutputResponse @@ -748,11 +748,11 @@ public protocol EC2ClientProtocol { func describeSpotInstanceRequests(input: DescribeSpotInstanceRequestsInput) async throws -> DescribeSpotInstanceRequestsOutputResponse /// Describes the Spot price history. For more information, see [Spot Instance pricing history](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html) in the Amazon EC2 User Guide for Linux Instances. When you specify a start and end time, the operation returns the prices of the instance types within that time range. It also returns the last price change before the start time, which is the effective price as of the start time. func describeSpotPriceHistory(input: DescribeSpotPriceHistoryInput) async throws -> DescribeSpotPriceHistoryOutputResponse - /// [VPC only] Describes the stale security group rules for security groups in a specified VPC. Rules are stale when they reference a deleted security group in the same VPC or in a peer VPC, or if they reference a security group in a peer VPC for which the VPC peering connection has been deleted. + /// Describes the stale security group rules for security groups in a specified VPC. Rules are stale when they reference a deleted security group in the same VPC or in a peer VPC, or if they reference a security group in a peer VPC for which the VPC peering connection has been deleted. func describeStaleSecurityGroups(input: DescribeStaleSecurityGroupsInput) async throws -> DescribeStaleSecurityGroupsOutputResponse /// Describes the progress of the AMI store tasks. You can describe the store tasks for specified AMIs. If you don't specify the AMIs, you get a paginated list of store tasks from the last 31 days. For each AMI task, the response indicates if the task is InProgress, Completed, or Failed. For tasks InProgress, the response shows the estimated progress as a percentage. Tasks are listed in reverse chronological order. Currently, only tasks from the past 31 days can be viewed. To use this API, you must have the required permissions. For more information, see [Permissions for storing and restoring AMIs using Amazon S3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html#ami-s3-permissions) in the Amazon EC2 User Guide. For more information, see [Store and restore an AMI using Amazon S3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html) in the Amazon EC2 User Guide. func describeStoreImageTasks(input: DescribeStoreImageTasksInput) async throws -> DescribeStoreImageTasksOutputResponse - /// Describes one or more of your subnets. For more information, see [Your VPC and subnets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html) in the Amazon Virtual Private Cloud User Guide. + /// Describes one or more of your subnets. For more information, see [Subnets](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html) in the Amazon VPC User Guide. func describeSubnets(input: DescribeSubnetsInput) async throws -> DescribeSubnetsOutputResponse /// Describes the specified tags for your EC2 resources. For more information about tags, see [Tag your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) in the Amazon Elastic Compute Cloud User Guide. func describeTags(input: DescribeTagsInput) async throws -> DescribeTagsOutputResponse @@ -804,9 +804,9 @@ public protocol EC2ClientProtocol { func describeVolumeStatus(input: DescribeVolumeStatusInput) async throws -> DescribeVolumeStatusOutputResponse /// Describes the specified attribute of the specified VPC. You can specify only one attribute at a time. func describeVpcAttribute(input: DescribeVpcAttributeInput) async throws -> DescribeVpcAttributeOutputResponse - /// Describes the ClassicLink status of one or more VPCs. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Describes the ClassicLink status of the specified VPCs. func describeVpcClassicLink(input: DescribeVpcClassicLinkInput) async throws -> DescribeVpcClassicLinkOutputResponse - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Describes the ClassicLink DNS support status of one or more VPCs. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. For more information, see [ClassicLink](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Describes the ClassicLink DNS support status of one or more VPCs. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. func describeVpcClassicLinkDnsSupport(input: DescribeVpcClassicLinkDnsSupportInput) async throws -> DescribeVpcClassicLinkDnsSupportOutputResponse /// Describes the connection notifications for VPC endpoints and VPC endpoint services. func describeVpcEndpointConnectionNotifications(input: DescribeVpcEndpointConnectionNotificationsInput) async throws -> DescribeVpcEndpointConnectionNotificationsOutputResponse @@ -828,7 +828,7 @@ public protocol EC2ClientProtocol { func describeVpnConnections(input: DescribeVpnConnectionsInput) async throws -> DescribeVpnConnectionsOutputResponse /// Describes one or more of your virtual private gateways. For more information, see [Amazon Web Services Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) in the Amazon Web Services Site-to-Site VPN User Guide. func describeVpnGateways(input: DescribeVpnGatewaysInput) async throws -> DescribeVpnGatewaysOutputResponse - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Unlinks (detaches) a linked EC2-Classic instance from a VPC. After the instance has been unlinked, the VPC security groups are no longer associated with it. An instance is automatically unlinked from a VPC when it's stopped. + /// This action is deprecated. Unlinks (detaches) a linked EC2-Classic instance from a VPC. After the instance has been unlinked, the VPC security groups are no longer associated with it. An instance is automatically unlinked from a VPC when it's stopped. func detachClassicLinkVpc(input: DetachClassicLinkVpcInput) async throws -> DetachClassicLinkVpcOutputResponse /// Detaches an internet gateway from a VPC, disabling connectivity between the internet and the VPC. The VPC must not contain any running instances with Elastic IP addresses or public IPv4 addresses. func detachInternetGateway(input: DetachInternetGatewayInput) async throws -> DetachInternetGatewayOutputResponse @@ -860,9 +860,9 @@ public protocol EC2ClientProtocol { func disableTransitGatewayRouteTablePropagation(input: DisableTransitGatewayRouteTablePropagationInput) async throws -> DisableTransitGatewayRouteTablePropagationOutputResponse /// Disables a virtual private gateway (VGW) from propagating routes to a specified route table of a VPC. func disableVgwRoutePropagation(input: DisableVgwRoutePropagationInput) async throws -> DisableVgwRoutePropagationOutputResponse - /// Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC that has EC2-Classic instances linked to it. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC that has EC2-Classic instances linked to it. func disableVpcClassicLink(input: DisableVpcClassicLinkInput) async throws -> DisableVpcClassicLinkOutputResponse - /// Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames resolve to public IP addresses when addressed between a linked EC2-Classic instance and instances in the VPC to which it's linked. For more information, see [ClassicLink](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) in the Amazon Elastic Compute Cloud User Guide. You must specify a VPC ID in the request. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames resolve to public IP addresses when addressed between a linked EC2-Classic instance and instances in the VPC to which it's linked. You must specify a VPC ID in the request. func disableVpcClassicLinkDnsSupport(input: DisableVpcClassicLinkDnsSupportInput) async throws -> DisableVpcClassicLinkDnsSupportOutputResponse /// Disassociates an Elastic IP address from the instance or network interface it's associated with. This is an idempotent operation. If you perform the operation more than once, Amazon EC2 doesn't return an error. func disassociateAddress(input: DisassociateAddressInput) async throws -> DisassociateAddressOutputResponse @@ -884,9 +884,9 @@ public protocol EC2ClientProtocol { func disassociateInstanceEventWindow(input: DisassociateInstanceEventWindowInput) async throws -> DisassociateInstanceEventWindowOutputResponse /// Disassociates a resource discovery from an Amazon VPC IPAM. A resource discovery is an IPAM component that enables IPAM to manage and monitor resources that belong to the owning account. func disassociateIpamResourceDiscovery(input: DisassociateIpamResourceDiscoveryInput) async throws -> DisassociateIpamResourceDiscoveryOutputResponse - /// Disassociates secondary Elastic IP addresses (EIPs) from a public NAT gateway. You cannot disassociate your primary EIP. For more information, see [Edit secondary IP address associations](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-edit-secondary) in the Amazon Virtual Private Cloud User Guide. While disassociating is in progress, you cannot associate/disassociate additional EIPs while the connections are being drained. You are, however, allowed to delete the NAT gateway. An EIP will only be released at the end of MaxDrainDurationSeconds. The EIPs stay associated and support the existing connections but do not support any new connections (new connections are distributed across the remaining associated EIPs). As the existing connections drain out, the EIPs (and the corresponding private IPs mapped to them) get released. + /// Disassociates secondary Elastic IP addresses (EIPs) from a public NAT gateway. You cannot disassociate your primary EIP. For more information, see [Edit secondary IP address associations](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-edit-secondary) in the Amazon VPC User Guide. While disassociating is in progress, you cannot associate/disassociate additional EIPs while the connections are being drained. You are, however, allowed to delete the NAT gateway. An EIP is released only at the end of MaxDrainDurationSeconds. It stays associated and supports the existing connections but does not support any new connections (new connections are distributed across the remaining associated EIPs). As the existing connections drain out, the EIPs (and the corresponding private IP addresses mapped to them) are released. func disassociateNatGatewayAddress(input: DisassociateNatGatewayAddressInput) async throws -> DisassociateNatGatewayAddressOutputResponse - /// Disassociates a subnet or gateway from a route table. After you perform this action, the subnet no longer uses the routes in the route table. Instead, it uses the routes in the VPC's main route table. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Disassociates a subnet or gateway from a route table. After you perform this action, the subnet no longer uses the routes in the route table. Instead, it uses the routes in the VPC's main route table. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. func disassociateRouteTable(input: DisassociateRouteTableInput) async throws -> DisassociateRouteTableOutputResponse /// Disassociates a CIDR block from a subnet. Currently, you can disassociate an IPv6 CIDR block only. You must detach or delete all gateways and resources that are associated with the CIDR block before you can disassociate it. func disassociateSubnetCidrBlock(input: DisassociateSubnetCidrBlockInput) async throws -> DisassociateSubnetCidrBlockOutputResponse @@ -924,9 +924,9 @@ public protocol EC2ClientProtocol { func enableVgwRoutePropagation(input: EnableVgwRoutePropagationInput) async throws -> EnableVgwRoutePropagationOutputResponse /// Enables I/O operations for a volume that had I/O operations disabled because the data on the volume was potentially inconsistent. func enableVolumeIO(input: EnableVolumeIOInput) async throws -> EnableVolumeIOOutputResponse - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Enables a VPC for ClassicLink. You can then link EC2-Classic instances to your ClassicLink-enabled VPC to allow communication over private IP addresses. You cannot enable your VPC for ClassicLink if any of your VPC route tables have existing routes for address ranges within the 10.0.0.0/8 IP address range, excluding local routes for VPCs in the 10.0.0.0/16 and 10.1.0.0/16 IP address ranges. For more information, see [ClassicLink](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) in the Amazon Elastic Compute Cloud User Guide. + /// This action is deprecated. Enables a VPC for ClassicLink. You can then link EC2-Classic instances to your ClassicLink-enabled VPC to allow communication over private IP addresses. You cannot enable your VPC for ClassicLink if any of your VPC route tables have existing routes for address ranges within the 10.0.0.0/8 IP address range, excluding local routes for VPCs in the 10.0.0.0/16 and 10.1.0.0/16 IP address ranges. func enableVpcClassicLink(input: EnableVpcClassicLinkInput) async throws -> EnableVpcClassicLinkOutputResponse - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Enables a VPC to support DNS hostname resolution for ClassicLink. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. For more information, see [ClassicLink](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) in the Amazon Elastic Compute Cloud User Guide. You must specify a VPC ID in the request. + /// This action is deprecated. Enables a VPC to support DNS hostname resolution for ClassicLink. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. You must specify a VPC ID in the request. func enableVpcClassicLinkDnsSupport(input: EnableVpcClassicLinkDnsSupportInput) async throws -> EnableVpcClassicLinkDnsSupportOutputResponse /// Downloads the client certificate revocation list for the specified Client VPN endpoint. func exportClientVpnClientCertificateRevocationList(input: ExportClientVpnClientCertificateRevocationListInput) async throws -> ExportClientVpnClientCertificateRevocationListOutputResponse @@ -965,6 +965,9 @@ public protocol EC2ClientProtocol { /// * Create a table partitioned between two timestamps in the past /// /// * Create a set of named queries in Athena that you can use to get started quickly + /// + /// + /// GetFlowLogsIntegrationTemplate does not support integration between Amazon Web Services Transit Gateway Flow Logs and Amazon Athena. func getFlowLogsIntegrationTemplate(input: GetFlowLogsIntegrationTemplateInput) async throws -> GetFlowLogsIntegrationTemplateOutputResponse /// Lists the resource groups to which a Capacity Reservation has been added. func getGroupsForCapacityReservation(input: GetGroupsForCapacityReservationInput) async throws -> GetGroupsForCapacityReservationOutputResponse @@ -1034,7 +1037,7 @@ public protocol EC2ClientProtocol { func importClientVpnClientCertificateRevocationList(input: ImportClientVpnClientCertificateRevocationListInput) async throws -> ImportClientVpnClientCertificateRevocationListOutputResponse /// To import your virtual machines (VMs) with a console-based experience, you can use the Import virtual machine images to Amazon Web Services template in the [Migration Hub Orchestrator console](https://console.aws.amazon.com/migrationhub/orchestrator). For more information, see the [ Migration Hub Orchestrator User Guide ](https://docs.aws.amazon.com/migrationhub-orchestrator/latest/userguide/import-vm-images.html). Import single or multi-volume disk images or EBS snapshots into an Amazon Machine Image (AMI). Amazon Web Services VM Import/Export strongly recommends specifying a value for either the --license-type or --usage-operation parameter when you create a new VM Import task. This ensures your operating system is licensed appropriately and your billing is optimized. For more information, see [Importing a VM as an image using VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html) in the VM Import/Export User Guide. func importImage(input: ImportImageInput) async throws -> ImportImageOutputResponse - /// Creates an import instance task using metadata from the specified disk image. This API action supports only single-volume VMs. To import multi-volume VMs, use [ImportImage] instead. This API action is not supported by the Command Line Interface (CLI). For information about using the Amazon EC2 CLI, which is deprecated, see [Importing a VM to Amazon EC2](https://awsdocs.s3.amazonaws.com/EC2/ec2-clt.pdf#UsingVirtualMachinesinAmazonEC2) in the Amazon EC2 CLI Reference PDF file. For information about the import manifest referenced by this API action, see [VM Import Manifest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). + /// We recommend that you use the [ImportImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportImage.html) API. For more information, see [Importing a VM as an image using VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html) in the VM Import/Export User Guide. Creates an import instance task using metadata from the specified disk image. This API action is not supported by the Command Line Interface (CLI). For information about using the Amazon EC2 CLI, which is deprecated, see [Importing a VM to Amazon EC2](https://awsdocs.s3.amazonaws.com/EC2/ec2-clt.pdf#UsingVirtualMachinesinAmazonEC2) in the Amazon EC2 CLI Reference PDF file. This API action supports only single-volume VMs. To import multi-volume VMs, use [ImportImage] instead. For information about the import manifest referenced by this API action, see [VM Import Manifest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). func importInstance(input: ImportInstanceInput) async throws -> ImportInstanceOutputResponse /// Imports the public key from an RSA or ED25519 key pair that you created with a third-party tool. Compare this with [CreateKeyPair], in which Amazon Web Services creates the key pair and gives the keys to you (Amazon Web Services keeps a copy of the public key). With ImportKeyPair, you create the key pair and give Amazon Web Services just the public key. The private key is never transferred between you and Amazon Web Services. For more information about key pairs, see [Amazon EC2 key pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) in the Amazon Elastic Compute Cloud User Guide. func importKeyPair(input: ImportKeyPairInput) async throws -> ImportKeyPairOutputResponse @@ -1184,18 +1187,9 @@ public protocol EC2ClientProtocol { func modifyVpcEndpointServicePayerResponsibility(input: ModifyVpcEndpointServicePayerResponsibilityInput) async throws -> ModifyVpcEndpointServicePayerResponsibilityOutputResponse /// Modifies the permissions for your VPC endpoint service. You can add or remove permissions for service consumers (Amazon Web Services accounts, users, and IAM roles) to connect to your endpoint service. If you grant permissions to all principals, the service is public. Any users who know the name of a public service can send a request to attach an endpoint. If the service does not require manual approval, attachments are automatically approved. func modifyVpcEndpointServicePermissions(input: ModifyVpcEndpointServicePermissionsInput) async throws -> ModifyVpcEndpointServicePermissionsOutputResponse - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Modifies the VPC peering connection options on one side of a VPC peering connection. You can do the following: - /// - /// * Enable/disable communication over the peering connection between an EC2-Classic instance that's linked to your VPC (using ClassicLink) and instances in the peer VPC. - /// - /// * Enable/disable communication over the peering connection between instances in your VPC and an EC2-Classic instance that's linked to the peer VPC. - /// - /// * Enable/disable the ability to resolve public DNS hostnames to private IP addresses when queried from instances in the peer VPC. - /// - /// - /// If the peered VPCs are in the same Amazon Web Services account, you can enable DNS resolution for queries from the local VPC. This ensures that queries from the local VPC resolve to private IP addresses in the peer VPC. This option is not available if the peered VPCs are in different Amazon Web Services accounts or different Regions. For peered VPCs in different Amazon Web Services accounts, each Amazon Web Services account owner must initiate a separate request to modify the peering connection options. For inter-region peering connections, you must use the Region for the requester VPC to modify the requester VPC peering options and the Region for the accepter VPC to modify the accepter VPC peering options. To verify which VPCs are the accepter and the requester for a VPC peering connection, use the [DescribeVpcPeeringConnections] command. + /// Modifies the VPC peering connection options on one side of a VPC peering connection. If the peered VPCs are in the same Amazon Web Services account, you can enable DNS resolution for queries from the local VPC. This ensures that queries from the local VPC resolve to private IP addresses in the peer VPC. This option is not available if the peered VPCs are in different Amazon Web Services accounts or different Regions. For peered VPCs in different Amazon Web Services accounts, each Amazon Web Services account owner must initiate a separate request to modify the peering connection options. For inter-region peering connections, you must use the Region for the requester VPC to modify the requester VPC peering options and the Region for the accepter VPC to modify the accepter VPC peering options. To verify which VPCs are the accepter and the requester for a VPC peering connection, use the [DescribeVpcPeeringConnections] command. func modifyVpcPeeringConnectionOptions(input: ModifyVpcPeeringConnectionOptionsInput) async throws -> ModifyVpcPeeringConnectionOptionsOutputResponse - /// Modifies the instance tenancy attribute of the specified VPC. You can change the instance tenancy attribute of a VPC to default only. You cannot change the instance tenancy attribute to dedicated. After you modify the tenancy of the VPC, any new instances that you launch into the VPC have a tenancy of default, unless you specify otherwise during launch. The tenancy of any existing instances in the VPC is not affected. For more information, see [Dedicated Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) in the Amazon Elastic Compute Cloud User Guide. + /// Modifies the instance tenancy attribute of the specified VPC. You can change the instance tenancy attribute of a VPC to default only. You cannot change the instance tenancy attribute to dedicated. After you modify the tenancy of the VPC, any new instances that you launch into the VPC have a tenancy of default, unless you specify otherwise during launch. The tenancy of any existing instances in the VPC is not affected. For more information, see [Dedicated Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) in the Amazon EC2 User Guide. func modifyVpcTenancy(input: ModifyVpcTenancyInput) async throws -> ModifyVpcTenancyOutputResponse /// Modifies the customer gateway or the target gateway of an Amazon Web Services Site-to-Site VPN connection. To modify the target gateway, the following migration options are available: /// @@ -1267,17 +1261,17 @@ public protocol EC2ClientProtocol { func releaseAddress(input: ReleaseAddressInput) async throws -> ReleaseAddressOutputResponse /// When you no longer want to use an On-Demand Dedicated Host it can be released. On-Demand billing is stopped and the host goes into released state. The host ID of Dedicated Hosts that have been released can no longer be specified in another request, for example, to modify the host. You must stop or terminate all instances on a host before it can be released. When Dedicated Hosts are released, it may take some time for them to stop counting toward your limit and you may receive capacity errors when trying to allocate new Dedicated Hosts. Wait a few minutes and then try again. Released hosts still appear in a [DescribeHosts] response. func releaseHosts(input: ReleaseHostsInput) async throws -> ReleaseHostsOutputResponse - /// Release an allocation within an IPAM pool. The Region you use should be the IPAM pool locale. The locale is the Amazon Web Services Region where this IPAM pool is available for allocations. You can only use this action to release manual allocations. To remove an allocation for a resource without deleting the resource, set its monitored state to false using [ModifyIpamResourceCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyIpamResourceCidr.html). For more information, see [Release an allocation](https://docs.aws.amazon.com/vpc/latest/ipam/release-pool-alloc-ipam.html) in the Amazon VPC IPAM User Guide. All EC2 API actions follow an [eventual consistency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-api-troubleshooting.html#eventual-consistency) model. + /// Release an allocation within an IPAM pool. The Region you use should be the IPAM pool locale. The locale is the Amazon Web Services Region where this IPAM pool is available for allocations. You can only use this action to release manual allocations. To remove an allocation for a resource without deleting the resource, set its monitored state to false using [ModifyIpamResourceCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyIpamResourceCidr.html). For more information, see [Release an allocation](https://docs.aws.amazon.com/vpc/latest/ipam/release-alloc-ipam.html) in the Amazon VPC IPAM User Guide. All EC2 API actions follow an [eventual consistency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-api-troubleshooting.html#eventual-consistency) model. func releaseIpamPoolAllocation(input: ReleaseIpamPoolAllocationInput) async throws -> ReleaseIpamPoolAllocationOutputResponse /// Replaces an IAM instance profile for the specified running instance. You can use this action to change the IAM instance profile that's associated with an instance without having to disassociate the existing IAM instance profile first. Use [DescribeIamInstanceProfileAssociations] to get the association ID. func replaceIamInstanceProfileAssociation(input: ReplaceIamInstanceProfileAssociationInput) async throws -> ReplaceIamInstanceProfileAssociationOutputResponse - /// Changes which network ACL a subnet is associated with. By default when you create a subnet, it's automatically associated with the default network ACL. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in the Amazon Virtual Private Cloud User Guide. This is an idempotent operation. + /// Changes which network ACL a subnet is associated with. By default when you create a subnet, it's automatically associated with the default network ACL. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. This is an idempotent operation. func replaceNetworkAclAssociation(input: ReplaceNetworkAclAssociationInput) async throws -> ReplaceNetworkAclAssociationOutputResponse - /// Replaces an entry (rule) in a network ACL. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in the Amazon Virtual Private Cloud User Guide. + /// Replaces an entry (rule) in a network ACL. For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in the Amazon VPC User Guide. func replaceNetworkAclEntry(input: ReplaceNetworkAclEntryInput) async throws -> ReplaceNetworkAclEntryOutputResponse - /// Replaces an existing route within a route table in a VPC. You must specify either a destination CIDR block or a prefix list ID. You must also specify exactly one of the resources from the parameter list, or reset the local route to its default target. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. + /// Replaces an existing route within a route table in a VPC. You must specify either a destination CIDR block or a prefix list ID. You must also specify exactly one of the resources from the parameter list, or reset the local route to its default target. For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. func replaceRoute(input: ReplaceRouteInput) async throws -> ReplaceRouteOutputResponse - /// Changes the route table associated with a given subnet, internet gateway, or virtual private gateway in a VPC. After the operation completes, the subnet or gateway uses the routes in the new route table. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon Virtual Private Cloud User Guide. You can also use this operation to change which table is the main route table in the VPC. Specify the main route table's association ID and the route table ID of the new main route table. + /// Changes the route table associated with a given subnet, internet gateway, or virtual private gateway in a VPC. After the operation completes, the subnet or gateway uses the routes in the new route table. For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) in the Amazon VPC User Guide. You can also use this operation to change which table is the main route table in the VPC. Specify the main route table's association ID and the route table ID of the new main route table. func replaceRouteTableAssociation(input: ReplaceRouteTableAssociationInput) async throws -> ReplaceRouteTableAssociationOutputResponse /// Replaces the specified route in the specified transit gateway route table. func replaceTransitGatewayRoute(input: ReplaceTransitGatewayRouteInput) async throws -> ReplaceTransitGatewayRouteOutputResponse @@ -1315,9 +1309,9 @@ public protocol EC2ClientProtocol { func restoreSnapshotTier(input: RestoreSnapshotTierInput) async throws -> RestoreSnapshotTierOutputResponse /// Removes an ingress authorization rule from a Client VPN endpoint. func revokeClientVpnIngress(input: RevokeClientVpnIngressInput) async throws -> RevokeClientVpnIngressOutputResponse - /// [VPC only] Removes the specified outbound (egress) rules from a security group for EC2-VPC. This action does not apply to security groups for use in EC2-Classic. You can specify rules using either rule IDs or security group rule properties. If you use rule properties, the values that you specify (for example, ports) must match the existing rule's values exactly. Each rule has a protocol, from and to ports, and destination (CIDR range, security group, or prefix list). For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code. If the security group rule has a description, you do not need to specify the description to revoke the rule. [Default VPC] If the values you specify do not match the existing rule's values, no error is returned, and the output describes the security group rules that were not revoked. Amazon Web Services recommends that you describe the security group to verify that the rules were removed. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. + /// Removes the specified outbound (egress) rules from the specified security group. You can specify rules using either rule IDs or security group rule properties. If you use rule properties, the values that you specify (for example, ports) must match the existing rule's values exactly. Each rule has a protocol, from and to ports, and destination (CIDR range, security group, or prefix list). For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code. If the security group rule has a description, you do not need to specify the description to revoke the rule. For a default VPC, if the values you specify do not match the existing rule's values, no error is returned, and the output describes the security group rules that were not revoked. Amazon Web Services recommends that you describe the security group to verify that the rules were removed. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. func revokeSecurityGroupEgress(input: RevokeSecurityGroupEgressInput) async throws -> RevokeSecurityGroupEgressOutputResponse - /// Removes the specified inbound (ingress) rules from a security group. You can specify rules using either rule IDs or security group rule properties. If you use rule properties, the values that you specify (for example, ports) must match the existing rule's values exactly. Each rule has a protocol, from and to ports, and source (CIDR range, security group, or prefix list). For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code. If the security group rule has a description, you do not need to specify the description to revoke the rule. [EC2-Classic, default VPC] If the values you specify do not match the existing rule's values, no error is returned, and the output describes the security group rules that were not revoked. Amazon Web Services recommends that you describe the security group to verify that the rules were removed. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Removes the specified inbound (ingress) rules from a security group. You can specify rules using either rule IDs or security group rule properties. If you use rule properties, the values that you specify (for example, ports) must match the existing rule's values exactly. Each rule has a protocol, from and to ports, and source (CIDR range, security group, or prefix list). For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code. If the security group rule has a description, you do not need to specify the description to revoke the rule. For a default VPC, if the values you specify do not match the existing rule's values, no error is returned, and the output describes the security group rules that were not revoked. Amazon Web Services recommends that you describe the security group to verify that the rules were removed. Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur. func revokeSecurityGroupIngress(input: RevokeSecurityGroupIngressInput) async throws -> RevokeSecurityGroupIngressOutputResponse /// Launches the specified number of instances using an AMI for which you have permissions. You can specify a number of options, or leave the default options. The following rules apply: /// @@ -1387,11 +1381,11 @@ public protocol EC2ClientProtocol { func unassignIpv6Addresses(input: UnassignIpv6AddressesInput) async throws -> UnassignIpv6AddressesOutputResponse /// Unassigns one or more secondary private IP addresses, or IPv4 Prefix Delegation prefixes from a network interface. func unassignPrivateIpAddresses(input: UnassignPrivateIpAddressesInput) async throws -> UnassignPrivateIpAddressesOutputResponse - /// Unassigns secondary private IPv4 addresses from a private NAT gateway. You cannot unassign your primary private IP. For more information, see [Edit secondary IP address associations](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-edit-secondary) in the Amazon Virtual Private Cloud User Guide. While unassigning is in progress, you cannot assign/unassign additional IP addresses while the connections are being drained. You are, however, allowed to delete the NAT gateway. A private IP address will only be released at the end of MaxDrainDurationSeconds. The private IP addresses stay associated and support the existing connections but do not support any new connections (new connections are distributed across the remaining assigned private IP address). After the existing connections drain out, the private IP addresses get released. + /// Unassigns secondary private IPv4 addresses from a private NAT gateway. You cannot unassign your primary private IP. For more information, see [Edit secondary IP address associations](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-edit-secondary) in the Amazon VPC User Guide. While unassigning is in progress, you cannot assign/unassign additional IP addresses while the connections are being drained. You are, however, allowed to delete the NAT gateway. A private IP address will only be released at the end of MaxDrainDurationSeconds. The private IP addresses stay associated and support the existing connections, but do not support any new connections (new connections are distributed across the remaining assigned private IP address). After the existing connections drain out, the private IP addresses are released. func unassignPrivateNatGatewayAddress(input: UnassignPrivateNatGatewayAddressInput) async throws -> UnassignPrivateNatGatewayAddressOutputResponse /// Disables detailed monitoring for a running instance. For more information, see [Monitoring your instances and volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html) in the Amazon EC2 User Guide. func unmonitorInstances(input: UnmonitorInstancesInput) async throws -> UnmonitorInstancesOutputResponse - /// [VPC only] Updates the description of an egress (outbound) security group rule. You can replace an existing description, or add a description to a rule that did not have one previously. You can remove a description for a security group rule by omitting the description parameter in the request. + /// Updates the description of an egress (outbound) security group rule. You can replace an existing description, or add a description to a rule that did not have one previously. You can remove a description for a security group rule by omitting the description parameter in the request. func updateSecurityGroupRuleDescriptionsEgress(input: UpdateSecurityGroupRuleDescriptionsEgressInput) async throws -> UpdateSecurityGroupRuleDescriptionsEgressOutputResponse /// Updates the description of an ingress (inbound) security group rule. You can replace an existing description, or add a description to a rule that did not have one previously. You can remove a description for a security group rule by omitting the description parameter in the request. func updateSecurityGroupRuleDescriptionsIngress(input: UpdateSecurityGroupRuleDescriptionsIngressInput) async throws -> UpdateSecurityGroupRuleDescriptionsIngressOutputResponse diff --git a/Sources/Services/AWSEC2/Waiters.swift b/Sources/Services/AWSEC2/Waiters.swift index c138c7d6889..968dd482d4f 100644 --- a/Sources/Services/AWSEC2/Waiters.swift +++ b/Sources/Services/AWSEC2/Waiters.swift @@ -1217,6 +1217,64 @@ extension EC2ClientProtocol { return try await waiter.waitUntil(options: options, input: input) } + static func storeImageTaskCompleteWaiterConfig() throws -> WaiterConfiguration { + let acceptors: [WaiterConfiguration.Acceptor] = [ + .init(state: .success, matcher: { (input: DescribeStoreImageTasksInput, result: Result) -> Bool in + // JMESPath expression: "StoreImageTaskResults[].StoreTaskState" + // JMESPath comparator: "allStringEquals" + // JMESPath expected value: "Completed" + guard case .success(let output) = result else { return false } + let storeImageTaskResults = output.storeImageTaskResults + let projection: [Swift.String]? = storeImageTaskResults?.compactMap { original in + let storeTaskState = original.storeTaskState + return storeTaskState + } + return (projection?.count ?? 0) > 1 && (projection?.allSatisfy { JMESUtils.compare($0, ==, "Completed") } ?? false) + }), + .init(state: .failure, matcher: { (input: DescribeStoreImageTasksInput, result: Result) -> Bool in + // JMESPath expression: "StoreImageTaskResults[].StoreTaskState" + // JMESPath comparator: "anyStringEquals" + // JMESPath expected value: "Failed" + guard case .success(let output) = result else { return false } + let storeImageTaskResults = output.storeImageTaskResults + let projection: [Swift.String]? = storeImageTaskResults?.compactMap { original in + let storeTaskState = original.storeTaskState + return storeTaskState + } + return projection?.contains(where: { JMESUtils.compare($0, ==, "Failed") }) ?? false + }), + .init(state: .retry, matcher: { (input: DescribeStoreImageTasksInput, result: Result) -> Bool in + // JMESPath expression: "StoreImageTaskResults[].StoreTaskState" + // JMESPath comparator: "anyStringEquals" + // JMESPath expected value: "InProgress" + guard case .success(let output) = result else { return false } + let storeImageTaskResults = output.storeImageTaskResults + let projection: [Swift.String]? = storeImageTaskResults?.compactMap { original in + let storeTaskState = original.storeTaskState + return storeTaskState + } + return projection?.contains(where: { JMESUtils.compare($0, ==, "InProgress") }) ?? false + }), + ] + return try WaiterConfiguration(acceptors: acceptors, minDelay: 5.0, maxDelay: 120.0) + } + + /// Initiates waiting for the StoreImageTaskComplete event on the describeStoreImageTasks operation. + /// The operation will be tried and (if necessary) retried until the wait succeeds, fails, or times out. + /// Returns a `WaiterOutcome` asynchronously on waiter success, throws an error asynchronously on + /// waiter failure or timeout. + /// - Parameters: + /// - options: `WaiterOptions` to be used to configure this wait. + /// - input: The `DescribeStoreImageTasksInput` object to be used as a parameter when performing the operation. + /// - Returns: A `WaiterOutcome` with the result of the final, successful performance of the operation. + /// - Throws: `WaiterFailureError` if the waiter fails due to matching an `Acceptor` with state `failure` + /// or there is an error not handled by any `Acceptor.` + /// `WaiterTimeoutError` if the waiter times out. + public func waitUntilStoreImageTaskComplete(options: WaiterOptions, input: DescribeStoreImageTasksInput) async throws -> WaiterOutcome { + let waiter = Waiter(config: try Self.storeImageTaskCompleteWaiterConfig(), operation: self.describeStoreImageTasks(input:)) + return try await waiter.waitUntil(options: options, input: input) + } + static func subnetAvailableWaiterConfig() throws -> WaiterConfiguration { let acceptors: [WaiterConfiguration.Acceptor] = [ .init(state: .success, matcher: { (input: DescribeSubnetsInput, result: Result) -> Bool in diff --git a/Sources/Services/AWSEC2/models/Models.swift b/Sources/Services/AWSEC2/models/Models.swift index 1db63be5cab..bbb76b425aa 100644 --- a/Sources/Services/AWSEC2/models/Models.swift +++ b/Sources/Services/AWSEC2/models/Models.swift @@ -5304,7 +5304,7 @@ extension AssignPrivateNatGatewayAddressInput: ClientRuntime.URLPathProvider { public struct AssignPrivateNatGatewayAddressInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// The NAT gateway ID. + /// The ID of the NAT gateway. /// This member is required. public var natGatewayId: Swift.String? /// The number of private IP addresses to assign to the NAT gateway. You can't specify this parameter when also specifying private IP addresses. @@ -5397,7 +5397,7 @@ extension AssignPrivateNatGatewayAddressOutputResponse: ClientRuntime.HttpRespon public struct AssignPrivateNatGatewayAddressOutputResponse: Swift.Equatable { /// NAT gateway IP addresses. public var natGatewayAddresses: [EC2ClientTypes.NatGatewayAddress]? - /// The NAT gateway ID. + /// The ID of the NAT gateway. public var natGatewayId: Swift.String? public init( @@ -6448,7 +6448,7 @@ public struct AssociateNatGatewayAddressInput: Swift.Equatable { public var allocationIds: [Swift.String]? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// The NAT gateway ID. + /// The ID of the NAT gateway. /// This member is required. public var natGatewayId: Swift.String? /// The private IPv4 addresses that you want to assign to the NAT gateway. @@ -6556,7 +6556,7 @@ extension AssociateNatGatewayAddressOutputResponse: ClientRuntime.HttpResponseBi public struct AssociateNatGatewayAddressOutputResponse: Swift.Equatable { /// The IP addresses. public var natGatewayAddresses: [EC2ClientTypes.NatGatewayAddress]? - /// The NAT gateway ID. + /// The ID of the NAT gateway. public var natGatewayId: Swift.String? public init( @@ -7958,13 +7958,13 @@ extension AttachClassicLinkVpcInput: ClientRuntime.URLPathProvider { public struct AttachClassicLinkVpcInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// The ID of one or more of the VPC's security groups. You cannot specify security groups from a different VPC. + /// The IDs of the security groups. You cannot specify security groups from a different VPC. /// This member is required. public var groups: [Swift.String]? - /// The ID of an EC2-Classic instance to link to the ClassicLink-enabled VPC. + /// The ID of the EC2-Classic instance. /// This member is required. public var instanceId: Swift.String? - /// The ID of a ClassicLink-enabled VPC. + /// The ID of the ClassicLink-enabled VPC. /// This member is required. public var vpcId: Swift.String? @@ -9550,15 +9550,15 @@ public struct AuthorizeSecurityGroupIngressInput: Swift.Equatable { public var fromPort: Swift.Int? /// The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID. public var groupId: Swift.String? - /// [EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID. + /// [Default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID. public var groupName: Swift.String? /// The sets of IP permissions. public var ipPermissions: [EC2ClientTypes.IpPermission]? - /// The IP protocol name (tcp, udp, icmp) or number (see [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). To specify icmpv6, use a set of IP permissions. [VPC only] Use -1 to specify all protocols. If you specify -1 or a protocol other than tcp, udp, or icmp, traffic on all ports is allowed, regardless of any ports you specify. Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule. + /// The IP protocol name (tcp, udp, icmp) or number (see [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). To specify icmpv6, use a set of IP permissions. Use -1 to specify all protocols. If you specify -1 or a protocol other than tcp, udp, or icmp, traffic on all ports is allowed, regardless of any ports you specify. Alternatively, use a set of IP permissions to specify multiple rules and a description for the rule. public var ipProtocol: Swift.String? - /// [EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead. For EC2-VPC, the source security group must be in the same VPC. + /// [Default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead. The source security group must be in the same VPC. public var sourceSecurityGroupName: Swift.String? - /// [nondefault VPC] The Amazon Web Services account ID for the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead. + /// [Nondefault VPC] The Amazon Web Services account ID for the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead. public var sourceSecurityGroupOwnerId: Swift.String? /// [VPC Only] The tags applied to the security group rule. public var tagSpecifications: [EC2ClientTypes.TagSpecification]? @@ -14095,7 +14095,7 @@ extension EC2ClientTypes.ClassicLinkDnsSupport: Swift.Codable { } extension EC2ClientTypes { - /// Describes the ClassicLink DNS support status of a VPC. + /// Deprecated. Describes the ClassicLink DNS support status of a VPC. public struct ClassicLinkDnsSupport: Swift.Equatable { /// Indicates whether ClassicLink DNS support is enabled for the VPC. public var classicLinkDnsSupported: Swift.Bool? @@ -14204,9 +14204,9 @@ extension EC2ClientTypes.ClassicLinkInstance: Swift.Codable { } extension EC2ClientTypes { - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Describes a linked EC2-Classic instance. + /// Deprecated. Describes a linked EC2-Classic instance. public struct ClassicLinkInstance: Swift.Equatable { - /// A list of security groups. + /// The security groups. public var groups: [EC2ClientTypes.GroupIdentifier]? /// The ID of the instance. public var instanceId: Swift.String? @@ -21262,7 +21262,14 @@ public struct CreateImageInput: Swift.Equatable { /// A name for the new image. Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), at-signs (@), or underscores(_) /// This member is required. public var name: Swift.String? - /// By default, when Amazon EC2 creates the new AMI, it reboots the instance so that it can take snapshots of the attached volumes while data is at rest, in order to ensure a consistent state. You can set the NoReboot parameter to true in the API request, or use the --no-reboot option in the CLI to prevent Amazon EC2 from shutting down and rebooting the instance. If you choose to bypass the shutdown and reboot process by setting the NoReboot parameter to true in the API request, or by using the --no-reboot option in the CLI, we can't guarantee the file system integrity of the created image. Default: false (follow standard reboot process) + /// Indicates whether or not the instance should be automatically rebooted before creating the image. Specify one of the following values: + /// + /// * true - The instance is not rebooted before creating the image. This creates crash-consistent snapshots that include only the data that has been written to the volumes at the time the snapshots are created. Buffered data and data in memory that has not yet been written to the volumes is not included in the snapshots. + /// + /// * false - The instance is rebooted before creating the image. This ensures that all buffered data and data in memory is written to the volumes before the snapshots are created. + /// + /// + /// Default: false public var noReboot: Swift.Bool? /// The tags to apply to the AMI and snapshots on creation. You can tag the AMI, the snapshots, or both. /// @@ -24507,11 +24514,11 @@ public struct CreateNatGatewayInput: Swift.Equatable { public var dryRun: Swift.Bool? /// The private IPv4 address to assign to the NAT gateway. If you don't provide an address, a private IPv4 address will be automatically assigned. public var privateIpAddress: Swift.String? - /// Secondary EIP allocation IDs. For more information about secondary addresses, see [Create a NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating) in the Amazon Virtual Private Cloud User Guide. + /// Secondary EIP allocation IDs. For more information, see [Create a NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating) in the Amazon VPC User Guide. public var secondaryAllocationIds: [Swift.String]? - /// [Private NAT gateway only] The number of secondary private IPv4 addresses you want to assign to the NAT gateway. For more information about secondary addresses, see [Create a NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating) in the Amazon Virtual Private Cloud User Guide. + /// [Private NAT gateway only] The number of secondary private IPv4 addresses you want to assign to the NAT gateway. For more information about secondary addresses, see [Create a NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating) in the Amazon VPC User Guide. public var secondaryPrivateIpAddressCount: Swift.Int? - /// Secondary private IPv4 addresses. For more information about secondary addresses, see [Create a NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating) in the Amazon Virtual Private Cloud User Guide. + /// Secondary private IPv4 addresses. For more information about secondary addresses, see [Create a NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating) in the Amazon VPC User Guide. public var secondaryPrivateIpAddresses: [Swift.String]? /// The ID of the subnet in which to create the NAT gateway. /// This member is required. @@ -27331,17 +27338,17 @@ extension CreateSecurityGroupInput: ClientRuntime.URLPathProvider { } public struct CreateSecurityGroupInput: Swift.Equatable { - /// A description for the security group. Constraints: Up to 255 characters in length Constraints for EC2-Classic: ASCII characters Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* + /// A description for the security group. Constraints: Up to 255 characters in length Valid characters: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* /// This member is required. public var description: Swift.String? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// The name of the security group. Constraints: Up to 255 characters in length. Cannot start with sg-. Constraints for EC2-Classic: ASCII characters Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* + /// The name of the security group. Constraints: Up to 255 characters in length. Cannot start with sg-. Valid characters: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* /// This member is required. public var groupName: Swift.String? /// The tags to assign to the security group. public var tagSpecifications: [EC2ClientTypes.TagSpecification]? - /// [EC2-VPC] The ID of the VPC. Required for EC2-VPC. + /// The ID of the VPC. Required for a nondefault VPC. public var vpcId: Swift.String? public init( @@ -27634,6 +27641,7 @@ extension CreateSnapshotOutputResponse: ClientRuntime.HttpResponseBinding { self.progress = output.progress self.restoreExpiryTime = output.restoreExpiryTime self.snapshotId = output.snapshotId + self.sseType = output.sseType self.startTime = output.startTime self.state = output.state self.stateMessage = output.stateMessage @@ -27652,6 +27660,7 @@ extension CreateSnapshotOutputResponse: ClientRuntime.HttpResponseBinding { self.progress = nil self.restoreExpiryTime = nil self.snapshotId = nil + self.sseType = nil self.startTime = nil self.state = nil self.stateMessage = nil @@ -27685,6 +27694,8 @@ public struct CreateSnapshotOutputResponse: Swift.Equatable { public var restoreExpiryTime: ClientRuntime.Date? /// The ID of the snapshot. Each snapshot receives a unique identifier when it is created. public var snapshotId: Swift.String? + /// Reserved for future use. + public var sseType: EC2ClientTypes.SSEType? /// The time stamp when the snapshot was initiated. public var startTime: ClientRuntime.Date? /// The snapshot state. @@ -27711,6 +27722,7 @@ public struct CreateSnapshotOutputResponse: Swift.Equatable { progress: Swift.String? = nil, restoreExpiryTime: ClientRuntime.Date? = nil, snapshotId: Swift.String? = nil, + sseType: EC2ClientTypes.SSEType? = nil, startTime: ClientRuntime.Date? = nil, state: EC2ClientTypes.SnapshotState? = nil, stateMessage: Swift.String? = nil, @@ -27730,6 +27742,7 @@ public struct CreateSnapshotOutputResponse: Swift.Equatable { self.progress = progress self.restoreExpiryTime = restoreExpiryTime self.snapshotId = snapshotId + self.sseType = sseType self.startTime = startTime self.state = state self.stateMessage = stateMessage @@ -27758,6 +27771,7 @@ struct CreateSnapshotOutputResponseBody: Swift.Equatable { let tags: [EC2ClientTypes.Tag]? let storageTier: EC2ClientTypes.StorageTier? let restoreExpiryTime: ClientRuntime.Date? + let sseType: EC2ClientTypes.SSEType? } extension CreateSnapshotOutputResponseBody: Swift.Decodable { @@ -27772,6 +27786,7 @@ extension CreateSnapshotOutputResponseBody: Swift.Decodable { case progress = "progress" case restoreExpiryTime = "restoreExpiryTime" case snapshotId = "snapshotId" + case sseType = "sseType" case startTime = "startTime" case state = "status" case stateMessage = "statusMessage" @@ -27834,6 +27849,8 @@ extension CreateSnapshotOutputResponseBody: Swift.Decodable { storageTier = storageTierDecoded let restoreExpiryTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .restoreExpiryTime) restoreExpiryTime = restoreExpiryTimeDecoded + let sseTypeDecoded = try containerValues.decodeIfPresent(EC2ClientTypes.SSEType.self, forKey: .sseType) + sseType = sseTypeDecoded } } @@ -28546,7 +28563,7 @@ extension CreateSubnetInput: ClientRuntime.URLPathProvider { } public struct CreateSubnetInput: Swift.Equatable { - /// The Availability Zone or Local Zone for the subnet. Default: Amazon Web Services selects one for you. If you create more than one subnet in your VPC, we do not necessarily select a different zone for each subnet. To create a subnet in a Local Zone, set this value to the Local Zone ID, for example us-west-2-lax-1a. For information about the Regions that support Local Zones, see [Available Regions](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions) in the Amazon Elastic Compute Cloud User Guide. To create a subnet in an Outpost, set this value to the Availability Zone for the Outpost and specify the Outpost ARN. + /// The Availability Zone or Local Zone for the subnet. Default: Amazon Web Services selects one for you. If you create more than one subnet in your VPC, we do not necessarily select a different zone for each subnet. To create a subnet in a Local Zone, set this value to the Local Zone ID, for example us-west-2-lax-1a. For information about the Regions that support Local Zones, see [Local Zones locations](http://aws.amazon.com/about-aws/global-infrastructure/localzones/locations/). To create a subnet in an Outpost, set this value to the Availability Zone for the Outpost and specify the Outpost ARN. public var availabilityZone: Swift.String? /// The AZ ID or the Local Zone ID of the subnet. public var availabilityZoneId: Swift.String? @@ -32829,7 +32846,7 @@ extension CreateVolumeInput: ClientRuntime.URLPathProvider { } public struct CreateVolumeInput: Swift.Equatable { - /// The Availability Zone in which to create the volume. + /// The ID of the Availability Zone in which to create the volume. For example, us-east-1a. /// This member is required. public var availabilityZone: Swift.String? /// Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see [Ensure Idempotency](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). @@ -33036,6 +33053,7 @@ extension CreateVolumeOutputResponse: ClientRuntime.HttpResponseBinding { self.outpostArn = output.outpostArn self.size = output.size self.snapshotId = output.snapshotId + self.sseType = output.sseType self.state = output.state self.tags = output.tags self.throughput = output.throughput @@ -33053,6 +33071,7 @@ extension CreateVolumeOutputResponse: ClientRuntime.HttpResponseBinding { self.outpostArn = nil self.size = nil self.snapshotId = nil + self.sseType = nil self.state = nil self.tags = nil self.throughput = nil @@ -33086,6 +33105,8 @@ public struct CreateVolumeOutputResponse: Swift.Equatable { public var size: Swift.Int? /// The snapshot from which the volume was created, if applicable. public var snapshotId: Swift.String? + /// Reserved for future use. + public var sseType: EC2ClientTypes.SSEType? /// The volume state. public var state: EC2ClientTypes.VolumeState? /// Any tags assigned to the volume. @@ -33109,6 +33130,7 @@ public struct CreateVolumeOutputResponse: Swift.Equatable { outpostArn: Swift.String? = nil, size: Swift.Int? = nil, snapshotId: Swift.String? = nil, + sseType: EC2ClientTypes.SSEType? = nil, state: EC2ClientTypes.VolumeState? = nil, tags: [EC2ClientTypes.Tag]? = nil, throughput: Swift.Int? = nil, @@ -33127,6 +33149,7 @@ public struct CreateVolumeOutputResponse: Swift.Equatable { self.outpostArn = outpostArn self.size = size self.snapshotId = snapshotId + self.sseType = sseType self.state = state self.tags = tags self.throughput = throughput @@ -33152,6 +33175,7 @@ struct CreateVolumeOutputResponseBody: Swift.Equatable { let fastRestored: Swift.Bool? let multiAttachEnabled: Swift.Bool? let throughput: Swift.Int? + let sseType: EC2ClientTypes.SSEType? } extension CreateVolumeOutputResponseBody: Swift.Decodable { @@ -33167,6 +33191,7 @@ extension CreateVolumeOutputResponseBody: Swift.Decodable { case outpostArn = "outpostArn" case size = "size" case snapshotId = "snapshotId" + case sseType = "sseType" case state = "status" case tags = "tagSet" case throughput = "throughput" @@ -33242,6 +33267,8 @@ extension CreateVolumeOutputResponseBody: Swift.Decodable { multiAttachEnabled = multiAttachEnabledDecoded let throughputDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .throughput) throughput = throughputDecoded + let sseTypeDecoded = try containerValues.decodeIfPresent(EC2ClientTypes.SSEType.self, forKey: .sseType) + sseType = sseTypeDecoded } } @@ -33680,7 +33707,7 @@ public struct CreateVpcEndpointInput: Swift.Equatable { public var routeTableIds: [Swift.String]? /// (Interface endpoint) The IDs of the security groups to associate with the endpoint network interface. If this parameter is not specified, we use the default security group for the VPC. public var securityGroupIds: [Swift.String]? - /// The service name. + /// The name of the endpoint service. /// This member is required. public var serviceName: Swift.String? /// (Interface and Gateway Load Balancer endpoints) The IDs of the subnets in which to create an endpoint network interface. For a Gateway Load Balancer endpoint, you can specify only one subnet. @@ -33689,7 +33716,7 @@ public struct CreateVpcEndpointInput: Swift.Equatable { public var tagSpecifications: [EC2ClientTypes.TagSpecification]? /// The type of endpoint. Default: Gateway public var vpcEndpointType: EC2ClientTypes.VpcEndpointType? - /// The ID of the VPC for the endpoint. + /// The ID of the VPC. /// This member is required. public var vpcId: Swift.String? @@ -40435,9 +40462,9 @@ extension DeleteSecurityGroupInput: ClientRuntime.URLPathProvider { public struct DeleteSecurityGroupInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// The ID of the security group. Required for a nondefault VPC. + /// The ID of the security group. public var groupId: Swift.String? - /// [EC2-Classic, default VPC] The name of the security group. You can specify either the security group name or the security group ID. For security groups in a nondefault VPC, you must specify the security group ID. + /// [Default VPC] The name of the security group. You can specify either the security group name or the security group ID. For security groups in a nondefault VPC, you must specify the security group ID. public var groupName: Swift.String? public init( @@ -47347,7 +47374,7 @@ extension DescribeClassicLinkInstancesInput: ClientRuntime.URLPathProvider { public struct DescribeClassicLinkInstancesInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// One or more filters. + /// The filters. /// /// * group-id - The ID of a VPC security group that's associated with the instance. /// @@ -47357,9 +47384,9 @@ public struct DescribeClassicLinkInstancesInput: Swift.Equatable { /// /// * tag-key - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value. /// - /// * vpc-id - The ID of the VPC to which the instance is linked. vpc-id - The ID of the VPC that the instance is linked to. + /// * vpc-id - The ID of the VPC to which the instance is linked. public var filters: [EC2ClientTypes.Filter]? - /// One or more instance IDs. Must be instances linked to a VPC through ClassicLink. + /// The instance IDs. Must be instances linked to a VPC through ClassicLink. public var instanceIds: [Swift.String]? /// The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). Constraint: If the value is greater than 1000, we return only 1000 items. public var maxResults: Swift.Int? @@ -49194,7 +49221,7 @@ public struct DescribeDhcpOptionsInput: Swift.Equatable { public var dhcpOptionsIds: [Swift.String]? /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// One or more filters. + /// The filters. /// /// * dhcp-options-id - The ID of a DHCP options set. /// @@ -49421,9 +49448,9 @@ extension DescribeEgressOnlyInternetGatewaysInput: ClientRuntime.URLPathProvider public struct DescribeEgressOnlyInternetGatewaysInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// One or more egress-only internet gateway IDs. + /// The IDs of the egress-only internet gateways. public var egressOnlyInternetGatewayIds: [Swift.String]? - /// One or more filters. + /// The filters. /// /// * tag: - The key/value combination of a tag assigned to the resource. Use the tag key in the filter name and the tag value as the filter value. For example, to find all resources that have a tag with the key Owner and the value TeamA, specify tag:Owner for the filter name and TeamA for the filter value. /// @@ -53783,7 +53810,7 @@ public struct DescribeImagesInput: Swift.Equatable { public var executableUsers: [Swift.String]? /// The filters. /// - /// * architecture - The image architecture (i386 | x86_64 | arm64). + /// * architecture - The image architecture (i386 | x86_64 | arm64 | x86_64_mac | arm64_mac). /// /// * block-device-mapping.delete-on-termination - A Boolean value that indicates whether the Amazon EBS volume is deleted on instance termination. /// @@ -56117,7 +56144,7 @@ public struct DescribeInstanceTypesInput: Swift.Equatable { /// /// * bare-metal - Indicates whether it is a bare metal instance type (true | false). /// - /// * burstable-performance-supported - Indicates whether it is a burstable performance instance type (true | false). + /// * burstable-performance-supported - Indicates whether the instance type is a burstable performance T instance type (true | false). /// /// * current-generation - Indicates whether this instance type is the latest generation instance type of an instance family (true | false). /// @@ -56183,6 +56210,12 @@ public struct DescribeInstanceTypesInput: Swift.Equatable { /// /// * network-info.network-performance - The network performance (for example, "25 Gigabit"). /// + /// * nitro-enclaves-support - Indicates whether Nitro Enclaves is supported (supported | unsupported). + /// + /// * nitro-tpm-support - Indicates whether NitroTPM is supported (supported | unsupported). + /// + /// * nitro-tpm-info.supported-versions - The supported NitroTPM version (2.0). + /// /// * processor-info.supported-architecture - The CPU architecture (arm64 | i386 | x86_64). /// /// * processor-info.sustained-clock-speed-in-ghz - The CPU clock speed, in GHz. @@ -56320,7 +56353,7 @@ extension DescribeInstanceTypesOutputResponse: ClientRuntime.HttpResponseBinding } public struct DescribeInstanceTypesOutputResponse: Swift.Equatable { - /// The instance type. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon EC2 User Guide. When you change your EBS-backed instance type, instance restart or replacement behavior depends on the instance type compatibility between the old and new types. An instance that's backed by an instance store volume is always replaced. For more information, see [Change the instance type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-resize.html) in the Amazon EC2 User Guide. + /// The instance type. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon EC2 User Guide. public var instanceTypes: [EC2ClientTypes.InstanceTypeInfo]? /// The token to include in another request to get the next page of items. This value is null when there are no more items to return. public var nextToken: Swift.String? @@ -56815,7 +56848,7 @@ extension DescribeInternetGatewaysInput: ClientRuntime.URLPathProvider { public struct DescribeInternetGatewaysInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// One or more filters. + /// The filters. /// /// * attachment.state - The current state of the attachment between the gateway and the VPC (available). Present only if a VPC is attached. /// @@ -56829,7 +56862,7 @@ public struct DescribeInternetGatewaysInput: Swift.Equatable { /// /// * tag-key - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value. public var filters: [EC2ClientTypes.Filter]? - /// One or more internet gateway IDs. Default: Describes all your internet gateways. + /// The IDs of the internet gateways. Default: Describes all your internet gateways. public var internetGatewayIds: [Swift.String]? /// The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). public var maxResults: Swift.Int? @@ -60971,7 +61004,7 @@ extension DescribeNatGatewaysInput: ClientRuntime.URLPathProvider { public struct DescribeNatGatewaysInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// One or more filters. + /// The filters. /// /// * nat-gateway-id - The ID of the NAT gateway. /// @@ -60987,7 +61020,7 @@ public struct DescribeNatGatewaysInput: Swift.Equatable { public var filter: [EC2ClientTypes.Filter]? /// The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). public var maxResults: Swift.Int? - /// One or more NAT gateway IDs. + /// The IDs of the NAT gateways. public var natGatewayIds: [Swift.String]? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? @@ -61200,7 +61233,7 @@ extension DescribeNetworkAclsInput: ClientRuntime.URLPathProvider { public struct DescribeNetworkAclsInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// One or more filters. + /// The filters. /// /// * association.association-id - The ID of an association ID for the ACL. /// @@ -61242,7 +61275,7 @@ public struct DescribeNetworkAclsInput: Swift.Equatable { public var filters: [EC2ClientTypes.Filter]? /// The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). public var maxResults: Swift.Int? - /// One or more network ACL IDs. Default: Describes all your network ACLs. + /// The IDs of the network ACLs. Default: Describes all your network ACLs. public var networkAclIds: [Swift.String]? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? @@ -65337,7 +65370,7 @@ extension DescribeRouteTablesInput: ClientRuntime.URLPathProvider { public struct DescribeRouteTablesInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// One or more filters. + /// The filters. /// /// * association.route-table-association-id - The ID of an association ID for the route table. /// @@ -65383,7 +65416,7 @@ public struct DescribeRouteTablesInput: Swift.Equatable { public var maxResults: Swift.Int? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? - /// One or more route table IDs. Default: Describes all your route tables. + /// The IDs of the route tables. Default: Describes all your route tables. public var routeTableIds: [Swift.String]? public init( @@ -66503,7 +66536,7 @@ public struct DescribeSecurityGroupsInput: Swift.Equatable { public var filters: [EC2ClientTypes.Filter]? /// The IDs of the security groups. Required for security groups in a nondefault VPC. Default: Describes all of your security groups. public var groupIds: [Swift.String]? - /// [EC2-Classic and default VPC only] The names of the security groups. You can specify either the security group name or the security group ID. For security groups in a nondefault VPC, use the group-name filter to describe security groups by name. Default: Describes all of your security groups. + /// [Default VPC] The names of the security groups. You can specify either the security group name or the security group ID. Default: Describes all of your security groups. public var groupNames: [Swift.String]? /// The maximum number of items to return for this request. To get the next page of items, make another request with the token returned in the output. This value can be between 5 and 1000. If this parameter is not specified, then all items are returned. For more information, see [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination). public var maxResults: Swift.Int? @@ -69043,7 +69076,7 @@ extension DescribeSubnetsInput: ClientRuntime.URLPathProvider { public struct DescribeSubnetsInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// One or more filters. + /// The filters. /// /// * availability-zone - The Availability Zone for the subnet. You can also use availabilityZone as the filter name. /// @@ -69099,7 +69132,7 @@ public struct DescribeSubnetsInput: Swift.Equatable { public var maxResults: Swift.Int? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? - /// One or more subnet IDs. Default: Describes all your subnets. + /// The IDs of the subnets. Default: Describes all your subnets. public var subnetIds: [Swift.String]? public init( @@ -74807,7 +74840,7 @@ public struct DescribeVpcClassicLinkDnsSupportInput: Swift.Equatable { public var maxResults: Swift.Int? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? - /// One or more VPC IDs. + /// The IDs of the VPCs. public var vpcIds: [Swift.String]? public init( @@ -74983,7 +75016,7 @@ extension DescribeVpcClassicLinkInput: ClientRuntime.URLPathProvider { public struct DescribeVpcClassicLinkInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// One or more filters. + /// The filters. /// /// * is-classic-link-enabled - Whether the VPC is enabled for ClassicLink (true | false). /// @@ -74991,7 +75024,7 @@ public struct DescribeVpcClassicLinkInput: Swift.Equatable { /// /// * tag-key - The key of a tag assigned to the resource. Use this filter to find all resources assigned a tag with a specific key, regardless of the tag value. public var filters: [EC2ClientTypes.Filter]? - /// One or more VPCs for which you want to describe the ClassicLink status. + /// The VPCs for which you want to describe the ClassicLink status. public var vpcIds: [Swift.String]? public init( @@ -75086,7 +75119,7 @@ extension DescribeVpcClassicLinkOutputResponse: ClientRuntime.HttpResponseBindin } public struct DescribeVpcClassicLinkOutputResponse: Swift.Equatable { - /// The ClassicLink status of one or more VPCs. + /// The ClassicLink status of the VPCs. public var vpcs: [EC2ClientTypes.VpcClassicLink]? public init( @@ -76487,7 +76520,7 @@ extension DescribeVpcPeeringConnectionsInput: ClientRuntime.URLPathProvider { public struct DescribeVpcPeeringConnectionsInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// One or more filters. + /// The filters. /// /// * accepter-vpc-info.cidr-block - The IPv4 CIDR block of the accepter VPC. /// @@ -76517,7 +76550,7 @@ public struct DescribeVpcPeeringConnectionsInput: Swift.Equatable { public var maxResults: Swift.Int? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? - /// One or more VPC peering connection IDs. Default: Describes all your VPC peering connections. + /// The IDs of the VPC peering connections. Default: Describes all your VPC peering connections. public var vpcPeeringConnectionIds: [Swift.String]? public init( @@ -76728,7 +76761,7 @@ extension DescribeVpcsInput: ClientRuntime.URLPathProvider { public struct DescribeVpcsInput: Swift.Equatable { /// Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation. public var dryRun: Swift.Bool? - /// One or more filters. + /// The filters. /// /// * cidr - The primary IPv4 CIDR block of the VPC. The CIDR block you specify must exactly match the VPC's CIDR block for information to be returned for the VPC. Must contain the slash followed by one or two digits (for example, /28). /// @@ -76764,7 +76797,7 @@ public struct DescribeVpcsInput: Swift.Equatable { public var maxResults: Swift.Int? /// The token returned from a previous paginated request. Pagination continues from the end of the items returned by the previous request. public var nextToken: Swift.String? - /// One or more VPC IDs. Default: Describes all your VPCs. + /// The IDs of the VPCs. Default: Describes all your VPCs. public var vpcIds: [Swift.String]? public init( @@ -78356,7 +78389,7 @@ extension EC2ClientTypes { public struct DhcpConfiguration: Swift.Equatable { /// The name of a DHCP option. public var key: Swift.String? - /// One or more values for the DHCP option. + /// The values for the DHCP option. public var values: [EC2ClientTypes.AttributeValue]? public init( @@ -78461,9 +78494,9 @@ extension EC2ClientTypes.DhcpOptions: Swift.Codable { } extension EC2ClientTypes { - /// Describes a set of DHCP options. + /// The set of DHCP options. public struct DhcpOptions: Swift.Equatable { - /// One or more DHCP options in the set. + /// The DHCP options in the set. public var dhcpConfigurations: [EC2ClientTypes.DhcpConfiguration]? /// The ID of the set of DHCP options. public var dhcpOptionsId: Swift.String? @@ -81024,7 +81057,7 @@ public struct DisassociateNatGatewayAddressInput: Swift.Equatable { public var dryRun: Swift.Bool? /// The maximum amount of time to wait (in seconds) before forcibly releasing the IP addresses if connections are still in progress. Default value is 350 seconds. public var maxDrainDurationSeconds: Swift.Int? - /// The NAT gateway ID. + /// The ID of the NAT gateway. /// This member is required. public var natGatewayId: Swift.String? @@ -81113,7 +81146,7 @@ extension DisassociateNatGatewayAddressOutputResponse: ClientRuntime.HttpRespons public struct DisassociateNatGatewayAddressOutputResponse: Swift.Equatable { /// Information about the NAT gateway IP addresses. public var natGatewayAddresses: [EC2ClientTypes.NatGatewayAddress]? - /// The NAT gateway ID. + /// The ID of the NAT gateway. public var natGatewayId: Swift.String? public init( @@ -93537,8 +93570,10 @@ extension GetEbsEncryptionByDefaultOutputResponse: ClientRuntime.HttpResponseBin let responseDecoder = decoder { let output: GetEbsEncryptionByDefaultOutputResponseBody = try responseDecoder.decode(responseBody: data) self.ebsEncryptionByDefault = output.ebsEncryptionByDefault + self.sseType = output.sseType } else { self.ebsEncryptionByDefault = nil + self.sseType = nil } } } @@ -93546,28 +93581,36 @@ extension GetEbsEncryptionByDefaultOutputResponse: ClientRuntime.HttpResponseBin public struct GetEbsEncryptionByDefaultOutputResponse: Swift.Equatable { /// Indicates whether encryption by default is enabled. public var ebsEncryptionByDefault: Swift.Bool? + /// Reserved for future use. + public var sseType: EC2ClientTypes.SSEType? public init( - ebsEncryptionByDefault: Swift.Bool? = nil + ebsEncryptionByDefault: Swift.Bool? = nil, + sseType: EC2ClientTypes.SSEType? = nil ) { self.ebsEncryptionByDefault = ebsEncryptionByDefault + self.sseType = sseType } } struct GetEbsEncryptionByDefaultOutputResponseBody: Swift.Equatable { let ebsEncryptionByDefault: Swift.Bool? + let sseType: EC2ClientTypes.SSEType? } extension GetEbsEncryptionByDefaultOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case ebsEncryptionByDefault = "ebsEncryptionByDefault" + case sseType = "sseType" } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let ebsEncryptionByDefaultDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .ebsEncryptionByDefault) ebsEncryptionByDefault = ebsEncryptionByDefaultDecoded + let sseTypeDecoded = try containerValues.decodeIfPresent(EC2ClientTypes.SSEType.self, forKey: .sseType) + sseType = sseTypeDecoded } } @@ -102075,7 +102118,7 @@ public struct ImportImageInput: Swift.Equatable { /// /// * Key ID /// - /// * Key alias. The alias ARN contains the arn:aws:kms namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the alias namespace, and then the key alias. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. + /// * Key alias /// /// * ARN using key ID. The ID ARN contains the arn:aws:kms namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the key namespace, and then the key ID. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. /// @@ -102088,7 +102131,7 @@ public struct ImportImageInput: Swift.Equatable { public var licenseSpecifications: [EC2ClientTypes.ImportImageLicenseConfigurationRequest]? /// The license type to be used for the Amazon Machine Image (AMI) after importing. Specify AWS to replace the source-system license with an Amazon Web Services license or BYOL to retain the source-system license. Leaving this parameter undefined is the same as choosing AWS when importing a Windows Server operating system, and the same as choosing BYOL when importing a Windows client operating system (such as Windows 10) or a Linux operating system. To use BYOL, you must have existing licenses with rights to use these licenses in a third party cloud, such as Amazon Web Services. For more information, see [Prerequisites](https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image) in the VM Import/Export User Guide. public var licenseType: Swift.String? - /// The operating system of the virtual machine. Valid values: Windows | Linux + /// The operating system of the virtual machine. If you import a VM that is compatible with Unified Extensible Firmware Interface (UEFI) using an EBS snapshot, you must specify a value for the platform. Valid values: Windows | Linux public var platform: Swift.String? /// The name of the role to use when not using the default role, 'vmimport'. public var roleName: Swift.String? @@ -103677,7 +103720,7 @@ public struct ImportSnapshotInput: Swift.Equatable { /// /// * Key ID /// - /// * Key alias. The alias ARN contains the arn:aws:kms namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the alias namespace, and then the key alias. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. + /// * Key alias /// /// * ARN using key ID. The ID ARN contains the arn:aws:kms namespace, followed by the Region of the key, the Amazon Web Services account ID of the key owner, the key namespace, and then the key ID. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. /// @@ -104186,6 +104229,7 @@ extension EC2ClientTypes { extension EC2ClientTypes.InferenceAcceleratorInfo: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case accelerators = "accelerators" + case totalInferenceMemoryInMiB = "totalInferenceMemoryInMiB" } public func encode(to encoder: Swift.Encoder) throws { @@ -104202,6 +104246,9 @@ extension EC2ClientTypes.InferenceAcceleratorInfo: Swift.Codable { try acceleratorsContainer.encode("", forKey: ClientRuntime.Key("")) } } + if let totalInferenceMemoryInMiB = totalInferenceMemoryInMiB { + try container.encode(totalInferenceMemoryInMiB, forKey: ClientRuntime.Key("TotalInferenceMemoryInMiB")) + } } public init(from decoder: Swift.Decoder) throws { @@ -104225,6 +104272,8 @@ extension EC2ClientTypes.InferenceAcceleratorInfo: Swift.Codable { } else { accelerators = nil } + let totalInferenceMemoryInMiBDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .totalInferenceMemoryInMiB) + totalInferenceMemoryInMiB = totalInferenceMemoryInMiBDecoded } } @@ -104233,12 +104282,16 @@ extension EC2ClientTypes { public struct InferenceAcceleratorInfo: Swift.Equatable { /// Describes the Inference accelerators for the instance type. public var accelerators: [EC2ClientTypes.InferenceDeviceInfo]? + /// The total size of the memory for the inference accelerators for the instance type, in MiB. + public var totalInferenceMemoryInMiB: Swift.Int? public init( - accelerators: [EC2ClientTypes.InferenceDeviceInfo]? = nil + accelerators: [EC2ClientTypes.InferenceDeviceInfo]? = nil, + totalInferenceMemoryInMiB: Swift.Int? = nil ) { self.accelerators = accelerators + self.totalInferenceMemoryInMiB = totalInferenceMemoryInMiB } } @@ -104248,6 +104301,7 @@ extension EC2ClientTypes.InferenceDeviceInfo: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case count = "count" case manufacturer = "manufacturer" + case memoryInfo = "memoryInfo" case name = "name" } @@ -104259,6 +104313,9 @@ extension EC2ClientTypes.InferenceDeviceInfo: Swift.Codable { if let manufacturer = manufacturer { try container.encode(manufacturer, forKey: ClientRuntime.Key("Manufacturer")) } + if let memoryInfo = memoryInfo { + try container.encode(memoryInfo, forKey: ClientRuntime.Key("MemoryInfo")) + } if let name = name { try container.encode(name, forKey: ClientRuntime.Key("Name")) } @@ -104272,6 +104329,8 @@ extension EC2ClientTypes.InferenceDeviceInfo: Swift.Codable { name = nameDecoded let manufacturerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .manufacturer) manufacturer = manufacturerDecoded + let memoryInfoDecoded = try containerValues.decodeIfPresent(EC2ClientTypes.InferenceDeviceMemoryInfo.self, forKey: .memoryInfo) + memoryInfo = memoryInfoDecoded } } @@ -104282,23 +104341,62 @@ extension EC2ClientTypes { public var count: Swift.Int? /// The manufacturer of the Inference accelerator. public var manufacturer: Swift.String? + /// Describes the memory available to the inference accelerator. + public var memoryInfo: EC2ClientTypes.InferenceDeviceMemoryInfo? /// The name of the Inference accelerator. public var name: Swift.String? public init( count: Swift.Int? = nil, manufacturer: Swift.String? = nil, + memoryInfo: EC2ClientTypes.InferenceDeviceMemoryInfo? = nil, name: Swift.String? = nil ) { self.count = count self.manufacturer = manufacturer + self.memoryInfo = memoryInfo self.name = name } } } +extension EC2ClientTypes.InferenceDeviceMemoryInfo: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case sizeInMiB = "sizeInMiB" + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let sizeInMiB = sizeInMiB { + try container.encode(sizeInMiB, forKey: ClientRuntime.Key("SizeInMiB")) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sizeInMiBDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .sizeInMiB) + sizeInMiB = sizeInMiBDecoded + } +} + +extension EC2ClientTypes { + /// Describes the memory available to the inference accelerator. + public struct InferenceDeviceMemoryInfo: Swift.Equatable { + /// The size of the memory available to the inference accelerator, in MiB. + public var sizeInMiB: Swift.Int? + + public init( + sizeInMiB: Swift.Int? = nil + ) + { + self.sizeInMiB = sizeInMiB + } + } + +} + extension EC2ClientTypes.Instance: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case amiLaunchIndex = "amiLaunchIndex" @@ -108452,14 +108550,14 @@ extension EC2ClientTypes.InstanceRequirements: Swift.Codable { } extension EC2ClientTypes { - /// The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with these attributes. When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values. To limit the list of instance types from which Amazon EC2 can identify matching instance types, you can use one of the following parameters, but not both in the same request: + /// The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with these attributes. You must specify VCpuCount and MemoryMiB. All other attributes are optional. Any unspecified optional attribute is set to its default. When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values. To limit the list of instance types from which Amazon EC2 can identify matching instance types, you can use one of the following parameters, but not both in the same request: /// /// * AllowedInstanceTypes - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes. /// /// * ExcludedInstanceTypes - The instance types to exclude from the list, even if they match your specified attributes. /// /// - /// You must specify VCpuCount and MemoryMiB. All other attributes are optional. Any unspecified optional attribute is set to its default. For more information, see [Attribute-based instance type selection for EC2 Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html), [Attribute-based instance type selection for Spot Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html), and [Spot placement score](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html) in the Amazon EC2 User Guide. + /// If you specify InstanceRequirements, you can't specify InstanceType. Attribute-based instance type selection is only supported when using Auto Scaling groups, EC2 Fleet, and Spot Fleet to launch instances. If you plan to use the launch template in the [launch instance wizard](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) or with the [RunInstances API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), you can't specify InstanceRequirements. For more information, see [Attribute-based instance type selection for EC2 Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html), [Attribute-based instance type selection for Spot Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html), and [Spot placement score](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html) in the Amazon EC2 User Guide. public struct InstanceRequirements: Swift.Equatable { /// The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon Web Services Inferentia chips) on an instance. To exclude accelerator-enabled instance types, set Max to 0. Default: No minimum or maximum limits public var acceleratorCount: EC2ClientTypes.AcceleratorCount? @@ -109006,14 +109104,14 @@ extension EC2ClientTypes.InstanceRequirementsRequest: Swift.Codable { } extension EC2ClientTypes { - /// The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with these attributes. When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values. To limit the list of instance types from which Amazon EC2 can identify matching instance types, you can use one of the following parameters, but not both in the same request: + /// The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with these attributes. You must specify VCpuCount and MemoryMiB. All other attributes are optional. Any unspecified optional attribute is set to its default. When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values. To limit the list of instance types from which Amazon EC2 can identify matching instance types, you can use one of the following parameters, but not both in the same request: /// /// * AllowedInstanceTypes - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes. /// /// * ExcludedInstanceTypes - The instance types to exclude from the list, even if they match your specified attributes. /// /// - /// You must specify VCpuCount and MemoryMiB. All other attributes are optional. Any unspecified optional attribute is set to its default. For more information, see [Attribute-based instance type selection for EC2 Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html), [Attribute-based instance type selection for Spot Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html), and [Spot placement score](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html) in the Amazon EC2 User Guide. + /// If you specify InstanceRequirements, you can't specify InstanceType. Attribute-based instance type selection is only supported when using Auto Scaling groups, EC2 Fleet, and Spot Fleet to launch instances. If you plan to use the launch template in the [launch instance wizard](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html), or with the [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) API or [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html) Amazon Web Services CloudFormation resource, you can't specify InstanceRequirements. For more information, see [Attribute-based instance type selection for EC2 Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html), [Attribute-based instance type selection for Spot Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html), and [Spot placement score](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html) in the Amazon EC2 User Guide. public struct InstanceRequirementsRequest: Swift.Equatable { /// The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon Web Services Inferentia chips) on an instance. To exclude accelerator-enabled instance types, set Max to 0. Default: No minimum or maximum limits public var acceleratorCount: EC2ClientTypes.AcceleratorCountRequest? @@ -109132,7 +109230,7 @@ extension EC2ClientTypes { /// The minimum and maximum amount of memory, in MiB. /// This member is required. public var memoryMiB: EC2ClientTypes.MemoryMiBRequest? - /// The minimum and maximum amount of network bandwidth, in gigabits per second (Gbps). Default: No minimum or maximum limits + /// The minimum and maximum amount of baseline network bandwidth, in gigabits per second (Gbps). For more information, see [Amazon EC2 instance network bandwidth](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html) in the Amazon EC2 User Guide. Default: No minimum or maximum limits public var networkBandwidthGbps: EC2ClientTypes.NetworkBandwidthGbpsRequest? /// The minimum and maximum number of network interfaces. Default: No minimum or maximum limits public var networkInterfaceCount: EC2ClientTypes.NetworkInterfaceCountRequest? @@ -110213,6 +110311,14 @@ extension EC2ClientTypes { case c7gMedium case c7gMetal case c7gXlarge + case c7gn12xlarge + case c7gn16xlarge + case c7gn2xlarge + case c7gn4xlarge + case c7gn8xlarge + case c7gnLarge + case c7gnMedium + case c7gnXlarge case cc14xlarge case cc28xlarge case cg14xlarge @@ -110274,6 +110380,9 @@ extension EC2ClientTypes { case hi14xlarge case hpc6a48xlarge case hpc6id32xlarge + case hpc7g16xlarge + case hpc7g4xlarge + case hpc7g8xlarge case hs18xlarge case i22xlarge case i24xlarge @@ -110871,6 +110980,14 @@ extension EC2ClientTypes { .c7gMedium, .c7gMetal, .c7gXlarge, + .c7gn12xlarge, + .c7gn16xlarge, + .c7gn2xlarge, + .c7gn4xlarge, + .c7gn8xlarge, + .c7gnLarge, + .c7gnMedium, + .c7gnXlarge, .cc14xlarge, .cc28xlarge, .cg14xlarge, @@ -110932,6 +111049,9 @@ extension EC2ClientTypes { .hi14xlarge, .hpc6a48xlarge, .hpc6id32xlarge, + .hpc7g16xlarge, + .hpc7g4xlarge, + .hpc7g8xlarge, .hs18xlarge, .i22xlarge, .i24xlarge, @@ -111534,6 +111654,14 @@ extension EC2ClientTypes { case .c7gMedium: return "c7g.medium" case .c7gMetal: return "c7g.metal" case .c7gXlarge: return "c7g.xlarge" + case .c7gn12xlarge: return "c7gn.12xlarge" + case .c7gn16xlarge: return "c7gn.16xlarge" + case .c7gn2xlarge: return "c7gn.2xlarge" + case .c7gn4xlarge: return "c7gn.4xlarge" + case .c7gn8xlarge: return "c7gn.8xlarge" + case .c7gnLarge: return "c7gn.large" + case .c7gnMedium: return "c7gn.medium" + case .c7gnXlarge: return "c7gn.xlarge" case .cc14xlarge: return "cc1.4xlarge" case .cc28xlarge: return "cc2.8xlarge" case .cg14xlarge: return "cg1.4xlarge" @@ -111595,6 +111723,9 @@ extension EC2ClientTypes { case .hi14xlarge: return "hi1.4xlarge" case .hpc6a48xlarge: return "hpc6a.48xlarge" case .hpc6id32xlarge: return "hpc6id.32xlarge" + case .hpc7g16xlarge: return "hpc7g.16xlarge" + case .hpc7g4xlarge: return "hpc7g.4xlarge" + case .hpc7g8xlarge: return "hpc7g.8xlarge" case .hs18xlarge: return "hs1.8xlarge" case .i22xlarge: return "i2.2xlarge" case .i24xlarge: return "i2.4xlarge" @@ -112116,6 +112247,8 @@ extension EC2ClientTypes.InstanceTypeInfo: Swift.Codable { case memoryInfo = "memoryInfo" case networkInfo = "networkInfo" case nitroEnclavesSupport = "nitroEnclavesSupport" + case nitroTpmInfo = "nitroTpmInfo" + case nitroTpmSupport = "nitroTpmSupport" case placementGroupInfo = "placementGroupInfo" case processorInfo = "processorInfo" case supportedBootModes = "supportedBootModes" @@ -112181,6 +112314,12 @@ extension EC2ClientTypes.InstanceTypeInfo: Swift.Codable { if let nitroEnclavesSupport = nitroEnclavesSupport { try container.encode(nitroEnclavesSupport, forKey: ClientRuntime.Key("NitroEnclavesSupport")) } + if let nitroTpmInfo = nitroTpmInfo { + try container.encode(nitroTpmInfo, forKey: ClientRuntime.Key("NitroTpmInfo")) + } + if let nitroTpmSupport = nitroTpmSupport { + try container.encode(nitroTpmSupport, forKey: ClientRuntime.Key("NitroTpmSupport")) + } if let placementGroupInfo = placementGroupInfo { try container.encode(placementGroupInfo, forKey: ClientRuntime.Key("PlacementGroupInfo")) } @@ -112360,6 +112499,10 @@ extension EC2ClientTypes.InstanceTypeInfo: Swift.Codable { } let nitroEnclavesSupportDecoded = try containerValues.decodeIfPresent(EC2ClientTypes.NitroEnclavesSupport.self, forKey: .nitroEnclavesSupport) nitroEnclavesSupport = nitroEnclavesSupportDecoded + let nitroTpmSupportDecoded = try containerValues.decodeIfPresent(EC2ClientTypes.NitroTpmSupport.self, forKey: .nitroTpmSupport) + nitroTpmSupport = nitroTpmSupportDecoded + let nitroTpmInfoDecoded = try containerValues.decodeIfPresent(EC2ClientTypes.NitroTpmInfo.self, forKey: .nitroTpmInfo) + nitroTpmInfo = nitroTpmInfoDecoded } } @@ -112370,7 +112513,7 @@ extension EC2ClientTypes { public var autoRecoverySupported: Swift.Bool? /// Indicates whether the instance is a bare metal instance type. public var bareMetal: Swift.Bool? - /// Indicates whether the instance type is a burstable performance instance type. + /// Indicates whether the instance type is a burstable performance T instance type. For more information, see [Burstable performance instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html). public var burstablePerformanceSupported: Swift.Bool? /// Indicates whether the instance type is current generation. public var currentGeneration: Swift.Bool? @@ -112402,6 +112545,10 @@ extension EC2ClientTypes { public var networkInfo: EC2ClientTypes.NetworkInfo? /// Indicates whether Nitro Enclaves is supported. public var nitroEnclavesSupport: EC2ClientTypes.NitroEnclavesSupport? + /// Describes the supported NitroTPM versions for the instance type. + public var nitroTpmInfo: EC2ClientTypes.NitroTpmInfo? + /// Indicates whether NitroTPM is supported. + public var nitroTpmSupport: EC2ClientTypes.NitroTpmSupport? /// Describes the placement group settings for the instance type. public var placementGroupInfo: EC2ClientTypes.PlacementGroupInfo? /// Describes the processor. @@ -112436,6 +112583,8 @@ extension EC2ClientTypes { memoryInfo: EC2ClientTypes.MemoryInfo? = nil, networkInfo: EC2ClientTypes.NetworkInfo? = nil, nitroEnclavesSupport: EC2ClientTypes.NitroEnclavesSupport? = nil, + nitroTpmInfo: EC2ClientTypes.NitroTpmInfo? = nil, + nitroTpmSupport: EC2ClientTypes.NitroTpmSupport? = nil, placementGroupInfo: EC2ClientTypes.PlacementGroupInfo? = nil, processorInfo: EC2ClientTypes.ProcessorInfo? = nil, supportedBootModes: [EC2ClientTypes.BootModeType]? = nil, @@ -112463,6 +112612,8 @@ extension EC2ClientTypes { self.memoryInfo = memoryInfo self.networkInfo = networkInfo self.nitroEnclavesSupport = nitroEnclavesSupport + self.nitroTpmInfo = nitroTpmInfo + self.nitroTpmSupport = nitroTpmSupport self.placementGroupInfo = placementGroupInfo self.processorInfo = processorInfo self.supportedBootModes = supportedBootModes @@ -113096,13 +113247,13 @@ extension EC2ClientTypes { public struct IpPermission: Swift.Equatable { /// If the protocol is TCP or UDP, this is the start of the port range. If the protocol is ICMP or ICMPv6, this is the type number. A value of -1 indicates all ICMP/ICMPv6 types. If you specify all ICMP/ICMPv6 types, you must specify all ICMP/ICMPv6 codes. public var fromPort: Swift.Int? - /// The IP protocol name (tcp, udp, icmp, icmpv6) or number (see [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). [VPC only] Use -1 to specify all protocols. When authorizing security group rules, specifying -1 or a protocol number other than tcp, udp, icmp, or icmpv6 allows traffic on all ports, regardless of any port range you specify. For tcp, udp, and icmp, you must specify a port range. For icmpv6, the port range is optional; if you omit the port range, traffic for all types and codes is allowed. + /// The IP protocol name (tcp, udp, icmp, icmpv6) or number (see [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). Use -1 to specify all protocols. When authorizing security group rules, specifying -1 or a protocol number other than tcp, udp, icmp, or icmpv6 allows traffic on all ports, regardless of any port range you specify. For tcp, udp, and icmp, you must specify a port range. For icmpv6, the port range is optional; if you omit the port range, traffic for all types and codes is allowed. public var ipProtocol: Swift.String? /// The IPv4 ranges. public var ipRanges: [EC2ClientTypes.IpRange]? - /// [VPC only] The IPv6 ranges. + /// The IPv6 ranges. public var ipv6Ranges: [EC2ClientTypes.Ipv6Range]? - /// [VPC only] The prefix list IDs. + /// The prefix list IDs. public var prefixListIds: [EC2ClientTypes.PrefixListId]? /// If the protocol is TCP or UDP, this is the end of the port range. If the protocol is ICMP or ICMPv6, this is the code. A value of -1 indicates all ICMP/ICMPv6 codes. If you specify all ICMP/ICMPv6 types, you must specify all ICMP/ICMPv6 codes. public var toPort: Swift.Int? @@ -116413,7 +116564,7 @@ extension EC2ClientTypes.Ipv6Range: Swift.Codable { } extension EC2ClientTypes { - /// [EC2-VPC only] Describes an IPv6 range. + /// Describes an IPv6 range. public struct Ipv6Range: Swift.Equatable { /// The IPv6 CIDR range. You can either specify a CIDR range or a source security group, not both. To specify a single IPv6 address, use the /128 prefix length. public var cidrIpv6: Swift.String? @@ -117656,7 +117807,7 @@ extension EC2ClientTypes.LaunchTemplateCpuOptions: Swift.Codable { extension EC2ClientTypes { /// The CPU options for the instance. public struct LaunchTemplateCpuOptions: Swift.Equatable { - /// Indicates whether the instance is enabled for AMD SEV-SNP. + /// Indicates whether the instance is enabled for AMD SEV-SNP. For more information, see [AMD SEV-SNP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html). public var amdSevSnp: EC2ClientTypes.AmdSevSnpSpecification? /// The number of CPU cores for the instance. public var coreCount: Swift.Int? @@ -117711,7 +117862,7 @@ extension EC2ClientTypes.LaunchTemplateCpuOptionsRequest: Swift.Codable { extension EC2ClientTypes { /// The CPU options for the instance. Both the core count and threads per core must be specified in the request. public struct LaunchTemplateCpuOptionsRequest: Swift.Equatable { - /// Indicates whether to enable the instance for AMD SEV-SNP. AMD SEV-SNP is supported with M6a, R6a, and C6a instance types only. + /// Indicates whether to enable the instance for AMD SEV-SNP. AMD SEV-SNP is supported with M6a, R6a, and C6a instance types only. For more information, see [AMD SEV-SNP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html). public var amdSevSnp: EC2ClientTypes.AmdSevSnpSpecification? /// The number of CPU cores for the instance. public var coreCount: Swift.Int? @@ -126313,7 +126464,7 @@ public struct ModifyInstanceMetadataOptionsInput: Swift.Equatable { public var dryRun: Swift.Bool? /// Enables or disables the HTTP metadata endpoint on your instances. If this parameter is not specified, the existing state is maintained. If you specify a value of disabled, you cannot access your instance metadata. public var httpEndpoint: EC2ClientTypes.InstanceMetadataEndpointState? - /// Enables or disables the IPv6 endpoint for the instance metadata service. This setting applies only if you have enabled the HTTP metadata endpoint. + /// Enables or disables the IPv6 endpoint for the instance metadata service. Applies only if you enabled the HTTP metadata endpoint. public var httpProtocolIpv6: EC2ClientTypes.InstanceMetadataProtocolState? /// The desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel. If no parameter is specified, the existing state is maintained. Possible values: Integers from 1 to 64 public var httpPutResponseHopLimit: Swift.Int? @@ -135803,7 +135954,7 @@ extension EC2ClientTypes { public struct NetworkAcl: Swift.Equatable { /// Any associations between the network ACL and one or more subnets public var associations: [EC2ClientTypes.NetworkAclAssociation]? - /// One or more entries (rules) in the network ACL. + /// The entries (rules) in the network ACL. public var entries: [EC2ClientTypes.NetworkAclEntry]? /// Indicates whether this is the default network ACL for the VPC. public var isDefault: Swift.Bool? @@ -136090,13 +136241,18 @@ extension EC2ClientTypes { extension EC2ClientTypes.NetworkCardInfo: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case baselineBandwidthInGbps = "baselineBandwidthInGbps" case maximumNetworkInterfaces = "maximumNetworkInterfaces" case networkCardIndex = "networkCardIndex" case networkPerformance = "networkPerformance" + case peakBandwidthInGbps = "peakBandwidthInGbps" } public func encode(to encoder: Swift.Encoder) throws { var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let baselineBandwidthInGbps = baselineBandwidthInGbps { + try container.encode(baselineBandwidthInGbps, forKey: ClientRuntime.Key("BaselineBandwidthInGbps")) + } if let maximumNetworkInterfaces = maximumNetworkInterfaces { try container.encode(maximumNetworkInterfaces, forKey: ClientRuntime.Key("MaximumNetworkInterfaces")) } @@ -136106,6 +136262,9 @@ extension EC2ClientTypes.NetworkCardInfo: Swift.Codable { if let networkPerformance = networkPerformance { try container.encode(networkPerformance, forKey: ClientRuntime.Key("NetworkPerformance")) } + if let peakBandwidthInGbps = peakBandwidthInGbps { + try container.encode(peakBandwidthInGbps, forKey: ClientRuntime.Key("PeakBandwidthInGbps")) + } } public init(from decoder: Swift.Decoder) throws { @@ -136116,28 +136275,40 @@ extension EC2ClientTypes.NetworkCardInfo: Swift.Codable { networkPerformance = networkPerformanceDecoded let maximumNetworkInterfacesDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maximumNetworkInterfaces) maximumNetworkInterfaces = maximumNetworkInterfacesDecoded + let baselineBandwidthInGbpsDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .baselineBandwidthInGbps) + baselineBandwidthInGbps = baselineBandwidthInGbpsDecoded + let peakBandwidthInGbpsDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .peakBandwidthInGbps) + peakBandwidthInGbps = peakBandwidthInGbpsDecoded } } extension EC2ClientTypes { /// Describes the network card support of the instance type. public struct NetworkCardInfo: Swift.Equatable { + /// The baseline network performance of the network card, in Gbps. + public var baselineBandwidthInGbps: Swift.Double? /// The maximum number of network interfaces for the network card. public var maximumNetworkInterfaces: Swift.Int? /// The index of the network card. public var networkCardIndex: Swift.Int? /// The network performance of the network card. public var networkPerformance: Swift.String? + /// The peak (burst) network performance of the network card, in Gbps. + public var peakBandwidthInGbps: Swift.Double? public init( + baselineBandwidthInGbps: Swift.Double? = nil, maximumNetworkInterfaces: Swift.Int? = nil, networkCardIndex: Swift.Int? = nil, - networkPerformance: Swift.String? = nil + networkPerformance: Swift.String? = nil, + peakBandwidthInGbps: Swift.Double? = nil ) { + self.baselineBandwidthInGbps = baselineBandwidthInGbps self.maximumNetworkInterfaces = maximumNetworkInterfaces self.networkCardIndex = networkCardIndex self.networkPerformance = networkPerformance + self.peakBandwidthInGbps = peakBandwidthInGbps } } @@ -138578,7 +138749,7 @@ extension EC2ClientTypes { public struct NewDhcpConfiguration: Swift.Equatable { /// The name of a DHCP option. public var key: Swift.String? - /// One or more values for the DHCP option. + /// The values for the DHCP option. public var values: [Swift.String]? public init( @@ -138625,6 +138796,99 @@ extension EC2ClientTypes { } } +extension EC2ClientTypes.NitroTpmInfo: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case supportedVersions = "supportedVersions" + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let supportedVersions = supportedVersions { + if !supportedVersions.isEmpty { + for (index0, nitrotpmsupportedversiontype0) in supportedVersions.enumerated() { + var supportedVersionsContainer0 = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("SupportedVersions.\(index0.advanced(by: 1))")) + try supportedVersionsContainer0.encode(nitrotpmsupportedversiontype0, forKey: ClientRuntime.Key("")) + } + } + else { + var supportedVersionsContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("SupportedVersions")) + try supportedVersionsContainer.encode("", forKey: ClientRuntime.Key("")) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + if containerValues.contains(.supportedVersions) { + struct KeyVal0{struct item{}} + let supportedVersionsWrappedContainer = containerValues.nestedContainerNonThrowable(keyedBy: CollectionMemberCodingKey.CodingKeys.self, forKey: .supportedVersions) + if let supportedVersionsWrappedContainer = supportedVersionsWrappedContainer { + let supportedVersionsContainer = try supportedVersionsWrappedContainer.decodeIfPresent([Swift.String].self, forKey: .member) + var supportedVersionsBuffer:[Swift.String]? = nil + if let supportedVersionsContainer = supportedVersionsContainer { + supportedVersionsBuffer = [Swift.String]() + for stringContainer0 in supportedVersionsContainer { + supportedVersionsBuffer?.append(stringContainer0) + } + } + supportedVersions = supportedVersionsBuffer + } else { + supportedVersions = [] + } + } else { + supportedVersions = nil + } + } +} + +extension EC2ClientTypes { + /// Describes the supported NitroTPM versions for the instance type. + public struct NitroTpmInfo: Swift.Equatable { + /// Indicates the supported NitroTPM versions. + public var supportedVersions: [Swift.String]? + + public init( + supportedVersions: [Swift.String]? = nil + ) + { + self.supportedVersions = supportedVersions + } + } + +} + +extension EC2ClientTypes { + public enum NitroTpmSupport: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case supported + case unsupported + case sdkUnknown(Swift.String) + + public static var allCases: [NitroTpmSupport] { + return [ + .supported, + .unsupported, + .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 .supported: return "supported" + case .unsupported: return "unsupported" + 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 = NitroTpmSupport(rawValue: rawValue) ?? NitroTpmSupport.sdkUnknown(rawValue) + } + } +} + extension EC2ClientTypes { public enum OfferingClassType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case convertible @@ -140330,13 +140594,13 @@ extension EC2ClientTypes.PeeringConnectionOptions: Swift.Codable { } extension EC2ClientTypes { - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Describes the VPC peering connection options. + /// Describes the VPC peering connection options. public struct PeeringConnectionOptions: Swift.Equatable { /// If true, the public DNS hostnames of instances in the specified VPC resolve to private IP addresses when queried from instances in the peer VPC. public var allowDnsResolutionFromRemoteVpc: Swift.Bool? - /// If true, enables outbound communication from an EC2-Classic instance that's linked to a local VPC using ClassicLink to instances in a peer VPC. + /// Deprecated. public var allowEgressFromLocalClassicLinkToRemoteVpc: Swift.Bool? - /// If true, enables outbound communication from instances in a local VPC to an EC2-Classic instance that's linked to a peer VPC using ClassicLink. + /// Deprecated. public var allowEgressFromLocalVpcToRemoteClassicLink: Swift.Bool? public init( @@ -140385,13 +140649,13 @@ extension EC2ClientTypes.PeeringConnectionOptionsRequest: Swift.Codable { } extension EC2ClientTypes { - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. The VPC peering connection options. + /// The VPC peering connection options. public struct PeeringConnectionOptionsRequest: Swift.Equatable { /// If true, enables a local VPC to resolve public DNS hostnames to private IP addresses when queried from instances in the peer VPC. public var allowDnsResolutionFromRemoteVpc: Swift.Bool? - /// If true, enables outbound communication from an EC2-Classic instance that's linked to a local VPC using ClassicLink to instances in a peer VPC. + /// Deprecated. public var allowEgressFromLocalClassicLinkToRemoteVpc: Swift.Bool? - /// If true, enables outbound communication from instances in a local VPC to an EC2-Classic instance that's linked to a peer VPC using ClassicLink. + /// Deprecated. public var allowEgressFromLocalVpcToRemoteClassicLink: Swift.Bool? public init( @@ -148583,7 +148847,14 @@ extension EC2ClientTypes { public var instanceInitiatedShutdownBehavior: EC2ClientTypes.ShutdownBehavior? /// The market (purchasing) option for the instances. public var instanceMarketOptions: EC2ClientTypes.LaunchTemplateInstanceMarketOptionsRequest? - /// The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with these attributes. If you specify InstanceRequirements, you can't specify InstanceType. + /// The attributes for the instance types. When you specify instance attributes, Amazon EC2 will identify instance types with these attributes. You must specify VCpuCount and MemoryMiB. All other attributes are optional. Any unspecified optional attribute is set to its default. When you specify multiple attributes, you get instance types that satisfy all of the specified attributes. If you specify multiple values for an attribute, you get instance types that satisfy any of the specified values. To limit the list of instance types from which Amazon EC2 can identify matching instance types, you can use one of the following parameters, but not both in the same request: + /// + /// * AllowedInstanceTypes - The instance types to include in the list. All other instance types are ignored, even if they match your specified attributes. + /// + /// * ExcludedInstanceTypes - The instance types to exclude from the list, even if they match your specified attributes. + /// + /// + /// If you specify InstanceRequirements, you can't specify InstanceType. Attribute-based instance type selection is only supported when using Auto Scaling groups, EC2 Fleet, and Spot Fleet to launch instances. If you plan to use the launch template in the [launch instance wizard](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html), or with the [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) API or [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html) Amazon Web Services CloudFormation resource, you can't specify InstanceRequirements. For more information, see [Attribute-based instance type selection for EC2 Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html), [Attribute-based instance type selection for Spot Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html), and [Spot placement score](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html) in the Amazon EC2 User Guide. public var instanceRequirements: EC2ClientTypes.InstanceRequirementsRequest? /// The instance type. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon Elastic Compute Cloud User Guide. If you specify InstanceType, you can't specify InstanceRequirements. public var instanceType: EC2ClientTypes.InstanceType? @@ -153083,6 +153354,7 @@ extension RestoreSnapshotFromRecycleBinOutputResponse: ClientRuntime.HttpRespons self.ownerId = output.ownerId self.progress = output.progress self.snapshotId = output.snapshotId + self.sseType = output.sseType self.startTime = output.startTime self.state = output.state self.volumeId = output.volumeId @@ -153094,6 +153366,7 @@ extension RestoreSnapshotFromRecycleBinOutputResponse: ClientRuntime.HttpRespons self.ownerId = nil self.progress = nil self.snapshotId = nil + self.sseType = nil self.startTime = nil self.state = nil self.volumeId = nil @@ -153115,6 +153388,8 @@ public struct RestoreSnapshotFromRecycleBinOutputResponse: Swift.Equatable { public var progress: Swift.String? /// The ID of the snapshot. public var snapshotId: Swift.String? + /// Reserved for future use. + public var sseType: EC2ClientTypes.SSEType? /// The time stamp when the snapshot was initiated. public var startTime: ClientRuntime.Date? /// The state of the snapshot. @@ -153131,6 +153406,7 @@ public struct RestoreSnapshotFromRecycleBinOutputResponse: Swift.Equatable { ownerId: Swift.String? = nil, progress: Swift.String? = nil, snapshotId: Swift.String? = nil, + sseType: EC2ClientTypes.SSEType? = nil, startTime: ClientRuntime.Date? = nil, state: EC2ClientTypes.SnapshotState? = nil, volumeId: Swift.String? = nil, @@ -153143,6 +153419,7 @@ public struct RestoreSnapshotFromRecycleBinOutputResponse: Swift.Equatable { self.ownerId = ownerId self.progress = progress self.snapshotId = snapshotId + self.sseType = sseType self.startTime = startTime self.state = state self.volumeId = volumeId @@ -153161,6 +153438,7 @@ struct RestoreSnapshotFromRecycleBinOutputResponseBody: Swift.Equatable { let state: EC2ClientTypes.SnapshotState? let volumeId: Swift.String? let volumeSize: Swift.Int? + let sseType: EC2ClientTypes.SSEType? } extension RestoreSnapshotFromRecycleBinOutputResponseBody: Swift.Decodable { @@ -153171,6 +153449,7 @@ extension RestoreSnapshotFromRecycleBinOutputResponseBody: Swift.Decodable { case ownerId = "ownerId" case progress = "progress" case snapshotId = "snapshotId" + case sseType = "sseType" case startTime = "startTime" case state = "status" case volumeId = "volumeId" @@ -153199,6 +153478,8 @@ extension RestoreSnapshotFromRecycleBinOutputResponseBody: Swift.Decodable { volumeId = volumeIdDecoded let volumeSizeDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .volumeSize) volumeSize = volumeSizeDecoded + let sseTypeDecoded = try containerValues.decodeIfPresent(EC2ClientTypes.SSEType.self, forKey: .sseType) + sseType = sseTypeDecoded } } @@ -153845,9 +154126,9 @@ public struct RevokeSecurityGroupIngressInput: Swift.Equatable { public var dryRun: Swift.Bool? /// If the protocol is TCP or UDP, this is the start of the port range. If the protocol is ICMP, this is the type number. A value of -1 indicates all ICMP types. public var fromPort: Swift.Int? - /// The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID. + /// The ID of the security group. public var groupId: Swift.String? - /// [EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID. + /// [Default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID. public var groupName: Swift.String? /// The sets of IP permissions. You can't specify a source security group and a CIDR IP address range in the same set of permissions. public var ipPermissions: [EC2ClientTypes.IpPermission]? @@ -153855,9 +154136,9 @@ public struct RevokeSecurityGroupIngressInput: Swift.Equatable { public var ipProtocol: Swift.String? /// The IDs of the security group rules. public var securityGroupRuleIds: [Swift.String]? - /// [EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. For EC2-VPC, the source security group must be in the same VPC. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead. + /// [Default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. The source security group must be in the same VPC. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead. public var sourceSecurityGroupName: Swift.String? - /// [EC2-Classic] The Amazon Web Services account ID of the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead. + /// Not supported. public var sourceSecurityGroupOwnerId: Swift.String? /// If the protocol is TCP or UDP, this is the end of the port range. If the protocol is ICMP, this is the code. A value of -1 indicates all ICMP codes. public var toPort: Swift.Int? @@ -155192,7 +155473,7 @@ public struct RunInstancesInput: Swift.Equatable { public var instanceInitiatedShutdownBehavior: EC2ClientTypes.ShutdownBehavior? /// The market (purchasing) option for the instances. For [RunInstances], persistent Spot Instance requests are only supported when InstanceInterruptionBehavior is set to either hibernate or stop. public var instanceMarketOptions: EC2ClientTypes.InstanceMarketOptionsRequest? - /// The instance type. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon EC2 User Guide. When you change your EBS-backed instance type, instance restart or replacement behavior depends on the instance type compatibility between the old and new types. An instance that's backed by an instance store volume is always replaced. For more information, see [Change the instance type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-resize.html) in the Amazon EC2 User Guide. Default: m1.small + /// The instance type. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the Amazon EC2 User Guide. public var instanceType: EC2ClientTypes.InstanceType? /// The number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. You cannot specify this option and the option to assign specific IPv6 addresses in the same request. You can specify this option if you've specified a minimum number of instances to launch. You cannot specify this option and the network interfaces option in the same request. public var ipv6AddressCount: Swift.Int? @@ -155222,7 +155503,7 @@ public struct RunInstancesInput: Swift.Equatable { public var networkInterfaces: [EC2ClientTypes.InstanceNetworkInterfaceSpecification]? /// The placement for the instance. public var placement: EC2ClientTypes.Placement? - /// The options for the instance hostname. The default values are inherited from the subnet. + /// The options for the instance hostname. The default values are inherited from the subnet. Applies only if creating a network interface, not attaching an existing one. public var privateDnsNameOptions: EC2ClientTypes.PrivateDnsNameOptionsRequest? /// The primary IPv4 address. You must specify a value from the IPv4 address range of the subnet. Only one private IP address can be designated as primary. You can't specify this option if you've specified the option to designate a private IP address as the primary IP address in a network interface specification. You cannot specify this option if you're launching more than one instance in the request. You cannot specify this option and the network interfaces option in the same request. public var privateIpAddress: Swift.String? @@ -156115,6 +156396,41 @@ extension EC2ClientTypes { } +extension EC2ClientTypes { + public enum SSEType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case `none` + case sseEbs + case sseKms + case sdkUnknown(Swift.String) + + public static var allCases: [SSEType] { + return [ + .none, + .sseEbs, + .sseKms, + .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 .none: return "none" + case .sseEbs: return "sse-ebs" + case .sseKms: return "sse-kms" + 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 = SSEType(rawValue: rawValue) ?? SSEType.sdkUnknown(rawValue) + } + } +} + extension EC2ClientTypes.ScheduledInstance: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case availabilityZone = "availabilityZone" @@ -158275,13 +158591,13 @@ extension EC2ClientTypes { public var groupName: Swift.String? /// The inbound rules associated with the security group. public var ipPermissions: [EC2ClientTypes.IpPermission]? - /// [VPC only] The outbound rules associated with the security group. + /// The outbound rules associated with the security group. public var ipPermissionsEgress: [EC2ClientTypes.IpPermission]? /// The Amazon Web Services account ID of the owner of the security group. public var ownerId: Swift.String? /// Any tags assigned to the security group. public var tags: [EC2ClientTypes.Tag]? - /// [VPC only] The ID of the VPC for the security group. + /// The ID of the VPC for the security group. public var vpcId: Swift.String? public init( @@ -159871,6 +160187,7 @@ extension EC2ClientTypes.Snapshot: Swift.Codable { case progress = "progress" case restoreExpiryTime = "restoreExpiryTime" case snapshotId = "snapshotId" + case sseType = "sseType" case startTime = "startTime" case state = "status" case stateMessage = "statusMessage" @@ -159912,6 +160229,9 @@ extension EC2ClientTypes.Snapshot: Swift.Codable { if let snapshotId = snapshotId { try container.encode(snapshotId, forKey: ClientRuntime.Key("SnapshotId")) } + if let sseType = sseType { + try container.encode(sseType, forKey: ClientRuntime.Key("SseType")) + } if let startTime = startTime { try container.encodeTimestamp(startTime, format: .dateTime, forKey: ClientRuntime.Key("StartTime")) } @@ -159997,6 +160317,8 @@ extension EC2ClientTypes.Snapshot: Swift.Codable { storageTier = storageTierDecoded let restoreExpiryTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .restoreExpiryTime) restoreExpiryTime = restoreExpiryTimeDecoded + let sseTypeDecoded = try containerValues.decodeIfPresent(EC2ClientTypes.SSEType.self, forKey: .sseType) + sseType = sseTypeDecoded } } @@ -160023,6 +160345,8 @@ extension EC2ClientTypes { public var restoreExpiryTime: ClientRuntime.Date? /// The ID of the snapshot. Each snapshot receives a unique identifier when it is created. public var snapshotId: Swift.String? + /// Reserved for future use. + public var sseType: EC2ClientTypes.SSEType? /// The time stamp when the snapshot was initiated. public var startTime: ClientRuntime.Date? /// The snapshot state. @@ -160049,6 +160373,7 @@ extension EC2ClientTypes { progress: Swift.String? = nil, restoreExpiryTime: ClientRuntime.Date? = nil, snapshotId: Swift.String? = nil, + sseType: EC2ClientTypes.SSEType? = nil, startTime: ClientRuntime.Date? = nil, state: EC2ClientTypes.SnapshotState? = nil, stateMessage: Swift.String? = nil, @@ -160068,6 +160393,7 @@ extension EC2ClientTypes { self.progress = progress self.restoreExpiryTime = restoreExpiryTime self.snapshotId = snapshotId + self.sseType = sseType self.startTime = startTime self.state = state self.stateMessage = stateMessage @@ -160320,6 +160646,7 @@ extension EC2ClientTypes.SnapshotInfo: Swift.Codable { case ownerId = "ownerId" case progress = "progress" case snapshotId = "snapshotId" + case sseType = "sseType" case startTime = "startTime" case state = "state" case tags = "tagSet" @@ -160347,6 +160674,9 @@ extension EC2ClientTypes.SnapshotInfo: Swift.Codable { if let snapshotId = snapshotId { try container.encode(snapshotId, forKey: ClientRuntime.Key("SnapshotId")) } + if let sseType = sseType { + try container.encode(sseType, forKey: ClientRuntime.Key("SseType")) + } if let startTime = startTime { try container.encodeTimestamp(startTime, format: .dateTime, forKey: ClientRuntime.Key("StartTime")) } @@ -160414,6 +160744,8 @@ extension EC2ClientTypes.SnapshotInfo: Swift.Codable { snapshotId = snapshotIdDecoded let outpostArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outpostArn) outpostArn = outpostArnDecoded + let sseTypeDecoded = try containerValues.decodeIfPresent(EC2ClientTypes.SSEType.self, forKey: .sseType) + sseType = sseTypeDecoded } } @@ -160432,6 +160764,8 @@ extension EC2ClientTypes { public var progress: Swift.String? /// Snapshot id that can be used to describe this snapshot. public var snapshotId: Swift.String? + /// Reserved for future use. + public var sseType: EC2ClientTypes.SSEType? /// Time this snapshot was started. This is the same for all snapshots initiated by the same request. public var startTime: ClientRuntime.Date? /// Current state of the snapshot. @@ -160450,6 +160784,7 @@ extension EC2ClientTypes { ownerId: Swift.String? = nil, progress: Swift.String? = nil, snapshotId: Swift.String? = nil, + sseType: EC2ClientTypes.SSEType? = nil, startTime: ClientRuntime.Date? = nil, state: EC2ClientTypes.SnapshotState? = nil, tags: [EC2ClientTypes.Tag]? = nil, @@ -160463,6 +160798,7 @@ extension EC2ClientTypes { self.ownerId = ownerId self.progress = progress self.snapshotId = snapshotId + self.sseType = sseType self.startTime = startTime self.state = state self.tags = tags @@ -162252,6 +162588,7 @@ extension EC2ClientTypes { case active case cancelled case closed + case disabled case failed case `open` case sdkUnknown(Swift.String) @@ -162261,6 +162598,7 @@ extension EC2ClientTypes { .active, .cancelled, .closed, + .disabled, .failed, .open, .sdkUnknown("") @@ -162275,6 +162613,7 @@ extension EC2ClientTypes { case .active: return "active" case .cancelled: return "cancelled" case .closed: return "closed" + case .disabled: return "disabled" case .failed: return "failed" case .open: return "open" case let .sdkUnknown(s): return s @@ -173185,7 +173524,7 @@ public struct UnassignPrivateNatGatewayAddressInput: Swift.Equatable { public var dryRun: Swift.Bool? /// The maximum amount of time to wait (in seconds) before forcibly releasing the IP addresses if connections are still in progress. Default value is 350 seconds. public var maxDrainDurationSeconds: Swift.Int? - /// The NAT gateway ID. + /// The ID of the NAT gateway. /// This member is required. public var natGatewayId: Swift.String? /// The private IPv4 addresses you want to unassign. @@ -173277,7 +173616,7 @@ extension UnassignPrivateNatGatewayAddressOutputResponse: ClientRuntime.HttpResp public struct UnassignPrivateNatGatewayAddressOutputResponse: Swift.Equatable { /// Information about the NAT gateway IP addresses. public var natGatewayAddresses: [EC2ClientTypes.NatGatewayAddress]? - /// The NAT gateway ID. + /// The ID of the NAT gateway. public var natGatewayId: Swift.String? public init( @@ -173784,7 +174123,7 @@ public struct UpdateSecurityGroupRuleDescriptionsEgressInput: Swift.Equatable { public var dryRun: Swift.Bool? /// The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID. public var groupId: Swift.String? - /// [Default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. + /// [Default VPC] The name of the security group. You must specify either the security group ID or the security group name. public var groupName: Swift.String? /// The IP permissions for the security group rule. You must specify either the IP permissions or the description. public var ipPermissions: [EC2ClientTypes.IpPermission]? @@ -173974,11 +174313,11 @@ public struct UpdateSecurityGroupRuleDescriptionsIngressInput: Swift.Equatable { public var dryRun: Swift.Bool? /// The ID of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID. public var groupId: Swift.String? - /// [EC2-Classic, default VPC] The name of the security group. You must specify either the security group ID or the security group name in the request. For security groups in a nondefault VPC, you must specify the security group ID. + /// [Default VPC] The name of the security group. You must specify either the security group ID or the security group name. For security groups in a nondefault VPC, you must specify the security group ID. public var groupName: Swift.String? /// The IP permissions for the security group rule. You must specify either IP permissions or a description. public var ipPermissions: [EC2ClientTypes.IpPermission]? - /// [VPC only] The description for the ingress security group rules. You must specify either a description or IP permissions. + /// The description for the ingress security group rules. You must specify either a description or IP permissions. public var securityGroupRuleDescriptions: [EC2ClientTypes.SecurityGroupRuleDescription]? public init( @@ -174331,17 +174670,17 @@ extension EC2ClientTypes.UserIdGroupPair: Swift.Codable { } extension EC2ClientTypes { - /// Describes a security group and Amazon Web Services account ID pair. We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. + /// Describes a security group and Amazon Web Services account ID pair. public struct UserIdGroupPair: Swift.Equatable { /// A description for the security group rule that references this user ID group pair. Constraints: Up to 255 characters in length. Allowed characters are a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$* public var description: Swift.String? /// The ID of the security group. public var groupId: Swift.String? - /// The name of the security group. In a request, use this parameter for a security group in EC2-Classic or a default VPC only. For a security group in a nondefault VPC, use the security group ID. For a referenced security group in another VPC, this value is not returned if the referenced security group is deleted. + /// [Default VPC] The name of the security group. For a security group in a nondefault VPC, use the security group ID. For a referenced security group in another VPC, this value is not returned if the referenced security group is deleted. public var groupName: Swift.String? /// The status of a VPC peering connection, if applicable. public var peeringStatus: Swift.String? - /// The ID of an Amazon Web Services account. For a referenced security group in another VPC, the account ID of the referenced security group is returned in the response. If the referenced security group is deleted, this value is not returned. [EC2-Classic] Required when adding or removing rules that reference a security group in another Amazon Web Services account. + /// The ID of an Amazon Web Services account. For a referenced security group in another VPC, the account ID of the referenced security group is returned in the response. If the referenced security group is deleted, this value is not returned. public var userId: Swift.String? /// The ID of the VPC for the referenced security group, if applicable. public var vpcId: Swift.String? @@ -176567,6 +176906,7 @@ extension EC2ClientTypes.Volume: Swift.Codable { case outpostArn = "outpostArn" case size = "size" case snapshotId = "snapshotId" + case sseType = "sseType" case state = "status" case tags = "tagSet" case throughput = "throughput" @@ -176618,6 +176958,9 @@ extension EC2ClientTypes.Volume: Swift.Codable { if let snapshotId = snapshotId { try container.encode(snapshotId, forKey: ClientRuntime.Key("SnapshotId")) } + if let sseType = sseType { + try container.encode(sseType, forKey: ClientRuntime.Key("SseType")) + } if let state = state { try container.encode(state, forKey: ClientRuntime.Key("Status")) } @@ -176712,6 +177055,8 @@ extension EC2ClientTypes.Volume: Swift.Codable { multiAttachEnabled = multiAttachEnabledDecoded let throughputDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .throughput) throughput = throughputDecoded + let sseTypeDecoded = try containerValues.decodeIfPresent(EC2ClientTypes.SSEType.self, forKey: .sseType) + sseType = sseTypeDecoded } } @@ -176740,6 +177085,8 @@ extension EC2ClientTypes { public var size: Swift.Int? /// The snapshot from which the volume was created, if applicable. public var snapshotId: Swift.String? + /// Reserved for future use. + public var sseType: EC2ClientTypes.SSEType? /// The volume state. public var state: EC2ClientTypes.VolumeState? /// Any tags assigned to the volume. @@ -176763,6 +177110,7 @@ extension EC2ClientTypes { outpostArn: Swift.String? = nil, size: Swift.Int? = nil, snapshotId: Swift.String? = nil, + sseType: EC2ClientTypes.SSEType? = nil, state: EC2ClientTypes.VolumeState? = nil, tags: [EC2ClientTypes.Tag]? = nil, throughput: Swift.Int? = nil, @@ -176781,6 +177129,7 @@ extension EC2ClientTypes { self.outpostArn = outpostArn self.size = size self.snapshotId = snapshotId + self.sseType = sseType self.state = state self.tags = tags self.throughput = throughput @@ -178335,7 +178684,7 @@ extension EC2ClientTypes.VpcClassicLink: Swift.Codable { } extension EC2ClientTypes { - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Describes whether a VPC is enabled for ClassicLink. + /// Deprecated. Describes whether a VPC is enabled for ClassicLink. public struct VpcClassicLink: Swift.Equatable { /// Indicates whether the VPC is enabled for ClassicLink. public var classicLinkEnabled: Swift.Bool? @@ -179221,13 +179570,13 @@ extension EC2ClientTypes.VpcPeeringConnectionOptionsDescription: Swift.Codable { } extension EC2ClientTypes { - /// We are retiring EC2-Classic. We recommend that you migrate from EC2-Classic to a VPC. For more information, see [Migrate from EC2-Classic to a VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) in the Amazon Elastic Compute Cloud User Guide. Describes the VPC peering connection options. + /// Describes the VPC peering connection options. public struct VpcPeeringConnectionOptionsDescription: Swift.Equatable { /// Indicates whether a local VPC can resolve public DNS hostnames to private IP addresses when queried from instances in a peer VPC. public var allowDnsResolutionFromRemoteVpc: Swift.Bool? - /// Indicates whether a local ClassicLink connection can communicate with the peer VPC over the VPC peering connection. + /// Deprecated. public var allowEgressFromLocalClassicLinkToRemoteVpc: Swift.Bool? - /// Indicates whether a local VPC can communicate with a ClassicLink connection in the peer VPC over the VPC peering connection. + /// Deprecated. public var allowEgressFromLocalVpcToRemoteClassicLink: Swift.Bool? public init( diff --git a/Sources/Services/AWSEKS/models/Models.swift b/Sources/Services/AWSEKS/models/Models.swift index 6f1258d45f8..c4b016111ab 100644 --- a/Sources/Services/AWSEKS/models/Models.swift +++ b/Sources/Services/AWSEKS/models/Models.swift @@ -3062,7 +3062,7 @@ extension DeleteAddonInput: ClientRuntime.QueryItemProvider { public var queryItems: [ClientRuntime.URLQueryItem] { get throws { var items = [ClientRuntime.URLQueryItem]() - if preserve != false { + if let preserve = preserve { let preserveQueryItem = ClientRuntime.URLQueryItem(name: "preserve".urlPercentEncoding(), value: Swift.String(preserve).urlPercentEncoding()) items.append(preserveQueryItem) } @@ -3091,12 +3091,12 @@ public struct DeleteAddonInput: Swift.Equatable { /// This member is required. public var clusterName: Swift.String? /// Specifying this option preserves the add-on software on your cluster but Amazon EKS stops managing any settings for the add-on. If an IAM account is associated with the add-on, it isn't removed. - public var preserve: Swift.Bool + public var preserve: Swift.Bool? public init( addonName: Swift.String? = nil, clusterName: Swift.String? = nil, - preserve: Swift.Bool = false + preserve: Swift.Bool? = nil ) { self.addonName = addonName @@ -7036,47 +7036,75 @@ extension EKSClientTypes { extension EKSClientTypes { public enum NodegroupIssueCode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case accessDenied + case amiIdNotFound case asgInstanceLaunchFailures + case autoScalingGroupInstanceRefreshActive case autoScalingGroupInvalidConfiguration case autoScalingGroupNotFound + case autoScalingGroupOptInRequired + case autoScalingGroupRateLimitExceeded case clusterUnreachable + case ec2LaunchTemplateDeletionFailure + case ec2LaunchTemplateInvalidConfiguration + case ec2LaunchTemplateMaxLimitExceeded case ec2LaunchTemplateNotFound case ec2LaunchTemplateVersionMismatch case ec2SecurityGroupDeletionFailure case ec2SecurityGroupNotFound case ec2SubnetInvalidConfiguration + case ec2SubnetListTooLong case ec2SubnetMissingIpv6Assignment case ec2SubnetNotFound case iamInstanceProfileNotFound case iamLimitExceeded case iamNodeRoleNotFound + case iamThrottling case instanceLimitExceeded case insufficientFreeAddresses case internalFailure + case limitExceeded case nodeCreationFailure + case nodeTerminationFailure + case podEvictionFailure + case sourceEc2LaunchTemplateNotFound + case unknown case sdkUnknown(Swift.String) public static var allCases: [NodegroupIssueCode] { return [ .accessDenied, + .amiIdNotFound, .asgInstanceLaunchFailures, + .autoScalingGroupInstanceRefreshActive, .autoScalingGroupInvalidConfiguration, .autoScalingGroupNotFound, + .autoScalingGroupOptInRequired, + .autoScalingGroupRateLimitExceeded, .clusterUnreachable, + .ec2LaunchTemplateDeletionFailure, + .ec2LaunchTemplateInvalidConfiguration, + .ec2LaunchTemplateMaxLimitExceeded, .ec2LaunchTemplateNotFound, .ec2LaunchTemplateVersionMismatch, .ec2SecurityGroupDeletionFailure, .ec2SecurityGroupNotFound, .ec2SubnetInvalidConfiguration, + .ec2SubnetListTooLong, .ec2SubnetMissingIpv6Assignment, .ec2SubnetNotFound, .iamInstanceProfileNotFound, .iamLimitExceeded, .iamNodeRoleNotFound, + .iamThrottling, .instanceLimitExceeded, .insufficientFreeAddresses, .internalFailure, + .limitExceeded, .nodeCreationFailure, + .nodeTerminationFailure, + .podEvictionFailure, + .sourceEc2LaunchTemplateNotFound, + .unknown, .sdkUnknown("") ] } @@ -7087,24 +7115,38 @@ extension EKSClientTypes { public var rawValue: Swift.String { switch self { case .accessDenied: return "AccessDenied" + case .amiIdNotFound: return "AmiIdNotFound" case .asgInstanceLaunchFailures: return "AsgInstanceLaunchFailures" + case .autoScalingGroupInstanceRefreshActive: return "AutoScalingGroupInstanceRefreshActive" case .autoScalingGroupInvalidConfiguration: return "AutoScalingGroupInvalidConfiguration" case .autoScalingGroupNotFound: return "AutoScalingGroupNotFound" + case .autoScalingGroupOptInRequired: return "AutoScalingGroupOptInRequired" + case .autoScalingGroupRateLimitExceeded: return "AutoScalingGroupRateLimitExceeded" case .clusterUnreachable: return "ClusterUnreachable" + case .ec2LaunchTemplateDeletionFailure: return "Ec2LaunchTemplateDeletionFailure" + case .ec2LaunchTemplateInvalidConfiguration: return "Ec2LaunchTemplateInvalidConfiguration" + case .ec2LaunchTemplateMaxLimitExceeded: return "Ec2LaunchTemplateMaxLimitExceeded" case .ec2LaunchTemplateNotFound: return "Ec2LaunchTemplateNotFound" case .ec2LaunchTemplateVersionMismatch: return "Ec2LaunchTemplateVersionMismatch" case .ec2SecurityGroupDeletionFailure: return "Ec2SecurityGroupDeletionFailure" case .ec2SecurityGroupNotFound: return "Ec2SecurityGroupNotFound" case .ec2SubnetInvalidConfiguration: return "Ec2SubnetInvalidConfiguration" + case .ec2SubnetListTooLong: return "Ec2SubnetListTooLong" case .ec2SubnetMissingIpv6Assignment: return "Ec2SubnetMissingIpv6Assignment" case .ec2SubnetNotFound: return "Ec2SubnetNotFound" case .iamInstanceProfileNotFound: return "IamInstanceProfileNotFound" case .iamLimitExceeded: return "IamLimitExceeded" case .iamNodeRoleNotFound: return "IamNodeRoleNotFound" + case .iamThrottling: return "IamThrottling" case .instanceLimitExceeded: return "InstanceLimitExceeded" case .insufficientFreeAddresses: return "InsufficientFreeAddresses" case .internalFailure: return "InternalFailure" + case .limitExceeded: return "LimitExceeded" case .nodeCreationFailure: return "NodeCreationFailure" + case .nodeTerminationFailure: return "NodeTerminationFailure" + case .podEvictionFailure: return "PodEvictionFailure" + case .sourceEc2LaunchTemplateNotFound: return "SourceEc2LaunchTemplateNotFound" + case .unknown: return "Unknown" case let .sdkUnknown(s): return s } } @@ -9706,7 +9748,7 @@ extension UpdateNodegroupVersionInput: Swift.Encodable { if let clientRequestToken = self.clientRequestToken { try encodeContainer.encode(clientRequestToken, forKey: .clientRequestToken) } - if force != false { + if let force = self.force { try encodeContainer.encode(force, forKey: .force) } if let launchTemplate = self.launchTemplate { @@ -9740,7 +9782,7 @@ public struct UpdateNodegroupVersionInput: Swift.Equatable { /// This member is required. public var clusterName: Swift.String? /// Force the update if the existing node group's pods are unable to be drained due to a pod disruption budget issue. If an update fails because pods could not be drained, you can force the update after it fails to terminate the old node whether or not any pods are running on the node. - public var force: Swift.Bool + public var force: Swift.Bool? /// An object representing a node group's launch template specification. You can only update a node group using a launch template if the node group was originally deployed with a launch template. public var launchTemplate: EKSClientTypes.LaunchTemplateSpecification? /// The name of the managed node group to update. @@ -9754,7 +9796,7 @@ public struct UpdateNodegroupVersionInput: Swift.Equatable { public init( clientRequestToken: Swift.String? = nil, clusterName: Swift.String? = nil, - force: Swift.Bool = false, + force: Swift.Bool? = nil, launchTemplate: EKSClientTypes.LaunchTemplateSpecification? = nil, nodegroupName: Swift.String? = nil, releaseVersion: Swift.String? = nil, @@ -9775,7 +9817,7 @@ struct UpdateNodegroupVersionInputBody: Swift.Equatable { let version: Swift.String? let releaseVersion: Swift.String? let launchTemplate: EKSClientTypes.LaunchTemplateSpecification? - let force: Swift.Bool + let force: Swift.Bool? let clientRequestToken: Swift.String? } @@ -9796,7 +9838,7 @@ extension UpdateNodegroupVersionInputBody: Swift.Decodable { releaseVersion = releaseVersionDecoded let launchTemplateDecoded = try containerValues.decodeIfPresent(EKSClientTypes.LaunchTemplateSpecification.self, forKey: .launchTemplate) launchTemplate = launchTemplateDecoded - let forceDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .force) ?? false + let forceDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .force) force = forceDecoded let clientRequestTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientRequestToken) clientRequestToken = clientRequestTokenDecoded diff --git a/Sources/Services/AWSEMRServerless/EMRServerlessClient.swift b/Sources/Services/AWSEMRServerless/EMRServerlessClient.swift index 7e4c96f7dc6..d54bacffd69 100644 --- a/Sources/Services/AWSEMRServerless/EMRServerlessClient.swift +++ b/Sources/Services/AWSEMRServerless/EMRServerlessClient.swift @@ -210,7 +210,7 @@ extension EMRServerlessClient: EMRServerlessClientProtocol { return result } - /// 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. + /// Creates and returns a URL that you can use to access the application UIs for a job run. For jobs in a running state, the application UI is a live user interface such as the Spark or Tez web UI. For completed jobs, the application UI is a persistent application user interface such as the Spark History Server or persistent Tez UI. The URL is valid for one hour after you generate it. To access the application UI after that hour elapses, you must invoke the API again to generate a new URL. public func getDashboardForJobRun(input: GetDashboardForJobRunInput) async throws -> GetDashboardForJobRunOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSEMRServerless/EMRServerlessClientProtocol.swift b/Sources/Services/AWSEMRServerless/EMRServerlessClientProtocol.swift index 2e426dca41e..8440e69cddc 100644 --- a/Sources/Services/AWSEMRServerless/EMRServerlessClientProtocol.swift +++ b/Sources/Services/AWSEMRServerless/EMRServerlessClientProtocol.swift @@ -18,7 +18,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. The generated URL is valid for one hour, after which you must invoke the API again to generate a new URL. + /// Creates and returns a URL that you can use to access the application UIs for a job run. For jobs in a running state, the application UI is a live user interface such as the Spark or Tez web UI. For completed jobs, the application UI is a persistent application user interface such as the Spark History Server or persistent Tez UI. The URL is valid for one hour after you generate it. To access the application UI after that hour elapses, 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 diff --git a/Sources/Services/AWSEMRServerless/models/Models.swift b/Sources/Services/AWSEMRServerless/models/Models.swift index 9e4306cfbf5..d87d7abc077 100644 --- a/Sources/Services/AWSEMRServerless/models/Models.swift +++ b/Sources/Services/AWSEMRServerless/models/Models.swift @@ -645,6 +645,108 @@ extension CancelJobRunOutputResponseBody: Swift.Decodable { } } +extension EMRServerlessClientTypes.CloudWatchLoggingConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case enabled + case encryptionKeyArn + case logGroupName + case logStreamNamePrefix + case logTypes + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let enabled = self.enabled { + try encodeContainer.encode(enabled, forKey: .enabled) + } + if let encryptionKeyArn = self.encryptionKeyArn { + try encodeContainer.encode(encryptionKeyArn, forKey: .encryptionKeyArn) + } + if let logGroupName = self.logGroupName { + try encodeContainer.encode(logGroupName, forKey: .logGroupName) + } + if let logStreamNamePrefix = self.logStreamNamePrefix { + try encodeContainer.encode(logStreamNamePrefix, forKey: .logStreamNamePrefix) + } + if let logTypes = logTypes { + var logTypesContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .logTypes) + for (dictKey0, logTypeMap0) in logTypes { + var logTypeMap0Container = logTypesContainer.nestedUnkeyedContainer(forKey: ClientRuntime.Key(stringValue: dictKey0)) + for logtypestring1 in logTypeMap0 { + try logTypeMap0Container.encode(logtypestring1) + } + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) + enabled = enabledDecoded + let logGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .logGroupName) + logGroupName = logGroupNameDecoded + let logStreamNamePrefixDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .logStreamNamePrefix) + logStreamNamePrefix = logStreamNamePrefixDecoded + let encryptionKeyArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .encryptionKeyArn) + encryptionKeyArn = encryptionKeyArnDecoded + let logTypesContainer = try containerValues.decodeIfPresent([Swift.String: [Swift.String?]?].self, forKey: .logTypes) + var logTypesDecoded0: [Swift.String:[Swift.String]]? = nil + if let logTypesContainer = logTypesContainer { + logTypesDecoded0 = [Swift.String:[Swift.String]]() + for (key0, logtypelist0) in logTypesContainer { + var logtypelist0Decoded0: [Swift.String]? = nil + if let logtypelist0 = logtypelist0 { + logtypelist0Decoded0 = [Swift.String]() + for string1 in logtypelist0 { + if let string1 = string1 { + logtypelist0Decoded0?.append(string1) + } + } + } + logTypesDecoded0?[key0] = logtypelist0Decoded0 + } + } + logTypes = logTypesDecoded0 + } +} + +extension EMRServerlessClientTypes { + /// The Amazon CloudWatch configuration for monitoring logs. You can configure your jobs to send log information to CloudWatch. + public struct CloudWatchLoggingConfiguration: Swift.Equatable { + /// Enables CloudWatch logging. + /// This member is required. + public var enabled: Swift.Bool? + /// The Key Management Service (KMS) key ARN to encrypt the logs that you store in CloudWatch Logs. + public var encryptionKeyArn: Swift.String? + /// The name of the log group in Amazon CloudWatch Logs where you want to publish your logs. + public var logGroupName: Swift.String? + /// Prefix for the CloudWatch log stream name. + public var logStreamNamePrefix: Swift.String? + /// The types of logs that you want to publish to CloudWatch. If you don't specify any log types, driver STDOUT and STDERR logs will be published to CloudWatch Logs by default. For more information including the supported worker types for Hive and Spark, see [Logging for EMR Serverless with CloudWatch](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/logging.html#jobs-log-storage-cw). + /// + /// * Key Valid Values: SPARK_DRIVER, SPARK_EXECUTOR, HIVE_DRIVER, TEZ_TASK + /// + /// * Array Members Valid Values: STDOUT, STDERR, HIVE_LOG, TEZ_AM, SYSTEM_LOGS + public var logTypes: [Swift.String:[Swift.String]]? + + public init( + enabled: Swift.Bool? = nil, + encryptionKeyArn: Swift.String? = nil, + logGroupName: Swift.String? = nil, + logStreamNamePrefix: Swift.String? = nil, + logTypes: [Swift.String:[Swift.String]]? = nil + ) + { + self.enabled = enabled + self.encryptionKeyArn = encryptionKeyArn + self.logGroupName = logGroupName + self.logStreamNamePrefix = logStreamNamePrefix + self.logTypes = logTypes + } + } + +} + extension EMRServerlessClientTypes.Configuration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case classification @@ -2688,12 +2790,16 @@ extension EMRServerlessClientTypes { extension EMRServerlessClientTypes.MonitoringConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case cloudWatchLoggingConfiguration case managedPersistenceMonitoringConfiguration case s3MonitoringConfiguration } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let cloudWatchLoggingConfiguration = self.cloudWatchLoggingConfiguration { + try encodeContainer.encode(cloudWatchLoggingConfiguration, forKey: .cloudWatchLoggingConfiguration) + } if let managedPersistenceMonitoringConfiguration = self.managedPersistenceMonitoringConfiguration { try encodeContainer.encode(managedPersistenceMonitoringConfiguration, forKey: .managedPersistenceMonitoringConfiguration) } @@ -2708,22 +2814,28 @@ extension EMRServerlessClientTypes.MonitoringConfiguration: Swift.Codable { s3MonitoringConfiguration = s3MonitoringConfigurationDecoded let managedPersistenceMonitoringConfigurationDecoded = try containerValues.decodeIfPresent(EMRServerlessClientTypes.ManagedPersistenceMonitoringConfiguration.self, forKey: .managedPersistenceMonitoringConfiguration) managedPersistenceMonitoringConfiguration = managedPersistenceMonitoringConfigurationDecoded + let cloudWatchLoggingConfigurationDecoded = try containerValues.decodeIfPresent(EMRServerlessClientTypes.CloudWatchLoggingConfiguration.self, forKey: .cloudWatchLoggingConfiguration) + cloudWatchLoggingConfiguration = cloudWatchLoggingConfigurationDecoded } } extension EMRServerlessClientTypes { /// The configuration setting for monitoring. public struct MonitoringConfiguration: Swift.Equatable { + /// The Amazon CloudWatch configuration for monitoring logs. You can configure your jobs to send log information to CloudWatch. + public var cloudWatchLoggingConfiguration: EMRServerlessClientTypes.CloudWatchLoggingConfiguration? /// The managed log persistence configuration for a job run. public var managedPersistenceMonitoringConfiguration: EMRServerlessClientTypes.ManagedPersistenceMonitoringConfiguration? /// The Amazon S3 configuration for monitoring log publishing. public var s3MonitoringConfiguration: EMRServerlessClientTypes.S3MonitoringConfiguration? public init( + cloudWatchLoggingConfiguration: EMRServerlessClientTypes.CloudWatchLoggingConfiguration? = nil, managedPersistenceMonitoringConfiguration: EMRServerlessClientTypes.ManagedPersistenceMonitoringConfiguration? = nil, s3MonitoringConfiguration: EMRServerlessClientTypes.S3MonitoringConfiguration? = nil ) { + self.cloudWatchLoggingConfiguration = cloudWatchLoggingConfiguration self.managedPersistenceMonitoringConfiguration = managedPersistenceMonitoringConfiguration self.s3MonitoringConfiguration = s3MonitoringConfiguration } diff --git a/Sources/Services/AWSEntityResolution/EndpointResolver.swift b/Sources/Services/AWSEntityResolution/EndpointResolver.swift new file mode 100644 index 00000000000..a2f73d3ac94 --- /dev/null +++ b/Sources/Services/AWSEntityResolution/EndpointResolver.swift @@ -0,0 +1,154 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import AWSClientRuntime +import ClientRuntime + +public struct EndpointParams { + /// Override the endpoint used to send this request + public let endpoint: Swift.String? + /// The AWS region used to dispatch the request. + public let region: Swift.String? + /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error. + public let useDualStack: Swift.Bool + /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error. + public let useFIPS: Swift.Bool + + public init( + endpoint: Swift.String? = nil, + region: Swift.String? = nil, + useDualStack: Swift.Bool = false, + useFIPS: Swift.Bool = false + ) + { + self.endpoint = endpoint + self.region = region + self.useDualStack = useDualStack + self.useFIPS = useFIPS + } +} + +public protocol EndpointResolver { + func resolve(params: EndpointParams) throws -> ClientRuntime.Endpoint +} + +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://entityresolution-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://entityresolution-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://entityresolution.{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://entityresolution.{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) + } + + public func resolve(params: EndpointParams) throws -> ClientRuntime.Endpoint { + let context = try AWSClientRuntime.AWSEndpointsRequestContext() + try context.add(name: "Endpoint", value: params.endpoint) + try context.add(name: "Region", value: params.region) + try context.add(name: "UseDualStack", value: params.useDualStack) + try context.add(name: "UseFIPS", value: params.useFIPS) + + guard let crtResolvedEndpoint = try engine.resolve(context: context) else { + throw EndpointError.unresolved("Failed to resolved endpoint") + } + + if crtResolvedEndpoint.getType() == .error { + let error = crtResolvedEndpoint.getError() + throw EndpointError.unresolved(error) + } + + guard let url = crtResolvedEndpoint.getURL() else { + assertionFailure("This must be a bug in either CRT or the rule engine, if the endpoint is not an error, it must have a url") + throw EndpointError.unresolved("Failed to resolved endpoint") + } + + let headers = crtResolvedEndpoint.getHeaders() ?? [:] + let properties = crtResolvedEndpoint.getProperties() ?? [:] + return try Endpoint(urlString: url, headers: Headers(headers), properties: properties) + } +} + +public struct EndpointResolverMiddleware: ClientRuntime.Middleware { + public let id: Swift.String = "EndpointResolverMiddleware" + + let endpointResolver: EndpointResolver + + let endpointParams: EndpointParams + + let authSchemeResolver: AWSClientRuntime.AuthSchemeResolver + + public init(endpointResolver: EndpointResolver, endpointParams: EndpointParams, authSchemeResolver: AWSClientRuntime.AuthSchemeResolver = AWSClientRuntime.DefaultAuthSchemeResolver()) { + self.endpointResolver = endpointResolver + self.endpointParams = endpointParams + self.authSchemeResolver = authSchemeResolver + } + + public func handle(context: Context, + input: ClientRuntime.SdkHttpRequestBuilder, + next: H) async throws -> ClientRuntime.OperationOutput + where H: Handler, + Self.MInput == H.Input, + Self.MOutput == H.Output, + Self.Context == H.Context + { + let endpoint = try endpointResolver.resolve(params: endpointParams) + + var signingName: String? = nil + var signingRegion: String? = nil + var signingAlgorithm: String? = nil + if let authSchemes = endpoint.authSchemes() { + let schemes = try authSchemes.map { try AuthScheme(from: $0) } + let authScheme = try authSchemeResolver.resolve(authSchemes: schemes) + signingAlgorithm = authScheme.name + switch authScheme { + case .sigV4(let param): + signingName = param.signingName + signingRegion = param.signingRegion + case .sigV4A(let param): + signingName = param.signingName + signingRegion = param.signingRegionSet?.first + case .none: + break + } + } + + let awsEndpoint = AWSEndpoint(endpoint: endpoint, signingName: signingName, signingRegion: signingRegion) + + var host = "" + if let hostOverride = context.getHost() { + host = hostOverride + } else { + host = "\(context.getHostPrefix() ?? "")\(awsEndpoint.endpoint.host)" + } + + if let protocolType = awsEndpoint.endpoint.protocolType { + input.withProtocol(protocolType) + } + + if let signingRegion = signingRegion { + context.attributes.set(key: HttpContext.signingRegion, value: signingRegion) + } + if let signingName = signingName { + context.attributes.set(key: HttpContext.signingName, value: signingName) + } + if let signingAlgorithm = signingAlgorithm { + context.attributes.set(key: HttpContext.signingAlgorithm, value: signingAlgorithm) + } + + if let headers = endpoint.headers { + input.withHeaders(headers) + } + + input.withMethod(context.getMethod()) + .withHost(host) + .withPort(awsEndpoint.endpoint.port) + .withPath(awsEndpoint.endpoint.path.appendingPathComponent(context.getPath())) + .withHeader(name: "Host", value: host) + + return try await next.handle(context: context, input: input) + } + + public typealias MInput = ClientRuntime.SdkHttpRequestBuilder + public typealias MOutput = ClientRuntime.OperationOutput + public typealias Context = ClientRuntime.HttpContext +} diff --git a/Sources/Services/AWSEntityResolution/EntityResolutionClient.swift b/Sources/Services/AWSEntityResolution/EntityResolutionClient.swift new file mode 100644 index 00000000000..14c2ca7d30b --- /dev/null +++ b/Sources/Services/AWSEntityResolution/EntityResolutionClient.swift @@ -0,0 +1,617 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +@_spi(FileBasedConfig) import AWSClientRuntime +import ClientRuntime +import Foundation +import Logging + +public class EntityResolutionClient { + public static let clientName = "EntityResolutionClient" + let client: ClientRuntime.SdkHttpClient + let config: EntityResolutionClient.EntityResolutionClientConfiguration + let serviceName = "EntityResolution" + let encoder: ClientRuntime.RequestEncoder + let decoder: ClientRuntime.ResponseDecoder + + public init(config: EntityResolutionClient.EntityResolutionClientConfiguration) { + client = ClientRuntime.SdkHttpClient(engine: config.httpClientEngine, config: config.httpClientConfiguration) + let encoder = ClientRuntime.JSONEncoder() + encoder.dateEncodingStrategy = .secondsSince1970 + encoder.nonConformingFloatEncodingStrategy = .convertToString(positiveInfinity: "Infinity", negativeInfinity: "-Infinity", nan: "NaN") + self.encoder = config.encoder ?? encoder + let decoder = ClientRuntime.JSONDecoder() + decoder.dateDecodingStrategy = .secondsSince1970 + decoder.nonConformingFloatDecodingStrategy = .convertFromString(positiveInfinity: "Infinity", negativeInfinity: "-Infinity", nan: "NaN") + self.decoder = config.decoder ?? decoder + self.config = config + } + + public convenience init(region: Swift.String) throws { + let config = try EntityResolutionClient.EntityResolutionClientConfiguration(region: region) + self.init(config: config) + } + + public convenience init() async throws { + let config = try await EntityResolutionClient.EntityResolutionClientConfiguration() + self.init(config: config) + } +} + +extension EntityResolutionClient { + public typealias EntityResolutionClientConfiguration = AWSClientConfiguration + + public struct ServiceSpecificConfiguration: AWSServiceSpecificConfiguration { + public typealias AWSServiceEndpointResolver = EndpointResolver + + public var serviceName: String { "EntityResolution" } + public var clientName: String { "EntityResolutionClient" } + public var endpointResolver: EndpointResolver + + public init(endpointResolver: EndpointResolver? = nil) throws { + self.endpointResolver = try endpointResolver ?? DefaultEndpointResolver() + } + } +} + +public struct EntityResolutionClientLogHandlerFactory: ClientRuntime.SDKLogHandlerFactory { + public var label = "EntityResolutionClient" + let logLevel: ClientRuntime.SDKLogLevel + public func construct(label: String) -> LogHandler { + var handler = StreamLogHandler.standardOutput(label: label) + handler.logLevel = logLevel.toLoggerType() + return handler + } + public init(logLevel: ClientRuntime.SDKLogLevel) { + self.logLevel = logLevel + } +} + +extension EntityResolutionClient: EntityResolutionClientProtocol { + /// Creates a MatchingWorkflow object which stores the configuration of the data processing job to be run. It is important to note that there should not be a pre-existing MatchingWorkflow with the same name. To modify an existing workflow, utilize the UpdateMatchingWorkflow API. + public func createMatchingWorkflow(input: CreateMatchingWorkflowInput) async throws -> CreateMatchingWorkflowOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createMatchingWorkflow") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createMatchingWorkflow") + 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.serviceSpecific.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: "CreateMatchingWorkflowInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Creates a schema mapping, which defines the schema of the input customer records table. The SchemaMapping also provides Entity Resolution with some metadata about the table, such as the attribute types of the columns and which columns to match on. + public func createSchemaMapping(input: CreateSchemaMappingInput) async throws -> CreateSchemaMappingOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createSchemaMapping") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createSchemaMapping") + 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.serviceSpecific.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: "CreateSchemaMappingInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Deletes the MatchingWorkflow with a given name. This operation will succeed even if a workflow with the given name does not exist. + public func deleteMatchingWorkflow(input: DeleteMatchingWorkflowInput) async throws -> DeleteMatchingWorkflowOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteMatchingWorkflow") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteMatchingWorkflow") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Deletes the SchemaMapping with a given name. This operation will succeed even if a schema with the given name does not exist. This operation will fail if there is a DataIntegrationWorkflow object that references the SchemaMapping in the workflow's InputSourceConfig. + public func deleteSchemaMapping(input: DeleteSchemaMappingInput) async throws -> DeleteSchemaMappingOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteSchemaMapping") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteSchemaMapping") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Returns the corresponding Match ID of a customer record if the record has been processed. + public func getMatchId(input: GetMatchIdInput) async throws -> GetMatchIdOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getMatchId") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getMatchId") + 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.serviceSpecific.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: "GetMatchIdInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Gets the status, metrics, and errors (if there are any) that are associated with a job. + public func getMatchingJob(input: GetMatchingJobInput) async throws -> GetMatchingJobOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getMatchingJob") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getMatchingJob") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Returns the MatchingWorkflow with a given name, if it exists. + public func getMatchingWorkflow(input: GetMatchingWorkflowInput) async throws -> GetMatchingWorkflowOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getMatchingWorkflow") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getMatchingWorkflow") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Returns the SchemaMapping of a given name. + public func getSchemaMapping(input: GetSchemaMappingInput) async throws -> GetSchemaMappingOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getSchemaMapping") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getSchemaMapping") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Lists all jobs for a given workflow. + public func listMatchingJobs(input: ListMatchingJobsInput) async throws -> ListMatchingJobsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listMatchingJobs") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listMatchingJobs") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Returns a list of all the MatchingWorkflows that have been created for an AWS account. + public func listMatchingWorkflows(input: ListMatchingWorkflowsInput) async throws -> ListMatchingWorkflowsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listMatchingWorkflows") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listMatchingWorkflows") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Returns a list of all the SchemaMappings that have been created for an AWS account. + public func listSchemaMappings(input: ListSchemaMappingsInput) async throws -> ListSchemaMappingsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listSchemaMappings") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listSchemaMappings") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Displays the tags associated with an AWS Entity Resolution resource. In Entity Resolution, SchemaMapping, and MatchingWorkflow can be tagged. + public func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTagsForResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTagsForResource") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Starts the MatchingJob of a workflow. The workflow must have previously been created using the CreateMatchingWorkflow endpoint. + public func startMatchingJob(input: StartMatchingJobInput) async throws -> StartMatchingJobOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "startMatchingJob") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "startMatchingJob") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Assigns one or more tags (key-value pairs) to the specified AWS Entity Resolution resource. Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values. In Entity Resolution, SchemaMapping, and MatchingWorkflow can be tagged. Tags don't have any semantic meaning to AWS and are interpreted strictly as strings of characters. You can use the TagResource action with a resource that already has tags. If you specify a new tag key, this tag is appended to the list of tags associated with the resource. If you specify a tag key that is already associated with the resource, the new tag value that you specify replaces the previous value for that tag. + public func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "tagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "tagResource") + 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.serviceSpecific.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: "TagResourceInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Removes one or more tags from the specified AWS Entity Resolution resource. In Entity Resolution, SchemaMapping, and MatchingWorkflow can be tagged. + public func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "untagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "untagResource") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Updates an existing MatchingWorkflow. This method is identical to CreateMatchingWorkflow, except it uses an HTTP PUT request instead of a POST request, and the MatchingWorkflow must already exist for the method to succeed. + public func updateMatchingWorkflow(input: UpdateMatchingWorkflowInput) async throws -> UpdateMatchingWorkflowOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .put) + .withServiceName(value: serviceName) + .withOperation(value: "updateMatchingWorkflow") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "entityresolution") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateMatchingWorkflow") + 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.serviceSpecific.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: "UpdateMatchingWorkflowInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + +} diff --git a/Sources/Services/AWSEntityResolution/EntityResolutionClientProtocol.swift b/Sources/Services/AWSEntityResolution/EntityResolutionClientProtocol.swift new file mode 100644 index 00000000000..ea66852c980 --- /dev/null +++ b/Sources/Services/AWSEntityResolution/EntityResolutionClientProtocol.swift @@ -0,0 +1,41 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import ClientRuntime + +/// Welcome to the AWS Entity Resolution API Reference. AWS Entity Resolution is an AWS service that provides pre-configured entity resolution capabilities that enable developers and analysts at advertising and marketing companies to build an accurate and complete view of their consumers. With AWS Entity Resolution, you have the ability to match source records containing consumer identifiers, such as name, email address, and phone number. This holds true even when these records have incomplete or conflicting identifiers. For example, AWS Entity Resolution can effectively match a source record from a customer relationship management (CRM) system, which includes account information like first name, last name, postal address, phone number, and email address, with a source record from a marketing system containing campaign information, such as username and email address. To learn more about AWS Entity Resolution concepts, procedures, and best practices, see the [AWS Entity Resolution User Guide](https://docs.aws.amazon.com/entityresolution/latest/userguide/what-is-service.html). +public protocol EntityResolutionClientProtocol { + /// Creates a MatchingWorkflow object which stores the configuration of the data processing job to be run. It is important to note that there should not be a pre-existing MatchingWorkflow with the same name. To modify an existing workflow, utilize the UpdateMatchingWorkflow API. + func createMatchingWorkflow(input: CreateMatchingWorkflowInput) async throws -> CreateMatchingWorkflowOutputResponse + /// Creates a schema mapping, which defines the schema of the input customer records table. The SchemaMapping also provides Entity Resolution with some metadata about the table, such as the attribute types of the columns and which columns to match on. + func createSchemaMapping(input: CreateSchemaMappingInput) async throws -> CreateSchemaMappingOutputResponse + /// Deletes the MatchingWorkflow with a given name. This operation will succeed even if a workflow with the given name does not exist. + func deleteMatchingWorkflow(input: DeleteMatchingWorkflowInput) async throws -> DeleteMatchingWorkflowOutputResponse + /// Deletes the SchemaMapping with a given name. This operation will succeed even if a schema with the given name does not exist. This operation will fail if there is a DataIntegrationWorkflow object that references the SchemaMapping in the workflow's InputSourceConfig. + func deleteSchemaMapping(input: DeleteSchemaMappingInput) async throws -> DeleteSchemaMappingOutputResponse + /// Returns the corresponding Match ID of a customer record if the record has been processed. + func getMatchId(input: GetMatchIdInput) async throws -> GetMatchIdOutputResponse + /// Gets the status, metrics, and errors (if there are any) that are associated with a job. + func getMatchingJob(input: GetMatchingJobInput) async throws -> GetMatchingJobOutputResponse + /// Returns the MatchingWorkflow with a given name, if it exists. + func getMatchingWorkflow(input: GetMatchingWorkflowInput) async throws -> GetMatchingWorkflowOutputResponse + /// Returns the SchemaMapping of a given name. + func getSchemaMapping(input: GetSchemaMappingInput) async throws -> GetSchemaMappingOutputResponse + /// Lists all jobs for a given workflow. + func listMatchingJobs(input: ListMatchingJobsInput) async throws -> ListMatchingJobsOutputResponse + /// Returns a list of all the MatchingWorkflows that have been created for an AWS account. + func listMatchingWorkflows(input: ListMatchingWorkflowsInput) async throws -> ListMatchingWorkflowsOutputResponse + /// Returns a list of all the SchemaMappings that have been created for an AWS account. + func listSchemaMappings(input: ListSchemaMappingsInput) async throws -> ListSchemaMappingsOutputResponse + /// Displays the tags associated with an AWS Entity Resolution resource. In Entity Resolution, SchemaMapping, and MatchingWorkflow can be tagged. + func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse + /// Starts the MatchingJob of a workflow. The workflow must have previously been created using the CreateMatchingWorkflow endpoint. + func startMatchingJob(input: StartMatchingJobInput) async throws -> StartMatchingJobOutputResponse + /// Assigns one or more tags (key-value pairs) to the specified AWS Entity Resolution resource. Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values. In Entity Resolution, SchemaMapping, and MatchingWorkflow can be tagged. Tags don't have any semantic meaning to AWS and are interpreted strictly as strings of characters. You can use the TagResource action with a resource that already has tags. If you specify a new tag key, this tag is appended to the list of tags associated with the resource. If you specify a tag key that is already associated with the resource, the new tag value that you specify replaces the previous value for that tag. + func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse + /// Removes one or more tags from the specified AWS Entity Resolution resource. In Entity Resolution, SchemaMapping, and MatchingWorkflow can be tagged. + func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse + /// Updates an existing MatchingWorkflow. This method is identical to CreateMatchingWorkflow, except it uses an HTTP PUT request instead of a POST request, and the MatchingWorkflow must already exist for the method to succeed. + func updateMatchingWorkflow(input: UpdateMatchingWorkflowInput) async throws -> UpdateMatchingWorkflowOutputResponse +} + +public enum EntityResolutionClientTypes {} diff --git a/Sources/Services/AWSEntityResolution/Paginators.swift b/Sources/Services/AWSEntityResolution/Paginators.swift new file mode 100644 index 00000000000..a970be3875c --- /dev/null +++ b/Sources/Services/AWSEntityResolution/Paginators.swift @@ -0,0 +1,95 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import ClientRuntime + +extension EntityResolutionClient { + /// Paginate over `[ListMatchingJobsOutputResponse]` 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 `[ListMatchingJobsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListMatchingJobsOutputResponse` + public func listMatchingJobsPaginated(input: ListMatchingJobsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListMatchingJobsInput.nextToken, outputKey: \ListMatchingJobsOutputResponse.nextToken, paginationFunction: self.listMatchingJobs(input:)) + } +} + +extension ListMatchingJobsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListMatchingJobsInput { + return ListMatchingJobsInput( + maxResults: self.maxResults, + nextToken: token, + workflowName: self.workflowName + )} +} + +extension PaginatorSequence where Input == ListMatchingJobsInput, Output == ListMatchingJobsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listMatchingJobsPaginated` + /// to access the nested member `[EntityResolutionClientTypes.JobSummary]` + /// - Returns: `[EntityResolutionClientTypes.JobSummary]` + public func jobs() async throws -> [EntityResolutionClientTypes.JobSummary] { + return try await self.asyncCompactMap { item in item.jobs } + } +} +extension EntityResolutionClient { + /// Paginate over `[ListMatchingWorkflowsOutputResponse]` 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 `[ListMatchingWorkflowsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListMatchingWorkflowsOutputResponse` + public func listMatchingWorkflowsPaginated(input: ListMatchingWorkflowsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListMatchingWorkflowsInput.nextToken, outputKey: \ListMatchingWorkflowsOutputResponse.nextToken, paginationFunction: self.listMatchingWorkflows(input:)) + } +} + +extension ListMatchingWorkflowsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListMatchingWorkflowsInput { + return ListMatchingWorkflowsInput( + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListMatchingWorkflowsInput, Output == ListMatchingWorkflowsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listMatchingWorkflowsPaginated` + /// to access the nested member `[EntityResolutionClientTypes.MatchingWorkflowSummary]` + /// - Returns: `[EntityResolutionClientTypes.MatchingWorkflowSummary]` + public func workflowSummaries() async throws -> [EntityResolutionClientTypes.MatchingWorkflowSummary] { + return try await self.asyncCompactMap { item in item.workflowSummaries } + } +} +extension EntityResolutionClient { + /// Paginate over `[ListSchemaMappingsOutputResponse]` 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 `[ListSchemaMappingsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListSchemaMappingsOutputResponse` + public func listSchemaMappingsPaginated(input: ListSchemaMappingsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListSchemaMappingsInput.nextToken, outputKey: \ListSchemaMappingsOutputResponse.nextToken, paginationFunction: self.listSchemaMappings(input:)) + } +} + +extension ListSchemaMappingsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListSchemaMappingsInput { + return ListSchemaMappingsInput( + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListSchemaMappingsInput, Output == ListSchemaMappingsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listSchemaMappingsPaginated` + /// to access the nested member `[EntityResolutionClientTypes.SchemaMappingSummary]` + /// - Returns: `[EntityResolutionClientTypes.SchemaMappingSummary]` + public func schemaList() async throws -> [EntityResolutionClientTypes.SchemaMappingSummary] { + return try await self.asyncCompactMap { item in item.schemaList } + } +} diff --git a/Sources/Services/AWSEntityResolution/models/Models.swift b/Sources/Services/AWSEntityResolution/models/Models.swift new file mode 100644 index 00000000000..2c932f70918 --- /dev/null +++ b/Sources/Services/AWSEntityResolution/models/Models.swift @@ -0,0 +1,3724 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! +import AWSClientRuntime +import ClientRuntime + +extension AccessDeniedException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: AccessDeniedExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// You do not have sufficient access to perform this action. HTTP Status Code: 403 +public struct AccessDeniedException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "AccessDeniedException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct AccessDeniedExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension AccessDeniedExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 EntityResolutionClientTypes { + public enum AttributeMatchingModel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case manyToMany + case oneToOne + case sdkUnknown(Swift.String) + + public static var allCases: [AttributeMatchingModel] { + return [ + .manyToMany, + .oneToOne, + .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 .manyToMany: return "MANY_TO_MANY" + case .oneToOne: return "ONE_TO_ONE" + 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 = AttributeMatchingModel(rawValue: rawValue) ?? AttributeMatchingModel.sdkUnknown(rawValue) + } + } +} + +extension ConflictException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ConflictExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The request could not be processed because of conflict in the current state of the resource. Example: Workflow already exists, Schema already exists, Workflow is currently running, etc. HTTP Status Code: 400 +public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ConflictException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ConflictExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ConflictExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 CreateMatchingWorkflowInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case incrementalRunConfig + case inputSourceConfig + case outputSourceConfig + case resolutionTechniques + case roleArn + case tags + case workflowName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let incrementalRunConfig = self.incrementalRunConfig { + try encodeContainer.encode(incrementalRunConfig, forKey: .incrementalRunConfig) + } + if let inputSourceConfig = inputSourceConfig { + var inputSourceConfigContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputSourceConfig) + for inputsource0 in inputSourceConfig { + try inputSourceConfigContainer.encode(inputsource0) + } + } + if let outputSourceConfig = outputSourceConfig { + var outputSourceConfigContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputSourceConfig) + for outputsource0 in outputSourceConfig { + try outputSourceConfigContainer.encode(outputsource0) + } + } + if let resolutionTechniques = self.resolutionTechniques { + try encodeContainer.encode(resolutionTechniques, forKey: .resolutionTechniques) + } + if let roleArn = self.roleArn { + try encodeContainer.encode(roleArn, forKey: .roleArn) + } + if let tags = tags { + var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) + for (dictKey0, tagMap0) in tags { + try tagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + if let workflowName = self.workflowName { + try encodeContainer.encode(workflowName, forKey: .workflowName) + } + } +} + +extension CreateMatchingWorkflowInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/matchingworkflows" + } +} + +public struct CreateMatchingWorkflowInput: Swift.Equatable { + /// A description of the workflow. + public var description: Swift.String? + /// An object which defines an incremental run type and has only incrementalRunType as a field. + public var incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? + /// A list of InputSource objects, which have the fields InputSourceARN and SchemaName. + /// This member is required. + public var inputSourceConfig: [EntityResolutionClientTypes.InputSource]? + /// A list of OutputSource objects, each of which contains fields OutputS3Path, ApplyNormalization, and Output. + /// This member is required. + public var outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? + /// An object which defines the resolutionType and the ruleBasedProperties + /// This member is required. + public var resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? + /// The Amazon Resource Name (ARN) of the IAM role. AWS Entity Resolution assumes this role to create resources on your behalf as part of workflow execution. + /// This member is required. + public var roleArn: Swift.String? + /// The tags used to organize, track, or control access for this resource. + public var tags: [Swift.String:Swift.String]? + /// The name of the workflow. There cannot be multiple DataIntegrationWorkflows with the same name. + /// This member is required. + public var workflowName: Swift.String? + + public init( + description: Swift.String? = nil, + incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? = nil, + inputSourceConfig: [EntityResolutionClientTypes.InputSource]? = nil, + outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? = nil, + resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? = nil, + roleArn: Swift.String? = nil, + tags: [Swift.String:Swift.String]? = nil, + workflowName: Swift.String? = nil + ) + { + self.description = description + self.incrementalRunConfig = incrementalRunConfig + self.inputSourceConfig = inputSourceConfig + self.outputSourceConfig = outputSourceConfig + self.resolutionTechniques = resolutionTechniques + self.roleArn = roleArn + self.tags = tags + self.workflowName = workflowName + } +} + +struct CreateMatchingWorkflowInputBody: Swift.Equatable { + let workflowName: Swift.String? + let description: Swift.String? + let inputSourceConfig: [EntityResolutionClientTypes.InputSource]? + let outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? + let resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? + let incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? + let roleArn: Swift.String? + let tags: [Swift.String:Swift.String]? +} + +extension CreateMatchingWorkflowInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case incrementalRunConfig + case inputSourceConfig + case outputSourceConfig + case resolutionTechniques + case roleArn + case tags + case workflowName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workflowNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workflowName) + workflowName = workflowNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let inputSourceConfigContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.InputSource?].self, forKey: .inputSourceConfig) + var inputSourceConfigDecoded0:[EntityResolutionClientTypes.InputSource]? = nil + if let inputSourceConfigContainer = inputSourceConfigContainer { + inputSourceConfigDecoded0 = [EntityResolutionClientTypes.InputSource]() + for structure0 in inputSourceConfigContainer { + if let structure0 = structure0 { + inputSourceConfigDecoded0?.append(structure0) + } + } + } + inputSourceConfig = inputSourceConfigDecoded0 + let outputSourceConfigContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.OutputSource?].self, forKey: .outputSourceConfig) + var outputSourceConfigDecoded0:[EntityResolutionClientTypes.OutputSource]? = nil + if let outputSourceConfigContainer = outputSourceConfigContainer { + outputSourceConfigDecoded0 = [EntityResolutionClientTypes.OutputSource]() + for structure0 in outputSourceConfigContainer { + if let structure0 = structure0 { + outputSourceConfigDecoded0?.append(structure0) + } + } + } + outputSourceConfig = outputSourceConfigDecoded0 + let resolutionTechniquesDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.ResolutionTechniques.self, forKey: .resolutionTechniques) + resolutionTechniques = resolutionTechniquesDecoded + let incrementalRunConfigDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.IncrementalRunConfig.self, forKey: .incrementalRunConfig) + incrementalRunConfig = incrementalRunConfigDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + 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 + } +} + +public enum CreateMatchingWorkflowOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ExceedsLimitException": return try await ExceedsLimitException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension CreateMatchingWorkflowOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: CreateMatchingWorkflowOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.description = output.description + self.incrementalRunConfig = output.incrementalRunConfig + self.inputSourceConfig = output.inputSourceConfig + self.outputSourceConfig = output.outputSourceConfig + self.resolutionTechniques = output.resolutionTechniques + self.roleArn = output.roleArn + self.workflowArn = output.workflowArn + self.workflowName = output.workflowName + } else { + self.description = nil + self.incrementalRunConfig = nil + self.inputSourceConfig = nil + self.outputSourceConfig = nil + self.resolutionTechniques = nil + self.roleArn = nil + self.workflowArn = nil + self.workflowName = nil + } + } +} + +public struct CreateMatchingWorkflowOutputResponse: Swift.Equatable { + /// A description of the workflow. + public var description: Swift.String? + /// An object which defines an incremental run type and has only incrementalRunType as a field. + public var incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? + /// A list of InputSource objects, which have the fields InputSourceARN and SchemaName. + /// This member is required. + public var inputSourceConfig: [EntityResolutionClientTypes.InputSource]? + /// A list of OutputSource objects, each of which contains fields OutputS3Path, ApplyNormalization, and Output. + /// This member is required. + public var outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? + /// An object which defines the resolutionType and the ruleBasedProperties + /// This member is required. + public var resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? + /// The Amazon Resource Name (ARN) of the IAM role. AWS Entity Resolution assumes this role to create resources on your behalf as part of workflow execution. + /// This member is required. + public var roleArn: Swift.String? + /// The ARN (Amazon Resource Name) that Entity Resolution generated for the MatchingWorkflow. + /// This member is required. + public var workflowArn: Swift.String? + /// The name of the workflow. + /// This member is required. + public var workflowName: Swift.String? + + public init( + description: Swift.String? = nil, + incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? = nil, + inputSourceConfig: [EntityResolutionClientTypes.InputSource]? = nil, + outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? = nil, + resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? = nil, + roleArn: Swift.String? = nil, + workflowArn: Swift.String? = nil, + workflowName: Swift.String? = nil + ) + { + self.description = description + self.incrementalRunConfig = incrementalRunConfig + self.inputSourceConfig = inputSourceConfig + self.outputSourceConfig = outputSourceConfig + self.resolutionTechniques = resolutionTechniques + self.roleArn = roleArn + self.workflowArn = workflowArn + self.workflowName = workflowName + } +} + +struct CreateMatchingWorkflowOutputResponseBody: Swift.Equatable { + let workflowName: Swift.String? + let workflowArn: Swift.String? + let description: Swift.String? + let inputSourceConfig: [EntityResolutionClientTypes.InputSource]? + let outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? + let resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? + let incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? + let roleArn: Swift.String? +} + +extension CreateMatchingWorkflowOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case incrementalRunConfig + case inputSourceConfig + case outputSourceConfig + case resolutionTechniques + case roleArn + case workflowArn + case workflowName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workflowNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workflowName) + workflowName = workflowNameDecoded + let workflowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workflowArn) + workflowArn = workflowArnDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let inputSourceConfigContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.InputSource?].self, forKey: .inputSourceConfig) + var inputSourceConfigDecoded0:[EntityResolutionClientTypes.InputSource]? = nil + if let inputSourceConfigContainer = inputSourceConfigContainer { + inputSourceConfigDecoded0 = [EntityResolutionClientTypes.InputSource]() + for structure0 in inputSourceConfigContainer { + if let structure0 = structure0 { + inputSourceConfigDecoded0?.append(structure0) + } + } + } + inputSourceConfig = inputSourceConfigDecoded0 + let outputSourceConfigContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.OutputSource?].self, forKey: .outputSourceConfig) + var outputSourceConfigDecoded0:[EntityResolutionClientTypes.OutputSource]? = nil + if let outputSourceConfigContainer = outputSourceConfigContainer { + outputSourceConfigDecoded0 = [EntityResolutionClientTypes.OutputSource]() + for structure0 in outputSourceConfigContainer { + if let structure0 = structure0 { + outputSourceConfigDecoded0?.append(structure0) + } + } + } + outputSourceConfig = outputSourceConfigDecoded0 + let resolutionTechniquesDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.ResolutionTechniques.self, forKey: .resolutionTechniques) + resolutionTechniques = resolutionTechniquesDecoded + let incrementalRunConfigDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.IncrementalRunConfig.self, forKey: .incrementalRunConfig) + incrementalRunConfig = incrementalRunConfigDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + } +} + +extension CreateSchemaMappingInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case mappedInputFields + case schemaName + case tags + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let mappedInputFields = mappedInputFields { + var mappedInputFieldsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .mappedInputFields) + for schemainputattribute0 in mappedInputFields { + try mappedInputFieldsContainer.encode(schemainputattribute0) + } + } + if let schemaName = self.schemaName { + try encodeContainer.encode(schemaName, forKey: .schemaName) + } + if let tags = tags { + var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) + for (dictKey0, tagMap0) in tags { + try tagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + } +} + +extension CreateSchemaMappingInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/schemas" + } +} + +public struct CreateSchemaMappingInput: Swift.Equatable { + /// A description of the schema. + public var description: Swift.String? + /// A list of MappedInputFields. Each MappedInputField corresponds to a column the source data table, and contains column name plus additional information that Entity Resolution uses for matching. + public var mappedInputFields: [EntityResolutionClientTypes.SchemaInputAttribute]? + /// The name of the schema. There cannot be multiple SchemaMappings with the same name. + /// This member is required. + public var schemaName: Swift.String? + /// The tags used to organize, track, or control access for this resource. + public var tags: [Swift.String:Swift.String]? + + public init( + description: Swift.String? = nil, + mappedInputFields: [EntityResolutionClientTypes.SchemaInputAttribute]? = nil, + schemaName: Swift.String? = nil, + tags: [Swift.String:Swift.String]? = nil + ) + { + self.description = description + self.mappedInputFields = mappedInputFields + self.schemaName = schemaName + self.tags = tags + } +} + +struct CreateSchemaMappingInputBody: Swift.Equatable { + let schemaName: Swift.String? + let description: Swift.String? + let mappedInputFields: [EntityResolutionClientTypes.SchemaInputAttribute]? + let tags: [Swift.String:Swift.String]? +} + +extension CreateSchemaMappingInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case mappedInputFields + case schemaName + case tags + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let schemaNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schemaName) + schemaName = schemaNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let mappedInputFieldsContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.SchemaInputAttribute?].self, forKey: .mappedInputFields) + var mappedInputFieldsDecoded0:[EntityResolutionClientTypes.SchemaInputAttribute]? = nil + if let mappedInputFieldsContainer = mappedInputFieldsContainer { + mappedInputFieldsDecoded0 = [EntityResolutionClientTypes.SchemaInputAttribute]() + for structure0 in mappedInputFieldsContainer { + if let structure0 = structure0 { + mappedInputFieldsDecoded0?.append(structure0) + } + } + } + mappedInputFields = mappedInputFieldsDecoded0 + 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 + } +} + +public enum CreateSchemaMappingOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ExceedsLimitException": return try await ExceedsLimitException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension CreateSchemaMappingOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: CreateSchemaMappingOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.description = output.description + self.mappedInputFields = output.mappedInputFields + self.schemaArn = output.schemaArn + self.schemaName = output.schemaName + } else { + self.description = nil + self.mappedInputFields = nil + self.schemaArn = nil + self.schemaName = nil + } + } +} + +public struct CreateSchemaMappingOutputResponse: Swift.Equatable { + /// A description of the schema. + /// This member is required. + public var description: Swift.String? + /// A list of MappedInputFields. Each MappedInputField corresponds to a column the source data table, and contains column name plus additional information that Entity Resolution uses for matching. + /// This member is required. + public var mappedInputFields: [EntityResolutionClientTypes.SchemaInputAttribute]? + /// The ARN (Amazon Resource Name) that Entity Resolution generated for the SchemaMapping. + /// This member is required. + public var schemaArn: Swift.String? + /// The name of the schema. + /// This member is required. + public var schemaName: Swift.String? + + public init( + description: Swift.String? = nil, + mappedInputFields: [EntityResolutionClientTypes.SchemaInputAttribute]? = nil, + schemaArn: Swift.String? = nil, + schemaName: Swift.String? = nil + ) + { + self.description = description + self.mappedInputFields = mappedInputFields + self.schemaArn = schemaArn + self.schemaName = schemaName + } +} + +struct CreateSchemaMappingOutputResponseBody: Swift.Equatable { + let schemaName: Swift.String? + let schemaArn: Swift.String? + let description: Swift.String? + let mappedInputFields: [EntityResolutionClientTypes.SchemaInputAttribute]? +} + +extension CreateSchemaMappingOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case mappedInputFields + case schemaArn + case schemaName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let schemaNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schemaName) + schemaName = schemaNameDecoded + let schemaArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schemaArn) + schemaArn = schemaArnDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let mappedInputFieldsContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.SchemaInputAttribute?].self, forKey: .mappedInputFields) + var mappedInputFieldsDecoded0:[EntityResolutionClientTypes.SchemaInputAttribute]? = nil + if let mappedInputFieldsContainer = mappedInputFieldsContainer { + mappedInputFieldsDecoded0 = [EntityResolutionClientTypes.SchemaInputAttribute]() + for structure0 in mappedInputFieldsContainer { + if let structure0 = structure0 { + mappedInputFieldsDecoded0?.append(structure0) + } + } + } + mappedInputFields = mappedInputFieldsDecoded0 + } +} + +extension DeleteMatchingWorkflowInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let workflowName = workflowName else { + return nil + } + return "/matchingworkflows/\(workflowName.urlPercentEncoding())" + } +} + +public struct DeleteMatchingWorkflowInput: Swift.Equatable { + /// The name of the workflow to be retrieved. + /// This member is required. + public var workflowName: Swift.String? + + public init( + workflowName: Swift.String? = nil + ) + { + self.workflowName = workflowName + } +} + +struct DeleteMatchingWorkflowInputBody: Swift.Equatable { +} + +extension DeleteMatchingWorkflowInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteMatchingWorkflowOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteMatchingWorkflowOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DeleteMatchingWorkflowOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.message = output.message + } else { + self.message = nil + } + } +} + +public struct DeleteMatchingWorkflowOutputResponse: Swift.Equatable { + /// A successful operation message. + /// This member is required. + public var message: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.message = message + } +} + +struct DeleteMatchingWorkflowOutputResponseBody: Swift.Equatable { + let message: Swift.String? +} + +extension DeleteMatchingWorkflowOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 DeleteSchemaMappingInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let schemaName = schemaName else { + return nil + } + return "/schemas/\(schemaName.urlPercentEncoding())" + } +} + +public struct DeleteSchemaMappingInput: Swift.Equatable { + /// The name of the schema to delete. + /// This member is required. + public var schemaName: Swift.String? + + public init( + schemaName: Swift.String? = nil + ) + { + self.schemaName = schemaName + } +} + +struct DeleteSchemaMappingInputBody: Swift.Equatable { +} + +extension DeleteSchemaMappingInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteSchemaMappingOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteSchemaMappingOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DeleteSchemaMappingOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.message = output.message + } else { + self.message = nil + } + } +} + +public struct DeleteSchemaMappingOutputResponse: Swift.Equatable { + /// A successful operation message. + /// This member is required. + public var message: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.message = message + } +} + +struct DeleteSchemaMappingOutputResponseBody: Swift.Equatable { + let message: Swift.String? +} + +extension DeleteSchemaMappingOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 EntityResolutionClientTypes.ErrorDetails: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case errorMessage + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let errorMessage = self.errorMessage { + try encodeContainer.encode(errorMessage, forKey: .errorMessage) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let errorMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorMessage) + errorMessage = errorMessageDecoded + } +} + +extension EntityResolutionClientTypes { + /// An object containing an error message, if there was an error. + public struct ErrorDetails: Swift.Equatable { + /// The error message from the job, if there is one. + public var errorMessage: Swift.String? + + public init( + errorMessage: Swift.String? = nil + ) + { + self.errorMessage = errorMessage + } + } + +} + +extension ExceedsLimitException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ExceedsLimitExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The request was rejected because it attempted to create resources beyond the current AWS Entity Resolution account limits. The error message describes the limit exceeded. HTTP Status Code: 402 +public struct ExceedsLimitException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ExceedsLimitException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ExceedsLimitExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ExceedsLimitExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 GetMatchIdInput: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "GetMatchIdInput(workflowName: \(Swift.String(describing: workflowName)), record: \"CONTENT_REDACTED\")"} +} + +extension GetMatchIdInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case record + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let record = record { + var recordContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .record) + for (dictKey0, recordAttributeMap0) in record { + try recordContainer.encode(recordAttributeMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + } +} + +extension GetMatchIdInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let workflowName = workflowName else { + return nil + } + return "/matchingworkflows/\(workflowName.urlPercentEncoding())/matches" + } +} + +public struct GetMatchIdInput: Swift.Equatable { + /// The record to fetch the Match ID for. + /// This member is required. + public var record: [Swift.String:Swift.String]? + /// The name of the workflow. + /// This member is required. + public var workflowName: Swift.String? + + public init( + record: [Swift.String:Swift.String]? = nil, + workflowName: Swift.String? = nil + ) + { + self.record = record + self.workflowName = workflowName + } +} + +struct GetMatchIdInputBody: Swift.Equatable { + let record: [Swift.String:Swift.String]? +} + +extension GetMatchIdInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case record + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let recordContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .record) + var recordDecoded0: [Swift.String:Swift.String]? = nil + if let recordContainer = recordContainer { + recordDecoded0 = [Swift.String:Swift.String]() + for (key0, string0) in recordContainer { + if let string0 = string0 { + recordDecoded0?[key0] = string0 + } + } + } + record = recordDecoded0 + } +} + +public enum GetMatchIdOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetMatchIdOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetMatchIdOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.matchId = output.matchId + } else { + self.matchId = nil + } + } +} + +public struct GetMatchIdOutputResponse: Swift.Equatable { + /// The unique identifiers for this group of match records. + public var matchId: Swift.String? + + public init( + matchId: Swift.String? = nil + ) + { + self.matchId = matchId + } +} + +struct GetMatchIdOutputResponseBody: Swift.Equatable { + let matchId: Swift.String? +} + +extension GetMatchIdOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case matchId + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let matchIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .matchId) + matchId = matchIdDecoded + } +} + +extension GetMatchingJobInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let workflowName = workflowName else { + return nil + } + guard let jobId = jobId else { + return nil + } + return "/matchingworkflows/\(workflowName.urlPercentEncoding())/jobs/\(jobId.urlPercentEncoding())" + } +} + +public struct GetMatchingJobInput: Swift.Equatable { + /// The ID of the job. + /// This member is required. + public var jobId: Swift.String? + /// The name of the workflow. + /// This member is required. + public var workflowName: Swift.String? + + public init( + jobId: Swift.String? = nil, + workflowName: Swift.String? = nil + ) + { + self.jobId = jobId + self.workflowName = workflowName + } +} + +struct GetMatchingJobInputBody: Swift.Equatable { +} + +extension GetMatchingJobInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum GetMatchingJobOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetMatchingJobOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetMatchingJobOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.endTime = output.endTime + self.errorDetails = output.errorDetails + self.jobId = output.jobId + self.metrics = output.metrics + self.startTime = output.startTime + self.status = output.status + } else { + self.endTime = nil + self.errorDetails = nil + self.jobId = nil + self.metrics = nil + self.startTime = nil + self.status = nil + } + } +} + +public struct GetMatchingJobOutputResponse: Swift.Equatable { + /// The time at which the job has finished. + public var endTime: ClientRuntime.Date? + /// An object containing an error message, if there was an error. + public var errorDetails: EntityResolutionClientTypes.ErrorDetails? + /// The ID of the job. + /// This member is required. + public var jobId: Swift.String? + /// Metrics associated with the execution, specifically total records processed, unique IDs generated, and records the execution skipped. + public var metrics: EntityResolutionClientTypes.JobMetrics? + /// The time at which the job was started. + /// This member is required. + public var startTime: ClientRuntime.Date? + /// The current status of the job. Either running, succeeded, queued, or failed. + /// This member is required. + public var status: EntityResolutionClientTypes.JobStatus? + + public init( + endTime: ClientRuntime.Date? = nil, + errorDetails: EntityResolutionClientTypes.ErrorDetails? = nil, + jobId: Swift.String? = nil, + metrics: EntityResolutionClientTypes.JobMetrics? = nil, + startTime: ClientRuntime.Date? = nil, + status: EntityResolutionClientTypes.JobStatus? = nil + ) + { + self.endTime = endTime + self.errorDetails = errorDetails + self.jobId = jobId + self.metrics = metrics + self.startTime = startTime + self.status = status + } +} + +struct GetMatchingJobOutputResponseBody: Swift.Equatable { + let jobId: Swift.String? + let status: EntityResolutionClientTypes.JobStatus? + let startTime: ClientRuntime.Date? + let endTime: ClientRuntime.Date? + let metrics: EntityResolutionClientTypes.JobMetrics? + let errorDetails: EntityResolutionClientTypes.ErrorDetails? +} + +extension GetMatchingJobOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case endTime + case errorDetails + case jobId + case metrics + case startTime + case status + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let jobIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .jobId) + jobId = jobIdDecoded + let statusDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.JobStatus.self, forKey: .status) + status = statusDecoded + let startTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startTime) + startTime = startTimeDecoded + let endTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endTime) + endTime = endTimeDecoded + let metricsDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.JobMetrics.self, forKey: .metrics) + metrics = metricsDecoded + let errorDetailsDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.ErrorDetails.self, forKey: .errorDetails) + errorDetails = errorDetailsDecoded + } +} + +extension GetMatchingWorkflowInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let workflowName = workflowName else { + return nil + } + return "/matchingworkflows/\(workflowName.urlPercentEncoding())" + } +} + +public struct GetMatchingWorkflowInput: Swift.Equatable { + /// The name of the workflow. + /// This member is required. + public var workflowName: Swift.String? + + public init( + workflowName: Swift.String? = nil + ) + { + self.workflowName = workflowName + } +} + +struct GetMatchingWorkflowInputBody: Swift.Equatable { +} + +extension GetMatchingWorkflowInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum GetMatchingWorkflowOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetMatchingWorkflowOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetMatchingWorkflowOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.createdAt = output.createdAt + self.description = output.description + self.incrementalRunConfig = output.incrementalRunConfig + self.inputSourceConfig = output.inputSourceConfig + self.outputSourceConfig = output.outputSourceConfig + self.resolutionTechniques = output.resolutionTechniques + self.roleArn = output.roleArn + self.tags = output.tags + self.updatedAt = output.updatedAt + self.workflowArn = output.workflowArn + self.workflowName = output.workflowName + } else { + self.createdAt = nil + self.description = nil + self.incrementalRunConfig = nil + self.inputSourceConfig = nil + self.outputSourceConfig = nil + self.resolutionTechniques = nil + self.roleArn = nil + self.tags = nil + self.updatedAt = nil + self.workflowArn = nil + self.workflowName = nil + } + } +} + +public struct GetMatchingWorkflowOutputResponse: Swift.Equatable { + /// The timestamp of when the workflow was created. + /// This member is required. + public var createdAt: ClientRuntime.Date? + /// A description of the workflow. + public var description: Swift.String? + /// An object which defines an incremental run type and has only incrementalRunType as a field. + public var incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? + /// A list of InputSource objects, which have the fields InputSourceARN and SchemaName. + /// This member is required. + public var inputSourceConfig: [EntityResolutionClientTypes.InputSource]? + /// A list of OutputSource objects, each of which contains fields OutputS3Path, ApplyNormalization, and Output. + /// This member is required. + public var outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? + /// An object which defines the resolutionType and the ruleBasedProperties + /// This member is required. + public var resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? + /// The Amazon Resource Name (ARN) of the IAM role. AWS Entity Resolution assumes this role to access resources on your behalf. + /// This member is required. + public var roleArn: Swift.String? + /// The tags used to organize, track, or control access for this resource. + public var tags: [Swift.String:Swift.String]? + /// The timestamp of when the workflow was last updated. + /// This member is required. + public var updatedAt: ClientRuntime.Date? + /// The ARN (Amazon Resource Name) that Entity Resolution generated for the MatchingWorkflow. + /// This member is required. + public var workflowArn: Swift.String? + /// The name of the workflow. + /// This member is required. + public var workflowName: Swift.String? + + public init( + createdAt: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? = nil, + inputSourceConfig: [EntityResolutionClientTypes.InputSource]? = nil, + outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? = nil, + resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? = nil, + roleArn: Swift.String? = nil, + tags: [Swift.String:Swift.String]? = nil, + updatedAt: ClientRuntime.Date? = nil, + workflowArn: Swift.String? = nil, + workflowName: Swift.String? = nil + ) + { + self.createdAt = createdAt + self.description = description + self.incrementalRunConfig = incrementalRunConfig + self.inputSourceConfig = inputSourceConfig + self.outputSourceConfig = outputSourceConfig + self.resolutionTechniques = resolutionTechniques + self.roleArn = roleArn + self.tags = tags + self.updatedAt = updatedAt + self.workflowArn = workflowArn + self.workflowName = workflowName + } +} + +struct GetMatchingWorkflowOutputResponseBody: Swift.Equatable { + let workflowName: Swift.String? + let workflowArn: Swift.String? + let description: Swift.String? + let inputSourceConfig: [EntityResolutionClientTypes.InputSource]? + let outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? + let resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? + let createdAt: ClientRuntime.Date? + let updatedAt: ClientRuntime.Date? + let incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? + let roleArn: Swift.String? + let tags: [Swift.String:Swift.String]? +} + +extension GetMatchingWorkflowOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdAt + case description + case incrementalRunConfig + case inputSourceConfig + case outputSourceConfig + case resolutionTechniques + case roleArn + case tags + case updatedAt + case workflowArn + case workflowName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workflowNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workflowName) + workflowName = workflowNameDecoded + let workflowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workflowArn) + workflowArn = workflowArnDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let inputSourceConfigContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.InputSource?].self, forKey: .inputSourceConfig) + var inputSourceConfigDecoded0:[EntityResolutionClientTypes.InputSource]? = nil + if let inputSourceConfigContainer = inputSourceConfigContainer { + inputSourceConfigDecoded0 = [EntityResolutionClientTypes.InputSource]() + for structure0 in inputSourceConfigContainer { + if let structure0 = structure0 { + inputSourceConfigDecoded0?.append(structure0) + } + } + } + inputSourceConfig = inputSourceConfigDecoded0 + let outputSourceConfigContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.OutputSource?].self, forKey: .outputSourceConfig) + var outputSourceConfigDecoded0:[EntityResolutionClientTypes.OutputSource]? = nil + if let outputSourceConfigContainer = outputSourceConfigContainer { + outputSourceConfigDecoded0 = [EntityResolutionClientTypes.OutputSource]() + for structure0 in outputSourceConfigContainer { + if let structure0 = structure0 { + outputSourceConfigDecoded0?.append(structure0) + } + } + } + outputSourceConfig = outputSourceConfigDecoded0 + let resolutionTechniquesDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.ResolutionTechniques.self, forKey: .resolutionTechniques) + resolutionTechniques = resolutionTechniquesDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + let incrementalRunConfigDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.IncrementalRunConfig.self, forKey: .incrementalRunConfig) + incrementalRunConfig = incrementalRunConfigDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + 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 + } +} + +extension GetSchemaMappingInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let schemaName = schemaName else { + return nil + } + return "/schemas/\(schemaName.urlPercentEncoding())" + } +} + +public struct GetSchemaMappingInput: Swift.Equatable { + /// The name of the schema to be retrieved. + /// This member is required. + public var schemaName: Swift.String? + + public init( + schemaName: Swift.String? = nil + ) + { + self.schemaName = schemaName + } +} + +struct GetSchemaMappingInputBody: Swift.Equatable { +} + +extension GetSchemaMappingInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum GetSchemaMappingOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetSchemaMappingOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetSchemaMappingOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.createdAt = output.createdAt + self.description = output.description + self.mappedInputFields = output.mappedInputFields + self.schemaArn = output.schemaArn + self.schemaName = output.schemaName + self.tags = output.tags + self.updatedAt = output.updatedAt + } else { + self.createdAt = nil + self.description = nil + self.mappedInputFields = nil + self.schemaArn = nil + self.schemaName = nil + self.tags = nil + self.updatedAt = nil + } + } +} + +public struct GetSchemaMappingOutputResponse: Swift.Equatable { + /// The timestamp of when the SchemaMapping was created. + /// This member is required. + public var createdAt: ClientRuntime.Date? + /// A description of the schema. + public var description: Swift.String? + /// A list of MappedInputFields. Each MappedInputField corresponds to a column the source data table, and contains column name plus additional information Venice uses for matching. + /// This member is required. + public var mappedInputFields: [EntityResolutionClientTypes.SchemaInputAttribute]? + /// The ARN (Amazon Resource Name) that Entity Resolution generated for the SchemaMapping. + /// This member is required. + public var schemaArn: Swift.String? + /// The name of the schema. + /// This member is required. + public var schemaName: Swift.String? + /// The tags used to organize, track, or control access for this resource. + public var tags: [Swift.String:Swift.String]? + /// The timestamp of when the SchemaMapping was last updated. + /// This member is required. + public var updatedAt: ClientRuntime.Date? + + public init( + createdAt: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + mappedInputFields: [EntityResolutionClientTypes.SchemaInputAttribute]? = nil, + schemaArn: Swift.String? = nil, + schemaName: Swift.String? = nil, + tags: [Swift.String:Swift.String]? = nil, + updatedAt: ClientRuntime.Date? = nil + ) + { + self.createdAt = createdAt + self.description = description + self.mappedInputFields = mappedInputFields + self.schemaArn = schemaArn + self.schemaName = schemaName + self.tags = tags + self.updatedAt = updatedAt + } +} + +struct GetSchemaMappingOutputResponseBody: Swift.Equatable { + let schemaName: Swift.String? + let schemaArn: Swift.String? + let description: Swift.String? + let mappedInputFields: [EntityResolutionClientTypes.SchemaInputAttribute]? + let createdAt: ClientRuntime.Date? + let updatedAt: ClientRuntime.Date? + let tags: [Swift.String:Swift.String]? +} + +extension GetSchemaMappingOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdAt + case description + case mappedInputFields + case schemaArn + case schemaName + case tags + case updatedAt + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let schemaNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schemaName) + schemaName = schemaNameDecoded + let schemaArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schemaArn) + schemaArn = schemaArnDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let mappedInputFieldsContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.SchemaInputAttribute?].self, forKey: .mappedInputFields) + var mappedInputFieldsDecoded0:[EntityResolutionClientTypes.SchemaInputAttribute]? = nil + if let mappedInputFieldsContainer = mappedInputFieldsContainer { + mappedInputFieldsDecoded0 = [EntityResolutionClientTypes.SchemaInputAttribute]() + for structure0 in mappedInputFieldsContainer { + if let structure0 = structure0 { + mappedInputFieldsDecoded0?.append(structure0) + } + } + } + mappedInputFields = mappedInputFieldsDecoded0 + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + 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 + } +} + +extension EntityResolutionClientTypes.IncrementalRunConfig: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case incrementalRunType + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let incrementalRunType = self.incrementalRunType { + try encodeContainer.encode(incrementalRunType.rawValue, forKey: .incrementalRunType) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let incrementalRunTypeDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.IncrementalRunType.self, forKey: .incrementalRunType) + incrementalRunType = incrementalRunTypeDecoded + } +} + +extension EntityResolutionClientTypes { + /// An object which defines an incremental run type and has only incrementalRunType as a field. + public struct IncrementalRunConfig: Swift.Equatable { + /// The type of incremental run. It takes only one value: IMMEDIATE. + public var incrementalRunType: EntityResolutionClientTypes.IncrementalRunType? + + public init( + incrementalRunType: EntityResolutionClientTypes.IncrementalRunType? = nil + ) + { + self.incrementalRunType = incrementalRunType + } + } + +} + +extension EntityResolutionClientTypes { + public enum IncrementalRunType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case immediate + case sdkUnknown(Swift.String) + + public static var allCases: [IncrementalRunType] { + return [ + .immediate, + .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 .immediate: return "IMMEDIATE" + 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 = IncrementalRunType(rawValue: rawValue) ?? IncrementalRunType.sdkUnknown(rawValue) + } + } +} + +extension EntityResolutionClientTypes.InputSource: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case applyNormalization + case inputSourceARN + case schemaName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let applyNormalization = self.applyNormalization { + try encodeContainer.encode(applyNormalization, forKey: .applyNormalization) + } + if let inputSourceARN = self.inputSourceARN { + try encodeContainer.encode(inputSourceARN, forKey: .inputSourceARN) + } + if let schemaName = self.schemaName { + try encodeContainer.encode(schemaName, forKey: .schemaName) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let inputSourceARNDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inputSourceARN) + inputSourceARN = inputSourceARNDecoded + let schemaNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schemaName) + schemaName = schemaNameDecoded + let applyNormalizationDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .applyNormalization) + applyNormalization = applyNormalizationDecoded + } +} + +extension EntityResolutionClientTypes { + /// An object containing InputSourceARN, SchemaName, and ApplyNormalization. + public struct InputSource: Swift.Equatable { + /// Normalizes the attributes defined in the schema in the input data. For example, if an attribute has an AttributeType of PHONE_NUMBER, and the data in the input table is in a format of 1234567890, Entity Resolution will normalize this field in the output to (123)-456-7890. + public var applyNormalization: Swift.Bool? + /// An Glue table ARN for the input source table. + /// This member is required. + public var inputSourceARN: Swift.String? + /// The name of the schema to be retrieved. + /// This member is required. + public var schemaName: Swift.String? + + public init( + applyNormalization: Swift.Bool? = nil, + inputSourceARN: Swift.String? = nil, + schemaName: Swift.String? = nil + ) + { + self.applyNormalization = applyNormalization + self.inputSourceARN = inputSourceARN + self.schemaName = schemaName + } + } + +} + +extension InternalServerException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: InternalServerExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// This exception occurs when there is an internal failure in the AWS Entity Resolution service. HTTP Status Code: 500 +public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "InternalServerException" } + public static var fault: ErrorFault { .server } + public static var isRetryable: Swift.Bool { true } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct InternalServerExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension InternalServerExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 EntityResolutionClientTypes.JobMetrics: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case inputRecords + case matchIDs + case recordsNotProcessed + case totalRecordsProcessed + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let inputRecords = self.inputRecords { + try encodeContainer.encode(inputRecords, forKey: .inputRecords) + } + if let matchIDs = self.matchIDs { + try encodeContainer.encode(matchIDs, forKey: .matchIDs) + } + if let recordsNotProcessed = self.recordsNotProcessed { + try encodeContainer.encode(recordsNotProcessed, forKey: .recordsNotProcessed) + } + if let totalRecordsProcessed = self.totalRecordsProcessed { + try encodeContainer.encode(totalRecordsProcessed, forKey: .totalRecordsProcessed) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let inputRecordsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .inputRecords) + inputRecords = inputRecordsDecoded + let totalRecordsProcessedDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .totalRecordsProcessed) + totalRecordsProcessed = totalRecordsProcessedDecoded + let matchIDsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .matchIDs) + matchIDs = matchIDsDecoded + let recordsNotProcessedDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .recordsNotProcessed) + recordsNotProcessed = recordsNotProcessedDecoded + } +} + +extension EntityResolutionClientTypes { + /// An object containing InputRecords, TotalRecordsProcessed, MatchIDs, and RecordsNotProcessed. + public struct JobMetrics: Swift.Equatable { + /// The total number of input records. + public var inputRecords: Swift.Int? + /// The total number of matchIDs generated. + public var matchIDs: Swift.Int? + /// The total number of records that did not get processed, + public var recordsNotProcessed: Swift.Int? + /// The total number of records processed. + public var totalRecordsProcessed: Swift.Int? + + public init( + inputRecords: Swift.Int? = nil, + matchIDs: Swift.Int? = nil, + recordsNotProcessed: Swift.Int? = nil, + totalRecordsProcessed: Swift.Int? = nil + ) + { + self.inputRecords = inputRecords + self.matchIDs = matchIDs + self.recordsNotProcessed = recordsNotProcessed + self.totalRecordsProcessed = totalRecordsProcessed + } + } + +} + +extension EntityResolutionClientTypes { + public enum JobStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case failed + case queued + case running + case succeeded + case sdkUnknown(Swift.String) + + public static var allCases: [JobStatus] { + return [ + .failed, + .queued, + .running, + .succeeded, + .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 .failed: return "FAILED" + case .queued: return "QUEUED" + case .running: return "RUNNING" + case .succeeded: return "SUCCEEDED" + 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 = JobStatus(rawValue: rawValue) ?? JobStatus.sdkUnknown(rawValue) + } + } +} + +extension EntityResolutionClientTypes.JobSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case endTime + case jobId + case startTime + case status + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let endTime = self.endTime { + try encodeContainer.encodeTimestamp(endTime, format: .epochSeconds, forKey: .endTime) + } + if let jobId = self.jobId { + try encodeContainer.encode(jobId, forKey: .jobId) + } + if let startTime = self.startTime { + try encodeContainer.encodeTimestamp(startTime, format: .epochSeconds, forKey: .startTime) + } + 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 jobIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .jobId) + jobId = jobIdDecoded + let statusDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.JobStatus.self, forKey: .status) + status = statusDecoded + let startTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startTime) + startTime = startTimeDecoded + let endTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endTime) + endTime = endTimeDecoded + } +} + +extension EntityResolutionClientTypes { + /// An object containing the JobId, Status, StartTime, and EndTime of a job. + public struct JobSummary: Swift.Equatable { + /// The time at which the job has finished. + public var endTime: ClientRuntime.Date? + /// The ID of the job. + /// This member is required. + public var jobId: Swift.String? + /// The time at which the job was started. + /// This member is required. + public var startTime: ClientRuntime.Date? + /// The current status of the job. Either running, succeeded, queued, or failed. + /// This member is required. + public var status: EntityResolutionClientTypes.JobStatus? + + public init( + endTime: ClientRuntime.Date? = nil, + jobId: Swift.String? = nil, + startTime: ClientRuntime.Date? = nil, + status: EntityResolutionClientTypes.JobStatus? = nil + ) + { + self.endTime = endTime + self.jobId = jobId + self.startTime = startTime + self.status = status + } + } + +} + +extension ListMatchingJobsInput: 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 ListMatchingJobsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let workflowName = workflowName else { + return nil + } + return "/matchingworkflows/\(workflowName.urlPercentEncoding())/jobs" + } +} + +public struct ListMatchingJobsInput: Swift.Equatable { + /// The maximum number of objects returned per page. + public var maxResults: Swift.Int? + /// The pagination token from the previous ListSchemaMappings API call. + public var nextToken: Swift.String? + /// The name of the workflow to be retrieved. + /// This member is required. + public var workflowName: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + workflowName: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + self.workflowName = workflowName + } +} + +struct ListMatchingJobsInputBody: Swift.Equatable { +} + +extension ListMatchingJobsInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum ListMatchingJobsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListMatchingJobsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListMatchingJobsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.jobs = output.jobs + self.nextToken = output.nextToken + } else { + self.jobs = nil + self.nextToken = nil + } + } +} + +public struct ListMatchingJobsOutputResponse: Swift.Equatable { + /// A list of JobSummary objects, each of which contain the ID, status, start time, and end time of a job. + public var jobs: [EntityResolutionClientTypes.JobSummary]? + /// The pagination token from the previous ListSchemaMappings API call. + public var nextToken: Swift.String? + + public init( + jobs: [EntityResolutionClientTypes.JobSummary]? = nil, + nextToken: Swift.String? = nil + ) + { + self.jobs = jobs + self.nextToken = nextToken + } +} + +struct ListMatchingJobsOutputResponseBody: Swift.Equatable { + let jobs: [EntityResolutionClientTypes.JobSummary]? + let nextToken: Swift.String? +} + +extension ListMatchingJobsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case jobs + case nextToken + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let jobsContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.JobSummary?].self, forKey: .jobs) + var jobsDecoded0:[EntityResolutionClientTypes.JobSummary]? = nil + if let jobsContainer = jobsContainer { + jobsDecoded0 = [EntityResolutionClientTypes.JobSummary]() + for structure0 in jobsContainer { + if let structure0 = structure0 { + jobsDecoded0?.append(structure0) + } + } + } + jobs = jobsDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ListMatchingWorkflowsInput: 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 ListMatchingWorkflowsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/matchingworkflows" + } +} + +public struct ListMatchingWorkflowsInput: Swift.Equatable { + /// The maximum number of objects returned per page. + public var maxResults: Swift.Int? + /// The pagination token from the previous ListSchemaMappings API call. + public var nextToken: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListMatchingWorkflowsInputBody: Swift.Equatable { +} + +extension ListMatchingWorkflowsInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum ListMatchingWorkflowsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListMatchingWorkflowsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListMatchingWorkflowsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nextToken = output.nextToken + self.workflowSummaries = output.workflowSummaries + } else { + self.nextToken = nil + self.workflowSummaries = nil + } + } +} + +public struct ListMatchingWorkflowsOutputResponse: Swift.Equatable { + /// The pagination token from the previous ListSchemaMappings API call. + public var nextToken: Swift.String? + /// A list of MatchingWorkflowSummary objects, each of which contain the fields WorkflowName, WorkflowArn, CreatedAt, and UpdatedAt. + public var workflowSummaries: [EntityResolutionClientTypes.MatchingWorkflowSummary]? + + public init( + nextToken: Swift.String? = nil, + workflowSummaries: [EntityResolutionClientTypes.MatchingWorkflowSummary]? = nil + ) + { + self.nextToken = nextToken + self.workflowSummaries = workflowSummaries + } +} + +struct ListMatchingWorkflowsOutputResponseBody: Swift.Equatable { + let workflowSummaries: [EntityResolutionClientTypes.MatchingWorkflowSummary]? + let nextToken: Swift.String? +} + +extension ListMatchingWorkflowsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextToken + case workflowSummaries + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workflowSummariesContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.MatchingWorkflowSummary?].self, forKey: .workflowSummaries) + var workflowSummariesDecoded0:[EntityResolutionClientTypes.MatchingWorkflowSummary]? = nil + if let workflowSummariesContainer = workflowSummariesContainer { + workflowSummariesDecoded0 = [EntityResolutionClientTypes.MatchingWorkflowSummary]() + for structure0 in workflowSummariesContainer { + if let structure0 = structure0 { + workflowSummariesDecoded0?.append(structure0) + } + } + } + workflowSummaries = workflowSummariesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ListSchemaMappingsInput: 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 ListSchemaMappingsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/schemas" + } +} + +public struct ListSchemaMappingsInput: Swift.Equatable { + /// The maximum number of objects returned per page. + public var maxResults: Swift.Int? + /// The pagination token from the previous ListSchemaMappings API call. + public var nextToken: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListSchemaMappingsInputBody: Swift.Equatable { +} + +extension ListSchemaMappingsInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum ListSchemaMappingsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListSchemaMappingsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListSchemaMappingsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nextToken = output.nextToken + self.schemaList = output.schemaList + } else { + self.nextToken = nil + self.schemaList = nil + } + } +} + +public struct ListSchemaMappingsOutputResponse: Swift.Equatable { + /// The pagination token from the previous ListDomains API call. + public var nextToken: Swift.String? + /// A list of SchemaMappingSummary objects, each of which contain the fields SchemaName, SchemaArn, CreatedAt, UpdatedAt. + public var schemaList: [EntityResolutionClientTypes.SchemaMappingSummary]? + + public init( + nextToken: Swift.String? = nil, + schemaList: [EntityResolutionClientTypes.SchemaMappingSummary]? = nil + ) + { + self.nextToken = nextToken + self.schemaList = schemaList + } +} + +struct ListSchemaMappingsOutputResponseBody: Swift.Equatable { + let schemaList: [EntityResolutionClientTypes.SchemaMappingSummary]? + let nextToken: Swift.String? +} + +extension ListSchemaMappingsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextToken + case schemaList + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let schemaListContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.SchemaMappingSummary?].self, forKey: .schemaList) + var schemaListDecoded0:[EntityResolutionClientTypes.SchemaMappingSummary]? = nil + if let schemaListContainer = schemaListContainer { + schemaListDecoded0 = [EntityResolutionClientTypes.SchemaMappingSummary]() + for structure0 in schemaListContainer { + if let structure0 = structure0 { + schemaListDecoded0?.append(structure0) + } + } + } + schemaList = schemaListDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +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 ARN of the resource for which you want to view 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 { + } +} + +public enum ListTagsForResourceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListTagsForResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListTagsForResourceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.tags = output.tags + } else { + self.tags = nil + } + } +} + +public struct ListTagsForResourceOutputResponse: Swift.Equatable { + /// The tags used to organize, track, or control access for this resource. + /// This member is required. + 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 + } + + 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 + } +} + +extension EntityResolutionClientTypes.MatchingWorkflowSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdAt + case updatedAt + case workflowArn + case workflowName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let createdAt = self.createdAt { + try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) + } + if let updatedAt = self.updatedAt { + try encodeContainer.encodeTimestamp(updatedAt, format: .epochSeconds, forKey: .updatedAt) + } + if let workflowArn = self.workflowArn { + try encodeContainer.encode(workflowArn, forKey: .workflowArn) + } + if let workflowName = self.workflowName { + try encodeContainer.encode(workflowName, forKey: .workflowName) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workflowNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workflowName) + workflowName = workflowNameDecoded + let workflowArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workflowArn) + workflowArn = workflowArnDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + } +} + +extension EntityResolutionClientTypes { + /// A list of MatchingWorkflowSummary objects, each of which contain the fields WorkflowName, WorkflowArn, CreatedAt, UpdatedAt. + public struct MatchingWorkflowSummary: Swift.Equatable { + /// The timestamp of when the workflow was created. + /// This member is required. + public var createdAt: ClientRuntime.Date? + /// The timestamp of when the workflow was last updated. + /// This member is required. + public var updatedAt: ClientRuntime.Date? + /// The ARN (Amazon Resource Name) that Entity Resolution generated for the MatchingWorkflow. + /// This member is required. + public var workflowArn: Swift.String? + /// The name of the workflow. + /// This member is required. + public var workflowName: Swift.String? + + public init( + createdAt: ClientRuntime.Date? = nil, + updatedAt: ClientRuntime.Date? = nil, + workflowArn: Swift.String? = nil, + workflowName: Swift.String? = nil + ) + { + self.createdAt = createdAt + self.updatedAt = updatedAt + self.workflowArn = workflowArn + self.workflowName = workflowName + } + } + +} + +extension EntityResolutionClientTypes.OutputAttribute: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case hashed + case name + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let hashed = self.hashed { + try encodeContainer.encode(hashed, forKey: .hashed) + } + 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 nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let hashedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .hashed) + hashed = hashedDecoded + } +} + +extension EntityResolutionClientTypes { + /// A list of OutputAttribute objects, each of which have the fields Name and Hashed. Each of these objects selects a column to be included in the output table, and whether the values of the column should be hashed. + public struct OutputAttribute: Swift.Equatable { + /// Enables the ability to hash the column values in the output. + public var hashed: Swift.Bool? + /// A name of a column to be written to the output. This must be an InputField name in the schema mapping. + /// This member is required. + public var name: Swift.String? + + public init( + hashed: Swift.Bool? = nil, + name: Swift.String? = nil + ) + { + self.hashed = hashed + self.name = name + } + } + +} + +extension EntityResolutionClientTypes.OutputSource: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case kmsArn = "KMSArn" + case applyNormalization + case output + case outputS3Path + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let kmsArn = self.kmsArn { + try encodeContainer.encode(kmsArn, forKey: .kmsArn) + } + if let applyNormalization = self.applyNormalization { + try encodeContainer.encode(applyNormalization, forKey: .applyNormalization) + } + if let output = output { + var outputContainer = encodeContainer.nestedUnkeyedContainer(forKey: .output) + for outputattribute0 in output { + try outputContainer.encode(outputattribute0) + } + } + if let outputS3Path = self.outputS3Path { + try encodeContainer.encode(outputS3Path, forKey: .outputS3Path) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let outputS3PathDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outputS3Path) + outputS3Path = outputS3PathDecoded + let outputContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.OutputAttribute?].self, forKey: .output) + var outputDecoded0:[EntityResolutionClientTypes.OutputAttribute]? = nil + if let outputContainer = outputContainer { + outputDecoded0 = [EntityResolutionClientTypes.OutputAttribute]() + for structure0 in outputContainer { + if let structure0 = structure0 { + outputDecoded0?.append(structure0) + } + } + } + output = outputDecoded0 + let kmsArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kmsArn) + kmsArn = kmsArnDecoded + let applyNormalizationDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .applyNormalization) + applyNormalization = applyNormalizationDecoded + } +} + +extension EntityResolutionClientTypes { + /// A list of OutputAttribute objects, each of which have the fields Name and Hashed. Each of these objects selects a column to be included in the output table, and whether the values of the column should be hashed. + public struct OutputSource: Swift.Equatable { + /// Normalizes the attributes defined in the schema in the input data. For example, if an attribute has an AttributeType of PHONE_NUMBER, and the data in the input table is in a format of 1234567890, Entity Resolution will normalize this field in the output to (123)-456-7890. + public var applyNormalization: Swift.Bool? + /// Customer KMS ARN for encryption at rest. If not provided, system will use an Entity Resolution managed KMS key. + public var kmsArn: Swift.String? + /// A list of OutputAttribute objects, each of which have the fields Name and Hashed. Each of these objects selects a column to be included in the output table, and whether the values of the column should be hashed. + /// This member is required. + public var output: [EntityResolutionClientTypes.OutputAttribute]? + /// The S3 path to which Entity Resolution will write the output table. + /// This member is required. + public var outputS3Path: Swift.String? + + public init( + applyNormalization: Swift.Bool? = nil, + kmsArn: Swift.String? = nil, + output: [EntityResolutionClientTypes.OutputAttribute]? = nil, + outputS3Path: Swift.String? = nil + ) + { + self.applyNormalization = applyNormalization + self.kmsArn = kmsArn + self.output = output + self.outputS3Path = outputS3Path + } + } + +} + +extension EntityResolutionClientTypes.ResolutionTechniques: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case resolutionType + case ruleBasedProperties + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let resolutionType = self.resolutionType { + try encodeContainer.encode(resolutionType.rawValue, forKey: .resolutionType) + } + if let ruleBasedProperties = self.ruleBasedProperties { + try encodeContainer.encode(ruleBasedProperties, forKey: .ruleBasedProperties) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resolutionTypeDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.ResolutionType.self, forKey: .resolutionType) + resolutionType = resolutionTypeDecoded + let ruleBasedPropertiesDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.RuleBasedProperties.self, forKey: .ruleBasedProperties) + ruleBasedProperties = ruleBasedPropertiesDecoded + } +} + +extension EntityResolutionClientTypes { + /// An object which defines the resolutionType and the ruleBasedProperties + public struct ResolutionTechniques: Swift.Equatable { + /// There are two types of matching, RULE_MATCHING and ML_MATCHING + public var resolutionType: EntityResolutionClientTypes.ResolutionType? + /// An object which defines the list of matching rules to run and has a field Rules, which is a list of rule objects. + public var ruleBasedProperties: EntityResolutionClientTypes.RuleBasedProperties? + + public init( + resolutionType: EntityResolutionClientTypes.ResolutionType? = nil, + ruleBasedProperties: EntityResolutionClientTypes.RuleBasedProperties? = nil + ) + { + self.resolutionType = resolutionType + self.ruleBasedProperties = ruleBasedProperties + } + } + +} + +extension EntityResolutionClientTypes { + public enum ResolutionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case mlMatching + case ruleMatching + case sdkUnknown(Swift.String) + + public static var allCases: [ResolutionType] { + return [ + .mlMatching, + .ruleMatching, + .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 .mlMatching: return "ML_MATCHING" + case .ruleMatching: return "RULE_MATCHING" + 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 = ResolutionType(rawValue: rawValue) ?? ResolutionType.sdkUnknown(rawValue) + } + } +} + +extension ResourceNotFoundException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ResourceNotFoundExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The resource could not be found. HTTP Status Code: 404 +public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ResourceNotFoundException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ResourceNotFoundExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ResourceNotFoundExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 EntityResolutionClientTypes.Rule: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case matchingKeys + case ruleName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let matchingKeys = matchingKeys { + var matchingKeysContainer = encodeContainer.nestedUnkeyedContainer(forKey: .matchingKeys) + for attributename0 in matchingKeys { + try matchingKeysContainer.encode(attributename0) + } + } + if let ruleName = self.ruleName { + try encodeContainer.encode(ruleName, forKey: .ruleName) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let ruleNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .ruleName) + ruleName = ruleNameDecoded + let matchingKeysContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .matchingKeys) + var matchingKeysDecoded0:[Swift.String]? = nil + if let matchingKeysContainer = matchingKeysContainer { + matchingKeysDecoded0 = [Swift.String]() + for string0 in matchingKeysContainer { + if let string0 = string0 { + matchingKeysDecoded0?.append(string0) + } + } + } + matchingKeys = matchingKeysDecoded0 + } +} + +extension EntityResolutionClientTypes { + /// An object containing RuleName, and MatchingKeys. + public struct Rule: Swift.Equatable { + /// A list of MatchingKeys. The MatchingKeys must have been defined in the SchemaMapping. Two records are considered to match according to this rule if all of the MatchingKeys match. + /// This member is required. + public var matchingKeys: [Swift.String]? + /// A name for the matching rule. + /// This member is required. + public var ruleName: Swift.String? + + public init( + matchingKeys: [Swift.String]? = nil, + ruleName: Swift.String? = nil + ) + { + self.matchingKeys = matchingKeys + self.ruleName = ruleName + } + } + +} + +extension EntityResolutionClientTypes.RuleBasedProperties: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case attributeMatchingModel + case rules + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attributeMatchingModel = self.attributeMatchingModel { + try encodeContainer.encode(attributeMatchingModel.rawValue, forKey: .attributeMatchingModel) + } + if let rules = rules { + var rulesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .rules) + for rule0 in rules { + try rulesContainer.encode(rule0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let rulesContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.Rule?].self, forKey: .rules) + var rulesDecoded0:[EntityResolutionClientTypes.Rule]? = nil + if let rulesContainer = rulesContainer { + rulesDecoded0 = [EntityResolutionClientTypes.Rule]() + for structure0 in rulesContainer { + if let structure0 = structure0 { + rulesDecoded0?.append(structure0) + } + } + } + rules = rulesDecoded0 + let attributeMatchingModelDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.AttributeMatchingModel.self, forKey: .attributeMatchingModel) + attributeMatchingModel = attributeMatchingModelDecoded + } +} + +extension EntityResolutionClientTypes { + /// An object which defines the list of matching rules to run and has a field Rules, which is a list of rule objects. + public struct RuleBasedProperties: Swift.Equatable { + /// You can either choose ONE_TO_ONE or MANY_TO_MANY as the AttributeMatchingModel. When choosing MANY_TO_MANY, the system can match attribute across the sub-types of an attribute type. For example, if the value of the Email field of Profile A and the value of BusinessEmail field of Profile B matches, the two profiles are matched on the Email type. When choosing ONE_TO_ONE the system can only match if the sub-types are exact matches. For example, only when the value of the Email field of Profile A and the value of the Email field of Profile B matches, the two profiles are matched on the Email type. + /// This member is required. + public var attributeMatchingModel: EntityResolutionClientTypes.AttributeMatchingModel? + /// A list of Rule objects, each of which have fields RuleName and MatchingKeys. + /// This member is required. + public var rules: [EntityResolutionClientTypes.Rule]? + + public init( + attributeMatchingModel: EntityResolutionClientTypes.AttributeMatchingModel? = nil, + rules: [EntityResolutionClientTypes.Rule]? = nil + ) + { + self.attributeMatchingModel = attributeMatchingModel + self.rules = rules + } + } + +} + +extension EntityResolutionClientTypes { + public enum SchemaAttributeType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case address + case addressCity + case addressCountry + case addressPostalcode + case addressState + case addressStreet1 + case addressStreet2 + case addressStreet3 + case date + case emailAddress + case name + case nameFirst + case nameLast + case nameMiddle + case phone + case phoneCountrycode + case phoneNumber + case string + case uniqueId + case sdkUnknown(Swift.String) + + public static var allCases: [SchemaAttributeType] { + return [ + .address, + .addressCity, + .addressCountry, + .addressPostalcode, + .addressState, + .addressStreet1, + .addressStreet2, + .addressStreet3, + .date, + .emailAddress, + .name, + .nameFirst, + .nameLast, + .nameMiddle, + .phone, + .phoneCountrycode, + .phoneNumber, + .string, + .uniqueId, + .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 .address: return "ADDRESS" + case .addressCity: return "ADDRESS_CITY" + case .addressCountry: return "ADDRESS_COUNTRY" + case .addressPostalcode: return "ADDRESS_POSTALCODE" + case .addressState: return "ADDRESS_STATE" + case .addressStreet1: return "ADDRESS_STREET1" + case .addressStreet2: return "ADDRESS_STREET2" + case .addressStreet3: return "ADDRESS_STREET3" + case .date: return "DATE" + case .emailAddress: return "EMAIL_ADDRESS" + case .name: return "NAME" + case .nameFirst: return "NAME_FIRST" + case .nameLast: return "NAME_LAST" + case .nameMiddle: return "NAME_MIDDLE" + case .phone: return "PHONE" + case .phoneCountrycode: return "PHONE_COUNTRYCODE" + case .phoneNumber: return "PHONE_NUMBER" + case .string: return "STRING" + case .uniqueId: return "UNIQUE_ID" + 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 = SchemaAttributeType(rawValue: rawValue) ?? SchemaAttributeType.sdkUnknown(rawValue) + } + } +} + +extension EntityResolutionClientTypes.SchemaInputAttribute: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case fieldName + case groupName + case matchKey + case type + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let fieldName = self.fieldName { + try encodeContainer.encode(fieldName, forKey: .fieldName) + } + if let groupName = self.groupName { + try encodeContainer.encode(groupName, forKey: .groupName) + } + if let matchKey = self.matchKey { + try encodeContainer.encode(matchKey, forKey: .matchKey) + } + if let type = self.type { + try encodeContainer.encode(type.rawValue, forKey: .type) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let fieldNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .fieldName) + fieldName = fieldNameDecoded + let typeDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.SchemaAttributeType.self, forKey: .type) + type = typeDecoded + let groupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .groupName) + groupName = groupNameDecoded + let matchKeyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .matchKey) + matchKey = matchKeyDecoded + } +} + +extension EntityResolutionClientTypes { + /// An object containing FieldField, Type, GroupName, and MatchKey. + public struct SchemaInputAttribute: Swift.Equatable { + /// A string containing the field name. + /// This member is required. + public var fieldName: Swift.String? + /// Instruct Entity Resolution to combine several columns into a unified column with the identical attribute type. For example, when working with columns such as first_name, middle_name, and last_name, assigning them a common GroupName will prompt Entity Resolution to concatenate them into a single value. + public var groupName: Swift.String? + /// A key that allows grouping of multiple input attributes into a unified matching group. For example, let's consider a scenario where the source table contains various addresses, such as business_address and shipping_address. By assigning the MatchKey Address' to both attributes, Entity Resolution will match records across these fields to create a consolidated matching group. If no MatchKey is specified for a column, it won't be utilized for matching purposes but will still be included in the output table. + public var matchKey: Swift.String? + /// The type of the attribute, selected from a list of values. + /// This member is required. + public var type: EntityResolutionClientTypes.SchemaAttributeType? + + public init( + fieldName: Swift.String? = nil, + groupName: Swift.String? = nil, + matchKey: Swift.String? = nil, + type: EntityResolutionClientTypes.SchemaAttributeType? = nil + ) + { + self.fieldName = fieldName + self.groupName = groupName + self.matchKey = matchKey + self.type = type + } + } + +} + +extension EntityResolutionClientTypes.SchemaMappingSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdAt + case schemaArn + case schemaName + case updatedAt + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let createdAt = self.createdAt { + try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) + } + if let schemaArn = self.schemaArn { + try encodeContainer.encode(schemaArn, forKey: .schemaArn) + } + if let schemaName = self.schemaName { + try encodeContainer.encode(schemaName, forKey: .schemaName) + } + if let updatedAt = self.updatedAt { + try encodeContainer.encodeTimestamp(updatedAt, format: .epochSeconds, forKey: .updatedAt) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let schemaNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schemaName) + schemaName = schemaNameDecoded + let schemaArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schemaArn) + schemaArn = schemaArnDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + } +} + +extension EntityResolutionClientTypes { + /// An object containing SchemaName, SchemaArn, CreatedAt, andUpdatedAt. + public struct SchemaMappingSummary: Swift.Equatable { + /// The timestamp of when the SchemaMapping was created. + /// This member is required. + public var createdAt: ClientRuntime.Date? + /// The ARN (Amazon Resource Name) that Entity Resolution generated for the SchemaMapping. + /// This member is required. + public var schemaArn: Swift.String? + /// The name of the schema. + /// This member is required. + public var schemaName: Swift.String? + /// The timestamp of when the SchemaMapping was last updated. + /// This member is required. + public var updatedAt: ClientRuntime.Date? + + public init( + createdAt: ClientRuntime.Date? = nil, + schemaArn: Swift.String? = nil, + schemaName: Swift.String? = nil, + updatedAt: ClientRuntime.Date? = nil + ) + { + self.createdAt = createdAt + self.schemaArn = schemaArn + self.schemaName = schemaName + self.updatedAt = updatedAt + } + } + +} + +extension StartMatchingJobInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let workflowName = workflowName else { + return nil + } + return "/matchingworkflows/\(workflowName.urlPercentEncoding())/jobs" + } +} + +public struct StartMatchingJobInput: Swift.Equatable { + /// The name of the matching job to be retrieved. + /// This member is required. + public var workflowName: Swift.String? + + public init( + workflowName: Swift.String? = nil + ) + { + self.workflowName = workflowName + } +} + +struct StartMatchingJobInputBody: Swift.Equatable { +} + +extension StartMatchingJobInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum StartMatchingJobOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ExceedsLimitException": return try await ExceedsLimitException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension StartMatchingJobOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: StartMatchingJobOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.jobId = output.jobId + } else { + self.jobId = nil + } + } +} + +public struct StartMatchingJobOutputResponse: Swift.Equatable { + /// The ID of the job. + /// This member is required. + public var jobId: Swift.String? + + public init( + jobId: Swift.String? = nil + ) + { + self.jobId = jobId + } +} + +struct StartMatchingJobOutputResponseBody: Swift.Equatable { + let jobId: Swift.String? +} + +extension StartMatchingJobOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case jobId + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let jobIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .jobId) + jobId = jobIdDecoded + } +} + +extension TagResourceInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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, tagMap0) in tags { + try tagsContainer.encode(tagMap0, 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())" + } +} + +public struct TagResourceInput: Swift.Equatable { + /// The ARN of the resource for which you want to view tags. + /// This member is required. + public var resourceArn: Swift.String? + /// The tags used to organize, track, or control access for this resource. + /// This member is required. + public var tags: [Swift.String:Swift.String]? + + public init( + resourceArn: Swift.String? = nil, + tags: [Swift.String:Swift.String]? = nil + ) + { + self.resourceArn = resourceArn + self.tags = tags + } +} + +struct TagResourceInputBody: Swift.Equatable { + let tags: [Swift.String:Swift.String]? +} + +extension TagResourceInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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, tagvalue0) in tagsContainer { + if let tagvalue0 = tagvalue0 { + tagsDecoded0?[key0] = tagvalue0 + } + } + } + tags = tagsDecoded0 + } +} + +public enum TagResourceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension TagResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct TagResourceOutputResponse: Swift.Equatable { + + public init() { } +} + +extension ThrottlingException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ThrottlingExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The request was denied due to request throttling. HTTP Status Code: 429 +public struct ThrottlingException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ThrottlingException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { true } + public static var isThrottling: Swift.Bool { true } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ThrottlingExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ThrottlingExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 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.unknownError(message) + } + tagKeys.forEach { queryItemValue in + let queryItem = ClientRuntime.URLQueryItem(name: "tagKeys".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) + items.append(queryItem) + } + return items + } + } +} + +extension UntagResourceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let resourceArn = resourceArn else { + return nil + } + return "/tags/\(resourceArn.urlPercentEncoding())" + } +} + +public struct UntagResourceInput: Swift.Equatable { + /// The ARN of the resource for which you want to untag. + /// This member is required. + public var resourceArn: Swift.String? + /// The list of tag keys to remove from the resource. + /// This member is required. + public var tagKeys: [Swift.String]? + + public init( + resourceArn: Swift.String? = nil, + tagKeys: [Swift.String]? = nil + ) + { + self.resourceArn = resourceArn + self.tagKeys = tagKeys + } +} + +struct UntagResourceInputBody: Swift.Equatable { +} + +extension UntagResourceInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum UntagResourceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UntagResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct UntagResourceOutputResponse: Swift.Equatable { + + public init() { } +} + +extension UpdateMatchingWorkflowInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case incrementalRunConfig + case inputSourceConfig + case outputSourceConfig + case resolutionTechniques + case roleArn + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let incrementalRunConfig = self.incrementalRunConfig { + try encodeContainer.encode(incrementalRunConfig, forKey: .incrementalRunConfig) + } + if let inputSourceConfig = inputSourceConfig { + var inputSourceConfigContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputSourceConfig) + for inputsource0 in inputSourceConfig { + try inputSourceConfigContainer.encode(inputsource0) + } + } + if let outputSourceConfig = outputSourceConfig { + var outputSourceConfigContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputSourceConfig) + for outputsource0 in outputSourceConfig { + try outputSourceConfigContainer.encode(outputsource0) + } + } + if let resolutionTechniques = self.resolutionTechniques { + try encodeContainer.encode(resolutionTechniques, forKey: .resolutionTechniques) + } + if let roleArn = self.roleArn { + try encodeContainer.encode(roleArn, forKey: .roleArn) + } + } +} + +extension UpdateMatchingWorkflowInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let workflowName = workflowName else { + return nil + } + return "/matchingworkflows/\(workflowName.urlPercentEncoding())" + } +} + +public struct UpdateMatchingWorkflowInput: Swift.Equatable { + /// A description of the workflow. + public var description: Swift.String? + /// An object which defines an incremental run type and has only incrementalRunType as a field. + public var incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? + /// A list of InputSource objects, which have the fields InputSourceARN and SchemaName. + /// This member is required. + public var inputSourceConfig: [EntityResolutionClientTypes.InputSource]? + /// A list of OutputSource objects, each of which contains fields OutputS3Path, ApplyNormalization, and Output. + /// This member is required. + public var outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? + /// An object which defines the resolutionType and the ruleBasedProperties + /// This member is required. + public var resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? + /// The Amazon Resource Name (ARN) of the IAM role. AWS Entity Resolution assumes this role to create resources on your behalf as part of workflow execution. + /// This member is required. + public var roleArn: Swift.String? + /// The name of the workflow to be retrieved. + /// This member is required. + public var workflowName: Swift.String? + + public init( + description: Swift.String? = nil, + incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? = nil, + inputSourceConfig: [EntityResolutionClientTypes.InputSource]? = nil, + outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? = nil, + resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? = nil, + roleArn: Swift.String? = nil, + workflowName: Swift.String? = nil + ) + { + self.description = description + self.incrementalRunConfig = incrementalRunConfig + self.inputSourceConfig = inputSourceConfig + self.outputSourceConfig = outputSourceConfig + self.resolutionTechniques = resolutionTechniques + self.roleArn = roleArn + self.workflowName = workflowName + } +} + +struct UpdateMatchingWorkflowInputBody: Swift.Equatable { + let description: Swift.String? + let inputSourceConfig: [EntityResolutionClientTypes.InputSource]? + let outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? + let resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? + let incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? + let roleArn: Swift.String? +} + +extension UpdateMatchingWorkflowInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case incrementalRunConfig + case inputSourceConfig + case outputSourceConfig + case resolutionTechniques + case roleArn + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let inputSourceConfigContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.InputSource?].self, forKey: .inputSourceConfig) + var inputSourceConfigDecoded0:[EntityResolutionClientTypes.InputSource]? = nil + if let inputSourceConfigContainer = inputSourceConfigContainer { + inputSourceConfigDecoded0 = [EntityResolutionClientTypes.InputSource]() + for structure0 in inputSourceConfigContainer { + if let structure0 = structure0 { + inputSourceConfigDecoded0?.append(structure0) + } + } + } + inputSourceConfig = inputSourceConfigDecoded0 + let outputSourceConfigContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.OutputSource?].self, forKey: .outputSourceConfig) + var outputSourceConfigDecoded0:[EntityResolutionClientTypes.OutputSource]? = nil + if let outputSourceConfigContainer = outputSourceConfigContainer { + outputSourceConfigDecoded0 = [EntityResolutionClientTypes.OutputSource]() + for structure0 in outputSourceConfigContainer { + if let structure0 = structure0 { + outputSourceConfigDecoded0?.append(structure0) + } + } + } + outputSourceConfig = outputSourceConfigDecoded0 + let resolutionTechniquesDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.ResolutionTechniques.self, forKey: .resolutionTechniques) + resolutionTechniques = resolutionTechniquesDecoded + let incrementalRunConfigDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.IncrementalRunConfig.self, forKey: .incrementalRunConfig) + incrementalRunConfig = incrementalRunConfigDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + } +} + +public enum UpdateMatchingWorkflowOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UpdateMatchingWorkflowOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: UpdateMatchingWorkflowOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.description = output.description + self.incrementalRunConfig = output.incrementalRunConfig + self.inputSourceConfig = output.inputSourceConfig + self.outputSourceConfig = output.outputSourceConfig + self.resolutionTechniques = output.resolutionTechniques + self.roleArn = output.roleArn + self.workflowName = output.workflowName + } else { + self.description = nil + self.incrementalRunConfig = nil + self.inputSourceConfig = nil + self.outputSourceConfig = nil + self.resolutionTechniques = nil + self.roleArn = nil + self.workflowName = nil + } + } +} + +public struct UpdateMatchingWorkflowOutputResponse: Swift.Equatable { + /// A description of the workflow. + public var description: Swift.String? + /// An object which defines an incremental run type and has only incrementalRunType as a field. + public var incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? + /// A list of InputSource objects, which have the fields InputSourceARN and SchemaName. + /// This member is required. + public var inputSourceConfig: [EntityResolutionClientTypes.InputSource]? + /// A list of OutputSource objects, each of which contains fields OutputS3Path, ApplyNormalization, and Output. + /// This member is required. + public var outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? + /// An object which defines the resolutionType and the ruleBasedProperties + /// This member is required. + public var resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? + /// The Amazon Resource Name (ARN) of the IAM role. AWS Entity Resolution assumes this role to create resources on your behalf as part of workflow execution. + /// This member is required. + public var roleArn: Swift.String? + /// The name of the workflow. + /// This member is required. + public var workflowName: Swift.String? + + public init( + description: Swift.String? = nil, + incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? = nil, + inputSourceConfig: [EntityResolutionClientTypes.InputSource]? = nil, + outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? = nil, + resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? = nil, + roleArn: Swift.String? = nil, + workflowName: Swift.String? = nil + ) + { + self.description = description + self.incrementalRunConfig = incrementalRunConfig + self.inputSourceConfig = inputSourceConfig + self.outputSourceConfig = outputSourceConfig + self.resolutionTechniques = resolutionTechniques + self.roleArn = roleArn + self.workflowName = workflowName + } +} + +struct UpdateMatchingWorkflowOutputResponseBody: Swift.Equatable { + let workflowName: Swift.String? + let description: Swift.String? + let inputSourceConfig: [EntityResolutionClientTypes.InputSource]? + let outputSourceConfig: [EntityResolutionClientTypes.OutputSource]? + let resolutionTechniques: EntityResolutionClientTypes.ResolutionTechniques? + let incrementalRunConfig: EntityResolutionClientTypes.IncrementalRunConfig? + let roleArn: Swift.String? +} + +extension UpdateMatchingWorkflowOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case incrementalRunConfig + case inputSourceConfig + case outputSourceConfig + case resolutionTechniques + case roleArn + case workflowName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let workflowNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .workflowName) + workflowName = workflowNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let inputSourceConfigContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.InputSource?].self, forKey: .inputSourceConfig) + var inputSourceConfigDecoded0:[EntityResolutionClientTypes.InputSource]? = nil + if let inputSourceConfigContainer = inputSourceConfigContainer { + inputSourceConfigDecoded0 = [EntityResolutionClientTypes.InputSource]() + for structure0 in inputSourceConfigContainer { + if let structure0 = structure0 { + inputSourceConfigDecoded0?.append(structure0) + } + } + } + inputSourceConfig = inputSourceConfigDecoded0 + let outputSourceConfigContainer = try containerValues.decodeIfPresent([EntityResolutionClientTypes.OutputSource?].self, forKey: .outputSourceConfig) + var outputSourceConfigDecoded0:[EntityResolutionClientTypes.OutputSource]? = nil + if let outputSourceConfigContainer = outputSourceConfigContainer { + outputSourceConfigDecoded0 = [EntityResolutionClientTypes.OutputSource]() + for structure0 in outputSourceConfigContainer { + if let structure0 = structure0 { + outputSourceConfigDecoded0?.append(structure0) + } + } + } + outputSourceConfig = outputSourceConfigDecoded0 + let resolutionTechniquesDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.ResolutionTechniques.self, forKey: .resolutionTechniques) + resolutionTechniques = resolutionTechniquesDecoded + let incrementalRunConfigDecoded = try containerValues.decodeIfPresent(EntityResolutionClientTypes.IncrementalRunConfig.self, forKey: .incrementalRunConfig) + incrementalRunConfig = incrementalRunConfigDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + } +} + +extension ValidationException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ValidationExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The input fails to satisfy the constraints specified by AWS Entity Resolution. HTTP Status Code: 400 +public struct ValidationException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ValidationException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ValidationExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ValidationExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 + } +} diff --git a/Sources/Services/AWSFSx/FSxClient.swift b/Sources/Services/AWSFSx/FSxClient.swift index ce19d0a716a..246013cc50c 100644 --- a/Sources/Services/AWSFSx/FSxClient.swift +++ b/Sources/Services/AWSFSx/FSxClient.swift @@ -1753,6 +1753,8 @@ extension FSxClient: FSxClientProtocol { /// /// * DataCompressionType /// + /// * LogConfiguration + /// /// * LustreRootSquashConfiguration /// /// * StorageCapacity diff --git a/Sources/Services/AWSFSx/FSxClientProtocol.swift b/Sources/Services/AWSFSx/FSxClientProtocol.swift index 781b43bbdb3..607bf85bc54 100644 --- a/Sources/Services/AWSFSx/FSxClientProtocol.swift +++ b/Sources/Services/AWSFSx/FSxClientProtocol.swift @@ -195,6 +195,8 @@ public protocol FSxClientProtocol { /// /// * DataCompressionType /// + /// * LogConfiguration + /// /// * LustreRootSquashConfiguration /// /// * StorageCapacity diff --git a/Sources/Services/AWSFSx/models/Models.swift b/Sources/Services/AWSFSx/models/Models.swift index 7ba93b1db56..d5376af5d72 100644 --- a/Sources/Services/AWSFSx/models/Models.swift +++ b/Sources/Services/AWSFSx/models/Models.swift @@ -837,6 +837,106 @@ extension FSxClientTypes { } } +extension FSxClientTypes.AutocommitPeriod: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case type = "Type" + case value = "Value" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let type = self.type { + try encodeContainer.encode(type.rawValue, forKey: .type) + } + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let typeDecoded = try containerValues.decodeIfPresent(FSxClientTypes.AutocommitPeriodType.self, forKey: .type) + type = typeDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .value) + value = valueDecoded + } +} + +extension FSxClientTypes { + /// Sets the autocommit period of files in an FSx for ONTAP SnapLock volume, which determines how long the files must remain unmodified before they're automatically transitioned to the write once, read many (WORM) state. For more information, see [Autocommit](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/worm-state.html#worm-state-autocommit). + public struct AutocommitPeriod: Swift.Equatable { + /// Defines the type of time for the autocommit period of a file in an FSx for ONTAP SnapLock volume. Setting this value to NONE disables autocommit. The default value is NONE. + /// This member is required. + public var type: FSxClientTypes.AutocommitPeriodType? + /// Defines the amount of time for the autocommit period of a file in an FSx for ONTAP SnapLock volume. The following ranges are valid: + /// + /// * Minutes: 5 - 65,535 + /// + /// * Hours: 1 - 65,535 + /// + /// * Days: 1 - 3,650 + /// + /// * Months: 1 - 120 + /// + /// * Years: 1 - 10 + public var value: Swift.Int? + + public init( + type: FSxClientTypes.AutocommitPeriodType? = nil, + value: Swift.Int? = nil + ) + { + self.type = type + self.value = value + } + } + +} + +extension FSxClientTypes { + public enum AutocommitPeriodType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case days + case hours + case minutes + case months + case `none` + case years + case sdkUnknown(Swift.String) + + public static var allCases: [AutocommitPeriodType] { + return [ + .days, + .hours, + .minutes, + .months, + .none, + .years, + .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 .days: return "DAYS" + case .hours: return "HOURS" + case .minutes: return "MINUTES" + case .months: return "MONTHS" + case .none: return "NONE" + case .years: return "YEARS" + 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 = AutocommitPeriodType(rawValue: rawValue) ?? AutocommitPeriodType.sdkUnknown(rawValue) + } + } +} + extension FSxClientTypes.Backup: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case backupId = "BackupId" @@ -4080,6 +4180,7 @@ extension FSxClientTypes.CreateOntapVolumeConfiguration: Swift.Codable { case ontapVolumeType = "OntapVolumeType" case securityStyle = "SecurityStyle" case sizeInMegabytes = "SizeInMegabytes" + case snaplockConfiguration = "SnaplockConfiguration" case snapshotPolicy = "SnapshotPolicy" case storageEfficiencyEnabled = "StorageEfficiencyEnabled" case storageVirtualMachineId = "StorageVirtualMachineId" @@ -4103,6 +4204,9 @@ extension FSxClientTypes.CreateOntapVolumeConfiguration: Swift.Codable { if let sizeInMegabytes = self.sizeInMegabytes { try encodeContainer.encode(sizeInMegabytes, forKey: .sizeInMegabytes) } + if let snaplockConfiguration = self.snaplockConfiguration { + try encodeContainer.encode(snaplockConfiguration, forKey: .snaplockConfiguration) + } if let snapshotPolicy = self.snapshotPolicy { try encodeContainer.encode(snapshotPolicy, forKey: .snapshotPolicy) } @@ -4137,6 +4241,8 @@ extension FSxClientTypes.CreateOntapVolumeConfiguration: Swift.Codable { snapshotPolicy = snapshotPolicyDecoded let copyTagsToBackupsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .copyTagsToBackups) copyTagsToBackups = copyTagsToBackupsDecoded + let snaplockConfigurationDecoded = try containerValues.decodeIfPresent(FSxClientTypes.CreateSnaplockConfiguration.self, forKey: .snaplockConfiguration) + snaplockConfiguration = snaplockConfigurationDecoded } } @@ -4164,9 +4270,11 @@ extension FSxClientTypes { /// /// * MIXED if the file system is managed by both UNIX and Windows administrators and users consist of both NFS and SMB clients. public var securityStyle: FSxClientTypes.SecurityStyle? - /// Specifies the size of the volume, in megabytes (MB), that you are creating. Provide any whole number in the range of 20–104857600 to specify the size of the volume. + /// Specifies the size of the volume, in megabytes (MB), that you are creating. /// This member is required. public var sizeInMegabytes: Swift.Int? + /// Specifies the SnapLock configuration for an FSx for ONTAP volume. + public var snaplockConfiguration: FSxClientTypes.CreateSnaplockConfiguration? /// Specifies the snapshot policy for the volume. There are three built-in snapshot policies: /// /// * default: This is the default policy. A maximum of six hourly snapshots taken five minutes past the hour. A maximum of two daily snapshots taken Monday through Saturday at 10 minutes after midnight. A maximum of two weekly snapshots taken every Sunday at 15 minutes after midnight. @@ -4209,6 +4317,7 @@ extension FSxClientTypes { ontapVolumeType: FSxClientTypes.InputOntapVolumeType? = nil, securityStyle: FSxClientTypes.SecurityStyle? = nil, sizeInMegabytes: Swift.Int? = nil, + snaplockConfiguration: FSxClientTypes.CreateSnaplockConfiguration? = nil, snapshotPolicy: Swift.String? = nil, storageEfficiencyEnabled: Swift.Bool? = nil, storageVirtualMachineId: Swift.String? = nil, @@ -4220,6 +4329,7 @@ extension FSxClientTypes { self.ontapVolumeType = ontapVolumeType self.securityStyle = securityStyle self.sizeInMegabytes = sizeInMegabytes + self.snaplockConfiguration = snaplockConfiguration self.snapshotPolicy = snapshotPolicy self.storageEfficiencyEnabled = storageEfficiencyEnabled self.storageVirtualMachineId = storageVirtualMachineId @@ -4439,6 +4549,96 @@ extension FSxClientTypes { } +extension FSxClientTypes.CreateSnaplockConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case auditLogVolume = "AuditLogVolume" + case autocommitPeriod = "AutocommitPeriod" + case privilegedDelete = "PrivilegedDelete" + case retentionPeriod = "RetentionPeriod" + case snaplockType = "SnaplockType" + case volumeAppendModeEnabled = "VolumeAppendModeEnabled" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let auditLogVolume = self.auditLogVolume { + try encodeContainer.encode(auditLogVolume, forKey: .auditLogVolume) + } + if let autocommitPeriod = self.autocommitPeriod { + try encodeContainer.encode(autocommitPeriod, forKey: .autocommitPeriod) + } + if let privilegedDelete = self.privilegedDelete { + try encodeContainer.encode(privilegedDelete.rawValue, forKey: .privilegedDelete) + } + if let retentionPeriod = self.retentionPeriod { + try encodeContainer.encode(retentionPeriod, forKey: .retentionPeriod) + } + if let snaplockType = self.snaplockType { + try encodeContainer.encode(snaplockType.rawValue, forKey: .snaplockType) + } + if let volumeAppendModeEnabled = self.volumeAppendModeEnabled { + try encodeContainer.encode(volumeAppendModeEnabled, forKey: .volumeAppendModeEnabled) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let auditLogVolumeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .auditLogVolume) + auditLogVolume = auditLogVolumeDecoded + let autocommitPeriodDecoded = try containerValues.decodeIfPresent(FSxClientTypes.AutocommitPeriod.self, forKey: .autocommitPeriod) + autocommitPeriod = autocommitPeriodDecoded + let privilegedDeleteDecoded = try containerValues.decodeIfPresent(FSxClientTypes.PrivilegedDelete.self, forKey: .privilegedDelete) + privilegedDelete = privilegedDeleteDecoded + let retentionPeriodDecoded = try containerValues.decodeIfPresent(FSxClientTypes.SnaplockRetentionPeriod.self, forKey: .retentionPeriod) + retentionPeriod = retentionPeriodDecoded + let snaplockTypeDecoded = try containerValues.decodeIfPresent(FSxClientTypes.SnaplockType.self, forKey: .snaplockType) + snaplockType = snaplockTypeDecoded + let volumeAppendModeEnabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .volumeAppendModeEnabled) + volumeAppendModeEnabled = volumeAppendModeEnabledDecoded + } +} + +extension FSxClientTypes { + /// Defines the SnapLock configuration when creating an FSx for ONTAP SnapLock volume. + public struct CreateSnaplockConfiguration: Swift.Equatable { + /// Enables or disables the audit log volume for an FSx for ONTAP SnapLock volume. The default value is false. If you set AuditLogVolume to true, the SnapLock volume is created as an audit log volume. The minimum retention period for an audit log volume is six months. For more information, see [ SnapLock audit log volumes](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/how-snaplock-works.html#snaplock-audit-log-volume). + public var auditLogVolume: Swift.Bool? + /// The configuration object for setting the autocommit period of files in an FSx for ONTAP SnapLock volume. + public var autocommitPeriod: FSxClientTypes.AutocommitPeriod? + /// Enables, disables, or permanently disables privileged delete on an FSx for ONTAP SnapLock Enterprise volume. Enabling privileged delete allows SnapLock administrators to delete WORM files even if they have active retention periods. PERMANENTLY_DISABLED is a terminal state. If privileged delete is permanently disabled on a SnapLock volume, you can't re-enable it. The default value is DISABLED. For more information, see [Privileged delete](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/how-snaplock-works.html#privileged-delete). + public var privilegedDelete: FSxClientTypes.PrivilegedDelete? + /// Specifies the retention period of an FSx for ONTAP SnapLock volume. + public var retentionPeriod: FSxClientTypes.SnaplockRetentionPeriod? + /// Specifies the retention mode of an FSx for ONTAP SnapLock volume. After it is set, it can't be changed. You can choose one of the following retention modes: + /// + /// * COMPLIANCE: Files transitioned to write once, read many (WORM) on a Compliance volume can't be deleted until their retention periods expire. This retention mode is used to address government or industry-specific mandates or to protect against ransomware attacks. For more information, see [SnapLock Compliance](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/snaplock-compliance.html). + /// + /// * ENTERPRISE: Files transitioned to WORM on an Enterprise volume can be deleted by authorized users before their retention periods expire using privileged delete. This retention mode is used to advance an organization's data integrity and internal compliance or to test retention settings before using SnapLock Compliance. For more information, see [SnapLock Enterprise](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/how-snaplock-works.htmlFile). + /// This member is required. + public var snaplockType: FSxClientTypes.SnaplockType? + /// Enables or disables volume-append mode on an FSx for ONTAP SnapLock volume. Volume-append mode allows you to create WORM-appendable files and write data to them incrementally. The default value is false. For more information, see [Volume-append mode](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/worm-state.html#worm-state-append). + public var volumeAppendModeEnabled: Swift.Bool? + + public init( + auditLogVolume: Swift.Bool? = nil, + autocommitPeriod: FSxClientTypes.AutocommitPeriod? = nil, + privilegedDelete: FSxClientTypes.PrivilegedDelete? = nil, + retentionPeriod: FSxClientTypes.SnaplockRetentionPeriod? = nil, + snaplockType: FSxClientTypes.SnaplockType? = nil, + volumeAppendModeEnabled: Swift.Bool? = nil + ) + { + self.auditLogVolume = auditLogVolume + self.autocommitPeriod = autocommitPeriod + self.privilegedDelete = privilegedDelete + self.retentionPeriod = retentionPeriod + self.snaplockType = snaplockType + self.volumeAppendModeEnabled = volumeAppendModeEnabled + } + } + +} + extension CreateSnapshotInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case clientRequestToken = "ClientRequestToken" @@ -7730,12 +7930,16 @@ extension DeleteVolumeInputBody: Swift.Decodable { extension FSxClientTypes.DeleteVolumeOntapConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case bypassSnaplockEnterpriseRetention = "BypassSnaplockEnterpriseRetention" case finalBackupTags = "FinalBackupTags" case skipFinalBackup = "SkipFinalBackup" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let bypassSnaplockEnterpriseRetention = self.bypassSnaplockEnterpriseRetention { + try encodeContainer.encode(bypassSnaplockEnterpriseRetention, forKey: .bypassSnaplockEnterpriseRetention) + } if let finalBackupTags = finalBackupTags { var finalBackupTagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .finalBackupTags) for tag0 in finalBackupTags { @@ -7762,22 +7966,28 @@ extension FSxClientTypes.DeleteVolumeOntapConfiguration: Swift.Codable { } } finalBackupTags = finalBackupTagsDecoded0 + let bypassSnaplockEnterpriseRetentionDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .bypassSnaplockEnterpriseRetention) + bypassSnaplockEnterpriseRetention = bypassSnaplockEnterpriseRetentionDecoded } } extension FSxClientTypes { - /// Use to specify skipping a final backup, or to add tags to a final backup. + /// Use to specify skipping a final backup, adding tags to a final backup, or bypassing the retention period of an FSx for ONTAP SnapLock Enterprise volume when deleting an FSx for ONTAP volume. public struct DeleteVolumeOntapConfiguration: Swift.Equatable { + /// Setting this to true allows a SnapLock administrator to delete an FSx for ONTAP SnapLock Enterprise volume with unexpired write once, read many (WORM) files. The IAM permission fsx:BypassSnaplockEnterpriseRetention is also required to delete SnapLock Enterprise volumes with unexpired WORM files. The default value is false. For more information, see [ Deleting a SnapLock volume ](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/how-snaplock-works.html#snaplock-delete-volume). + public var bypassSnaplockEnterpriseRetention: Swift.Bool? /// A list of Tag values, with a maximum of 50 elements. public var finalBackupTags: [FSxClientTypes.Tag]? /// Set to true if you want to skip taking a final backup of the volume you are deleting. public var skipFinalBackup: Swift.Bool? public init( + bypassSnaplockEnterpriseRetention: Swift.Bool? = nil, finalBackupTags: [FSxClientTypes.Tag]? = nil, skipFinalBackup: Swift.Bool? = nil ) { + self.bypassSnaplockEnterpriseRetention = bypassSnaplockEnterpriseRetention self.finalBackupTags = finalBackupTags self.skipFinalBackup = skipFinalBackup } @@ -13345,6 +13555,7 @@ extension FSxClientTypes.OntapVolumeConfiguration: Swift.Codable { case ontapVolumeType = "OntapVolumeType" case securityStyle = "SecurityStyle" case sizeInMegabytes = "SizeInMegabytes" + case snaplockConfiguration = "SnaplockConfiguration" case snapshotPolicy = "SnapshotPolicy" case storageEfficiencyEnabled = "StorageEfficiencyEnabled" case storageVirtualMachineId = "StorageVirtualMachineId" @@ -13373,6 +13584,9 @@ extension FSxClientTypes.OntapVolumeConfiguration: Swift.Codable { if let sizeInMegabytes = self.sizeInMegabytes { try encodeContainer.encode(sizeInMegabytes, forKey: .sizeInMegabytes) } + if let snaplockConfiguration = self.snaplockConfiguration { + try encodeContainer.encode(snaplockConfiguration, forKey: .snaplockConfiguration) + } if let snapshotPolicy = self.snapshotPolicy { try encodeContainer.encode(snapshotPolicy, forKey: .snapshotPolicy) } @@ -13419,6 +13633,8 @@ extension FSxClientTypes.OntapVolumeConfiguration: Swift.Codable { snapshotPolicy = snapshotPolicyDecoded let copyTagsToBackupsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .copyTagsToBackups) copyTagsToBackups = copyTagsToBackupsDecoded + let snaplockConfigurationDecoded = try containerValues.decodeIfPresent(FSxClientTypes.SnaplockConfiguration.self, forKey: .snaplockConfiguration) + snaplockConfiguration = snaplockConfigurationDecoded } } @@ -13449,6 +13665,8 @@ extension FSxClientTypes { public var securityStyle: FSxClientTypes.SecurityStyle? /// The configured size of the volume, in megabytes (MBs). public var sizeInMegabytes: Swift.Int? + /// The SnapLock configuration object for an FSx for ONTAP SnapLock volume. + public var snaplockConfiguration: FSxClientTypes.SnaplockConfiguration? /// Specifies the snapshot policy for the volume. There are three built-in snapshot policies: /// /// * default: This is the default policy. A maximum of six hourly snapshots taken five minutes past the hour. A maximum of two daily snapshots taken Monday through Saturday at 10 minutes after midnight. A maximum of two weekly snapshots taken every Sunday at 15 minutes after midnight. @@ -13478,6 +13696,7 @@ extension FSxClientTypes { ontapVolumeType: FSxClientTypes.OntapVolumeType? = nil, securityStyle: FSxClientTypes.SecurityStyle? = nil, sizeInMegabytes: Swift.Int? = nil, + snaplockConfiguration: FSxClientTypes.SnaplockConfiguration? = nil, snapshotPolicy: Swift.String? = nil, storageEfficiencyEnabled: Swift.Bool? = nil, storageVirtualMachineId: Swift.String? = nil, @@ -13492,6 +13711,7 @@ extension FSxClientTypes { self.ontapVolumeType = ontapVolumeType self.securityStyle = securityStyle self.sizeInMegabytes = sizeInMegabytes + self.snaplockConfiguration = snaplockConfiguration self.snapshotPolicy = snapshotPolicy self.storageEfficiencyEnabled = storageEfficiencyEnabled self.storageVirtualMachineId = storageVirtualMachineId @@ -14312,6 +14532,41 @@ extension FSxClientTypes { } +extension FSxClientTypes { + public enum PrivilegedDelete: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case disabled + case enabled + case permanentlyDisabled + case sdkUnknown(Swift.String) + + public static var allCases: [PrivilegedDelete] { + return [ + .disabled, + .enabled, + .permanentlyDisabled, + .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 .permanentlyDisabled: return "PERMANENTLY_DISABLED" + 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 = PrivilegedDelete(rawValue: rawValue) ?? PrivilegedDelete.sdkUnknown(rawValue) + } + } +} + extension ReleaseFileSystemNfsV3LocksInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case clientRequestToken = "ClientRequestToken" @@ -14866,6 +15121,114 @@ extension RestoreVolumeFromSnapshotOutputResponseBody: Swift.Decodable { } } +extension FSxClientTypes.RetentionPeriod: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case type = "Type" + case value = "Value" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let type = self.type { + try encodeContainer.encode(type.rawValue, forKey: .type) + } + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let typeDecoded = try containerValues.decodeIfPresent(FSxClientTypes.RetentionPeriodType.self, forKey: .type) + type = typeDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .value) + value = valueDecoded + } +} + +extension FSxClientTypes { + /// Specifies the retention period of an FSx for ONTAP SnapLock volume. After it is set, it can't be changed. Files can't be deleted or modified during the retention period. For more information, see [Working with the retention period in SnapLock](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/snaplock-retention.html). + public struct RetentionPeriod: Swift.Equatable { + /// Defines the type of time for the retention period of an FSx for ONTAP SnapLock volume. Set it to one of the valid types. If you set it to INFINITE, the files are retained forever. If you set it to UNSPECIFIED, the files are retained until you set an explicit retention period. + /// This member is required. + public var type: FSxClientTypes.RetentionPeriodType? + /// Defines the amount of time for the retention period of an FSx for ONTAP SnapLock volume. You can't set a value for INFINITE or UNSPECIFIED. For all other options, the following ranges are valid: + /// + /// * Seconds: 0 - 65,535 + /// + /// * Minutes: 0 - 65,535 + /// + /// * Hours: 0 - 24 + /// + /// * Days: 0 - 365 + /// + /// * Months: 0 - 12 + /// + /// * Years: 0 - 100 + public var value: Swift.Int? + + public init( + type: FSxClientTypes.RetentionPeriodType? = nil, + value: Swift.Int? = nil + ) + { + self.type = type + self.value = value + } + } + +} + +extension FSxClientTypes { + public enum RetentionPeriodType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case days + case hours + case infinite + case minutes + case months + case seconds + case unspecified + case years + case sdkUnknown(Swift.String) + + public static var allCases: [RetentionPeriodType] { + return [ + .days, + .hours, + .infinite, + .minutes, + .months, + .seconds, + .unspecified, + .years, + .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 .days: return "DAYS" + case .hours: return "HOURS" + case .infinite: return "INFINITE" + case .minutes: return "MINUTES" + case .months: return "MONTHS" + case .seconds: return "SECONDS" + case .unspecified: return "UNSPECIFIED" + case .years: return "YEARS" + 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 = RetentionPeriodType(rawValue: rawValue) ?? RetentionPeriodType.sdkUnknown(rawValue) + } + } +} + extension FSxClientTypes.S3DataRepositoryConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case autoExportPolicy = "AutoExportPolicy" @@ -15365,6 +15728,185 @@ extension ServiceLimitExceededBody: Swift.Decodable { } } +extension FSxClientTypes.SnaplockConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case auditLogVolume = "AuditLogVolume" + case autocommitPeriod = "AutocommitPeriod" + case privilegedDelete = "PrivilegedDelete" + case retentionPeriod = "RetentionPeriod" + case snaplockType = "SnaplockType" + case volumeAppendModeEnabled = "VolumeAppendModeEnabled" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let auditLogVolume = self.auditLogVolume { + try encodeContainer.encode(auditLogVolume, forKey: .auditLogVolume) + } + if let autocommitPeriod = self.autocommitPeriod { + try encodeContainer.encode(autocommitPeriod, forKey: .autocommitPeriod) + } + if let privilegedDelete = self.privilegedDelete { + try encodeContainer.encode(privilegedDelete.rawValue, forKey: .privilegedDelete) + } + if let retentionPeriod = self.retentionPeriod { + try encodeContainer.encode(retentionPeriod, forKey: .retentionPeriod) + } + if let snaplockType = self.snaplockType { + try encodeContainer.encode(snaplockType.rawValue, forKey: .snaplockType) + } + if let volumeAppendModeEnabled = self.volumeAppendModeEnabled { + try encodeContainer.encode(volumeAppendModeEnabled, forKey: .volumeAppendModeEnabled) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let auditLogVolumeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .auditLogVolume) + auditLogVolume = auditLogVolumeDecoded + let autocommitPeriodDecoded = try containerValues.decodeIfPresent(FSxClientTypes.AutocommitPeriod.self, forKey: .autocommitPeriod) + autocommitPeriod = autocommitPeriodDecoded + let privilegedDeleteDecoded = try containerValues.decodeIfPresent(FSxClientTypes.PrivilegedDelete.self, forKey: .privilegedDelete) + privilegedDelete = privilegedDeleteDecoded + let retentionPeriodDecoded = try containerValues.decodeIfPresent(FSxClientTypes.SnaplockRetentionPeriod.self, forKey: .retentionPeriod) + retentionPeriod = retentionPeriodDecoded + let snaplockTypeDecoded = try containerValues.decodeIfPresent(FSxClientTypes.SnaplockType.self, forKey: .snaplockType) + snaplockType = snaplockTypeDecoded + let volumeAppendModeEnabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .volumeAppendModeEnabled) + volumeAppendModeEnabled = volumeAppendModeEnabledDecoded + } +} + +extension FSxClientTypes { + /// Specifies the SnapLock configuration for an FSx for ONTAP SnapLock volume. + public struct SnaplockConfiguration: Swift.Equatable { + /// Enables or disables the audit log volume for an FSx for ONTAP SnapLock volume. The default value is false. If you set AuditLogVolume to true, the SnapLock volume is created as an audit log volume. The minimum retention period for an audit log volume is six months. For more information, see [ SnapLock audit log volumes](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/how-snaplock-works.html#snaplock-audit-log-volume). + public var auditLogVolume: Swift.Bool? + /// The configuration object for setting the autocommit period of files in an FSx for ONTAP SnapLock volume. + public var autocommitPeriod: FSxClientTypes.AutocommitPeriod? + /// Enables, disables, or permanently disables privileged delete on an FSx for ONTAP SnapLock Enterprise volume. Enabling privileged delete allows SnapLock administrators to delete write once, read many (WORM) files even if they have active retention periods. PERMANENTLY_DISABLED is a terminal state. If privileged delete is permanently disabled on a SnapLock volume, you can't re-enable it. The default value is DISABLED. For more information, see [Privileged delete](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/how-snaplock-works.html#privileged-delete). + public var privilegedDelete: FSxClientTypes.PrivilegedDelete? + /// Specifies the retention period of an FSx for ONTAP SnapLock volume. + public var retentionPeriod: FSxClientTypes.SnaplockRetentionPeriod? + /// Specifies the retention mode of an FSx for ONTAP SnapLock volume. After it is set, it can't be changed. You can choose one of the following retention modes: + /// + /// * COMPLIANCE: Files transitioned to write once, read many (WORM) on a Compliance volume can't be deleted until their retention periods expire. This retention mode is used to address government or industry-specific mandates or to protect against ransomware attacks. For more information, see [SnapLock Compliance](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/snaplock-compliance.html). + /// + /// * ENTERPRISE: Files transitioned to WORM on an Enterprise volume can be deleted by authorized users before their retention periods expire using privileged delete. This retention mode is used to advance an organization's data integrity and internal compliance or to test retention settings before using SnapLock Compliance. For more information, see [SnapLock Enterprise](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/how-snaplock-works.htmlFile). + public var snaplockType: FSxClientTypes.SnaplockType? + /// Enables or disables volume-append mode on an FSx for ONTAP SnapLock volume. Volume-append mode allows you to create WORM-appendable files and write data to them incrementally. The default value is false. For more information, see [Volume-append mode](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/worm-state.html#worm-state-append). + public var volumeAppendModeEnabled: Swift.Bool? + + public init( + auditLogVolume: Swift.Bool? = nil, + autocommitPeriod: FSxClientTypes.AutocommitPeriod? = nil, + privilegedDelete: FSxClientTypes.PrivilegedDelete? = nil, + retentionPeriod: FSxClientTypes.SnaplockRetentionPeriod? = nil, + snaplockType: FSxClientTypes.SnaplockType? = nil, + volumeAppendModeEnabled: Swift.Bool? = nil + ) + { + self.auditLogVolume = auditLogVolume + self.autocommitPeriod = autocommitPeriod + self.privilegedDelete = privilegedDelete + self.retentionPeriod = retentionPeriod + self.snaplockType = snaplockType + self.volumeAppendModeEnabled = volumeAppendModeEnabled + } + } + +} + +extension FSxClientTypes.SnaplockRetentionPeriod: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case defaultRetention = "DefaultRetention" + case maximumRetention = "MaximumRetention" + case minimumRetention = "MinimumRetention" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let defaultRetention = self.defaultRetention { + try encodeContainer.encode(defaultRetention, forKey: .defaultRetention) + } + if let maximumRetention = self.maximumRetention { + try encodeContainer.encode(maximumRetention, forKey: .maximumRetention) + } + if let minimumRetention = self.minimumRetention { + try encodeContainer.encode(minimumRetention, forKey: .minimumRetention) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let defaultRetentionDecoded = try containerValues.decodeIfPresent(FSxClientTypes.RetentionPeriod.self, forKey: .defaultRetention) + defaultRetention = defaultRetentionDecoded + let minimumRetentionDecoded = try containerValues.decodeIfPresent(FSxClientTypes.RetentionPeriod.self, forKey: .minimumRetention) + minimumRetention = minimumRetentionDecoded + let maximumRetentionDecoded = try containerValues.decodeIfPresent(FSxClientTypes.RetentionPeriod.self, forKey: .maximumRetention) + maximumRetention = maximumRetentionDecoded + } +} + +extension FSxClientTypes { + /// The configuration to set the retention period of an FSx for ONTAP SnapLock volume. The retention period includes default, maximum, and minimum settings. For more information, see [Working with the retention period in SnapLock](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/snaplock-retention.html). + public struct SnaplockRetentionPeriod: Swift.Equatable { + /// The retention period assigned to a write once, read many (WORM) file by default if an explicit retention period is not set for an FSx for ONTAP SnapLock volume. The default retention period must be greater than or equal to the minimum retention period and less than or equal to the maximum retention period. + /// This member is required. + public var defaultRetention: FSxClientTypes.RetentionPeriod? + /// The longest retention period that can be assigned to a WORM file on an FSx for ONTAP SnapLock volume. + /// This member is required. + public var maximumRetention: FSxClientTypes.RetentionPeriod? + /// The shortest retention period that can be assigned to a WORM file on an FSx for ONTAP SnapLock volume. + /// This member is required. + public var minimumRetention: FSxClientTypes.RetentionPeriod? + + public init( + defaultRetention: FSxClientTypes.RetentionPeriod? = nil, + maximumRetention: FSxClientTypes.RetentionPeriod? = nil, + minimumRetention: FSxClientTypes.RetentionPeriod? = nil + ) + { + self.defaultRetention = defaultRetention + self.maximumRetention = maximumRetention + self.minimumRetention = minimumRetention + } + } + +} + +extension FSxClientTypes { + public enum SnaplockType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case compliance + case enterprise + case sdkUnknown(Swift.String) + + public static var allCases: [SnaplockType] { + return [ + .compliance, + .enterprise, + .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 .compliance: return "COMPLIANCE" + case .enterprise: return "ENTERPRISE" + 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 = SnaplockType(rawValue: rawValue) ?? SnaplockType.sdkUnknown(rawValue) + } + } +} + extension FSxClientTypes.Snapshot: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case administrativeActions = "AdministrativeActions" @@ -17780,6 +18322,7 @@ extension FSxClientTypes.UpdateOntapVolumeConfiguration: Swift.Codable { case junctionPath = "JunctionPath" case securityStyle = "SecurityStyle" case sizeInMegabytes = "SizeInMegabytes" + case snaplockConfiguration = "SnaplockConfiguration" case snapshotPolicy = "SnapshotPolicy" case storageEfficiencyEnabled = "StorageEfficiencyEnabled" case tieringPolicy = "TieringPolicy" @@ -17799,6 +18342,9 @@ extension FSxClientTypes.UpdateOntapVolumeConfiguration: Swift.Codable { if let sizeInMegabytes = self.sizeInMegabytes { try encodeContainer.encode(sizeInMegabytes, forKey: .sizeInMegabytes) } + if let snaplockConfiguration = self.snaplockConfiguration { + try encodeContainer.encode(snaplockConfiguration, forKey: .snaplockConfiguration) + } if let snapshotPolicy = self.snapshotPolicy { try encodeContainer.encode(snapshotPolicy, forKey: .snapshotPolicy) } @@ -17826,6 +18372,8 @@ extension FSxClientTypes.UpdateOntapVolumeConfiguration: Swift.Codable { snapshotPolicy = snapshotPolicyDecoded let copyTagsToBackupsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .copyTagsToBackups) copyTagsToBackups = copyTagsToBackupsDecoded + let snaplockConfigurationDecoded = try containerValues.decodeIfPresent(FSxClientTypes.UpdateSnaplockConfiguration.self, forKey: .snaplockConfiguration) + snaplockConfiguration = snaplockConfigurationDecoded } } @@ -17836,10 +18384,12 @@ extension FSxClientTypes { public var copyTagsToBackups: Swift.Bool? /// Specifies the location in the SVM's namespace where the volume is mounted. The JunctionPath must have a leading forward slash, such as /vol3. public var junctionPath: Swift.String? - /// The security style for the volume, which can be UNIX. NTFS, or MIXED. + /// The security style for the volume, which can be UNIX, NTFS, or MIXED. public var securityStyle: FSxClientTypes.SecurityStyle? /// Specifies the size of the volume in megabytes. public var sizeInMegabytes: Swift.Int? + /// The configuration object for updating the SnapLock configuration of an FSx for ONTAP SnapLock volume. + public var snaplockConfiguration: FSxClientTypes.UpdateSnaplockConfiguration? /// Specifies the snapshot policy for the volume. There are three built-in snapshot policies: /// /// * default: This is the default policy. A maximum of six hourly snapshots taken five minutes past the hour. A maximum of two daily snapshots taken Monday through Saturday at 10 minutes after midnight. A maximum of two weekly snapshots taken every Sunday at 15 minutes after midnight. @@ -17861,6 +18411,7 @@ extension FSxClientTypes { junctionPath: Swift.String? = nil, securityStyle: FSxClientTypes.SecurityStyle? = nil, sizeInMegabytes: Swift.Int? = nil, + snaplockConfiguration: FSxClientTypes.UpdateSnaplockConfiguration? = nil, snapshotPolicy: Swift.String? = nil, storageEfficiencyEnabled: Swift.Bool? = nil, tieringPolicy: FSxClientTypes.TieringPolicy? = nil @@ -17870,6 +18421,7 @@ extension FSxClientTypes { self.junctionPath = junctionPath self.securityStyle = securityStyle self.sizeInMegabytes = sizeInMegabytes + self.snaplockConfiguration = snaplockConfiguration self.snapshotPolicy = snapshotPolicy self.storageEfficiencyEnabled = storageEfficiencyEnabled self.tieringPolicy = tieringPolicy @@ -18003,6 +18555,81 @@ extension FSxClientTypes { } +extension FSxClientTypes.UpdateSnaplockConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case auditLogVolume = "AuditLogVolume" + case autocommitPeriod = "AutocommitPeriod" + case privilegedDelete = "PrivilegedDelete" + case retentionPeriod = "RetentionPeriod" + case volumeAppendModeEnabled = "VolumeAppendModeEnabled" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let auditLogVolume = self.auditLogVolume { + try encodeContainer.encode(auditLogVolume, forKey: .auditLogVolume) + } + if let autocommitPeriod = self.autocommitPeriod { + try encodeContainer.encode(autocommitPeriod, forKey: .autocommitPeriod) + } + if let privilegedDelete = self.privilegedDelete { + try encodeContainer.encode(privilegedDelete.rawValue, forKey: .privilegedDelete) + } + if let retentionPeriod = self.retentionPeriod { + try encodeContainer.encode(retentionPeriod, forKey: .retentionPeriod) + } + if let volumeAppendModeEnabled = self.volumeAppendModeEnabled { + try encodeContainer.encode(volumeAppendModeEnabled, forKey: .volumeAppendModeEnabled) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let auditLogVolumeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .auditLogVolume) + auditLogVolume = auditLogVolumeDecoded + let autocommitPeriodDecoded = try containerValues.decodeIfPresent(FSxClientTypes.AutocommitPeriod.self, forKey: .autocommitPeriod) + autocommitPeriod = autocommitPeriodDecoded + let privilegedDeleteDecoded = try containerValues.decodeIfPresent(FSxClientTypes.PrivilegedDelete.self, forKey: .privilegedDelete) + privilegedDelete = privilegedDeleteDecoded + let retentionPeriodDecoded = try containerValues.decodeIfPresent(FSxClientTypes.SnaplockRetentionPeriod.self, forKey: .retentionPeriod) + retentionPeriod = retentionPeriodDecoded + let volumeAppendModeEnabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .volumeAppendModeEnabled) + volumeAppendModeEnabled = volumeAppendModeEnabledDecoded + } +} + +extension FSxClientTypes { + /// Updates the SnapLock configuration for an existing FSx for ONTAP volume. + public struct UpdateSnaplockConfiguration: Swift.Equatable { + /// Enables or disables the audit log volume for an FSx for ONTAP SnapLock volume. The default value is false. If you set AuditLogVolume to true, the SnapLock volume is created as an audit log volume. The minimum retention period for an audit log volume is six months. For more information, see [ SnapLock audit log volumes](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/how-snaplock-works.html#snaplock-audit-log-volume). + public var auditLogVolume: Swift.Bool? + /// The configuration object for setting the autocommit period of files in an FSx for ONTAP SnapLock volume. + public var autocommitPeriod: FSxClientTypes.AutocommitPeriod? + /// Enables, disables, or permanently disables privileged delete on an FSx for ONTAP SnapLock Enterprise volume. Enabling privileged delete allows SnapLock administrators to delete write once, read many (WORM) files even if they have active retention periods. PERMANENTLY_DISABLED is a terminal state. If privileged delete is permanently disabled on a SnapLock volume, you can't re-enable it. The default value is DISABLED. For more information, see [Privileged delete](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/how-snaplock-works.html#privileged-delete). + public var privilegedDelete: FSxClientTypes.PrivilegedDelete? + /// Specifies the retention period of an FSx for ONTAP SnapLock volume. + public var retentionPeriod: FSxClientTypes.SnaplockRetentionPeriod? + /// Enables or disables volume-append mode on an FSx for ONTAP SnapLock volume. Volume-append mode allows you to create WORM-appendable files and write data to them incrementally. The default value is false. For more information, see [Volume-append mode](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/worm-state.html#worm-state-append). + public var volumeAppendModeEnabled: Swift.Bool? + + public init( + auditLogVolume: Swift.Bool? = nil, + autocommitPeriod: FSxClientTypes.AutocommitPeriod? = nil, + privilegedDelete: FSxClientTypes.PrivilegedDelete? = nil, + retentionPeriod: FSxClientTypes.SnaplockRetentionPeriod? = nil, + volumeAppendModeEnabled: Swift.Bool? = nil + ) + { + self.auditLogVolume = auditLogVolume + self.autocommitPeriod = autocommitPeriod + self.privilegedDelete = privilegedDelete + self.retentionPeriod = retentionPeriod + self.volumeAppendModeEnabled = volumeAppendModeEnabled + } + } + +} + extension UpdateSnapshotInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case clientRequestToken = "ClientRequestToken" diff --git a/Sources/Services/AWSGlue/EndpointResolver.swift b/Sources/Services/AWSGlue/EndpointResolver.swift index 9e57f5d398c..d79396fd9a4 100644 --- a/Sources/Services/AWSGlue/EndpointResolver.swift +++ b/Sources/Services/AWSGlue/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://glue-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://glue-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://glue.{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://glue.{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\":[{\"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\":[{\"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\":[],\"endpoint\":{\"url\":\"https://glue-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\":[],\"endpoint\":{\"url\":\"https://glue-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\":[],\"endpoint\":{\"url\":\"https://glue.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://glue.{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/AWSGlue/models/Models.swift b/Sources/Services/AWSGlue/models/Models.swift index 676d3fe8eeb..0812c3fedbc 100644 --- a/Sources/Services/AWSGlue/models/Models.swift +++ b/Sources/Services/AWSGlue/models/Models.swift @@ -944,7 +944,7 @@ extension GlueClientTypes.AmazonRedshiftTarget: Swift.Codable { extension GlueClientTypes { /// Specifies an Amazon Redshift target. public struct AmazonRedshiftTarget: Swift.Equatable { - /// Specifies the data of the Amazon Reshift target node. + /// Specifies the data of the Amazon Redshift target node. public var data: GlueClientTypes.AmazonRedshiftNodeData? /// The nodes that are inputs to the data target. public var inputs: [Swift.String]? @@ -6010,6 +6010,7 @@ extension GlueClientTypes.CodeGenConfigurationNode: Swift.Codable { case piiDetection = "PIIDetection" case postgreSQLCatalogSource = "PostgreSQLCatalogSource" case postgreSQLCatalogTarget = "PostgreSQLCatalogTarget" + case recipe = "Recipe" case redshiftSource = "RedshiftSource" case redshiftTarget = "RedshiftTarget" case relationalCatalogSource = "RelationalCatalogSource" @@ -6031,6 +6032,8 @@ extension GlueClientTypes.CodeGenConfigurationNode: Swift.Codable { case s3ParquetSource = "S3ParquetSource" case selectFields = "SelectFields" case selectFromCollection = "SelectFromCollection" + case snowflakeSource = "SnowflakeSource" + case snowflakeTarget = "SnowflakeTarget" case sparkConnectorSource = "SparkConnectorSource" case sparkConnectorTarget = "SparkConnectorTarget" case sparkSQL = "SparkSQL" @@ -6158,6 +6161,9 @@ extension GlueClientTypes.CodeGenConfigurationNode: Swift.Codable { if let postgreSQLCatalogTarget = self.postgreSQLCatalogTarget { try encodeContainer.encode(postgreSQLCatalogTarget, forKey: .postgreSQLCatalogTarget) } + if let recipe = self.recipe { + try encodeContainer.encode(recipe, forKey: .recipe) + } if let redshiftSource = self.redshiftSource { try encodeContainer.encode(redshiftSource, forKey: .redshiftSource) } @@ -6221,6 +6227,12 @@ extension GlueClientTypes.CodeGenConfigurationNode: Swift.Codable { if let selectFromCollection = self.selectFromCollection { try encodeContainer.encode(selectFromCollection, forKey: .selectFromCollection) } + if let snowflakeSource = self.snowflakeSource { + try encodeContainer.encode(snowflakeSource, forKey: .snowflakeSource) + } + if let snowflakeTarget = self.snowflakeTarget { + try encodeContainer.encode(snowflakeTarget, forKey: .snowflakeTarget) + } if let sparkConnectorSource = self.sparkConnectorSource { try encodeContainer.encode(sparkConnectorSource, forKey: .sparkConnectorSource) } @@ -6375,6 +6387,12 @@ extension GlueClientTypes.CodeGenConfigurationNode: Swift.Codable { amazonRedshiftTarget = amazonRedshiftTargetDecoded let evaluateDataQualityMultiFrameDecoded = try containerValues.decodeIfPresent(GlueClientTypes.EvaluateDataQualityMultiFrame.self, forKey: .evaluateDataQualityMultiFrame) evaluateDataQualityMultiFrame = evaluateDataQualityMultiFrameDecoded + let recipeDecoded = try containerValues.decodeIfPresent(GlueClientTypes.Recipe.self, forKey: .recipe) + recipe = recipeDecoded + let snowflakeSourceDecoded = try containerValues.decodeIfPresent(GlueClientTypes.SnowflakeSource.self, forKey: .snowflakeSource) + snowflakeSource = snowflakeSourceDecoded + let snowflakeTargetDecoded = try containerValues.decodeIfPresent(GlueClientTypes.SnowflakeTarget.self, forKey: .snowflakeTarget) + snowflakeTarget = snowflakeTargetDecoded } } @@ -6459,6 +6477,8 @@ extension GlueClientTypes { public var postgreSQLCatalogSource: GlueClientTypes.PostgreSQLCatalogSource? /// Specifies a target that uses Postgres SQL. public var postgreSQLCatalogTarget: GlueClientTypes.PostgreSQLCatalogTarget? + /// Specifies a Glue DataBrew recipe node. + public var recipe: GlueClientTypes.Recipe? /// Specifies an Amazon Redshift data store. public var redshiftSource: GlueClientTypes.RedshiftSource? /// Specifies a target that uses Amazon Redshift. @@ -6501,6 +6521,10 @@ extension GlueClientTypes { public var selectFields: GlueClientTypes.SelectFields? /// Specifies a transform that chooses one DynamicFrame from a collection of DynamicFrames. The output is the selected DynamicFrame public var selectFromCollection: GlueClientTypes.SelectFromCollection? + /// Specifies a Snowflake data source. + public var snowflakeSource: GlueClientTypes.SnowflakeSource? + /// Specifies a target that writes to a Snowflake data source. + public var snowflakeTarget: GlueClientTypes.SnowflakeTarget? /// Specifies a connector to an Apache Spark data source. public var sparkConnectorSource: GlueClientTypes.SparkConnectorSource? /// Specifies a target that uses an Apache Spark connector. @@ -6554,6 +6578,7 @@ extension GlueClientTypes { piiDetection: GlueClientTypes.PIIDetection? = nil, postgreSQLCatalogSource: GlueClientTypes.PostgreSQLCatalogSource? = nil, postgreSQLCatalogTarget: GlueClientTypes.PostgreSQLCatalogTarget? = nil, + recipe: GlueClientTypes.Recipe? = nil, redshiftSource: GlueClientTypes.RedshiftSource? = nil, redshiftTarget: GlueClientTypes.RedshiftTarget? = nil, relationalCatalogSource: GlueClientTypes.RelationalCatalogSource? = nil, @@ -6575,6 +6600,8 @@ extension GlueClientTypes { s3ParquetSource: GlueClientTypes.S3ParquetSource? = nil, selectFields: GlueClientTypes.SelectFields? = nil, selectFromCollection: GlueClientTypes.SelectFromCollection? = nil, + snowflakeSource: GlueClientTypes.SnowflakeSource? = nil, + snowflakeTarget: GlueClientTypes.SnowflakeTarget? = nil, sparkConnectorSource: GlueClientTypes.SparkConnectorSource? = nil, sparkConnectorTarget: GlueClientTypes.SparkConnectorTarget? = nil, sparkSQL: GlueClientTypes.SparkSQL? = nil, @@ -6622,6 +6649,7 @@ extension GlueClientTypes { self.piiDetection = piiDetection self.postgreSQLCatalogSource = postgreSQLCatalogSource self.postgreSQLCatalogTarget = postgreSQLCatalogTarget + self.recipe = recipe self.redshiftSource = redshiftSource self.redshiftTarget = redshiftTarget self.relationalCatalogSource = relationalCatalogSource @@ -6643,6 +6671,8 @@ extension GlueClientTypes { self.s3ParquetSource = s3ParquetSource self.selectFields = selectFields self.selectFromCollection = selectFromCollection + self.snowflakeSource = snowflakeSource + self.snowflakeTarget = snowflakeTarget self.sparkConnectorSource = sparkConnectorSource self.sparkConnectorTarget = sparkConnectorTarget self.sparkSQL = sparkSQL @@ -7979,6 +8009,8 @@ extension GlueClientTypes { /// /// * ENCRYPTED_KAFKA_SASL_SCRAM_PASSWORD - The encrypted version of the Kafka SASL SCRAM password (if the user has the Glue encrypt passwords setting selected). /// + /// * KAFKA_SASL_SCRAM_SECRETS_ARN - The Amazon Resource Name of a secret in Amazon Web Services Secrets Manager. + /// /// * KAFKA_SASL_GSSAPI_KEYTAB - The S3 location of a Kerberos keytab file. A keytab stores long-term keys for one or more principals. For more information, see [MIT Kerberos Documentation: Keytab](https://web.mit.edu/kerberos/krb5-latest/doc/basic/keytab_def.html). /// /// * KAFKA_SASL_GSSAPI_KRB5_CONF - The S3 location of a Kerberos krb5.conf file. A krb5.conf stores Kerberos configuration information, such as the location of the KDC server. For more information, see [MIT Kerberos Documentation: krb5.conf](https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html). @@ -8252,6 +8284,7 @@ extension GlueClientTypes { case customJdbcCertString case encryptedKafkaClientKeystorePassword case encryptedKafkaClientKeyPassword + case encryptedKafkaSaslScramPassword case encryptedPassword case host case instanceId @@ -8266,6 +8299,14 @@ extension GlueClientTypes { case kafkaClientKeystorePassword case kafkaClientKeyPassword case kafkaCustomCert + case kafkaSaslGssapiKeytab + case kafkaSaslGssapiKrb5Conf + case kafkaSaslGssapiPrincipal + case kafkaSaslGssapiService + case kafkaSaslMechanism + case kafkaSaslScramPassword + case kafkaSaslScramSecretsArn + case kafkaSaslScramUsername case kafkaSkipCustomCertValidation case kafkaSslEnabled case password @@ -8286,6 +8327,7 @@ extension GlueClientTypes { .customJdbcCertString, .encryptedKafkaClientKeystorePassword, .encryptedKafkaClientKeyPassword, + .encryptedKafkaSaslScramPassword, .encryptedPassword, .host, .instanceId, @@ -8300,6 +8342,14 @@ extension GlueClientTypes { .kafkaClientKeystorePassword, .kafkaClientKeyPassword, .kafkaCustomCert, + .kafkaSaslGssapiKeytab, + .kafkaSaslGssapiKrb5Conf, + .kafkaSaslGssapiPrincipal, + .kafkaSaslGssapiService, + .kafkaSaslMechanism, + .kafkaSaslScramPassword, + .kafkaSaslScramSecretsArn, + .kafkaSaslScramUsername, .kafkaSkipCustomCertValidation, .kafkaSslEnabled, .password, @@ -8325,6 +8375,7 @@ extension GlueClientTypes { case .customJdbcCertString: return "CUSTOM_JDBC_CERT_STRING" case .encryptedKafkaClientKeystorePassword: return "ENCRYPTED_KAFKA_CLIENT_KEYSTORE_PASSWORD" case .encryptedKafkaClientKeyPassword: return "ENCRYPTED_KAFKA_CLIENT_KEY_PASSWORD" + case .encryptedKafkaSaslScramPassword: return "ENCRYPTED_KAFKA_SASL_SCRAM_PASSWORD" case .encryptedPassword: return "ENCRYPTED_PASSWORD" case .host: return "HOST" case .instanceId: return "INSTANCE_ID" @@ -8339,6 +8390,14 @@ extension GlueClientTypes { case .kafkaClientKeystorePassword: return "KAFKA_CLIENT_KEYSTORE_PASSWORD" case .kafkaClientKeyPassword: return "KAFKA_CLIENT_KEY_PASSWORD" case .kafkaCustomCert: return "KAFKA_CUSTOM_CERT" + case .kafkaSaslGssapiKeytab: return "KAFKA_SASL_GSSAPI_KEYTAB" + case .kafkaSaslGssapiKrb5Conf: return "KAFKA_SASL_GSSAPI_KRB5_CONF" + case .kafkaSaslGssapiPrincipal: return "KAFKA_SASL_GSSAPI_PRINCIPAL" + case .kafkaSaslGssapiService: return "KAFKA_SASL_GSSAPI_SERVICE" + case .kafkaSaslMechanism: return "KAFKA_SASL_MECHANISM" + case .kafkaSaslScramPassword: return "KAFKA_SASL_SCRAM_PASSWORD" + case .kafkaSaslScramSecretsArn: return "KAFKA_SASL_SCRAM_SECRETS_ARN" + case .kafkaSaslScramUsername: return "KAFKA_SASL_SCRAM_USERNAME" case .kafkaSkipCustomCertValidation: return "KAFKA_SKIP_CUSTOM_CERT_VALIDATION" case .kafkaSslEnabled: return "KAFKA_SSL_ENABLED" case .password: return "PASSWORD" @@ -9372,6 +9431,7 @@ extension GlueClientTypes.CrawlerTargets: Swift.Codable { case catalogTargets = "CatalogTargets" case deltaTargets = "DeltaTargets" case dynamoDBTargets = "DynamoDBTargets" + case hudiTargets = "HudiTargets" case icebergTargets = "IcebergTargets" case jdbcTargets = "JdbcTargets" case mongoDBTargets = "MongoDBTargets" @@ -9398,6 +9458,12 @@ extension GlueClientTypes.CrawlerTargets: Swift.Codable { try dynamoDBTargetsContainer.encode(dynamodbtarget0) } } + if let hudiTargets = hudiTargets { + var hudiTargetsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .hudiTargets) + for huditarget0 in hudiTargets { + try hudiTargetsContainer.encode(huditarget0) + } + } if let icebergTargets = icebergTargets { var icebergTargetsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .icebergTargets) for icebergtarget0 in icebergTargets { @@ -9503,6 +9569,17 @@ extension GlueClientTypes.CrawlerTargets: Swift.Codable { } } icebergTargets = icebergTargetsDecoded0 + let hudiTargetsContainer = try containerValues.decodeIfPresent([GlueClientTypes.HudiTarget?].self, forKey: .hudiTargets) + var hudiTargetsDecoded0:[GlueClientTypes.HudiTarget]? = nil + if let hudiTargetsContainer = hudiTargetsContainer { + hudiTargetsDecoded0 = [GlueClientTypes.HudiTarget]() + for structure0 in hudiTargetsContainer { + if let structure0 = structure0 { + hudiTargetsDecoded0?.append(structure0) + } + } + } + hudiTargets = hudiTargetsDecoded0 } } @@ -9515,6 +9592,8 @@ extension GlueClientTypes { public var deltaTargets: [GlueClientTypes.DeltaTarget]? /// Specifies Amazon DynamoDB targets. public var dynamoDBTargets: [GlueClientTypes.DynamoDBTarget]? + /// Specifies Apache Hudi data store targets. + public var hudiTargets: [GlueClientTypes.HudiTarget]? /// Specifies Apache Iceberg data store targets. public var icebergTargets: [GlueClientTypes.IcebergTarget]? /// Specifies JDBC targets. @@ -9528,6 +9607,7 @@ extension GlueClientTypes { catalogTargets: [GlueClientTypes.CatalogTarget]? = nil, deltaTargets: [GlueClientTypes.DeltaTarget]? = nil, dynamoDBTargets: [GlueClientTypes.DynamoDBTarget]? = nil, + hudiTargets: [GlueClientTypes.HudiTarget]? = nil, icebergTargets: [GlueClientTypes.IcebergTarget]? = nil, jdbcTargets: [GlueClientTypes.JdbcTarget]? = nil, mongoDBTargets: [GlueClientTypes.MongoDBTarget]? = nil, @@ -9537,6 +9617,7 @@ extension GlueClientTypes { self.catalogTargets = catalogTargets self.deltaTargets = deltaTargets self.dynamoDBTargets = dynamoDBTargets + self.hudiTargets = hudiTargets self.icebergTargets = icebergTargets self.jdbcTargets = jdbcTargets self.mongoDBTargets = mongoDBTargets @@ -11622,17 +11703,19 @@ public struct CreateJobInput: Swift.Equatable { public var tags: [Swift.String:Swift.String]? /// The job timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. The default is 2,880 minutes (48 hours). public var timeout: Swift.Int? - /// The type of predefined worker that is allocated when a job runs. Accepts a value of Standard, G.1X, G.2X, or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. + /// The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. /// - /// * For the Standard worker type, each worker provides 4 vCPU, 16 GB of memory and a 50GB disk, and 2 executors per worker. + /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPUs, 16 GB of memory) with 84GB disk (approximately 34GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPU, 16 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for memory-intensive jobs. + /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPUs, 32 GB of memory) with 128GB disk (approximately 77GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPU, 32 GB of memory, 128 GB disk), and provides 1 executor per worker. We recommend this worker type for memory-intensive jobs. + /// * For the G.4X worker type, each worker maps to 4 DPU (16 vCPUs, 64 GB of memory) with 256GB disk (approximately 235GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs in the following Amazon Web Services Regions: US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Canada (Central), Europe (Frankfurt), Europe (Ireland), and Europe (Stockholm). + /// + /// * For the G.8X worker type, each worker maps to 8 DPU (32 vCPUs, 128 GB of memory) with 512GB disk (approximately 487GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs, in the same Amazon Web Services Regions as supported for the G.4X worker type. /// - /// * For the G.025X worker type, each worker maps to 0.25 DPU (2 vCPU, 4 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 streaming jobs. + /// * For the G.025X worker type, each worker maps to 0.25 DPU (2 vCPUs, 4 GB of memory) with 84GB disk (approximately 34GB free), and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 streaming jobs. /// - /// * For the Z.2X worker type, each worker maps to 2 M-DPU (8vCPU, 64 GB of m emory, 128 GB disk), and provides up to 8 Ray workers based on the autoscaler. + /// * For the Z.2X worker type, each worker maps to 2 M-DPU (8vCPUs, 64 GB of memory) with 128 GB disk (approximately 120GB free), and provides up to 8 Ray workers based on the autoscaler. public var workerType: GlueClientTypes.WorkerType? public init( @@ -13381,15 +13464,17 @@ public struct CreateSessionInput: Swift.Equatable { public var tags: [Swift.String:Swift.String]? /// The number of minutes before session times out. Default for Spark ETL jobs is 48 hours (2880 minutes), the maximum session lifetime for this job type. Consult the documentation for other job types. public var timeout: Swift.Int? - /// The type of predefined worker that is allocated to use for the session. Accepts a value of Standard, G.1X, G.2X, or G.025X. + /// The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, or G.8X for Spark jobs. Accepts the value Z.2X for Ray notebooks. /// - /// * For the Standard worker type, each worker provides 4 vCPU, 16 GB of memory and a 50GB disk, and 2 executors per worker. + /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPUs, 16 GB of memory) with 84GB disk (approximately 34GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPU, 16 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for memory-intensive jobs. + /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPUs, 32 GB of memory) with 128GB disk (approximately 77GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPU, 32 GB of memory, 128 GB disk), and provides 1 executor per worker. We recommend this worker type for memory-intensive jobs. + /// * For the G.4X worker type, each worker maps to 4 DPU (16 vCPUs, 64 GB of memory) with 256GB disk (approximately 235GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs in the following Amazon Web Services Regions: US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Canada (Central), Europe (Frankfurt), Europe (Ireland), and Europe (Stockholm). + /// + /// * For the G.8X worker type, each worker maps to 8 DPU (32 vCPUs, 128 GB of memory) with 512GB disk (approximately 487GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs, in the same Amazon Web Services Regions as supported for the G.4X worker type. /// - /// * For the G.025X worker type, each worker maps to 0.25 DPU (2 vCPU, 4 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 streaming jobs. + /// * For the Z.2X worker type, each worker maps to 2 M-DPU (8vCPUs, 64 GB of memory) with 128 GB disk (approximately 120GB free), and provides up to 8 Ray workers based on the autoscaler. public var workerType: GlueClientTypes.WorkerType? public init( @@ -33037,6 +33122,95 @@ extension GlueClientTypes { } +extension GlueClientTypes.HudiTarget: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case connectionName = "ConnectionName" + case exclusions = "Exclusions" + case maximumTraversalDepth = "MaximumTraversalDepth" + case paths = "Paths" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let connectionName = self.connectionName { + try encodeContainer.encode(connectionName, forKey: .connectionName) + } + if let exclusions = exclusions { + var exclusionsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .exclusions) + for path0 in exclusions { + try exclusionsContainer.encode(path0) + } + } + if let maximumTraversalDepth = self.maximumTraversalDepth { + try encodeContainer.encode(maximumTraversalDepth, forKey: .maximumTraversalDepth) + } + if let paths = paths { + var pathsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .paths) + for path0 in paths { + try pathsContainer.encode(path0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let pathsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .paths) + var pathsDecoded0:[Swift.String]? = nil + if let pathsContainer = pathsContainer { + pathsDecoded0 = [Swift.String]() + for string0 in pathsContainer { + if let string0 = string0 { + pathsDecoded0?.append(string0) + } + } + } + paths = pathsDecoded0 + let connectionNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .connectionName) + connectionName = connectionNameDecoded + let exclusionsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .exclusions) + var exclusionsDecoded0:[Swift.String]? = nil + if let exclusionsContainer = exclusionsContainer { + exclusionsDecoded0 = [Swift.String]() + for string0 in exclusionsContainer { + if let string0 = string0 { + exclusionsDecoded0?.append(string0) + } + } + } + exclusions = exclusionsDecoded0 + let maximumTraversalDepthDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maximumTraversalDepth) + maximumTraversalDepth = maximumTraversalDepthDecoded + } +} + +extension GlueClientTypes { + /// Specifies an Apache Hudi data source. + public struct HudiTarget: Swift.Equatable { + /// The name of the connection to use to connect to the Hudi target. If your Hudi files are stored in buckets that require VPC authorization, you can set their connection properties here. + public var connectionName: Swift.String? + /// A list of glob patterns used to exclude from the crawl. For more information, see [Catalog Tables with a Crawler](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html). + public var exclusions: [Swift.String]? + /// The maximum depth of Amazon S3 paths that the crawler can traverse to discover the Hudi metadata folder in your Amazon S3 path. Used to limit the crawler run time. + public var maximumTraversalDepth: Swift.Int? + /// An array of Amazon S3 location strings for Hudi, each indicating the root folder with which the metadata files for a Hudi table resides. The Hudi folder may be located in a child folder of the root folder. The crawler will scan all folders underneath a path for a Hudi folder. + public var paths: [Swift.String]? + + public init( + connectionName: Swift.String? = nil, + exclusions: [Swift.String]? = nil, + maximumTraversalDepth: Swift.Int? = nil, + paths: [Swift.String]? = nil + ) + { + self.connectionName = connectionName + self.exclusions = exclusions + self.maximumTraversalDepth = maximumTraversalDepth + self.paths = paths + } + } + +} + extension GlueClientTypes { public enum HudiTargetCompressionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case gzip @@ -34672,21 +34846,19 @@ extension GlueClientTypes { public var sourceControlDetails: GlueClientTypes.SourceControlDetails? /// The job timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. The default is 2,880 minutes (48 hours). public var timeout: Swift.Int? - /// The type of predefined worker that is allocated when a job runs. Accepts a value of Standard, G.1X, G.2X, G.4X, G.8X, or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. + /// The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. /// - /// * For the Standard worker type, each worker provides 4 vCPU, 16 GB of memory and a 50GB disk, and 2 executors per worker. - /// - /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPU, 16 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. + /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPUs, 16 GB of memory) with 84GB disk (approximately 34GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPU, 32 GB of memory, 128 GB disk), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. + /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPUs, 32 GB of memory) with 128GB disk (approximately 77GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.4X worker type, each worker maps to 4 DPU (16 vCPU, 64 GB of memory, 256 GB disk), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs in the following Amazon Web Services Regions: US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Canada (Central), Europe (Frankfurt), Europe (Ireland), and Europe (Stockholm). + /// * For the G.4X worker type, each worker maps to 4 DPU (16 vCPUs, 64 GB of memory) with 256GB disk (approximately 235GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs in the following Amazon Web Services Regions: US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Canada (Central), Europe (Frankfurt), Europe (Ireland), and Europe (Stockholm). /// - /// * For the G.8X worker type, each worker maps to 8 DPU (32 vCPU, 128 GB of memory, 512 GB disk), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs, in the same Amazon Web Services Regions as supported for the G.4X worker type. + /// * For the G.8X worker type, each worker maps to 8 DPU (32 vCPUs, 128 GB of memory) with 512GB disk (approximately 487GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs, in the same Amazon Web Services Regions as supported for the G.4X worker type. /// - /// * For the G.025X worker type, each worker maps to 0.25 DPU (2 vCPU, 4 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 streaming jobs. + /// * For the G.025X worker type, each worker maps to 0.25 DPU (2 vCPUs, 4 GB of memory) with 84GB disk (approximately 34GB free), and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 streaming jobs. /// - /// * For the Z.2X worker type, each worker maps to 2 M-DPU (8vCPU, 64 GB of m emory, 128 GB disk), and provides a default of 8 Ray workers (1 per vCPU). + /// * For the Z.2X worker type, each worker maps to 2 M-DPU (8vCPUs, 64 GB of memory) with 128 GB disk (approximately 120GB free), and provides up to 8 Ray workers based on the autoscaler. public var workerType: GlueClientTypes.WorkerType? public init( @@ -35262,17 +35434,19 @@ extension GlueClientTypes { public var timeout: Swift.Int? /// The name of the trigger that started this job run. public var triggerName: Swift.String? - /// The type of predefined worker that is allocated when a job runs. Accepts a value of Standard, G.1X, G.2X, or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. + /// The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. /// - /// * For the Standard worker type, each worker provides 4 vCPU, 16 GB of memory and a 50GB disk, and 2 executors per worker. + /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPUs, 16 GB of memory) with 84GB disk (approximately 34GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPU, 16 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for memory-intensive jobs. + /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPUs, 32 GB of memory) with 128GB disk (approximately 77GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPU, 32 GB of memory, 128 GB disk), and provides 1 executor per worker. We recommend this worker type for memory-intensive jobs. + /// * For the G.4X worker type, each worker maps to 4 DPU (16 vCPUs, 64 GB of memory) with 256GB disk (approximately 235GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs in the following Amazon Web Services Regions: US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Canada (Central), Europe (Frankfurt), Europe (Ireland), and Europe (Stockholm). + /// + /// * For the G.8X worker type, each worker maps to 8 DPU (32 vCPUs, 128 GB of memory) with 512GB disk (approximately 487GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs, in the same Amazon Web Services Regions as supported for the G.4X worker type. /// - /// * For the G.025X worker type, each worker maps to 0.25 DPU (2 vCPU, 4 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 streaming jobs. + /// * For the G.025X worker type, each worker maps to 0.25 DPU (2 vCPUs, 4 GB of memory) with 84GB disk (approximately 34GB free), and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 streaming jobs. /// - /// * For the Z.2X worker type, each worker maps to 2 M-DPU (8vCPU, 64 GB of m emory, 128 GB disk), and provides up to 8 Ray workers (one per vCPU) based on the autoscaler. + /// * For the Z.2X worker type, each worker maps to 2 M-DPU (8vCPUs, 64 GB of memory) with 128 GB disk (approximately 120GB free), and provides up to 8 Ray workers based on the autoscaler. public var workerType: GlueClientTypes.WorkerType? public init( @@ -35604,17 +35778,19 @@ extension GlueClientTypes { public var sourceControlDetails: GlueClientTypes.SourceControlDetails? /// The job timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. The default is 2,880 minutes (48 hours). public var timeout: Swift.Int? - /// The type of predefined worker that is allocated when a job runs. Accepts a value of Standard, G.1X, G.2X, or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. + /// The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. /// - /// * For the Standard worker type, each worker provides 4 vCPU, 16 GB of memory and a 50GB disk, and 2 executors per worker. + /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPUs, 16 GB of memory) with 84GB disk (approximately 34GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPU, 16 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for memory-intensive jobs. + /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPUs, 32 GB of memory) with 128GB disk (approximately 77GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPU, 32 GB of memory, 128 GB disk), and provides 1 executor per worker. We recommend this worker type for memory-intensive jobs. + /// * For the G.4X worker type, each worker maps to 4 DPU (16 vCPUs, 64 GB of memory) with 256GB disk (approximately 235GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs in the following Amazon Web Services Regions: US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Canada (Central), Europe (Frankfurt), Europe (Ireland), and Europe (Stockholm). /// - /// * For the G.025X worker type, each worker maps to 0.25 DPU (2 vCPU, 4 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 streaming jobs. + /// * For the G.8X worker type, each worker maps to 8 DPU (32 vCPUs, 128 GB of memory) with 512GB disk (approximately 487GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs, in the same Amazon Web Services Regions as supported for the G.4X worker type. /// - /// * For the Z.2X worker type, each worker maps to 2 M-DPU (8vCPU, 64 GB of m emory, 128 GB disk), and provides up to 8 Ray workers based on the autoscaler. + /// * For the G.025X worker type, each worker maps to 0.25 DPU (2 vCPUs, 4 GB of memory) with 84GB disk (approximately 34GB free), and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 streaming jobs. + /// + /// * For the Z.2X worker type, each worker maps to 2 M-DPU (8vCPUs, 64 GB of memory) with 128 GB disk (approximately 120GB free), and provides up to 8 Ray workers based on the autoscaler. public var workerType: GlueClientTypes.WorkerType? public init( @@ -42481,12 +42657,16 @@ extension GlueClientTypes { public enum PermissionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case cellFilterPermission case columnPermission + case nestedCellPermission + case nestedPermission case sdkUnknown(Swift.String) public static var allCases: [PermissionType] { return [ .cellFilterPermission, .columnPermission, + .nestedCellPermission, + .nestedPermission, .sdkUnknown("") ] } @@ -42498,6 +42678,8 @@ extension GlueClientTypes { switch self { case .cellFilterPermission: return "CELL_FILTER_PERMISSION" case .columnPermission: return "COLUMN_PERMISSION" + case .nestedCellPermission: return "NESTED_CELL_PERMISSION" + case .nestedPermission: return "NESTED_PERMISSION" case let .sdkUnknown(s): return s } } @@ -43860,6 +44042,123 @@ extension GlueClientTypes { } } +extension GlueClientTypes.Recipe: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case inputs = "Inputs" + case name = "Name" + case recipeReference = "RecipeReference" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let inputs = inputs { + var inputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputs) + for nodeid0 in inputs { + try inputsContainer.encode(nodeid0) + } + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let recipeReference = self.recipeReference { + try encodeContainer.encode(recipeReference, forKey: .recipeReference) + } + } + + 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 inputsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .inputs) + var inputsDecoded0:[Swift.String]? = nil + if let inputsContainer = inputsContainer { + inputsDecoded0 = [Swift.String]() + for string0 in inputsContainer { + if let string0 = string0 { + inputsDecoded0?.append(string0) + } + } + } + inputs = inputsDecoded0 + let recipeReferenceDecoded = try containerValues.decodeIfPresent(GlueClientTypes.RecipeReference.self, forKey: .recipeReference) + recipeReference = recipeReferenceDecoded + } +} + +extension GlueClientTypes { + /// A Glue Studio node that uses a Glue DataBrew recipe in Glue jobs. + public struct Recipe: Swift.Equatable { + /// The nodes that are inputs to the recipe node, identified by id. + /// This member is required. + public var inputs: [Swift.String]? + /// The name of the Glue Studio node. + /// This member is required. + public var name: Swift.String? + /// A reference to the DataBrew recipe used by the node. + /// This member is required. + public var recipeReference: GlueClientTypes.RecipeReference? + + public init( + inputs: [Swift.String]? = nil, + name: Swift.String? = nil, + recipeReference: GlueClientTypes.RecipeReference? = nil + ) + { + self.inputs = inputs + self.name = name + self.recipeReference = recipeReference + } + } + +} + +extension GlueClientTypes.RecipeReference: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case recipeArn = "RecipeArn" + case recipeVersion = "RecipeVersion" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let recipeArn = self.recipeArn { + try encodeContainer.encode(recipeArn, forKey: .recipeArn) + } + if let recipeVersion = self.recipeVersion { + try encodeContainer.encode(recipeVersion, forKey: .recipeVersion) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let recipeArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .recipeArn) + recipeArn = recipeArnDecoded + let recipeVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .recipeVersion) + recipeVersion = recipeVersionDecoded + } +} + +extension GlueClientTypes { + /// A reference to a Glue DataBrew recipe. + public struct RecipeReference: Swift.Equatable { + /// The ARN of the DataBrew recipe. + /// This member is required. + public var recipeArn: Swift.String? + /// The RecipeVersion of the DataBrew recipe. + /// This member is required. + public var recipeVersion: Swift.String? + + public init( + recipeArn: Swift.String? = nil, + recipeVersion: Swift.String? = nil + ) + { + self.recipeArn = recipeArn + self.recipeVersion = recipeVersion + } + } + +} + extension GlueClientTypes { public enum RecrawlBehavior: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case crawlEventMode @@ -49587,6 +49886,415 @@ extension GlueClientTypes { } +extension GlueClientTypes.SnowflakeNodeData: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case action = "Action" + case additionalOptions = "AdditionalOptions" + case autoPushdown = "AutoPushdown" + case connection = "Connection" + case database = "Database" + case iamRole = "IamRole" + case mergeAction = "MergeAction" + case mergeClause = "MergeClause" + case mergeWhenMatched = "MergeWhenMatched" + case mergeWhenNotMatched = "MergeWhenNotMatched" + case postAction = "PostAction" + case preAction = "PreAction" + case sampleQuery = "SampleQuery" + case schema = "Schema" + case selectedColumns = "SelectedColumns" + case sourceType = "SourceType" + case stagingTable = "StagingTable" + case table = "Table" + case tableSchema = "TableSchema" + case tempDir = "TempDir" + case upsert = "Upsert" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let action = self.action { + try encodeContainer.encode(action, forKey: .action) + } + if let additionalOptions = additionalOptions { + var additionalOptionsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .additionalOptions) + for (dictKey0, additionalOptions0) in additionalOptions { + try additionalOptionsContainer.encode(additionalOptions0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + if autoPushdown != false { + try encodeContainer.encode(autoPushdown, forKey: .autoPushdown) + } + if let connection = self.connection { + try encodeContainer.encode(connection, forKey: .connection) + } + if let database = self.database { + try encodeContainer.encode(database, forKey: .database) + } + if let iamRole = self.iamRole { + try encodeContainer.encode(iamRole, forKey: .iamRole) + } + if let mergeAction = self.mergeAction { + try encodeContainer.encode(mergeAction, forKey: .mergeAction) + } + if let mergeClause = self.mergeClause { + try encodeContainer.encode(mergeClause, forKey: .mergeClause) + } + if let mergeWhenMatched = self.mergeWhenMatched { + try encodeContainer.encode(mergeWhenMatched, forKey: .mergeWhenMatched) + } + if let mergeWhenNotMatched = self.mergeWhenNotMatched { + try encodeContainer.encode(mergeWhenNotMatched, forKey: .mergeWhenNotMatched) + } + if let postAction = self.postAction { + try encodeContainer.encode(postAction, forKey: .postAction) + } + if let preAction = self.preAction { + try encodeContainer.encode(preAction, forKey: .preAction) + } + if let sampleQuery = self.sampleQuery { + try encodeContainer.encode(sampleQuery, forKey: .sampleQuery) + } + if let schema = self.schema { + try encodeContainer.encode(schema, forKey: .schema) + } + if let selectedColumns = selectedColumns { + var selectedColumnsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .selectedColumns) + for option0 in selectedColumns { + try selectedColumnsContainer.encode(option0) + } + } + if let sourceType = self.sourceType { + try encodeContainer.encode(sourceType, forKey: .sourceType) + } + if let stagingTable = self.stagingTable { + try encodeContainer.encode(stagingTable, forKey: .stagingTable) + } + if let table = self.table { + try encodeContainer.encode(table, forKey: .table) + } + if let tableSchema = tableSchema { + var tableSchemaContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tableSchema) + for option0 in tableSchema { + try tableSchemaContainer.encode(option0) + } + } + if let tempDir = self.tempDir { + try encodeContainer.encode(tempDir, forKey: .tempDir) + } + if upsert != false { + try encodeContainer.encode(upsert, forKey: .upsert) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sourceTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceType) + sourceType = sourceTypeDecoded + let connectionDecoded = try containerValues.decodeIfPresent(GlueClientTypes.Option.self, forKey: .connection) + connection = connectionDecoded + let schemaDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schema) + schema = schemaDecoded + let tableDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .table) + table = tableDecoded + let databaseDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .database) + database = databaseDecoded + let tempDirDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .tempDir) + tempDir = tempDirDecoded + let iamRoleDecoded = try containerValues.decodeIfPresent(GlueClientTypes.Option.self, forKey: .iamRole) + iamRole = iamRoleDecoded + let additionalOptionsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .additionalOptions) + var additionalOptionsDecoded0: [Swift.String:Swift.String]? = nil + if let additionalOptionsContainer = additionalOptionsContainer { + additionalOptionsDecoded0 = [Swift.String:Swift.String]() + for (key0, enclosedinstringproperty0) in additionalOptionsContainer { + if let enclosedinstringproperty0 = enclosedinstringproperty0 { + additionalOptionsDecoded0?[key0] = enclosedinstringproperty0 + } + } + } + additionalOptions = additionalOptionsDecoded0 + let sampleQueryDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sampleQuery) + sampleQuery = sampleQueryDecoded + let preActionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .preAction) + preAction = preActionDecoded + let postActionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .postAction) + postAction = postActionDecoded + let actionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .action) + action = actionDecoded + let upsertDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .upsert) ?? false + upsert = upsertDecoded + let mergeActionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mergeAction) + mergeAction = mergeActionDecoded + let mergeWhenMatchedDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mergeWhenMatched) + mergeWhenMatched = mergeWhenMatchedDecoded + let mergeWhenNotMatchedDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mergeWhenNotMatched) + mergeWhenNotMatched = mergeWhenNotMatchedDecoded + let mergeClauseDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .mergeClause) + mergeClause = mergeClauseDecoded + let stagingTableDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .stagingTable) + stagingTable = stagingTableDecoded + let selectedColumnsContainer = try containerValues.decodeIfPresent([GlueClientTypes.Option?].self, forKey: .selectedColumns) + var selectedColumnsDecoded0:[GlueClientTypes.Option]? = nil + if let selectedColumnsContainer = selectedColumnsContainer { + selectedColumnsDecoded0 = [GlueClientTypes.Option]() + for structure0 in selectedColumnsContainer { + if let structure0 = structure0 { + selectedColumnsDecoded0?.append(structure0) + } + } + } + selectedColumns = selectedColumnsDecoded0 + let autoPushdownDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .autoPushdown) ?? false + autoPushdown = autoPushdownDecoded + let tableSchemaContainer = try containerValues.decodeIfPresent([GlueClientTypes.Option?].self, forKey: .tableSchema) + var tableSchemaDecoded0:[GlueClientTypes.Option]? = nil + if let tableSchemaContainer = tableSchemaContainer { + tableSchemaDecoded0 = [GlueClientTypes.Option]() + for structure0 in tableSchemaContainer { + if let structure0 = structure0 { + tableSchemaDecoded0?.append(structure0) + } + } + } + tableSchema = tableSchemaDecoded0 + } +} + +extension GlueClientTypes { + /// Specifies configuration for Snowflake nodes in Glue Studio. + public struct SnowflakeNodeData: Swift.Equatable { + /// Specifies what action to take when writing to a table with preexisting data. Valid values: append, merge, truncate, drop. + public var action: Swift.String? + /// Specifies additional options passed to the Snowflake connector. If options are specified elsewhere in this node, this will take precedence. + public var additionalOptions: [Swift.String:Swift.String]? + /// Specifies whether automatic query pushdown is enabled. If pushdown is enabled, then when a query is run on Spark, if part of the query can be "pushed down" to the Snowflake server, it is pushed down. This improves performance of some queries. + public var autoPushdown: Swift.Bool + /// Specifies a Glue Data Catalog Connection to a Snowflake endpoint. + public var connection: GlueClientTypes.Option? + /// Specifies a Snowflake database for your node to use. + public var database: Swift.String? + /// Not currently used. + public var iamRole: GlueClientTypes.Option? + /// Specifies a merge action. Valid values: simple, custom. If simple, merge behavior is defined by MergeWhenMatched and MergeWhenNotMatched. If custom, defined by MergeClause. + public var mergeAction: Swift.String? + /// A SQL statement that specifies a custom merge behavior. + public var mergeClause: Swift.String? + /// Specifies how to resolve records that match preexisting data when merging. Valid values: update, delete. + public var mergeWhenMatched: Swift.String? + /// Specifies how to process records that do not match preexisting data when merging. Valid values: insert, none. + public var mergeWhenNotMatched: Swift.String? + /// A SQL string run after the Snowflake connector performs its standard actions. + public var postAction: Swift.String? + /// A SQL string run before the Snowflake connector performs its standard actions. + public var preAction: Swift.String? + /// A SQL string used to retrieve data with the query sourcetype. + public var sampleQuery: Swift.String? + /// Specifies a Snowflake database schema for your node to use. + public var schema: Swift.String? + /// Specifies the columns combined to identify a record when detecting matches for merges and upserts. A list of structures with value, label and description keys. Each structure describes a column. + public var selectedColumns: [GlueClientTypes.Option]? + /// Specifies how retrieved data is specified. Valid values: "table", "query". + public var sourceType: Swift.String? + /// The name of a staging table used when performing merge or upsert append actions. Data is written to this table, then moved to table by a generated postaction. + public var stagingTable: Swift.String? + /// Specifies a Snowflake table for your node to use. + public var table: Swift.String? + /// Manually defines the target schema for the node. A list of structures with value , label and description keys. Each structure defines a column. + public var tableSchema: [GlueClientTypes.Option]? + /// Not currently used. + public var tempDir: Swift.String? + /// Used when Action is append. Specifies the resolution behavior when a row already exists. If true, preexisting rows will be updated. If false, those rows will be inserted. + public var upsert: Swift.Bool + + public init( + action: Swift.String? = nil, + additionalOptions: [Swift.String:Swift.String]? = nil, + autoPushdown: Swift.Bool = false, + connection: GlueClientTypes.Option? = nil, + database: Swift.String? = nil, + iamRole: GlueClientTypes.Option? = nil, + mergeAction: Swift.String? = nil, + mergeClause: Swift.String? = nil, + mergeWhenMatched: Swift.String? = nil, + mergeWhenNotMatched: Swift.String? = nil, + postAction: Swift.String? = nil, + preAction: Swift.String? = nil, + sampleQuery: Swift.String? = nil, + schema: Swift.String? = nil, + selectedColumns: [GlueClientTypes.Option]? = nil, + sourceType: Swift.String? = nil, + stagingTable: Swift.String? = nil, + table: Swift.String? = nil, + tableSchema: [GlueClientTypes.Option]? = nil, + tempDir: Swift.String? = nil, + upsert: Swift.Bool = false + ) + { + self.action = action + self.additionalOptions = additionalOptions + self.autoPushdown = autoPushdown + self.connection = connection + self.database = database + self.iamRole = iamRole + self.mergeAction = mergeAction + self.mergeClause = mergeClause + self.mergeWhenMatched = mergeWhenMatched + self.mergeWhenNotMatched = mergeWhenNotMatched + self.postAction = postAction + self.preAction = preAction + self.sampleQuery = sampleQuery + self.schema = schema + self.selectedColumns = selectedColumns + self.sourceType = sourceType + self.stagingTable = stagingTable + self.table = table + self.tableSchema = tableSchema + self.tempDir = tempDir + self.upsert = upsert + } + } + +} + +extension GlueClientTypes.SnowflakeSource: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case data = "Data" + case name = "Name" + case outputSchemas = "OutputSchemas" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let data = self.data { + try encodeContainer.encode(data, forKey: .data) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let outputSchemas = outputSchemas { + var outputSchemasContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputSchemas) + for glueschema0 in outputSchemas { + try outputSchemasContainer.encode(glueschema0) + } + } + } + + 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 dataDecoded = try containerValues.decodeIfPresent(GlueClientTypes.SnowflakeNodeData.self, forKey: .data) + data = dataDecoded + let outputSchemasContainer = try containerValues.decodeIfPresent([GlueClientTypes.GlueSchema?].self, forKey: .outputSchemas) + var outputSchemasDecoded0:[GlueClientTypes.GlueSchema]? = nil + if let outputSchemasContainer = outputSchemasContainer { + outputSchemasDecoded0 = [GlueClientTypes.GlueSchema]() + for structure0 in outputSchemasContainer { + if let structure0 = structure0 { + outputSchemasDecoded0?.append(structure0) + } + } + } + outputSchemas = outputSchemasDecoded0 + } +} + +extension GlueClientTypes { + /// Specifies a Snowflake data source. + public struct SnowflakeSource: Swift.Equatable { + /// Configuration for the Snowflake data source. + /// This member is required. + public var data: GlueClientTypes.SnowflakeNodeData? + /// The name of the Snowflake data source. + /// This member is required. + public var name: Swift.String? + /// Specifies user-defined schemas for your output data. + public var outputSchemas: [GlueClientTypes.GlueSchema]? + + public init( + data: GlueClientTypes.SnowflakeNodeData? = nil, + name: Swift.String? = nil, + outputSchemas: [GlueClientTypes.GlueSchema]? = nil + ) + { + self.data = data + self.name = name + self.outputSchemas = outputSchemas + } + } + +} + +extension GlueClientTypes.SnowflakeTarget: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case data = "Data" + case inputs = "Inputs" + case name = "Name" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let data = self.data { + try encodeContainer.encode(data, forKey: .data) + } + if let inputs = inputs { + var inputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputs) + for nodeid0 in inputs { + try inputsContainer.encode(nodeid0) + } + } + 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 nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let dataDecoded = try containerValues.decodeIfPresent(GlueClientTypes.SnowflakeNodeData.self, forKey: .data) + data = dataDecoded + let inputsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .inputs) + var inputsDecoded0:[Swift.String]? = nil + if let inputsContainer = inputsContainer { + inputsDecoded0 = [Swift.String]() + for string0 in inputsContainer { + if let string0 = string0 { + inputsDecoded0?.append(string0) + } + } + } + inputs = inputsDecoded0 + } +} + +extension GlueClientTypes { + /// Specifies a Snowflake target. + public struct SnowflakeTarget: Swift.Equatable { + /// Specifies the data of the Snowflake target node. + /// This member is required. + public var data: GlueClientTypes.SnowflakeNodeData? + /// The nodes that are inputs to the data target. + public var inputs: [Swift.String]? + /// The name of the Snowflake target. + /// This member is required. + public var name: Swift.String? + + public init( + data: GlueClientTypes.SnowflakeNodeData? = nil, + inputs: [Swift.String]? = nil, + name: Swift.String? = nil + ) + { + self.data = data + self.inputs = inputs + self.name = name + } + } + +} + extension GlueClientTypes { public enum Sort: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case ascending @@ -51441,17 +52149,19 @@ public struct StartJobRunInput: Swift.Equatable { public var securityConfiguration: Swift.String? /// The JobRun timeout in minutes. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status. This value overrides the timeout value set in the parent job. Streaming jobs do not have a timeout. The default for non-streaming jobs is 2,880 minutes (48 hours). public var timeout: Swift.Int? - /// The type of predefined worker that is allocated when a job runs. Accepts a value of Standard, G.1X, G.2X, or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. + /// The type of predefined worker that is allocated when a job runs. Accepts a value of G.1X, G.2X, G.4X, G.8X or G.025X for Spark jobs. Accepts the value Z.2X for Ray jobs. /// - /// * For the Standard worker type, each worker provides 4 vCPU, 16 GB of memory and a 50GB disk, and 2 executors per worker. + /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPUs, 16 GB of memory) with 84GB disk (approximately 34GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.1X worker type, each worker maps to 1 DPU (4 vCPU, 16 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for memory-intensive jobs. + /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPUs, 32 GB of memory) with 128GB disk (approximately 77GB free), and provides 1 executor per worker. We recommend this worker type for workloads such as data transforms, joins, and queries, to offers a scalable and cost effective way to run most jobs. /// - /// * For the G.2X worker type, each worker maps to 2 DPU (8 vCPU, 32 GB of memory, 128 GB disk), and provides 1 executor per worker. We recommend this worker type for memory-intensive jobs. + /// * For the G.4X worker type, each worker maps to 4 DPU (16 vCPUs, 64 GB of memory) with 256GB disk (approximately 235GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs in the following Amazon Web Services Regions: US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Canada (Central), Europe (Frankfurt), Europe (Ireland), and Europe (Stockholm). + /// + /// * For the G.8X worker type, each worker maps to 8 DPU (32 vCPUs, 128 GB of memory) with 512GB disk (approximately 487GB free), and provides 1 executor per worker. We recommend this worker type for jobs whose workloads contain your most demanding transforms, aggregations, joins, and queries. This worker type is available only for Glue version 3.0 or later Spark ETL jobs, in the same Amazon Web Services Regions as supported for the G.4X worker type. /// - /// * For the G.025X worker type, each worker maps to 0.25 DPU (2 vCPU, 4 GB of memory, 64 GB disk), and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 streaming jobs. + /// * For the G.025X worker type, each worker maps to 0.25 DPU (2 vCPUs, 4 GB of memory) with 84GB disk (approximately 34GB free), and provides 1 executor per worker. We recommend this worker type for low volume streaming jobs. This worker type is only available for Glue version 3.0 streaming jobs. /// - /// * For the Z.2X worker type, each worker maps to 2 DPU (8vCPU, 64 GB of m emory, 128 GB disk), and provides up to 8 Ray workers (one per vCPU) based on the autoscaler. + /// * For the Z.2X worker type, each worker maps to 2 M-DPU (8vCPUs, 64 GB of memory) with 128 GB disk (approximately 120GB free), and provides up to 8 Ray workers based on the autoscaler. public var workerType: GlueClientTypes.WorkerType? public init( diff --git a/Sources/Services/AWSGrafana/GrafanaClient.swift b/Sources/Services/AWSGrafana/GrafanaClient.swift index baf59790702..4fa69907ec5 100644 --- a/Sources/Services/AWSGrafana/GrafanaClient.swift +++ b/Sources/Services/AWSGrafana/GrafanaClient.swift @@ -445,6 +445,40 @@ extension GrafanaClient: GrafanaClientProtocol { return result } + /// Lists available versions of Grafana. These are available when calling CreateWorkspace. Optionally, include a workspace to list the versions to which it can be upgraded. + public func listVersions(input: ListVersionsInput) async throws -> ListVersionsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listVersions") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "grafana") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listVersions") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Returns a list of Amazon Managed Grafana workspaces in the account, with some information about each workspace. For more complete information about one workspace, use [DescribeWorkspace](https://docs.aws.amazon.com/AAMG/latest/APIReference/API_DescribeWorkspace.html). public func listWorkspaces(input: ListWorkspacesInput) async throws -> ListWorkspacesOutputResponse { diff --git a/Sources/Services/AWSGrafana/GrafanaClientProtocol.swift b/Sources/Services/AWSGrafana/GrafanaClientProtocol.swift index 32e87fe6ec4..c851d6d6fa5 100644 --- a/Sources/Services/AWSGrafana/GrafanaClientProtocol.swift +++ b/Sources/Services/AWSGrafana/GrafanaClientProtocol.swift @@ -26,6 +26,8 @@ public protocol GrafanaClientProtocol { func listPermissions(input: ListPermissionsInput) async throws -> ListPermissionsOutputResponse /// The ListTagsForResource operation returns the tags that are associated with the Amazon Managed Service for Grafana resource specified by the resourceArn. Currently, the only resource that can be tagged is a workspace. func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse + /// Lists available versions of Grafana. These are available when calling CreateWorkspace. Optionally, include a workspace to list the versions to which it can be upgraded. + func listVersions(input: ListVersionsInput) async throws -> ListVersionsOutputResponse /// Returns a list of Amazon Managed Grafana workspaces in the account, with some information about each workspace. For more complete information about one workspace, use [DescribeWorkspace](https://docs.aws.amazon.com/AAMG/latest/APIReference/API_DescribeWorkspace.html). func listWorkspaces(input: ListWorkspacesInput) async throws -> ListWorkspacesOutputResponse /// The TagResource operation associates tags with an Amazon Managed Grafana resource. Currently, the only resource that can be tagged is workspaces. If you specify a new tag key for the resource, this tag is appended to the list of tags associated with the resource. If you specify a tag key that is already associated with the resource, the new tag value that you specify replaces the previous value for that tag. diff --git a/Sources/Services/AWSGrafana/Paginators.swift b/Sources/Services/AWSGrafana/Paginators.swift index 0f79619f2fc..38864a3ae0c 100644 --- a/Sources/Services/AWSGrafana/Paginators.swift +++ b/Sources/Services/AWSGrafana/Paginators.swift @@ -1,5 +1,35 @@ // Code generated by smithy-swift-codegen. DO NOT EDIT! +import ClientRuntime +extension GrafanaClient { + /// Paginate over `[ListVersionsOutputResponse]` 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 `[ListVersionsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListVersionsOutputResponse` + public func listVersionsPaginated(input: ListVersionsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListVersionsInput.nextToken, outputKey: \ListVersionsOutputResponse.nextToken, paginationFunction: self.listVersions(input:)) + } +} +extension ListVersionsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListVersionsInput { + return ListVersionsInput( + maxResults: self.maxResults, + nextToken: token, + workspaceId: self.workspaceId + )} +} +extension PaginatorSequence where Input == ListVersionsInput, Output == ListVersionsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listVersionsPaginated` + /// to access the nested member `[Swift.String]` + /// - Returns: `[Swift.String]` + public func grafanaVersions() async throws -> [Swift.String] { + return try await self.asyncCompactMap { item in item.grafanaVersions } + } +} diff --git a/Sources/Services/AWSGrafana/models/Models.swift b/Sources/Services/AWSGrafana/models/Models.swift index 6e35517fa45..2fe1a6d4649 100644 --- a/Sources/Services/AWSGrafana/models/Models.swift +++ b/Sources/Services/AWSGrafana/models/Models.swift @@ -827,7 +827,7 @@ public struct CreateWorkspaceInput: Swift.Equatable { public var clientToken: Swift.String? /// The configuration string for the workspace that you create. For more information about the format and configuration options available, see [Working in your Grafana workspace](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-configure-workspace.html). public var configuration: Swift.String? - /// Specifies the version of Grafana to support in the new workspace. Supported values are 8.4 and 9.4. + /// Specifies the version of Grafana to support in the new workspace. To get a list of supported version, use the ListVersions operation. public var grafanaVersion: Swift.String? /// Configuration for network access to your workspace. When this is configured, only listed IP addresses and VPC endpoints will be able to access your workspace. Standard Grafana authentication and authorization will still be required. If this is not configured, or is removed, then all IP addresses and VPC endpoints will be allowed. Standard Grafana authentication and authorization will still be required. public var networkAccessControl: GrafanaClientTypes.NetworkAccessConfiguration? @@ -840,7 +840,7 @@ public struct CreateWorkspaceInput: Swift.Equatable { public var stackSetName: Swift.String? /// The list of tags associated with the workspace. public var tags: [Swift.String:Swift.String]? - /// The configuration settings for an Amazon VPC that contains data sources for your Grafana workspace to connect to. + /// The configuration settings for an Amazon VPC that contains data sources for your Grafana workspace to connect to. Connecting to a private VPC is not yet available in the Asia Pacific (Seoul) Region (ap-northeast-2). public var vpcConfiguration: GrafanaClientTypes.VpcConfiguration? /// This parameter is for internal use only, and should not be used. public var workspaceDataSources: [GrafanaClientTypes.DataSourceType]? @@ -1472,8 +1472,10 @@ extension DescribeWorkspaceConfigurationOutputResponse: ClientRuntime.HttpRespon let responseDecoder = decoder { let output: DescribeWorkspaceConfigurationOutputResponseBody = try responseDecoder.decode(responseBody: data) self.configuration = output.configuration + self.grafanaVersion = output.grafanaVersion } else { self.configuration = nil + self.grafanaVersion = nil } } } @@ -1482,28 +1484,36 @@ public struct DescribeWorkspaceConfigurationOutputResponse: Swift.Equatable { /// The configuration string for the workspace that you requested. For more information about the format and configuration options available, see [Working in your Grafana workspace](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-configure-workspace.html). /// This member is required. public var configuration: Swift.String? + /// The supported Grafana version for the workspace. + public var grafanaVersion: Swift.String? public init( - configuration: Swift.String? = nil + configuration: Swift.String? = nil, + grafanaVersion: Swift.String? = nil ) { self.configuration = configuration + self.grafanaVersion = grafanaVersion } } struct DescribeWorkspaceConfigurationOutputResponseBody: Swift.Equatable { let configuration: Swift.String? + let grafanaVersion: Swift.String? } extension DescribeWorkspaceConfigurationOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case configuration + case grafanaVersion } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let configurationDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .configuration) configuration = configurationDecoded + let grafanaVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .grafanaVersion) + grafanaVersion = grafanaVersionDecoded } } @@ -2086,6 +2096,136 @@ extension ListTagsForResourceOutputResponseBody: Swift.Decodable { } } +extension ListVersionsInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let maxResults = maxResults { + let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let nextToken = nextToken { + let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let workspaceId = workspaceId { + let workspaceIdQueryItem = ClientRuntime.URLQueryItem(name: "workspace-id".urlPercentEncoding(), value: Swift.String(workspaceId).urlPercentEncoding()) + items.append(workspaceIdQueryItem) + } + return items + } + } +} + +extension ListVersionsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/versions" + } +} + +public struct ListVersionsInput: Swift.Equatable { + /// The maximum number of results to include in the response. + public var maxResults: Swift.Int? + /// The token to use when requesting the next set of results. You receive this token from a previous ListVersions operation. + public var nextToken: Swift.String? + /// The ID of the workspace to list the available upgrade versions. If not included, lists all versions of Grafana that are supported for CreateWorkspace. + public var workspaceId: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + workspaceId: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + self.workspaceId = workspaceId + } +} + +struct ListVersionsInputBody: Swift.Equatable { +} + +extension ListVersionsInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum ListVersionsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListVersionsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListVersionsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.grafanaVersions = output.grafanaVersions + self.nextToken = output.nextToken + } else { + self.grafanaVersions = nil + self.nextToken = nil + } + } +} + +public struct ListVersionsOutputResponse: Swift.Equatable { + /// The Grafana versions available to create. If a workspace ID is included in the request, the Grafana versions to which this workspace can be upgraded. + public var grafanaVersions: [Swift.String]? + /// The token to use in a subsequent ListVersions operation to return the next set of results. + public var nextToken: Swift.String? + + public init( + grafanaVersions: [Swift.String]? = nil, + nextToken: Swift.String? = nil + ) + { + self.grafanaVersions = grafanaVersions + self.nextToken = nextToken + } +} + +struct ListVersionsOutputResponseBody: Swift.Equatable { + let nextToken: Swift.String? + let grafanaVersions: [Swift.String]? +} + +extension ListVersionsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case grafanaVersions + case nextToken + } + + 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 grafanaVersionsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .grafanaVersions) + var grafanaVersionsDecoded0:[Swift.String]? = nil + if let grafanaVersionsContainer = grafanaVersionsContainer { + grafanaVersionsDecoded0 = [Swift.String]() + for string0 in grafanaVersionsContainer { + if let string0 = string0 { + grafanaVersionsDecoded0?.append(string0) + } + } + } + grafanaVersions = grafanaVersionsDecoded0 + } +} + extension ListWorkspacesInput: ClientRuntime.QueryItemProvider { public var queryItems: [ClientRuntime.URLQueryItem] { get throws { @@ -2257,12 +2397,12 @@ extension GrafanaClientTypes.NetworkAccessConfiguration: Swift.Codable { } extension GrafanaClientTypes { - /// The configuration settings for in-bound network access to your workspace. When this is configured, only listed IP addresses and VPC endpoints will be able to access your workspace. Standard Grafana authentication and authorization will still be required. If this is not configured, or is removed, then all IP addresses and VPC endpoints will be allowed. Standard Grafana authentication and authorization will still be required. + /// The configuration settings for in-bound network access to your workspace. When this is configured, only listed IP addresses and VPC endpoints will be able to access your workspace. Standard Grafana authentication and authorization are still required. Access is granted to a caller that is in either the IP address list or the VPC endpoint list - they do not need to be in both. If this is not configured, or is removed, then all IP addresses and VPC endpoints are allowed. Standard Grafana authentication and authorization are still required. While both prefixListIds and vpceIds are required, you can pass in an empty array of strings for either parameter if you do not want to allow any of that type. If both are passed as empty arrays, no traffic is allowed to the workspace, because only explicitly allowed connections are accepted. public struct NetworkAccessConfiguration: Swift.Equatable { - /// An array of prefix list IDs. A prefix list is a list of CIDR ranges of IP addresses. The IP addresses specified are allowed to access your workspace. If the list is not included in the configuration then no IP addresses will be allowed to access the workspace. You create a prefix list using the Amazon VPC console. Prefix list IDs have the format pl-1a2b3c4d . For more information about prefix lists, see [Group CIDR blocks using managed prefix lists](https://docs.aws.amazon.com/vpc/latest/userguide/managed-prefix-lists.html)in the Amazon Virtual Private Cloud User Guide. + /// An array of prefix list IDs. A prefix list is a list of CIDR ranges of IP addresses. The IP addresses specified are allowed to access your workspace. If the list is not included in the configuration (passed an empty array) then no IP addresses are allowed to access the workspace. You create a prefix list using the Amazon VPC console. Prefix list IDs have the format pl-1a2b3c4d . For more information about prefix lists, see [Group CIDR blocks using managed prefix lists](https://docs.aws.amazon.com/vpc/latest/userguide/managed-prefix-lists.html)in the Amazon Virtual Private Cloud User Guide. /// This member is required. public var prefixListIds: [Swift.String]? - /// An array of Amazon VPC endpoint IDs for the workspace. You can create VPC endpoints to your Amazon Managed Grafana workspace for access from within a VPC. If a NetworkAccessConfiguration is specified then only VPC endpoints specified here will be allowed to access the workspace. VPC endpoint IDs have the format vpce-1a2b3c4d . For more information about creating an interface VPC endpoint, see [Interface VPC endpoints](https://docs.aws.amazon.com/grafana/latest/userguide/VPC-endpoints) in the Amazon Managed Grafana User Guide. The only VPC endpoints that can be specified here are interface VPC endpoints for Grafana workspaces (using the com.amazonaws.[region].grafana-workspace service endpoint). Other VPC endpoints will be ignored. + /// An array of Amazon VPC endpoint IDs for the workspace. You can create VPC endpoints to your Amazon Managed Grafana workspace for access from within a VPC. If a NetworkAccessConfiguration is specified then only VPC endpoints specified here are allowed to access the workspace. If you pass in an empty array of strings, then no VPCs are allowed to access the workspace. VPC endpoint IDs have the format vpce-1a2b3c4d . For more information about creating an interface VPC endpoint, see [Interface VPC endpoints](https://docs.aws.amazon.com/grafana/latest/userguide/VPC-endpoints) in the Amazon Managed Grafana User Guide. The only VPC endpoints that can be specified here are interface VPC endpoints for Grafana workspaces (using the com.amazonaws.[region].grafana-workspace service endpoint). Other VPC endpoints are ignored. /// This member is required. public var vpceIds: [Swift.String]? @@ -3536,6 +3676,7 @@ extension UpdateWorkspaceAuthenticationOutputResponseBody: Swift.Decodable { extension UpdateWorkspaceConfigurationInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case configuration + case grafanaVersion } public func encode(to encoder: Swift.Encoder) throws { @@ -3543,6 +3684,9 @@ extension UpdateWorkspaceConfigurationInput: Swift.Encodable { if let configuration = self.configuration { try encodeContainer.encode(configuration, forKey: .configuration) } + if let grafanaVersion = self.grafanaVersion { + try encodeContainer.encode(grafanaVersion, forKey: .grafanaVersion) + } } } @@ -3559,33 +3703,41 @@ public struct UpdateWorkspaceConfigurationInput: Swift.Equatable { /// The new configuration string for the workspace. For more information about the format and configuration options available, see [Working in your Grafana workspace](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-configure-workspace.html). /// This member is required. public var configuration: Swift.String? + /// Specifies the version of Grafana to support in the new workspace. Can only be used to upgrade (for example, from 8.4 to 9.4), not downgrade (for example, from 9.4 to 8.4). To know what versions are available to upgrade to for a specific workspace, see the ListVersions operation. + public var grafanaVersion: Swift.String? /// The ID of the workspace to update. /// This member is required. public var workspaceId: Swift.String? public init( configuration: Swift.String? = nil, + grafanaVersion: Swift.String? = nil, workspaceId: Swift.String? = nil ) { self.configuration = configuration + self.grafanaVersion = grafanaVersion self.workspaceId = workspaceId } } struct UpdateWorkspaceConfigurationInputBody: Swift.Equatable { let configuration: Swift.String? + let grafanaVersion: Swift.String? } extension UpdateWorkspaceConfigurationInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case configuration + case grafanaVersion } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let configurationDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .configuration) configuration = configurationDecoded + let grafanaVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .grafanaVersion) + grafanaVersion = grafanaVersionDecoded } } @@ -4227,7 +4379,7 @@ extension GrafanaClientTypes.VpcConfiguration: Swift.Codable { } extension GrafanaClientTypes { - /// The configuration settings for an Amazon VPC that contains data sources for your Grafana workspace to connect to. Provided securityGroupIds and subnetIds must be part of the same VPC. + /// The configuration settings for an Amazon VPC that contains data sources for your Grafana workspace to connect to. Provided securityGroupIds and subnetIds must be part of the same VPC. Connecting to a private VPC is not yet available in the Asia Pacific (Seoul) Region (ap-northeast-2). public struct VpcConfiguration: Swift.Equatable { /// The list of Amazon EC2 security group IDs attached to the Amazon VPC for your Grafana workspace to connect. Duplicates not allowed. /// This member is required. @@ -4598,6 +4750,10 @@ extension GrafanaClientTypes { case upgradeFailed /// Workspace is being upgraded to enterprise. case upgrading + /// Workspace version update failed. + case versionUpdateFailed + /// Workspace version is being updated. + case versionUpdating case sdkUnknown(Swift.String) public static var allCases: [WorkspaceStatus] { @@ -4613,6 +4769,8 @@ extension GrafanaClientTypes { .updating, .upgradeFailed, .upgrading, + .versionUpdateFailed, + .versionUpdating, .sdkUnknown("") ] } @@ -4633,6 +4791,8 @@ extension GrafanaClientTypes { case .updating: return "UPDATING" case .upgradeFailed: return "UPGRADE_FAILED" case .upgrading: return "UPGRADING" + case .versionUpdateFailed: return "VERSION_UPDATE_FAILED" + case .versionUpdating: return "VERSION_UPDATING" case let .sdkUnknown(s): return s } } diff --git a/Sources/Services/AWSHealthLake/HealthLakeClient.swift b/Sources/Services/AWSHealthLake/HealthLakeClient.swift index af9d1db16ff..89ffef13eed 100644 --- a/Sources/Services/AWSHealthLake/HealthLakeClient.swift +++ b/Sources/Services/AWSHealthLake/HealthLakeClient.swift @@ -67,7 +67,7 @@ public struct HealthLakeClientLogHandlerFactory: ClientRuntime.SDKLogHandlerFact } extension HealthLakeClient: HealthLakeClientProtocol { - /// Creates a Data Store that can ingest and export FHIR formatted data. + /// Creates a data store that can ingest and export FHIR formatted data. public func createFHIRDatastore(input: CreateFHIRDatastoreInput) async throws -> CreateFHIRDatastoreOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -112,7 +112,7 @@ extension HealthLakeClient: HealthLakeClientProtocol { return result } - /// Deletes a Data Store. + /// Deletes a data store. public func deleteFHIRDatastore(input: DeleteFHIRDatastoreInput) async throws -> DeleteFHIRDatastoreOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -149,7 +149,7 @@ extension HealthLakeClient: HealthLakeClientProtocol { return result } - /// Gets the properties associated with the FHIR Data Store, including the Data Store ID, Data Store ARN, Data Store name, Data Store status, created at, Data Store type version, and Data Store endpoint. + /// Gets the properties associated with the FHIR data store, including the data store ID, data store ARN, data store name, data store status, when the data store was created, data store type version, and the data store's endpoint. public func describeFHIRDatastore(input: DescribeFHIRDatastoreInput) async throws -> DescribeFHIRDatastoreOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -260,7 +260,7 @@ extension HealthLakeClient: HealthLakeClientProtocol { return result } - /// Lists all FHIR Data Stores that are in the user’s account, regardless of Data Store status. + /// Lists all FHIR data stores that are in the user’s account, regardless of data store status. public func listFHIRDatastores(input: ListFHIRDatastoresInput) async throws -> ListFHIRDatastoresOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -371,7 +371,7 @@ extension HealthLakeClient: HealthLakeClientProtocol { return result } - /// Returns a list of all existing tags associated with a Data Store. + /// Returns a list of all existing tags associated with a data store. public func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -498,7 +498,7 @@ extension HealthLakeClient: HealthLakeClientProtocol { return result } - /// Adds a user specified key and value tag to a Data Store. + /// Adds a user specified key and value tag to a data store. public func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -535,7 +535,7 @@ extension HealthLakeClient: HealthLakeClientProtocol { return result } - /// Removes tags from a Data Store. + /// Removes tags from a data store. public func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSHealthLake/HealthLakeClientProtocol.swift b/Sources/Services/AWSHealthLake/HealthLakeClientProtocol.swift index b85d2a57b5a..5bc3d74a49d 100644 --- a/Sources/Services/AWSHealthLake/HealthLakeClientProtocol.swift +++ b/Sources/Services/AWSHealthLake/HealthLakeClientProtocol.swift @@ -2,33 +2,33 @@ import ClientRuntime -/// Amazon HealthLake is a HIPAA eligibile service that allows customers to store, transform, query, and analyze their FHIR-formatted data in a consistent fashion in the cloud. +/// AWS HealthLake is a HIPAA eligibile service that allows customers to store, transform, query, and analyze their FHIR-formatted data in a consistent fashion in the cloud. public protocol HealthLakeClientProtocol { - /// Creates a Data Store that can ingest and export FHIR formatted data. + /// Creates a data store that can ingest and export FHIR formatted data. func createFHIRDatastore(input: CreateFHIRDatastoreInput) async throws -> CreateFHIRDatastoreOutputResponse - /// Deletes a Data Store. + /// Deletes a data store. func deleteFHIRDatastore(input: DeleteFHIRDatastoreInput) async throws -> DeleteFHIRDatastoreOutputResponse - /// Gets the properties associated with the FHIR Data Store, including the Data Store ID, Data Store ARN, Data Store name, Data Store status, created at, Data Store type version, and Data Store endpoint. + /// Gets the properties associated with the FHIR data store, including the data store ID, data store ARN, data store name, data store status, when the data store was created, data store type version, and the data store's endpoint. func describeFHIRDatastore(input: DescribeFHIRDatastoreInput) async throws -> DescribeFHIRDatastoreOutputResponse /// Displays the properties of a FHIR export job, including the ID, ARN, name, and the status of the job. func describeFHIRExportJob(input: DescribeFHIRExportJobInput) async throws -> DescribeFHIRExportJobOutputResponse /// Displays the properties of a FHIR import job, including the ID, ARN, name, and the status of the job. func describeFHIRImportJob(input: DescribeFHIRImportJobInput) async throws -> DescribeFHIRImportJobOutputResponse - /// Lists all FHIR Data Stores that are in the user’s account, regardless of Data Store status. + /// Lists all FHIR data stores that are in the user’s account, regardless of data store status. func listFHIRDatastores(input: ListFHIRDatastoresInput) async throws -> ListFHIRDatastoresOutputResponse /// Lists all FHIR export jobs associated with an account and their statuses. func listFHIRExportJobs(input: ListFHIRExportJobsInput) async throws -> ListFHIRExportJobsOutputResponse /// Lists all FHIR import jobs associated with an account and their statuses. func listFHIRImportJobs(input: ListFHIRImportJobsInput) async throws -> ListFHIRImportJobsOutputResponse - /// Returns a list of all existing tags associated with a Data Store. + /// Returns a list of all existing tags associated with a data store. func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse /// Begins a FHIR export job. func startFHIRExportJob(input: StartFHIRExportJobInput) async throws -> StartFHIRExportJobOutputResponse /// Begins a FHIR Import job. func startFHIRImportJob(input: StartFHIRImportJobInput) async throws -> StartFHIRImportJobOutputResponse - /// Adds a user specified key and value tag to a Data Store. + /// Adds a user specified key and value tag to a data store. func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse - /// Removes tags from a Data Store. + /// Removes tags from a data store. func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse } diff --git a/Sources/Services/AWSHealthLake/models/Models.swift b/Sources/Services/AWSHealthLake/models/Models.swift index 4e66fb50c0c..ea82cabcc7f 100644 --- a/Sources/Services/AWSHealthLake/models/Models.swift +++ b/Sources/Services/AWSHealthLake/models/Models.swift @@ -136,7 +136,7 @@ extension ConflictException { } } -/// The Data Store is in a transition state and the user requested action can not be performed. +/// The data store is in a transition state and the user requested action can not be performed. public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { @@ -225,18 +225,18 @@ extension CreateFHIRDatastoreInput: ClientRuntime.URLPathProvider { public struct CreateFHIRDatastoreInput: Swift.Equatable { /// Optional user provided token used for ensuring idempotency. public var clientToken: Swift.String? - /// The user generated name for the Data Store. + /// The user generated name for the data store. public var datastoreName: Swift.String? - /// The FHIR version of the Data Store. The only supported version is R4. + /// The FHIR version of the data store. The only supported version is R4. /// This member is required. public var datastoreTypeVersion: HealthLakeClientTypes.FHIRVersion? - /// The configuration of the identity provider that you want to use for your Data Store. + /// The configuration of the identity provider that you want to use for your data store. public var identityProviderConfiguration: HealthLakeClientTypes.IdentityProviderConfiguration? - /// Optional parameter to preload data upon creation of the Data Store. Currently, the only supported preloaded data is synthetic data generated from Synthea. + /// Optional parameter to preload data upon creation of the data store. Currently, the only supported preloaded data is synthetic data generated from Synthea. public var preloadDataConfig: HealthLakeClientTypes.PreloadDataConfig? - /// The server-side encryption key configuration for a customer provided encryption key specified for creating a Data Store. + /// The server-side encryption key configuration for a customer provided encryption key specified for creating a data store. public var sseConfiguration: HealthLakeClientTypes.SseConfiguration? - /// Resource tags that are applied to a Data Store when it is created. + /// Resource tags that are applied to a data store when it is created. public var tags: [HealthLakeClientTypes.Tag]? public init( @@ -341,16 +341,16 @@ extension CreateFHIRDatastoreOutputResponse: ClientRuntime.HttpResponseBinding { } public struct CreateFHIRDatastoreOutputResponse: Swift.Equatable { - /// The Data Store ARN is generated during the creation of the Data Store and can be found in the output from the initial Data Store creation call. + /// The data store ARN is generated during the creation of the data store and can be found in the output from the initial data store creation call. /// This member is required. public var datastoreArn: Swift.String? - /// The AWS endpoint for the created Data Store. + /// The AWS endpoint for the created data store. /// This member is required. public var datastoreEndpoint: Swift.String? - /// The AWS-generated Data Store id. This id is in the output from the initial Data Store creation call. + /// The AWS-generated data store id. This id is in the output from the initial data store creation call. /// This member is required. public var datastoreId: Swift.String? - /// The status of the FHIR Data Store. Possible statuses are ‘CREATING’, ‘ACTIVE’, ‘DELETING’, ‘DELETED’. + /// The status of the FHIR data store. /// This member is required. public var datastoreStatus: HealthLakeClientTypes.DatastoreStatus? @@ -434,15 +434,15 @@ extension HealthLakeClientTypes.DatastoreFilter: Swift.Codable { } extension HealthLakeClientTypes { - /// The filters applied to Data Store query. + /// The filters applied to data store query. public struct DatastoreFilter: Swift.Equatable { - /// A filter that allows the user to set cutoff dates for records. All Data Stores created after the specified date will be included in the results. + /// A filter that allows the user to set cutoff dates for records. All data stores created after the specified date will be included in the results. public var createdAfter: ClientRuntime.Date? - /// A filter that allows the user to set cutoff dates for records. All Data Stores created before the specified date will be included in the results. + /// A filter that allows the user to set cutoff dates for records. All data stores created before the specified date will be included in the results. public var createdBefore: ClientRuntime.Date? - /// Allows the user to filter Data Store results by name. + /// Allows the user to filter data store results by name. public var datastoreName: Swift.String? - /// Allows the user to filter Data Store results by status. + /// Allows the user to filter data store results by status. public var datastoreStatus: HealthLakeClientTypes.DatastoreStatus? public init( @@ -535,30 +535,30 @@ extension HealthLakeClientTypes.DatastoreProperties: Swift.Codable { } extension HealthLakeClientTypes { - /// Displays the properties of the Data Store, including the ID, ARN, name, and the status of the Data Store. + /// Displays the properties of the data store, including the ID, ARN, name, and the status of the data store. public struct DatastoreProperties: Swift.Equatable { - /// The time that a Data Store was created. + /// The time that a data store was created. public var createdAt: ClientRuntime.Date? - /// The Amazon Resource Name used in the creation of the Data Store. + /// The Amazon Resource Name used in the creation of the data store. /// This member is required. public var datastoreArn: Swift.String? - /// The AWS endpoint for the Data Store. Each Data Store will have it's own endpoint with Data Store ID in the endpoint URL. + /// The AWS endpoint for the data store. Each data store will have it's own endpoint with data store ID in the endpoint URL. /// This member is required. public var datastoreEndpoint: Swift.String? - /// The AWS-generated ID number for the Data Store. + /// The AWS-generated ID number for the data store. /// This member is required. public var datastoreId: Swift.String? - /// The user-generated name for the Data Store. + /// The user-generated name for the data store. public var datastoreName: Swift.String? - /// The status of the Data Store. Possible statuses are 'CREATING', 'ACTIVE', 'DELETING', or 'DELETED'. + /// The status of the data store. /// This member is required. public var datastoreStatus: HealthLakeClientTypes.DatastoreStatus? /// The FHIR version. Only R4 version data is supported. /// This member is required. public var datastoreTypeVersion: HealthLakeClientTypes.FHIRVersion? - /// The identity provider that you selected when you created the Data Store. + /// The identity provider that you selected when you created the data store. public var identityProviderConfiguration: HealthLakeClientTypes.IdentityProviderConfiguration? - /// The preloaded data configuration for the Data Store. Only data preloaded from Synthea is supported. + /// The preloaded data configuration for the data store. Only data preloaded from Synthea is supported. public var preloadDataConfig: HealthLakeClientTypes.PreloadDataConfig? /// The server-side encryption key configuration for a customer provided encryption key (CMK). public var sseConfiguration: HealthLakeClientTypes.SseConfiguration? @@ -649,7 +649,7 @@ extension DeleteFHIRDatastoreInput: ClientRuntime.URLPathProvider { } public struct DeleteFHIRDatastoreInput: Swift.Equatable { - /// The AWS-generated ID for the Data Store to be deleted. + /// The AWS-generated ID for the data store to be deleted. /// This member is required. public var datastoreId: Swift.String? @@ -712,16 +712,16 @@ extension DeleteFHIRDatastoreOutputResponse: ClientRuntime.HttpResponseBinding { } public struct DeleteFHIRDatastoreOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) that gives Amazon HealthLake access permission. + /// The Amazon Resource Name (ARN) that gives AWS HealthLake access permission. /// This member is required. public var datastoreArn: Swift.String? - /// The AWS endpoint for the Data Store the user has requested to be deleted. + /// The AWS endpoint for the data store the user has requested to be deleted. /// This member is required. public var datastoreEndpoint: Swift.String? - /// The AWS-generated ID for the Data Store to be deleted. + /// The AWS-generated ID for the data store to be deleted. /// This member is required. public var datastoreId: Swift.String? - /// The status of the Data Store that the user has requested to be deleted. + /// The status of the data store that the user has requested to be deleted. /// This member is required. public var datastoreStatus: HealthLakeClientTypes.DatastoreStatus? @@ -787,7 +787,7 @@ extension DescribeFHIRDatastoreInput: ClientRuntime.URLPathProvider { } public struct DescribeFHIRDatastoreInput: Swift.Equatable { - /// The AWS-generated Data Store ID. + /// The AWS-generated data store ID. /// This member is required. public var datastoreId: Swift.String? @@ -842,7 +842,7 @@ extension DescribeFHIRDatastoreOutputResponse: ClientRuntime.HttpResponseBinding } public struct DescribeFHIRDatastoreOutputResponse: Swift.Equatable { - /// All properties associated with a Data Store, including the Data Store ID, Data Store ARN, Data Store name, Data Store status, created at, Data Store type version, and Data Store endpoint. + /// All properties associated with a data store, including the data store ID, data store ARN, data store name, data store status, when the data store was created, data store type version, and the data store's endpoint. /// This member is required. public var datastoreProperties: HealthLakeClientTypes.DatastoreProperties? @@ -894,7 +894,7 @@ extension DescribeFHIRExportJobInput: ClientRuntime.URLPathProvider { } public struct DescribeFHIRExportJobInput: Swift.Equatable { - /// The AWS generated ID for the Data Store from which files are being exported from for an export job. + /// The AWS generated ID for the data store from which files are being exported from for an export job. /// This member is required. public var datastoreId: Swift.String? /// The AWS generated ID for an export job. @@ -1010,7 +1010,7 @@ extension DescribeFHIRImportJobInput: ClientRuntime.URLPathProvider { } public struct DescribeFHIRImportJobInput: Swift.Equatable { - /// The AWS-generated ID of the Data Store. + /// The AWS-generated ID of the data store. /// This member is required. public var datastoreId: Swift.String? /// The AWS-generated job ID. @@ -1174,7 +1174,7 @@ extension HealthLakeClientTypes { public struct ExportJobProperties: Swift.Equatable { /// The Amazon Resource Name used during the initiation of the job. public var dataAccessRoleArn: Swift.String? - /// The AWS generated ID for the Data Store from which files are being exported for an export job. + /// The AWS generated ID for the data store from which files are being exported for an export job. /// This member is required. public var datastoreId: Swift.String? /// The time an export job completed. @@ -1289,12 +1289,12 @@ extension HealthLakeClientTypes.IdentityProviderConfiguration: Swift.Codable { } extension HealthLakeClientTypes { - /// The identity provider configuration that you gave when the Data Store was created. + /// The identity provider configuration that you gave when the data store was created. public struct IdentityProviderConfiguration: Swift.Equatable { - /// The authorization strategy that you selected when you created the Data Store. + /// The authorization strategy that you selected when you created the data store. /// This member is required. public var authorizationStrategy: HealthLakeClientTypes.AuthorizationStrategy? - /// If you enabled fine-grained authorization when you created the Data Store. + /// If you enabled fine-grained authorization when you created the data store. public var fineGrainedAuthorizationEnabled: Swift.Bool /// The Amazon Resource Name (ARN) of the Lambda function that you want to use to decode the access token created by the authorization server. public var idpLambdaArn: Swift.String? @@ -1391,9 +1391,9 @@ extension HealthLakeClientTypes.ImportJobProperties: Swift.Codable { } extension HealthLakeClientTypes { - /// Displays the properties of the import job, including the ID, Arn, Name, and the status of the Data Store. + /// Displays the properties of the import job, including the ID, Arn, Name, and the status of the data store. public struct ImportJobProperties: Swift.Equatable { - /// The Amazon Resource Name (ARN) that gives Amazon HealthLake access to your input data. + /// The Amazon Resource Name (ARN) that gives AWS HealthLake access to your input data. public var dataAccessRoleArn: Swift.String? /// The datastore id used when the Import job was created. /// This member is required. @@ -1477,7 +1477,7 @@ extension HealthLakeClientTypes.InputDataConfig: Swift.Codable { extension HealthLakeClientTypes { /// The input properties for an import job. public enum InputDataConfig: Swift.Equatable { - /// The S3Uri is the user specified S3 location of the FHIR data to be imported into Amazon HealthLake. + /// The S3Uri is the user specified S3 location of the FHIR data to be imported into AWS HealthLake. case s3uri(Swift.String) case sdkUnknown(Swift.String) } @@ -1618,12 +1618,12 @@ extension HealthLakeClientTypes.KmsEncryptionConfig: Swift.Codable { } extension HealthLakeClientTypes { - /// The customer-managed-key(CMK) used when creating a Data Store. If a customer owned key is not specified, an AWS owned key will be used for encryption. + /// The customer-managed-key(CMK) used when creating a data store. If a customer owned key is not specified, an AWS owned key will be used for encryption. public struct KmsEncryptionConfig: Swift.Equatable { - /// The type of customer-managed-key(CMK) used for encyrption. The two types of supported CMKs are customer owned CMKs and AWS owned CMKs. + /// The type of customer-managed-key(CMK) used for encryption. The two types of supported CMKs are customer owned CMKs and AWS owned CMKs. /// This member is required. public var cmkType: HealthLakeClientTypes.CmkType? - /// The KMS encryption key id/alias used to encrypt the Data Store contents at rest. + /// The KMS encryption key id/alias used to encrypt the data store contents at rest. public var kmsKeyId: Swift.String? public init( @@ -1666,11 +1666,11 @@ extension ListFHIRDatastoresInput: ClientRuntime.URLPathProvider { } public struct ListFHIRDatastoresInput: Swift.Equatable { - /// Lists all filters associated with a FHIR Data Store request. + /// Lists all filters associated with a FHIR data store request. public var filter: HealthLakeClientTypes.DatastoreFilter? - /// The maximum number of Data Stores returned in a single page of a ListFHIRDatastoresRequest call. + /// The maximum number of data stores returned in a single page of a ListFHIRDatastoresRequest call. public var maxResults: Swift.Int? - /// Fetches the next page of Data Stores when results are paginated. + /// Fetches the next page of data stores when results are paginated. public var nextToken: Swift.String? public init( @@ -1737,7 +1737,7 @@ extension ListFHIRDatastoresOutputResponse: ClientRuntime.HttpResponseBinding { } public struct ListFHIRDatastoresOutputResponse: Swift.Equatable { - /// All properties associated with the listed Data Stores. + /// All properties associated with the listed data stores. /// This member is required. public var datastorePropertiesList: [HealthLakeClientTypes.DatastoreProperties]? /// Pagination token that can be used to retrieve the next page of results. @@ -1826,7 +1826,7 @@ extension ListFHIRExportJobsInput: ClientRuntime.URLPathProvider { } public struct ListFHIRExportJobsInput: Swift.Equatable { - /// This parameter limits the response to the export job with the specified Data Store ID. + /// This parameter limits the response to the export job with the specified data store ID. /// This member is required. public var datastoreId: Swift.String? /// This parameter limits the response to the export job with the specified job name. @@ -2021,7 +2021,7 @@ extension ListFHIRImportJobsInput: ClientRuntime.URLPathProvider { } public struct ListFHIRImportJobsInput: Swift.Equatable { - /// This parameter limits the response to the import job with the specified Data Store ID. + /// This parameter limits the response to the import job with the specified data store ID. /// This member is required. public var datastoreId: Swift.String? /// This parameter limits the response to the import job with the specified job name. @@ -2192,7 +2192,7 @@ extension ListTagsForResourceInput: ClientRuntime.URLPathProvider { } public struct ListTagsForResourceInput: Swift.Equatable { - /// The Amazon Resource Name(ARN) of the Data Store for which tags are being added. + /// The Amazon Resource Name(ARN) of the data store for which tags are being added. /// This member is required. public var resourceARN: Swift.String? @@ -2245,7 +2245,7 @@ extension ListTagsForResourceOutputResponse: ClientRuntime.HttpResponseBinding { } public struct ListTagsForResourceOutputResponse: Swift.Equatable { - /// Returns a list of tags associated with a Data Store. + /// Returns a list of tags associated with a data store. public var tags: [HealthLakeClientTypes.Tag]? public init( @@ -2338,7 +2338,7 @@ extension HealthLakeClientTypes.PreloadDataConfig: Swift.Codable { } extension HealthLakeClientTypes { - /// The input properties for the preloaded Data Store. Only data preloaded from Synthea is supported. + /// The input properties for the preloaded data store. Only data preloaded from Synthea is supported. public struct PreloadDataConfig: Swift.Equatable { /// The type of preloaded data. Only Synthea preloaded data is supported. /// This member is required. @@ -2398,7 +2398,7 @@ extension ResourceNotFoundException { } } -/// The requested Data Store was not found. +/// The requested data store was not found. public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { @@ -2469,7 +2469,7 @@ extension HealthLakeClientTypes { /// The KMS key ID used to access the S3 bucket. /// This member is required. public var kmsKeyId: Swift.String? - /// The S3Uri is the user specified S3 location of the FHIR data to be imported into Amazon HealthLake. + /// The S3Uri is the user specified S3 location of the FHIR data to be imported into AWS HealthLake. /// This member is required. public var s3Uri: Swift.String? @@ -2563,7 +2563,7 @@ public struct StartFHIRExportJobInput: Swift.Equatable { /// The Amazon Resource Name used during the initiation of the job. /// This member is required. public var dataAccessRoleArn: Swift.String? - /// The AWS generated ID for the Data Store from which files are being exported for an export job. + /// The AWS generated ID for the data store from which files are being exported for an export job. /// This member is required. public var datastoreId: Swift.String? /// The user generated name for an export job. @@ -2652,7 +2652,7 @@ extension StartFHIRExportJobOutputResponse: ClientRuntime.HttpResponseBinding { } public struct StartFHIRExportJobOutputResponse: Swift.Equatable { - /// The AWS generated ID for the Data Store from which files are being exported for an export job. + /// The AWS generated ID for the data store from which files are being exported for an export job. public var datastoreId: Swift.String? /// The AWS generated ID for an export job. /// This member is required. @@ -2740,10 +2740,10 @@ public struct StartFHIRImportJobInput: Swift.Equatable { /// Optional user provided token used for ensuring idempotency. /// This member is required. public var clientToken: Swift.String? - /// The Amazon Resource Name (ARN) that gives Amazon HealthLake access permission. + /// The Amazon Resource Name (ARN) that gives AWS HealthLake access permission. /// This member is required. public var dataAccessRoleArn: Swift.String? - /// The AWS-generated Data Store ID. + /// The AWS-generated data store ID. /// This member is required. public var datastoreId: Swift.String? /// The input properties of the FHIR Import job in the StartFHIRImport job request. @@ -2841,7 +2841,7 @@ extension StartFHIRImportJobOutputResponse: ClientRuntime.HttpResponseBinding { } public struct StartFHIRImportJobOutputResponse: Swift.Equatable { - /// The AWS-generated Data Store ID. + /// The AWS-generated data store ID. public var datastoreId: Swift.String? /// The AWS-generated job ID. /// This member is required. @@ -2960,10 +2960,10 @@ extension TagResourceInput: ClientRuntime.URLPathProvider { } public struct TagResourceInput: Swift.Equatable { - /// The Amazon Resource Name(ARN)that gives Amazon HealthLake access to the Data Store which tags are being added to. + /// The Amazon Resource Name(ARN)that gives AWS HealthLake access to the data store which tags are being added to. /// This member is required. public var resourceARN: Swift.String? - /// The user specified key and value pair tags being added to a Data Store. + /// The user specified key and value pair tags being added to a data store. /// This member is required. public var tags: [HealthLakeClientTypes.Tag]? @@ -3110,10 +3110,10 @@ extension UntagResourceInput: ClientRuntime.URLPathProvider { } public struct UntagResourceInput: Swift.Equatable { - /// "The Amazon Resource Name(ARN) of the Data Store for which tags are being removed + /// The Amazon Resource Name(ARN) of the data store for which tags are being removed. /// This member is required. public var resourceARN: Swift.String? - /// The keys for the tags to be removed from the Healthlake Data Store. + /// The keys for the tags to be removed from the HealthLake data store. /// This member is required. public var tagKeys: [Swift.String]? diff --git a/Sources/Services/AWSIAM/IAMClient.swift b/Sources/Services/AWSIAM/IAMClient.swift index 5203755668c..f1c170235bf 100644 --- a/Sources/Services/AWSIAM/IAMClient.swift +++ b/Sources/Services/AWSIAM/IAMClient.swift @@ -99,7 +99,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Adds the specified IAM role to the specified instance profile. An instance profile can contain only one role, and this quota cannot be increased. You can remove the existing role and then add a different role to an instance profile. You must then wait for the change to appear across all of Amazon Web Services because of [eventual consistency](https://en.wikipedia.org/wiki/Eventual_consistency). To force the change, you must [disassociate the instance profile](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html) and then [associate the instance profile](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html), or you can stop your instance and then restart it. The caller of this operation must be granted the PassRole permission on the IAM role by a permissions policy. For more information about roles, see [Working with roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html). For more information about instance profiles, see [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html). + /// Adds the specified IAM role to the specified instance profile. An instance profile can contain only one role, and this quota cannot be increased. You can remove the existing role and then add a different role to an instance profile. You must then wait for the change to appear across all of Amazon Web Services because of [eventual consistency](https://en.wikipedia.org/wiki/Eventual_consistency). To force the change, you must [disassociate the instance profile](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html) and then [associate the instance profile](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html), or you can stop your instance and then restart it. The caller of this operation must be granted the PassRole permission on the IAM role by a permissions policy. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. For more information about instance profiles, see [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. public func addRoleToInstanceProfile(input: AddRoleToInstanceProfileInput) async throws -> AddRoleToInstanceProfileOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -506,7 +506,7 @@ extension IAMClient: IAMClientProtocol { /// * A list of thumbprints of one or more server certificates that the IdP uses /// /// - /// You get all of this information from the OIDC IdP you want to use to access Amazon Web Services. Amazon Web Services secures communication with some OIDC identity providers (IdPs) through our library of trusted certificate authorities (CAs) instead of using a certificate thumbprint to verify your IdP server certificate. These OIDC IdPs include Google, Auth0, and those that use an Amazon S3 bucket to host a JSON Web Key Set (JWKS) endpoint. In these cases, your legacy thumbprint remains in your configuration, but is no longer used for validation. The trust for the OIDC provider is derived from the IAM provider that this operation creates. Therefore, it is best to limit access to the [CreateOpenIDConnectProvider] operation to highly privileged users. + /// You get all of this information from the OIDC IdP you want to use to access Amazon Web Services. Amazon Web Services secures communication with some OIDC identity providers (IdPs) through our library of trusted root certificate authorities (CAs) instead of using a certificate thumbprint to verify your IdP server certificate. These OIDC IdPs include Auth0, GitHub, Google, and those that use an Amazon S3 bucket to host a JSON Web Key Set (JWKS) endpoint. In these cases, your legacy thumbprint remains in your configuration, but is no longer used for validation. The trust for the OIDC provider is derived from the IAM provider that this operation creates. Therefore, it is best to limit access to the [CreateOpenIDConnectProvider] operation to highly privileged users. public func createOpenIDConnectProvider(input: CreateOpenIDConnectProviderInput) async throws -> CreateOpenIDConnectProviderOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -614,7 +614,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Creates a new role for your Amazon Web Services account. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html). For information about quotas for role names and the number of roles you can create, see [IAM and STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the IAM User Guide. + /// Creates a new role for your Amazon Web Services account. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. For information about quotas for role names and the number of roles you can create, see [IAM and STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the IAM User Guide. public func createRole(input: CreateRoleInput) async throws -> CreateRoleOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1046,7 +1046,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Deletes the specified instance profile. The instance profile must not have an associated role. Make sure that you do not have any Amazon EC2 instances running with the instance profile you are about to delete. Deleting a role or instance profile that is associated with a running instance will break any applications running on the instance. For more information about instance profiles, see [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html). + /// Deletes the specified instance profile. The instance profile must not have an associated role. Make sure that you do not have any Amazon EC2 instances running with the instance profile you are about to delete. Deleting a role or instance profile that is associated with a running instance will break any applications running on the instance. For more information about instance profiles, see [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. public func deleteInstanceProfile(input: DeleteInstanceProfileInput) async throws -> DeleteInstanceProfileOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2337,7 +2337,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Retrieves information about the specified instance profile, including the instance profile's path, GUID, ARN, and role. For more information about instance profiles, see [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html) in the IAM User Guide. + /// Retrieves information about the specified instance profile, including the instance profile's path, GUID, ARN, and role. For more information about instance profiles, see [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. public func getInstanceProfile(input: GetInstanceProfileInput) async throws -> GetInstanceProfileOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2589,7 +2589,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Retrieves information about the specified role, including the role's path, GUID, ARN, and the role's trust policy that grants permission to assume the role. For more information about roles, see [Working with roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html). Policies returned by this operation are URL-encoded compliant with [RFC 3986](https://tools.ietf.org/html/rfc3986). You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the decode method of the java.net.URLDecoder utility class in the Java SDK. Other languages and SDKs provide similar functionality. + /// Retrieves information about the specified role, including the role's path, GUID, ARN, and the role's trust policy that grants permission to assume the role. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. Policies returned by this operation are URL-encoded compliant with [RFC 3986](https://tools.ietf.org/html/rfc3986). You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the decode method of the java.net.URLDecoder utility class in the Java SDK. Other languages and SDKs provide similar functionality. public func getRole(input: GetRoleInput) async throws -> GetRoleOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2625,7 +2625,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Retrieves the specified inline policy document that is embedded with the specified IAM role. Policies returned by this operation are URL-encoded compliant with [RFC 3986](https://tools.ietf.org/html/rfc3986). You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the decode method of the java.net.URLDecoder utility class in the Java SDK. Other languages and SDKs provide similar functionality. An IAM role can also have managed policies attached to it. To retrieve a managed policy document that is attached to a role, use [GetPolicy] to determine the policy's default version, then use [GetPolicyVersion] to retrieve the policy document. For more information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. For more information about roles, see [Using roles to delegate permissions and federate identities](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html). + /// Retrieves the specified inline policy document that is embedded with the specified IAM role. Policies returned by this operation are URL-encoded compliant with [RFC 3986](https://tools.ietf.org/html/rfc3986). You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the decode method of the java.net.URLDecoder utility class in the Java SDK. Other languages and SDKs provide similar functionality. An IAM role can also have managed policies attached to it. To retrieve a managed policy document that is attached to a role, use [GetPolicy] to determine the policy's default version, then use [GetPolicyVersion] to retrieve the policy document. For more information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. public func getRolePolicy(input: GetRolePolicyInput) async throws -> GetRolePolicyOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3327,7 +3327,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Lists the instance profiles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about instance profiles, see [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html). IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an instance profile, see [GetInstanceProfile]. You can paginate the results using the MaxItems and Marker parameters. + /// Lists the instance profiles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about instance profiles, see [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an instance profile, see [GetInstanceProfile]. You can paginate the results using the MaxItems and Marker parameters. public func listInstanceProfiles(input: ListInstanceProfilesInput) async throws -> ListInstanceProfilesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3363,7 +3363,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Lists the instance profiles that have the specified associated IAM role. If there are none, the operation returns an empty list. For more information about instance profiles, go to [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html). You can paginate the results using the MaxItems and Marker parameters. + /// Lists the instance profiles that have the specified associated IAM role. If there are none, the operation returns an empty list. For more information about instance profiles, go to [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. You can paginate the results using the MaxItems and Marker parameters. public func listInstanceProfilesForRole(input: ListInstanceProfilesForRoleInput) async throws -> ListInstanceProfilesForRoleOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -3768,7 +3768,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Lists the IAM roles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about roles, see [Working with roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html). IAM resource-listing operations return a subset of the available attributes for the resource. This operation does not return the following attributes, even though they are an attribute of the returned object: + /// Lists the IAM roles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. IAM resource-listing operations return a subset of the available attributes for the resource. This operation does not return the following attributes, even though they are an attribute of the returned object: /// /// * PermissionsBoundary /// @@ -4288,7 +4288,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Adds or updates an inline policy document that is embedded in the specified IAM role. When you embed an inline policy in a role, the inline policy is used as part of the role's access (permissions) policy. The role's trust policy is created at the same time as the role, using [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html). You can update a role's trust policy using [UpdateAssumerolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAssumeRolePolicy.html). For more information about IAM roles, see [Using roles to delegate permissions and federate identities](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html). A role can also have a managed policy attached to it. To attach a managed policy to a role, use [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html). To create a new managed policy, use [CreatePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html). For information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. For information about the maximum number of inline policies that you can embed with a role, see [IAM and STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the IAM User Guide. Because policy documents can be large, you should use POST rather than GET when calling PutRolePolicy. For general information about using the Query API with IAM, see [Making query requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html) in the IAM User Guide. + /// Adds or updates an inline policy document that is embedded in the specified IAM role. When you embed an inline policy in a role, the inline policy is used as part of the role's access (permissions) policy. The role's trust policy is created at the same time as the role, using [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html). You can update a role's trust policy using [UpdateAssumeRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAssumeRolePolicy.html). For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html) in the IAM User Guide. A role can also have a managed policy attached to it. To attach a managed policy to a role, use [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html). To create a new managed policy, use [CreatePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html). For information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. For information about the maximum number of inline policies that you can embed with a role, see [IAM and STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the IAM User Guide. Because policy documents can be large, you should use POST rather than GET when calling PutRolePolicy. For general information about using the Query API with IAM, see [Making query requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html) in the IAM User Guide. public func putRolePolicy(input: PutRolePolicyInput) async throws -> PutRolePolicyOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -4432,7 +4432,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Removes the specified IAM role from the specified EC2 instance profile. Make sure that you do not have any Amazon EC2 instances running with the role you are about to remove from the instance profile. Removing a role from an instance profile that is associated with a running instance might break any applications running on the instance. For more information about IAM roles, see [Working with roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html). For more information about instance profiles, see [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html). + /// Removes the specified IAM role from the specified EC2 instance profile. Make sure that you do not have any Amazon EC2 instances running with the role you are about to remove from the instance profile. Removing a role from an instance profile that is associated with a running instance might break any applications running on the instance. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. For more information about instance profiles, see [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. public func removeRoleFromInstanceProfile(input: RemoveRoleFromInstanceProfileInput) async throws -> RemoveRoleFromInstanceProfileOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -5576,7 +5576,7 @@ extension IAMClient: IAMClientProtocol { return result } - /// Replaces the existing list of server certificate thumbprints associated with an OpenID Connect (OIDC) provider resource object with a new list of thumbprints. The list that you pass with this operation completely replaces the existing list of thumbprints. (The lists are not merged.) Typically, you need to update a thumbprint only when the identity provider certificate changes, which occurs rarely. However, if the provider's certificate does change, any attempt to assume an IAM role that specifies the OIDC provider as a principal fails until the certificate thumbprint is updated. Amazon Web Services secures communication with some OIDC identity providers (IdPs) through our library of trusted certificate authorities (CAs) instead of using a certificate thumbprint to verify your IdP server certificate. These OIDC IdPs include Google, Auth0, and those that use an Amazon S3 bucket to host a JSON Web Key Set (JWKS) endpoint. In these cases, your legacy thumbprint remains in your configuration, but is no longer used for validation. Trust for the OIDC provider is derived from the provider certificate and is validated by the thumbprint. Therefore, it is best to limit access to the UpdateOpenIDConnectProviderThumbprint operation to highly privileged users. + /// Replaces the existing list of server certificate thumbprints associated with an OpenID Connect (OIDC) provider resource object with a new list of thumbprints. The list that you pass with this operation completely replaces the existing list of thumbprints. (The lists are not merged.) Typically, you need to update a thumbprint only when the identity provider certificate changes, which occurs rarely. However, if the provider's certificate does change, any attempt to assume an IAM role that specifies the OIDC provider as a principal fails until the certificate thumbprint is updated. Amazon Web Services secures communication with some OIDC identity providers (IdPs) through our library of trusted root certificate authorities (CAs) instead of using a certificate thumbprint to verify your IdP server certificate. These OIDC IdPs include Auth0, GitHub, Google, and those that use an Amazon S3 bucket to host a JSON Web Key Set (JWKS) endpoint. In these cases, your legacy thumbprint remains in your configuration, but is no longer used for validation. Trust for the OIDC provider is derived from the provider certificate and is validated by the thumbprint. Therefore, it is best to limit access to the UpdateOpenIDConnectProviderThumbprint operation to highly privileged users. public func updateOpenIDConnectProviderThumbprint(input: UpdateOpenIDConnectProviderThumbprintInput) async throws -> UpdateOpenIDConnectProviderThumbprintOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSIAM/IAMClientProtocol.swift b/Sources/Services/AWSIAM/IAMClientProtocol.swift index 282874221f4..7497b589c15 100644 --- a/Sources/Services/AWSIAM/IAMClientProtocol.swift +++ b/Sources/Services/AWSIAM/IAMClientProtocol.swift @@ -6,7 +6,7 @@ import ClientRuntime public protocol IAMClientProtocol { /// Adds a new client ID (also known as audience) to the list of client IDs already registered for the specified IAM OpenID Connect (OIDC) provider resource. This operation is idempotent; it does not fail or return an error if you add an existing client ID to the provider. func addClientIDToOpenIDConnectProvider(input: AddClientIDToOpenIDConnectProviderInput) async throws -> AddClientIDToOpenIDConnectProviderOutputResponse - /// Adds the specified IAM role to the specified instance profile. An instance profile can contain only one role, and this quota cannot be increased. You can remove the existing role and then add a different role to an instance profile. You must then wait for the change to appear across all of Amazon Web Services because of [eventual consistency](https://en.wikipedia.org/wiki/Eventual_consistency). To force the change, you must [disassociate the instance profile](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html) and then [associate the instance profile](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html), or you can stop your instance and then restart it. The caller of this operation must be granted the PassRole permission on the IAM role by a permissions policy. For more information about roles, see [Working with roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html). For more information about instance profiles, see [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html). + /// Adds the specified IAM role to the specified instance profile. An instance profile can contain only one role, and this quota cannot be increased. You can remove the existing role and then add a different role to an instance profile. You must then wait for the change to appear across all of Amazon Web Services because of [eventual consistency](https://en.wikipedia.org/wiki/Eventual_consistency). To force the change, you must [disassociate the instance profile](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIamInstanceProfile.html) and then [associate the instance profile](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateIamInstanceProfile.html), or you can stop your instance and then restart it. The caller of this operation must be granted the PassRole permission on the IAM role by a permissions policy. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. For more information about instance profiles, see [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. func addRoleToInstanceProfile(input: AddRoleToInstanceProfileInput) async throws -> AddRoleToInstanceProfileOutputResponse /// Adds the specified user to the specified group. func addUserToGroup(input: AddUserToGroupInput) async throws -> AddUserToGroupOutputResponse @@ -39,13 +39,13 @@ public protocol IAMClientProtocol { /// * A list of thumbprints of one or more server certificates that the IdP uses /// /// - /// You get all of this information from the OIDC IdP you want to use to access Amazon Web Services. Amazon Web Services secures communication with some OIDC identity providers (IdPs) through our library of trusted certificate authorities (CAs) instead of using a certificate thumbprint to verify your IdP server certificate. These OIDC IdPs include Google, Auth0, and those that use an Amazon S3 bucket to host a JSON Web Key Set (JWKS) endpoint. In these cases, your legacy thumbprint remains in your configuration, but is no longer used for validation. The trust for the OIDC provider is derived from the IAM provider that this operation creates. Therefore, it is best to limit access to the [CreateOpenIDConnectProvider] operation to highly privileged users. + /// You get all of this information from the OIDC IdP you want to use to access Amazon Web Services. Amazon Web Services secures communication with some OIDC identity providers (IdPs) through our library of trusted root certificate authorities (CAs) instead of using a certificate thumbprint to verify your IdP server certificate. These OIDC IdPs include Auth0, GitHub, Google, and those that use an Amazon S3 bucket to host a JSON Web Key Set (JWKS) endpoint. In these cases, your legacy thumbprint remains in your configuration, but is no longer used for validation. The trust for the OIDC provider is derived from the IAM provider that this operation creates. Therefore, it is best to limit access to the [CreateOpenIDConnectProvider] operation to highly privileged users. func createOpenIDConnectProvider(input: CreateOpenIDConnectProviderInput) async throws -> CreateOpenIDConnectProviderOutputResponse /// Creates a new managed policy for your Amazon Web Services account. This operation creates a policy version with a version identifier of v1 and sets v1 as the policy's default version. For more information about policy versions, see [Versioning for managed policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html) in the IAM User Guide. As a best practice, you can validate your IAM policies. To learn more, see [Validating IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_policy-validator.html) in the IAM User Guide. For more information about managed policies in general, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. func createPolicy(input: CreatePolicyInput) async throws -> CreatePolicyOutputResponse /// Creates a new version of the specified managed policy. To update a managed policy, you create a new policy version. A managed policy can have up to five versions. If the policy has five versions, you must delete an existing version using [DeletePolicyVersion] before you create a new version. Optionally, you can set the new version as the policy's default version. The default version is the version that is in effect for the IAM users, groups, and roles to which the policy is attached. For more information about managed policy versions, see [Versioning for managed policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html) in the IAM User Guide. func createPolicyVersion(input: CreatePolicyVersionInput) async throws -> CreatePolicyVersionOutputResponse - /// Creates a new role for your Amazon Web Services account. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html). For information about quotas for role names and the number of roles you can create, see [IAM and STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the IAM User Guide. + /// Creates a new role for your Amazon Web Services account. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. For information about quotas for role names and the number of roles you can create, see [IAM and STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the IAM User Guide. func createRole(input: CreateRoleInput) async throws -> CreateRoleOutputResponse /// Creates an IAM resource that describes an identity provider (IdP) that supports SAML 2.0. The SAML provider resource that you create with this operation can be used as a principal in an IAM role's trust policy. Such a policy can enable federated users who sign in using the SAML IdP to assume the role. You can create an IAM role that supports Web-based single sign-on (SSO) to the Amazon Web Services Management Console or one that supports API access to Amazon Web Services. When you create the SAML provider resource, you upload a SAML metadata document that you get from your IdP. That document includes the issuer's name, expiration information, and keys that can be used to validate the SAML authentication response (assertions) that the IdP sends. You must generate the metadata document using the identity management software that is used as your organization's IdP. This operation requires [Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html). For more information, see [Enabling SAML 2.0 federated users to access the Amazon Web Services Management Console](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-saml.html) and [About SAML 2.0-based federation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html) in the IAM User Guide. func createSAMLProvider(input: CreateSAMLProviderInput) async throws -> CreateSAMLProviderOutputResponse @@ -69,7 +69,7 @@ public protocol IAMClientProtocol { func deleteGroup(input: DeleteGroupInput) async throws -> DeleteGroupOutputResponse /// Deletes the specified inline policy that is embedded in the specified IAM group. A group can also have managed policies attached to it. To detach a managed policy from a group, use [DetachGroupPolicy]. For more information about policies, refer to [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. func deleteGroupPolicy(input: DeleteGroupPolicyInput) async throws -> DeleteGroupPolicyOutputResponse - /// Deletes the specified instance profile. The instance profile must not have an associated role. Make sure that you do not have any Amazon EC2 instances running with the instance profile you are about to delete. Deleting a role or instance profile that is associated with a running instance will break any applications running on the instance. For more information about instance profiles, see [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html). + /// Deletes the specified instance profile. The instance profile must not have an associated role. Make sure that you do not have any Amazon EC2 instances running with the instance profile you are about to delete. Deleting a role or instance profile that is associated with a running instance will break any applications running on the instance. For more information about instance profiles, see [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. func deleteInstanceProfile(input: DeleteInstanceProfileInput) async throws -> DeleteInstanceProfileOutputResponse /// Deletes the password for the specified IAM user, For more information, see [Managing passwords for IAM users](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_passwords_admin-change-user.html). You can use the CLI, the Amazon Web Services API, or the Users page in the IAM console to delete a password for any IAM user. You can use [ChangePassword] to update, but not delete, your own password in the My Security Credentials page in the Amazon Web Services Management Console. Deleting a user's password does not prevent a user from accessing Amazon Web Services through the command line interface or the API. To prevent all user access, you must also either make any access keys inactive or delete them. For more information about making keys inactive or deleting them, see [UpdateAccessKey] and [DeleteAccessKey]. func deleteLoginProfile(input: DeleteLoginProfileInput) async throws -> DeleteLoginProfileOutputResponse @@ -204,7 +204,7 @@ public protocol IAMClientProtocol { func getGroup(input: GetGroupInput) async throws -> GetGroupOutputResponse /// Retrieves the specified inline policy document that is embedded in the specified IAM group. Policies returned by this operation are URL-encoded compliant with [RFC 3986](https://tools.ietf.org/html/rfc3986). You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the decode method of the java.net.URLDecoder utility class in the Java SDK. Other languages and SDKs provide similar functionality. An IAM group can also have managed policies attached to it. To retrieve a managed policy document that is attached to a group, use [GetPolicy] to determine the policy's default version, then use [GetPolicyVersion] to retrieve the policy document. For more information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. func getGroupPolicy(input: GetGroupPolicyInput) async throws -> GetGroupPolicyOutputResponse - /// Retrieves information about the specified instance profile, including the instance profile's path, GUID, ARN, and role. For more information about instance profiles, see [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html) in the IAM User Guide. + /// Retrieves information about the specified instance profile, including the instance profile's path, GUID, ARN, and role. For more information about instance profiles, see [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. func getInstanceProfile(input: GetInstanceProfileInput) async throws -> GetInstanceProfileOutputResponse /// Retrieves the user name for the specified IAM user. A login profile is created when you create a password for the user to access the Amazon Web Services Management Console. If the user does not exist or does not have a password, the operation returns a 404 (NoSuchEntity) error. If you create an IAM user with access to the console, the CreateDate reflects the date you created the initial password for the user. If you create an IAM user with programmatic access, and then later add a password for the user to access the Amazon Web Services Management Console, the CreateDate reflects the initial password creation date. A user with programmatic access does not have a login profile unless you create a password for the user to access the Amazon Web Services Management Console. func getLoginProfile(input: GetLoginProfileInput) async throws -> GetLoginProfileOutputResponse @@ -218,9 +218,9 @@ public protocol IAMClientProtocol { func getPolicy(input: GetPolicyInput) async throws -> GetPolicyOutputResponse /// Retrieves information about the specified version of the specified managed policy, including the policy document. Policies returned by this operation are URL-encoded compliant with [RFC 3986](https://tools.ietf.org/html/rfc3986). You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the decode method of the java.net.URLDecoder utility class in the Java SDK. Other languages and SDKs provide similar functionality. To list the available versions for a policy, use [ListPolicyVersions]. This operation retrieves information about managed policies. To retrieve information about an inline policy that is embedded in a user, group, or role, use [GetUserPolicy], [GetGroupPolicy], or [GetRolePolicy]. For more information about the types of policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. For more information about managed policy versions, see [Versioning for managed policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-versions.html) in the IAM User Guide. func getPolicyVersion(input: GetPolicyVersionInput) async throws -> GetPolicyVersionOutputResponse - /// Retrieves information about the specified role, including the role's path, GUID, ARN, and the role's trust policy that grants permission to assume the role. For more information about roles, see [Working with roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html). Policies returned by this operation are URL-encoded compliant with [RFC 3986](https://tools.ietf.org/html/rfc3986). You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the decode method of the java.net.URLDecoder utility class in the Java SDK. Other languages and SDKs provide similar functionality. + /// Retrieves information about the specified role, including the role's path, GUID, ARN, and the role's trust policy that grants permission to assume the role. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. Policies returned by this operation are URL-encoded compliant with [RFC 3986](https://tools.ietf.org/html/rfc3986). You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the decode method of the java.net.URLDecoder utility class in the Java SDK. Other languages and SDKs provide similar functionality. func getRole(input: GetRoleInput) async throws -> GetRoleOutputResponse - /// Retrieves the specified inline policy document that is embedded with the specified IAM role. Policies returned by this operation are URL-encoded compliant with [RFC 3986](https://tools.ietf.org/html/rfc3986). You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the decode method of the java.net.URLDecoder utility class in the Java SDK. Other languages and SDKs provide similar functionality. An IAM role can also have managed policies attached to it. To retrieve a managed policy document that is attached to a role, use [GetPolicy] to determine the policy's default version, then use [GetPolicyVersion] to retrieve the policy document. For more information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. For more information about roles, see [Using roles to delegate permissions and federate identities](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html). + /// Retrieves the specified inline policy document that is embedded with the specified IAM role. Policies returned by this operation are URL-encoded compliant with [RFC 3986](https://tools.ietf.org/html/rfc3986). You can use a URL decoding method to convert the policy back to plain JSON text. For example, if you use Java, you can use the decode method of the java.net.URLDecoder utility class in the Java SDK. Other languages and SDKs provide similar functionality. An IAM role can also have managed policies attached to it. To retrieve a managed policy document that is attached to a role, use [GetPolicy] to determine the policy's default version, then use [GetPolicyVersion] to retrieve the policy document. For more information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. func getRolePolicy(input: GetRolePolicyInput) async throws -> GetRolePolicyOutputResponse /// Returns the SAML provider metadocument that was uploaded when the IAM SAML provider resource object was created or updated. This operation requires [Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html). func getSAMLProvider(input: GetSAMLProviderInput) async throws -> GetSAMLProviderOutputResponse @@ -274,9 +274,9 @@ public protocol IAMClientProtocol { func listGroups(input: ListGroupsInput) async throws -> ListGroupsOutputResponse /// Lists the IAM groups that the specified IAM user belongs to. You can paginate the results using the MaxItems and Marker parameters. func listGroupsForUser(input: ListGroupsForUserInput) async throws -> ListGroupsForUserOutputResponse - /// Lists the instance profiles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about instance profiles, see [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html). IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an instance profile, see [GetInstanceProfile]. You can paginate the results using the MaxItems and Marker parameters. + /// Lists the instance profiles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about instance profiles, see [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. IAM resource-listing operations return a subset of the available attributes for the resource. For example, this operation does not return tags, even though they are an attribute of the returned object. To view all of the information for an instance profile, see [GetInstanceProfile]. You can paginate the results using the MaxItems and Marker parameters. func listInstanceProfiles(input: ListInstanceProfilesInput) async throws -> ListInstanceProfilesOutputResponse - /// Lists the instance profiles that have the specified associated IAM role. If there are none, the operation returns an empty list. For more information about instance profiles, go to [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html). You can paginate the results using the MaxItems and Marker parameters. + /// Lists the instance profiles that have the specified associated IAM role. If there are none, the operation returns an empty list. For more information about instance profiles, go to [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. You can paginate the results using the MaxItems and Marker parameters. func listInstanceProfilesForRole(input: ListInstanceProfilesForRoleInput) async throws -> ListInstanceProfilesForRoleOutputResponse /// Lists the tags that are attached to the specified IAM instance profile. The returned list of tags is sorted by tag key. For more information about tagging, see [Tagging IAM resources](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) in the IAM User Guide. func listInstanceProfileTags(input: ListInstanceProfileTagsInput) async throws -> ListInstanceProfileTagsOutputResponse @@ -307,7 +307,7 @@ public protocol IAMClientProtocol { func listPolicyVersions(input: ListPolicyVersionsInput) async throws -> ListPolicyVersionsOutputResponse /// Lists the names of the inline policies that are embedded in the specified IAM role. An IAM role can also have managed policies attached to it. To list the managed policies that are attached to a role, use [ListAttachedRolePolicies]. For more information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. You can paginate the results using the MaxItems and Marker parameters. If there are no inline policies embedded with the specified role, the operation returns an empty list. func listRolePolicies(input: ListRolePoliciesInput) async throws -> ListRolePoliciesOutputResponse - /// Lists the IAM roles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about roles, see [Working with roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html). IAM resource-listing operations return a subset of the available attributes for the resource. This operation does not return the following attributes, even though they are an attribute of the returned object: + /// Lists the IAM roles that have the specified path prefix. If there are none, the operation returns an empty list. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. IAM resource-listing operations return a subset of the available attributes for the resource. This operation does not return the following attributes, even though they are an attribute of the returned object: /// /// * PermissionsBoundary /// @@ -353,7 +353,7 @@ public protocol IAMClientProtocol { func putGroupPolicy(input: PutGroupPolicyInput) async throws -> PutGroupPolicyOutputResponse /// Adds or updates the policy that is specified as the IAM role's permissions boundary. You can use an Amazon Web Services managed policy or a customer managed policy to set the boundary for a role. Use the boundary to control the maximum permissions that the role can have. Setting a permissions boundary is an advanced feature that can affect the permissions for the role. You cannot set the boundary for a service-linked role. Policies used as permissions boundaries do not provide permissions. You must also attach a permissions policy to the role. To learn how the effective permissions for a role are evaluated, see [IAM JSON policy evaluation logic](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html) in the IAM User Guide. func putRolePermissionsBoundary(input: PutRolePermissionsBoundaryInput) async throws -> PutRolePermissionsBoundaryOutputResponse - /// Adds or updates an inline policy document that is embedded in the specified IAM role. When you embed an inline policy in a role, the inline policy is used as part of the role's access (permissions) policy. The role's trust policy is created at the same time as the role, using [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html). You can update a role's trust policy using [UpdateAssumerolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAssumeRolePolicy.html). For more information about IAM roles, see [Using roles to delegate permissions and federate identities](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html). A role can also have a managed policy attached to it. To attach a managed policy to a role, use [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html). To create a new managed policy, use [CreatePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html). For information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. For information about the maximum number of inline policies that you can embed with a role, see [IAM and STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the IAM User Guide. Because policy documents can be large, you should use POST rather than GET when calling PutRolePolicy. For general information about using the Query API with IAM, see [Making query requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html) in the IAM User Guide. + /// Adds or updates an inline policy document that is embedded in the specified IAM role. When you embed an inline policy in a role, the inline policy is used as part of the role's access (permissions) policy. The role's trust policy is created at the same time as the role, using [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html). You can update a role's trust policy using [UpdateAssumeRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAssumeRolePolicy.html). For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html) in the IAM User Guide. A role can also have a managed policy attached to it. To attach a managed policy to a role, use [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html). To create a new managed policy, use [CreatePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html). For information about policies, see [Managed policies and inline policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html) in the IAM User Guide. For information about the maximum number of inline policies that you can embed with a role, see [IAM and STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) in the IAM User Guide. Because policy documents can be large, you should use POST rather than GET when calling PutRolePolicy. For general information about using the Query API with IAM, see [Making query requests](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html) in the IAM User Guide. func putRolePolicy(input: PutRolePolicyInput) async throws -> PutRolePolicyOutputResponse /// Adds or updates the policy that is specified as the IAM user's permissions boundary. You can use an Amazon Web Services managed policy or a customer managed policy to set the boundary for a user. Use the boundary to control the maximum permissions that the user can have. Setting a permissions boundary is an advanced feature that can affect the permissions for the user. Policies that are used as permissions boundaries do not provide permissions. You must also attach a permissions policy to the user. To learn how the effective permissions for a user are evaluated, see [IAM JSON policy evaluation logic](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html) in the IAM User Guide. func putUserPermissionsBoundary(input: PutUserPermissionsBoundaryInput) async throws -> PutUserPermissionsBoundaryOutputResponse @@ -361,7 +361,7 @@ public protocol IAMClientProtocol { func putUserPolicy(input: PutUserPolicyInput) async throws -> PutUserPolicyOutputResponse /// Removes the specified client ID (also known as audience) from the list of client IDs registered for the specified IAM OpenID Connect (OIDC) provider resource object. This operation is idempotent; it does not fail or return an error if you try to remove a client ID that does not exist. func removeClientIDFromOpenIDConnectProvider(input: RemoveClientIDFromOpenIDConnectProviderInput) async throws -> RemoveClientIDFromOpenIDConnectProviderOutputResponse - /// Removes the specified IAM role from the specified EC2 instance profile. Make sure that you do not have any Amazon EC2 instances running with the role you are about to remove from the instance profile. Removing a role from an instance profile that is associated with a running instance might break any applications running on the instance. For more information about IAM roles, see [Working with roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html). For more information about instance profiles, see [About instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/AboutInstanceProfiles.html). + /// Removes the specified IAM role from the specified EC2 instance profile. Make sure that you do not have any Amazon EC2 instances running with the role you are about to remove from the instance profile. Removing a role from an instance profile that is associated with a running instance might break any applications running on the instance. For more information about roles, see [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) in the IAM User Guide. For more information about instance profiles, see [Using instance profiles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) in the IAM User Guide. func removeRoleFromInstanceProfile(input: RemoveRoleFromInstanceProfileInput) async throws -> RemoveRoleFromInstanceProfileOutputResponse /// Removes the specified user from the specified group. func removeUserFromGroup(input: RemoveUserFromGroupInput) async throws -> RemoveUserFromGroupOutputResponse @@ -519,7 +519,7 @@ public protocol IAMClientProtocol { func updateGroup(input: UpdateGroupInput) async throws -> UpdateGroupOutputResponse /// Changes the password for the specified IAM user. You can use the CLI, the Amazon Web Services API, or the Users page in the IAM console to change the password for any IAM user. Use [ChangePassword] to change your own password in the My Security Credentials page in the Amazon Web Services Management Console. For more information about modifying passwords, see [Managing passwords](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingLogins.html) in the IAM User Guide. func updateLoginProfile(input: UpdateLoginProfileInput) async throws -> UpdateLoginProfileOutputResponse - /// Replaces the existing list of server certificate thumbprints associated with an OpenID Connect (OIDC) provider resource object with a new list of thumbprints. The list that you pass with this operation completely replaces the existing list of thumbprints. (The lists are not merged.) Typically, you need to update a thumbprint only when the identity provider certificate changes, which occurs rarely. However, if the provider's certificate does change, any attempt to assume an IAM role that specifies the OIDC provider as a principal fails until the certificate thumbprint is updated. Amazon Web Services secures communication with some OIDC identity providers (IdPs) through our library of trusted certificate authorities (CAs) instead of using a certificate thumbprint to verify your IdP server certificate. These OIDC IdPs include Google, Auth0, and those that use an Amazon S3 bucket to host a JSON Web Key Set (JWKS) endpoint. In these cases, your legacy thumbprint remains in your configuration, but is no longer used for validation. Trust for the OIDC provider is derived from the provider certificate and is validated by the thumbprint. Therefore, it is best to limit access to the UpdateOpenIDConnectProviderThumbprint operation to highly privileged users. + /// Replaces the existing list of server certificate thumbprints associated with an OpenID Connect (OIDC) provider resource object with a new list of thumbprints. The list that you pass with this operation completely replaces the existing list of thumbprints. (The lists are not merged.) Typically, you need to update a thumbprint only when the identity provider certificate changes, which occurs rarely. However, if the provider's certificate does change, any attempt to assume an IAM role that specifies the OIDC provider as a principal fails until the certificate thumbprint is updated. Amazon Web Services secures communication with some OIDC identity providers (IdPs) through our library of trusted root certificate authorities (CAs) instead of using a certificate thumbprint to verify your IdP server certificate. These OIDC IdPs include Auth0, GitHub, Google, and those that use an Amazon S3 bucket to host a JSON Web Key Set (JWKS) endpoint. In these cases, your legacy thumbprint remains in your configuration, but is no longer used for validation. Trust for the OIDC provider is derived from the provider certificate and is validated by the thumbprint. Therefore, it is best to limit access to the UpdateOpenIDConnectProviderThumbprint operation to highly privileged users. func updateOpenIDConnectProviderThumbprint(input: UpdateOpenIDConnectProviderThumbprintInput) async throws -> UpdateOpenIDConnectProviderThumbprintOutputResponse /// Updates the description or maximum session duration setting of a role. func updateRole(input: UpdateRoleInput) async throws -> UpdateRoleOutputResponse diff --git a/Sources/Services/AWSIAM/models/Models.swift b/Sources/Services/AWSIAM/models/Models.swift index 4e8f0593465..cf3a6111b63 100644 --- a/Sources/Services/AWSIAM/models/Models.swift +++ b/Sources/Services/AWSIAM/models/Models.swift @@ -18246,7 +18246,7 @@ public struct PutGroupPolicyInput: Swift.Equatable { /// The name of the group to associate the policy with. This parameter allows (through its [regex pattern](http://wikipedia.org/wiki/regex)) a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-. /// This member is required. public var groupName: Swift.String? - /// The policy document. You must provide policies in JSON format in IAM. However, for CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. CloudFormation always converts a YAML policy to JSON format before submitting it to = IAM. The [regex pattern](http://wikipedia.org/wiki/regex) used to validate this parameter is a string of characters consisting of the following: + /// The policy document. You must provide policies in JSON format in IAM. However, for CloudFormation templates formatted in YAML, you can provide the policy in JSON or YAML format. CloudFormation always converts a YAML policy to JSON format before submitting it to IAM. The [regex pattern](http://wikipedia.org/wiki/regex) used to validate this parameter is a string of characters consisting of the following: /// /// * Any printable ASCII character ranging from the space character (\u0020) through the end of the ASCII character range /// diff --git a/Sources/Services/AWSInspector2/EndpointResolver.swift b/Sources/Services/AWSInspector2/EndpointResolver.swift index 7a02ef5cd4f..4b343938895 100644 --- a/Sources/Services/AWSInspector2/EndpointResolver.swift +++ b/Sources/Services/AWSInspector2/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://inspector2-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://inspector2-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://inspector2.{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://inspector2.{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\":[{\"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\":[{\"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\":[],\"endpoint\":{\"url\":\"https://inspector2-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\":[],\"endpoint\":{\"url\":\"https://inspector2-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\":[],\"endpoint\":{\"url\":\"https://inspector2.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://inspector2.{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/AWSInspector2/Inspector2Client.swift b/Sources/Services/AWSInspector2/Inspector2Client.swift index cb907bfd8b4..7ccd2aebdd9 100644 --- a/Sources/Services/AWSInspector2/Inspector2Client.swift +++ b/Sources/Services/AWSInspector2/Inspector2Client.swift @@ -175,6 +175,42 @@ extension Inspector2Client: Inspector2ClientProtocol { return result } + /// Gets vulnerability details for findings. + public func batchGetFindingDetails(input: BatchGetFindingDetailsInput) async throws -> BatchGetFindingDetailsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "batchGetFindingDetails") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "inspector2") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "batchGetFindingDetails") + 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.serviceSpecific.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: "BatchGetFindingDetailsRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Gets free trial status for multiple Amazon Web Services accounts. public func batchGetFreeTrialInfo(input: BatchGetFreeTrialInfoInput) async throws -> BatchGetFreeTrialInfoOutputResponse { diff --git a/Sources/Services/AWSInspector2/Inspector2ClientProtocol.swift b/Sources/Services/AWSInspector2/Inspector2ClientProtocol.swift index e7908896ef6..5fb2a263de2 100644 --- a/Sources/Services/AWSInspector2/Inspector2ClientProtocol.swift +++ b/Sources/Services/AWSInspector2/Inspector2ClientProtocol.swift @@ -10,6 +10,8 @@ public protocol Inspector2ClientProtocol { func batchGetAccountStatus(input: BatchGetAccountStatusInput) async throws -> BatchGetAccountStatusOutputResponse /// Retrieves code snippets from findings that Amazon Inspector detected code vulnerabilities in. func batchGetCodeSnippet(input: BatchGetCodeSnippetInput) async throws -> BatchGetCodeSnippetOutputResponse + /// Gets vulnerability details for findings. + func batchGetFindingDetails(input: BatchGetFindingDetailsInput) async throws -> BatchGetFindingDetailsOutputResponse /// Gets free trial status for multiple Amazon Web Services accounts. func batchGetFreeTrialInfo(input: BatchGetFreeTrialInfoInput) async throws -> BatchGetFreeTrialInfoOutputResponse /// Retrieves Amazon Inspector deep inspection activation status of multiple member accounts within your organization. You must be the delegated administrator of an organization in Amazon Inspector to use this API. diff --git a/Sources/Services/AWSInspector2/models/Models.swift b/Sources/Services/AWSInspector2/models/Models.swift index 8ef47a2dc8a..429291416d2 100644 --- a/Sources/Services/AWSInspector2/models/Models.swift +++ b/Sources/Services/AWSInspector2/models/Models.swift @@ -2246,6 +2246,148 @@ extension BatchGetCodeSnippetOutputResponseBody: Swift.Decodable { } } +extension BatchGetFindingDetailsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case findingArns + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let findingArns = findingArns { + var findingArnsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .findingArns) + for findingarn0 in findingArns { + try findingArnsContainer.encode(findingarn0) + } + } + } +} + +extension BatchGetFindingDetailsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/findings/details/batch/get" + } +} + +public struct BatchGetFindingDetailsInput: Swift.Equatable { + /// A list of finding ARNs. + /// This member is required. + public var findingArns: [Swift.String]? + + public init( + findingArns: [Swift.String]? = nil + ) + { + self.findingArns = findingArns + } +} + +struct BatchGetFindingDetailsInputBody: Swift.Equatable { + let findingArns: [Swift.String]? +} + +extension BatchGetFindingDetailsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case findingArns + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let findingArnsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .findingArns) + var findingArnsDecoded0:[Swift.String]? = nil + if let findingArnsContainer = findingArnsContainer { + findingArnsDecoded0 = [Swift.String]() + for string0 in findingArnsContainer { + if let string0 = string0 { + findingArnsDecoded0?.append(string0) + } + } + } + findingArns = findingArnsDecoded0 + } +} + +public enum BatchGetFindingDetailsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension BatchGetFindingDetailsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: BatchGetFindingDetailsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.errors = output.errors + self.findingDetails = output.findingDetails + } else { + self.errors = nil + self.findingDetails = nil + } + } +} + +public struct BatchGetFindingDetailsOutputResponse: Swift.Equatable { + /// Error information for findings that details could not be returned for. + public var errors: [Inspector2ClientTypes.FindingDetailsError]? + /// A finding's vulnerability details. + public var findingDetails: [Inspector2ClientTypes.FindingDetail]? + + public init( + errors: [Inspector2ClientTypes.FindingDetailsError]? = nil, + findingDetails: [Inspector2ClientTypes.FindingDetail]? = nil + ) + { + self.errors = errors + self.findingDetails = findingDetails + } +} + +struct BatchGetFindingDetailsOutputResponseBody: Swift.Equatable { + let findingDetails: [Inspector2ClientTypes.FindingDetail]? + let errors: [Inspector2ClientTypes.FindingDetailsError]? +} + +extension BatchGetFindingDetailsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case errors + case findingDetails + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let findingDetailsContainer = try containerValues.decodeIfPresent([Inspector2ClientTypes.FindingDetail?].self, forKey: .findingDetails) + var findingDetailsDecoded0:[Inspector2ClientTypes.FindingDetail]? = nil + if let findingDetailsContainer = findingDetailsContainer { + findingDetailsDecoded0 = [Inspector2ClientTypes.FindingDetail]() + for structure0 in findingDetailsContainer { + if let structure0 = structure0 { + findingDetailsDecoded0?.append(structure0) + } + } + } + findingDetails = findingDetailsDecoded0 + let errorsContainer = try containerValues.decodeIfPresent([Inspector2ClientTypes.FindingDetailsError?].self, forKey: .errors) + var errorsDecoded0:[Inspector2ClientTypes.FindingDetailsError]? = nil + if let errorsContainer = errorsContainer { + errorsDecoded0 = [Inspector2ClientTypes.FindingDetailsError]() + for structure0 in errorsContainer { + if let structure0 = structure0 { + errorsDecoded0?.append(structure0) + } + } + } + errors = errorsDecoded0 + } +} + extension BatchGetFreeTrialInfoInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case accountIds @@ -5335,7 +5477,7 @@ extension Inspector2ClientTypes { /// The name of the Amazon S3 bucket to export findings to. /// This member is required. public var bucketName: Swift.String? - /// The prefix of the Amazon S3 bucket used to export findings. + /// The prefix that the findings will be written under. public var keyPrefix: Swift.String? /// The ARN of the KMS key used to encrypt data when exporting findings. /// This member is required. @@ -6907,6 +7049,61 @@ extension Inspector2ClientTypes { } } +extension Inspector2ClientTypes.Evidence: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case evidenceDetail + case evidenceRule + case severity + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let evidenceDetail = self.evidenceDetail { + try encodeContainer.encode(evidenceDetail, forKey: .evidenceDetail) + } + if let evidenceRule = self.evidenceRule { + try encodeContainer.encode(evidenceRule, forKey: .evidenceRule) + } + if let severity = self.severity { + try encodeContainer.encode(severity, forKey: .severity) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let evidenceRuleDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .evidenceRule) + evidenceRule = evidenceRuleDecoded + let evidenceDetailDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .evidenceDetail) + evidenceDetail = evidenceDetailDecoded + let severityDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .severity) + severity = severityDecoded + } +} + +extension Inspector2ClientTypes { + /// Details of the evidence for a vulnerability identified in a finding. + public struct Evidence: Swift.Equatable { + /// The evidence details. + public var evidenceDetail: Swift.String? + /// The evidence rule. + public var evidenceRule: Swift.String? + /// The evidence severity. + public var severity: Swift.String? + + public init( + evidenceDetail: Swift.String? = nil, + evidenceRule: Swift.String? = nil, + severity: Swift.String? = nil + ) + { + self.evidenceDetail = evidenceDetail + self.evidenceRule = evidenceRule + self.severity = severity + } + } + +} + extension Inspector2ClientTypes { public enum ExploitAvailable: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case no @@ -8197,7 +8394,7 @@ extension Inspector2ClientTypes { public var lambdaFunctionRuntime: [Inspector2ClientTypes.StringFilter]? /// Details on the date and time a finding was last seen used to filter findings. public var lastObservedAt: [Inspector2ClientTypes.DateFilter]? - /// Details on the ingress source addresses used to filter findings. + /// Details on network protocol used to filter findings. public var networkProtocol: [Inspector2ClientTypes.StringFilter]? /// Details on the port ranges used to filter findings. public var portRange: [Inspector2ClientTypes.PortRangeFilter]? @@ -8573,6 +8770,287 @@ extension Inspector2ClientTypes { } +extension Inspector2ClientTypes.FindingDetail: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case cisaData + case cwes + case epssScore + case evidences + case exploitObserved + case findingArn + case referenceUrls + case riskScore + case tools + case ttps + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let cisaData = self.cisaData { + try encodeContainer.encode(cisaData, forKey: .cisaData) + } + if let cwes = cwes { + var cwesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .cwes) + for cwe0 in cwes { + try cwesContainer.encode(cwe0) + } + } + if let epssScore = self.epssScore { + try encodeContainer.encode(epssScore, forKey: .epssScore) + } + if let evidences = evidences { + var evidencesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .evidences) + for evidence0 in evidences { + try evidencesContainer.encode(evidence0) + } + } + if let exploitObserved = self.exploitObserved { + try encodeContainer.encode(exploitObserved, forKey: .exploitObserved) + } + if let findingArn = self.findingArn { + try encodeContainer.encode(findingArn, forKey: .findingArn) + } + if let referenceUrls = referenceUrls { + var referenceUrlsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .referenceUrls) + for vulnerabilityreferenceurl0 in referenceUrls { + try referenceUrlsContainer.encode(vulnerabilityreferenceurl0) + } + } + if let riskScore = self.riskScore { + try encodeContainer.encode(riskScore, forKey: .riskScore) + } + if let tools = tools { + var toolsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tools) + for tool0 in tools { + try toolsContainer.encode(tool0) + } + } + if let ttps = ttps { + var ttpsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .ttps) + for ttp0 in ttps { + try ttpsContainer.encode(ttp0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let findingArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .findingArn) + findingArn = findingArnDecoded + let cisaDataDecoded = try containerValues.decodeIfPresent(Inspector2ClientTypes.CisaData.self, forKey: .cisaData) + cisaData = cisaDataDecoded + let riskScoreDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .riskScore) + riskScore = riskScoreDecoded + let evidencesContainer = try containerValues.decodeIfPresent([Inspector2ClientTypes.Evidence?].self, forKey: .evidences) + var evidencesDecoded0:[Inspector2ClientTypes.Evidence]? = nil + if let evidencesContainer = evidencesContainer { + evidencesDecoded0 = [Inspector2ClientTypes.Evidence]() + for structure0 in evidencesContainer { + if let structure0 = structure0 { + evidencesDecoded0?.append(structure0) + } + } + } + evidences = evidencesDecoded0 + let ttpsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .ttps) + var ttpsDecoded0:[Swift.String]? = nil + if let ttpsContainer = ttpsContainer { + ttpsDecoded0 = [Swift.String]() + for string0 in ttpsContainer { + if let string0 = string0 { + ttpsDecoded0?.append(string0) + } + } + } + ttps = ttpsDecoded0 + let toolsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .tools) + var toolsDecoded0:[Swift.String]? = nil + if let toolsContainer = toolsContainer { + toolsDecoded0 = [Swift.String]() + for string0 in toolsContainer { + if let string0 = string0 { + toolsDecoded0?.append(string0) + } + } + } + tools = toolsDecoded0 + let exploitObservedDecoded = try containerValues.decodeIfPresent(Inspector2ClientTypes.ExploitObserved.self, forKey: .exploitObserved) + exploitObserved = exploitObservedDecoded + let referenceUrlsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .referenceUrls) + var referenceUrlsDecoded0:[Swift.String]? = nil + if let referenceUrlsContainer = referenceUrlsContainer { + referenceUrlsDecoded0 = [Swift.String]() + for string0 in referenceUrlsContainer { + if let string0 = string0 { + referenceUrlsDecoded0?.append(string0) + } + } + } + referenceUrls = referenceUrlsDecoded0 + let cwesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .cwes) + var cwesDecoded0:[Swift.String]? = nil + if let cwesContainer = cwesContainer { + cwesDecoded0 = [Swift.String]() + for string0 in cwesContainer { + if let string0 = string0 { + cwesDecoded0?.append(string0) + } + } + } + cwes = cwesDecoded0 + let epssScoreDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .epssScore) + epssScore = epssScoreDecoded + } +} + +extension Inspector2ClientTypes { + /// Details of the vulnerability identified in a finding. + public struct FindingDetail: Swift.Equatable { + /// The Cybersecurity and Infrastructure Security Agency (CISA) details for a specific vulnerability. + public var cisaData: Inspector2ClientTypes.CisaData? + /// The Common Weakness Enumerations (CWEs) associated with the vulnerability. + public var cwes: [Swift.String]? + /// The Exploit Prediction Scoring System (EPSS) score of the vulnerability. + public var epssScore: Swift.Double? + /// Information on the evidence of the vulnerability. + public var evidences: [Inspector2ClientTypes.Evidence]? + /// Contains information on when this exploit was observed. + public var exploitObserved: Inspector2ClientTypes.ExploitObserved? + /// The finding ARN that the vulnerability details are associated with. + public var findingArn: Swift.String? + /// The reference URLs for the vulnerability data. + public var referenceUrls: [Swift.String]? + /// The risk score of the vulnerability. + public var riskScore: Swift.Int? + /// The known malware tools or kits that can exploit the vulnerability. + public var tools: [Swift.String]? + /// The MITRE adversary tactics, techniques, or procedures (TTPs) associated with the vulnerability. + public var ttps: [Swift.String]? + + public init( + cisaData: Inspector2ClientTypes.CisaData? = nil, + cwes: [Swift.String]? = nil, + epssScore: Swift.Double? = nil, + evidences: [Inspector2ClientTypes.Evidence]? = nil, + exploitObserved: Inspector2ClientTypes.ExploitObserved? = nil, + findingArn: Swift.String? = nil, + referenceUrls: [Swift.String]? = nil, + riskScore: Swift.Int? = nil, + tools: [Swift.String]? = nil, + ttps: [Swift.String]? = nil + ) + { + self.cisaData = cisaData + self.cwes = cwes + self.epssScore = epssScore + self.evidences = evidences + self.exploitObserved = exploitObserved + self.findingArn = findingArn + self.referenceUrls = referenceUrls + self.riskScore = riskScore + self.tools = tools + self.ttps = ttps + } + } + +} + +extension Inspector2ClientTypes.FindingDetailsError: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case errorCode + case errorMessage + case findingArn + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let errorCode = self.errorCode { + try encodeContainer.encode(errorCode.rawValue, forKey: .errorCode) + } + if let errorMessage = self.errorMessage { + try encodeContainer.encode(errorMessage, forKey: .errorMessage) + } + if let findingArn = self.findingArn { + try encodeContainer.encode(findingArn, forKey: .findingArn) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let findingArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .findingArn) + findingArn = findingArnDecoded + let errorCodeDecoded = try containerValues.decodeIfPresent(Inspector2ClientTypes.FindingDetailsErrorCode.self, forKey: .errorCode) + errorCode = errorCodeDecoded + let errorMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorMessage) + errorMessage = errorMessageDecoded + } +} + +extension Inspector2ClientTypes { + /// Details about an error encountered when trying to return vulnerability data for a finding. + public struct FindingDetailsError: Swift.Equatable { + /// The error code. + /// This member is required. + public var errorCode: Inspector2ClientTypes.FindingDetailsErrorCode? + /// The error message. + /// This member is required. + public var errorMessage: Swift.String? + /// The finding ARN that returned an error. + /// This member is required. + public var findingArn: Swift.String? + + public init( + errorCode: Inspector2ClientTypes.FindingDetailsErrorCode? = nil, + errorMessage: Swift.String? = nil, + findingArn: Swift.String? = nil + ) + { + self.errorCode = errorCode + self.errorMessage = errorMessage + self.findingArn = findingArn + } + } + +} + +extension Inspector2ClientTypes { + public enum FindingDetailsErrorCode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case accessDenied + case findingDetailsNotFound + case internalError + case invalidInput + case sdkUnknown(Swift.String) + + public static var allCases: [FindingDetailsErrorCode] { + return [ + .accessDenied, + .findingDetailsNotFound, + .internalError, + .invalidInput, + .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 .accessDenied: return "ACCESS_DENIED" + case .findingDetailsNotFound: return "FINDING_DETAILS_NOT_FOUND" + case .internalError: return "INTERNAL_ERROR" + case .invalidInput: return "INVALID_INPUT" + 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 = FindingDetailsErrorCode(rawValue: rawValue) ?? FindingDetailsErrorCode.sdkUnknown(rawValue) + } + } +} + extension Inspector2ClientTypes { public enum FindingStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case active diff --git a/Sources/Services/AWSInternetMonitor/EndpointResolver.swift b/Sources/Services/AWSInternetMonitor/EndpointResolver.swift index 3df0bf160a6..150c3e918b4 100644 --- a/Sources/Services/AWSInternetMonitor/EndpointResolver.swift +++ b/Sources/Services/AWSInternetMonitor/EndpointResolver.swift @@ -31,7 +31,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\"},\"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\":[],\"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\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"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\":[],\"endpoint\":{\"url\":\"https://internetmonitor-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://internetmonitor.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"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://internetmonitor-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[],\"type\":\"tree\",\"rules\":[{\"conditions\":[],\"endpoint\":{\"url\":\"https://internetmonitor.{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\"},\"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\":[],\"endpoint\":{\"url\":{\"ref\":\"Endpoint\"},\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"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\":[true,{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"supportsDualStack\"]}]}],\"type\":\"tree\",\"rules\":[{\"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\":[],\"endpoint\":{\"url\":\"https://internetmonitor-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://internetmonitor.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"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\":[],\"endpoint\":{\"url\":\"https://internetmonitor-fips.{Region}.{PartitionResult#dnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"FIPS is enabled but this partition does not support FIPS\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://internetmonitor.{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/InternetMonitorClient.swift b/Sources/Services/AWSInternetMonitor/InternetMonitorClient.swift index 71c3af7cd67..5cf4c0b9a0a 100644 --- a/Sources/Services/AWSInternetMonitor/InternetMonitorClient.swift +++ b/Sources/Services/AWSInternetMonitor/InternetMonitorClient.swift @@ -67,7 +67,7 @@ public struct InternetMonitorClientLogHandlerFactory: ClientRuntime.SDKLogHandle } extension InternetMonitorClient: InternetMonitorClientProtocol { - /// Creates a monitor in Amazon CloudWatch Internet Monitor. A monitor is built based on information from the application resources that you add: Amazon Virtual Private Clouds (VPCs), Amazon CloudFront distributions, and WorkSpaces directories. Internet Monitor then publishes internet measurements from Amazon Web Services that are specific to the city-networks, that is, the locations and ASNs (typically internet service providers or ISPs), where clients access your application. For more information, see [Using Amazon CloudWatch Internet Monitor](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-InternetMonitor.html) in the Amazon CloudWatch User Guide. When you create a monitor, you set a maximum limit for the number of city-networks where client traffic is monitored. The city-network maximum that you choose is the limit, but you only pay for the number of city-networks that are actually monitored. You can change the maximum at any time by updating your monitor. For more information, see [Choosing a city-network maximum value](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMCityNetworksMaximum.html) in the Amazon CloudWatch User Guide. + /// Creates a monitor in Amazon CloudWatch Internet Monitor. A monitor is built based on information from the application resources that you add: VPCs, Network Load Balancers (NLBs), Amazon CloudFront distributions, and Amazon WorkSpaces directories. Internet Monitor then publishes internet measurements from Amazon Web Services that are specific to the city-networks. That is, the locations and ASNs (typically internet service providers or ISPs), where clients access your application. For more information, see [Using Amazon CloudWatch Internet Monitor](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-InternetMonitor.html) in the Amazon CloudWatch User Guide. When you create a monitor, you choose the percentage of traffic that you want to monitor. You can also set a maximum limit for the number of city-networks where client traffic is monitored, that caps the total traffic that Internet Monitor monitors. A city-network maximum is the limit of city-networks, but you only pay for the number of city-networks that are actually monitored. You can update your monitor at any time to change the percentage of traffic to monitor or the city-networks maximum. For more information, see [Choosing a city-network maximum value](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMCityNetworksMaximum.html) in the Amazon CloudWatch User Guide. public func createMonitor(input: CreateMonitorInput) async throws -> CreateMonitorOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -144,7 +144,7 @@ extension InternetMonitorClient: InternetMonitorClientProtocol { return result } - /// Gets information the Amazon CloudWatch Internet Monitor has created and stored about a health event for a specified monitor. This information includes the impacted locations, and all of the information related to the event by location. The information returned includes the performance, availability, and round-trip time impact, information about the network providers, the event type, and so on. Information rolled up at the global traffic level is also returned, including the impact type and total traffic impact. + /// Gets information the Amazon CloudWatch Internet Monitor has created and stored about a health event for a specified monitor. This information includes the impacted locations, and all the information related to the event, by location. The information returned includes the impact on performance, availability, and round-trip time, information about the network providers (ASNs), the event type, and so on. Information rolled up at the global traffic level is also returned, including the impact type and total traffic impact. public func getHealthEvent(input: GetHealthEventInput) async throws -> GetHealthEventOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -210,7 +210,7 @@ extension InternetMonitorClient: InternetMonitorClientProtocol { return result } - /// Lists all health events for a monitor in Amazon CloudWatch Internet Monitor. Returns all information for health events including the client location information the network cause and status, event start and end time, percentage of total traffic impacted, and status. Health events that have start times during the time frame that is requested are not included in the list of health events. + /// Lists all health events for a monitor in Amazon CloudWatch Internet Monitor. Returns information for health events including the event start and end time and the status. Health events that have start times during the time frame that is requested are not included in the list of health events. public func listHealthEvents(input: ListHealthEventsInput) async throws -> ListHealthEventsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -381,7 +381,7 @@ extension InternetMonitorClient: InternetMonitorClientProtocol { return result } - /// Updates a monitor. You can update a monitor to change the maximum number of city-networks (locations and ASNs or internet service providers), to add or remove resources, or to change the status of the monitor. Note that you can't change the name of a monitor. The city-network maximum that you choose is the limit, but you only pay for the number of city-networks that are actually monitored. For more information, see [Choosing a city-network maximum value](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMCityNetworksMaximum.html) in the Amazon CloudWatch User Guide. + /// Updates a monitor. You can update a monitor to change the percentage of traffic to monitor or the maximum number of city-networks (locations and ASNs), to add or remove resources, or to change the status of the monitor. Note that you can't change the name of a monitor. The city-network maximum that you choose is the limit, but you only pay for the number of city-networks that are actually monitored. For more information, see [Choosing a city-network maximum value](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMCityNetworksMaximum.html) in the Amazon CloudWatch User Guide. public func updateMonitor(input: UpdateMonitorInput) async throws -> UpdateMonitorOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSInternetMonitor/InternetMonitorClientProtocol.swift b/Sources/Services/AWSInternetMonitor/InternetMonitorClientProtocol.swift index 42eaf5e2f0e..aa39fa8d252 100644 --- a/Sources/Services/AWSInternetMonitor/InternetMonitorClientProtocol.swift +++ b/Sources/Services/AWSInternetMonitor/InternetMonitorClientProtocol.swift @@ -2,17 +2,17 @@ import ClientRuntime -/// Amazon CloudWatch Internet Monitor provides visibility into how internet issues impact the performance and availability between your applications hosted on Amazon Web Services and your end users. It reduces the time it takes for you to diagnose internet issues from days to minutes. Internet Monitor uses the connectivity data that Amazon Web Services captures from its global networking footprint to calculate a baseline of performance and availability for internet traffic. This is the same data that Amazon Web Services uses to monitor internet uptime and availability. With those measurements as a baseline, Internet Monitor raises awareness for you when there are significant problems for your end users in the different geographic locations where your application runs. Internet Monitor publishes internet measurements to CloudWatch Logs and CloudWatch Metrics, to easily support using CloudWatch tools with health information for geographies and networks specific to your application. Internet Monitor sends health events to Amazon EventBridge so that you can set up notifications. If an issue is caused by the Amazon Web Services network, you also automatically receive an Amazon Web Services Health Dashboard notification with the steps that Amazon Web Services is taking to mitigate the problem. To use Internet Monitor, you create a monitor and associate your application's resources with it, VPCs, CloudFront distributions, or WorkSpaces directories, to enable Internet Monitor to know where your application's internet traffic is. Internet Monitor then provides internet measurements from Amazon Web Services that are specific to the locations and networks that communicate with your application. For more information, see [Using Amazon CloudWatch Internet Monitor](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-InternetMonitor.html) in the Amazon CloudWatch User Guide. +/// Amazon CloudWatch Internet Monitor provides visibility into how internet issues impact the performance and availability between your applications hosted on Amazon Web Services and your end users. It can reduce the time it takes for you to diagnose internet issues from days to minutes. Internet Monitor uses the connectivity data that Amazon Web Services captures from its global networking footprint to calculate a baseline of performance and availability for internet traffic. This is the same data that Amazon Web Services uses to monitor internet uptime and availability. With those measurements as a baseline, Internet Monitor raises awareness for you when there are significant problems for your end users in the different geographic locations where your application runs. Internet Monitor publishes internet measurements to CloudWatch Logs and CloudWatch Metrics, to easily support using CloudWatch tools with health information for geographies and networks specific to your application. Internet Monitor sends health events to Amazon EventBridge so that you can set up notifications. If an issue is caused by the Amazon Web Services network, you also automatically receive an Amazon Web Services Health Dashboard notification with the steps that Amazon Web Services is taking to mitigate the problem. To use Internet Monitor, you create a monitor and associate your application's resources with it - VPCs, NLBs, CloudFront distributions, or WorkSpaces directories - so Internet Monitor can determine where your application's internet traffic is. Internet Monitor then provides internet measurements from Amazon Web Services that are specific to the locations and ASNs (typically, internet service providers or ISPs) that communicate with your application. For more information, see [Using Amazon CloudWatch Internet Monitor](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-InternetMonitor.html) in the Amazon CloudWatch User Guide. public protocol InternetMonitorClientProtocol { - /// Creates a monitor in Amazon CloudWatch Internet Monitor. A monitor is built based on information from the application resources that you add: Amazon Virtual Private Clouds (VPCs), Amazon CloudFront distributions, and WorkSpaces directories. Internet Monitor then publishes internet measurements from Amazon Web Services that are specific to the city-networks, that is, the locations and ASNs (typically internet service providers or ISPs), where clients access your application. For more information, see [Using Amazon CloudWatch Internet Monitor](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-InternetMonitor.html) in the Amazon CloudWatch User Guide. When you create a monitor, you set a maximum limit for the number of city-networks where client traffic is monitored. The city-network maximum that you choose is the limit, but you only pay for the number of city-networks that are actually monitored. You can change the maximum at any time by updating your monitor. For more information, see [Choosing a city-network maximum value](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMCityNetworksMaximum.html) in the Amazon CloudWatch User Guide. + /// Creates a monitor in Amazon CloudWatch Internet Monitor. A monitor is built based on information from the application resources that you add: VPCs, Network Load Balancers (NLBs), Amazon CloudFront distributions, and Amazon WorkSpaces directories. Internet Monitor then publishes internet measurements from Amazon Web Services that are specific to the city-networks. That is, the locations and ASNs (typically internet service providers or ISPs), where clients access your application. For more information, see [Using Amazon CloudWatch Internet Monitor](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-InternetMonitor.html) in the Amazon CloudWatch User Guide. When you create a monitor, you choose the percentage of traffic that you want to monitor. You can also set a maximum limit for the number of city-networks where client traffic is monitored, that caps the total traffic that Internet Monitor monitors. A city-network maximum is the limit of city-networks, but you only pay for the number of city-networks that are actually monitored. You can update your monitor at any time to change the percentage of traffic to monitor or the city-networks maximum. For more information, see [Choosing a city-network maximum value](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMCityNetworksMaximum.html) in the Amazon CloudWatch User Guide. func createMonitor(input: CreateMonitorInput) async throws -> CreateMonitorOutputResponse /// Deletes a monitor in Amazon CloudWatch Internet Monitor. func deleteMonitor(input: DeleteMonitorInput) async throws -> DeleteMonitorOutputResponse - /// Gets information the Amazon CloudWatch Internet Monitor has created and stored about a health event for a specified monitor. This information includes the impacted locations, and all of the information related to the event by location. The information returned includes the performance, availability, and round-trip time impact, information about the network providers, the event type, and so on. Information rolled up at the global traffic level is also returned, including the impact type and total traffic impact. + /// Gets information the Amazon CloudWatch Internet Monitor has created and stored about a health event for a specified monitor. This information includes the impacted locations, and all the information related to the event, by location. The information returned includes the impact on performance, availability, and round-trip time, information about the network providers (ASNs), the event type, and so on. Information rolled up at the global traffic level is also returned, including the impact type and total traffic impact. func getHealthEvent(input: GetHealthEventInput) async throws -> GetHealthEventOutputResponse /// Gets information about a monitor in Amazon CloudWatch Internet Monitor based on a monitor name. The information returned includes the Amazon Resource Name (ARN), create time, modified time, resources included in the monitor, and status information. func getMonitor(input: GetMonitorInput) async throws -> GetMonitorOutputResponse - /// Lists all health events for a monitor in Amazon CloudWatch Internet Monitor. Returns all information for health events including the client location information the network cause and status, event start and end time, percentage of total traffic impacted, and status. Health events that have start times during the time frame that is requested are not included in the list of health events. + /// Lists all health events for a monitor in Amazon CloudWatch Internet Monitor. Returns information for health events including the event start and end time and the status. Health events that have start times during the time frame that is requested are not included in the list of health events. func listHealthEvents(input: ListHealthEventsInput) async throws -> ListHealthEventsOutputResponse /// Lists all of your monitors for Amazon CloudWatch Internet Monitor and their statuses, along with the Amazon Resource Name (ARN) and name of each monitor. func listMonitors(input: ListMonitorsInput) async throws -> ListMonitorsOutputResponse @@ -22,7 +22,7 @@ public protocol InternetMonitorClientProtocol { func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse /// Removes a tag from a resource. func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse - /// Updates a monitor. You can update a monitor to change the maximum number of city-networks (locations and ASNs or internet service providers), to add or remove resources, or to change the status of the monitor. Note that you can't change the name of a monitor. The city-network maximum that you choose is the limit, but you only pay for the number of city-networks that are actually monitored. For more information, see [Choosing a city-network maximum value](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMCityNetworksMaximum.html) in the Amazon CloudWatch User Guide. + /// Updates a monitor. You can update a monitor to change the percentage of traffic to monitor or the maximum number of city-networks (locations and ASNs), to add or remove resources, or to change the status of the monitor. Note that you can't change the name of a monitor. The city-network maximum that you choose is the limit, but you only pay for the number of city-networks that are actually monitored. For more information, see [Choosing a city-network maximum value](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMCityNetworksMaximum.html) in the Amazon CloudWatch User Guide. func updateMonitor(input: UpdateMonitorInput) async throws -> UpdateMonitorOutputResponse } diff --git a/Sources/Services/AWSInternetMonitor/models/Models.swift b/Sources/Services/AWSInternetMonitor/models/Models.swift index bdf64c535fc..2cce9c501d8 100644 --- a/Sources/Services/AWSInternetMonitor/models/Models.swift +++ b/Sources/Services/AWSInternetMonitor/models/Models.swift @@ -89,13 +89,13 @@ extension InternetMonitorClientTypes.AvailabilityMeasurement: Swift.Codable { } extension InternetMonitorClientTypes { - /// Measurements about the availability for your application on the internet, calculated by Amazon CloudWatch Internet Monitor. Amazon Web Services has substantial historical data about internet performance and availability between Amazon Web Services services and different network providers and geographies. By applying statistical analysis to the data, Internet Monitor can detect when the performance and availability for your application has dropped, compared to an estimated baseline that's already calculated. To make it easier to see those drops, we report that information to you in the form of health scores: a performance score and an availability score. Availability in Internet Monitor represents the estimated percentage of traffic that is not seeing an availability drop. For example, an availability score of 99% for an end user and service location pair is equivalent to 1% of the traffic experiencing an availability drop for that pair. For more information, see [How Internet Monitor calculates performance and availability scores](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html#IMExperienceScores) in the Amazon CloudWatch Internet Monitor section of the Amazon CloudWatch User Guide. + /// Amazon CloudWatch Internet Monitor calculates measurements about the availability for your application's internet traffic between client locations and Amazon Web Services. Amazon Web Services has substantial historical data about internet performance and availability between Amazon Web Services services and different network providers and geographies. By applying statistical analysis to the data, Internet Monitor can detect when the performance and availability for your application has dropped, compared to an estimated baseline that's already calculated. To make it easier to see those drops, we report that information to you in the form of health scores: a performance score and an availability score. Availability in Internet Monitor represents the estimated percentage of traffic that is not seeing an availability drop. For example, an availability score of 99% for an end user and service location pair is equivalent to 1% of the traffic experiencing an availability drop for that pair. For more information, see [How Internet Monitor calculates performance and availability scores](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html#IMExperienceScores) in the Amazon CloudWatch Internet Monitor section of the Amazon CloudWatch User Guide. public struct AvailabilityMeasurement: Swift.Equatable { /// Experience scores, or health scores are calculated for different geographic and network provider combinations (that is, different granularities) and also summed into global scores. If you view performance or availability scores without filtering for any specific geography or service provider, Amazon CloudWatch Internet Monitor provides global health scores. The Amazon CloudWatch Internet Monitor chapter in the CloudWatch User Guide includes detailed information about how Internet Monitor calculates health scores, including performance and availability scores, and when it creates and resolves health events. For more information, see [How Amazon Web Services calculates performance and availability scores](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html#IMExperienceScores) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. public var experienceScore: Swift.Double? /// The percentage of impact caused by a health event for client location traffic globally. For information about how Internet Monitor calculates impact, see [Inside Internet Monitor](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html) in the Amazon CloudWatch Internet Monitor section of the Amazon CloudWatch User Guide. public var percentOfClientLocationImpacted: Swift.Double? - /// The percentage of impact caused by a health event for total traffic globally. For information about how Internet Monitor calculates impact, see [Inside Internet Monitor](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html) in the Amazon CloudWatch Internet Monitor section of the Amazon CloudWatch User Guide. + /// The impact on total traffic that a health event has, in increased latency or reduced availability. This is the percentage of how much latency has increased or availability has decreased during the event, compared to what is typical for traffic from this client location to the Amazon Web Services location using this client network. For information about how Internet Monitor calculates impact, see [How Internet Monitor works](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html) in the Amazon CloudWatch Internet Monitor section of the Amazon CloudWatch User Guide. public var percentOfTotalTrafficImpacted: Swift.Double? public init( @@ -278,20 +278,20 @@ 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? - /// Defines the health event threshold percentages, for performance score and availability score. Internet Monitor creates a health event when there's an internet issue that affects your application end users where a health score percentage is at or below a set threshold. If you don't set a health event threshold, the default calue is 95%. + /// Defines the threshold percentages and other configuration information for when Amazon CloudWatch Internet Monitor creates a health event. Internet Monitor creates a health event when an internet issue that affects your application end users has a health score percentage that is at or below a specific threshold, and, sometimes, when other criteria are met. If you don't set a health event threshold, the default value is 95%. For more information, see [ Change health event thresholds](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-overview.html#IMUpdateThresholdFromOverview) in the Internet Monitor section of the CloudWatch User Guide. public var healthEventsConfig: InternetMonitorClientTypes.HealthEventsConfig? /// 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. + /// 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 ASN or network provider, such as an internet service provider (ISP), that clients access the resources through. Setting this limit can help 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. public var maxCityNetworksToMonitor: Swift.Int /// The name of the monitor. /// This member is required. public var monitorName: Swift.String? - /// The resources to include in a monitor, which you provide as a set of Amazon Resource Names (ARNs). You can add a combination of Amazon Virtual Private Clouds (VPCs) and Amazon CloudFront distributions, or you can add Amazon WorkSpaces directories. You can't add all three types of resources. If you add only VPC resources, at least one VPC must have an Internet Gateway attached to it, to make sure that it has internet connectivity. + /// The resources to include in a monitor, which you provide as a set of Amazon Resource Names (ARNs). Resources can be VPCs, NLBs, Amazon CloudFront distributions, or Amazon WorkSpaces directories. You can add a combination of VPCs and CloudFront distributions, or you can add WorkSpaces directories, or you can add NLBs. You can't add NLBs or WorkSpaces directories together with any other resources. If you add only Amazon VPC resources, at least one VPC must have an Internet Gateway attached to it, to make sure that it has internet connectivity. 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. + /// The percentage of the internet-facing traffic for your application that you want to monitor with this monitor. If you set a city-networks maximum, that limit overrides the traffic percentage that you set. To learn more, see [Choosing an application traffic percentage to monitor ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMTrafficPercentage.html) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. public var trafficPercentageToMonitor: Swift.Int public init( @@ -597,7 +597,7 @@ public struct GetHealthEventOutputResponse: Swift.Equatable { /// The internally generated identifier of a health event. /// This member is required. public var eventId: Swift.String? - /// The threshold percentage for health events when Amazon CloudWatch Internet Monitor creates a health event. + /// The threshold percentage for a health score that determines, along with other configuration information, when Internet Monitor creates a health event when there's an internet issue that affects your application end users. public var healthScoreThreshold: Swift.Double /// The type of impairment of a specific health event. /// This member is required. @@ -608,7 +608,7 @@ public struct GetHealthEventOutputResponse: Swift.Equatable { /// The time when a health event was last updated or recalculated. /// This member is required. public var lastUpdatedAt: ClientRuntime.Date? - /// The impact on total traffic that a health event has. + /// The impact on total traffic that a health event has, in increased latency or reduced availability. This is the percentage of how much latency has increased or availability has decreased during the event, compared to what is typical for traffic from this client location to the Amazon Web Services location using this client network. public var percentOfTotalTrafficImpacted: Swift.Double? /// The time when a health event started. /// This member is required. @@ -795,11 +795,11 @@ public struct GetMonitorOutputResponse: Swift.Equatable { /// The time when the monitor was created. /// This member is required. public var createdAt: ClientRuntime.Date? - /// The list of health event thresholds. A health event threshold percentage, for performance and availability, determines the level of impact at which Amazon CloudWatch Internet Monitor creates a health event when there's an internet issue that affects your application end users. + /// The list of health event threshold configurations. The threshold percentage for a health score determines, along with other configuration information, when Internet Monitor creates a health event when there's an internet issue that affects your application end users. For more information, see [ Change health event thresholds](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-overview.html#IMUpdateThresholdFromOverview) in the Internet Monitor section of the CloudWatch User Guide. public var healthEventsConfig: InternetMonitorClientTypes.HealthEventsConfig? /// 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. + /// 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 ASN or network provider, such as an internet service provider (ISP), that clients access the resources through. This limit can help 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. public var maxCityNetworksToMonitor: Swift.Int /// The last time that the monitor was modified. /// This member is required. @@ -814,7 +814,7 @@ public struct GetMonitorOutputResponse: Swift.Equatable { public var processingStatus: InternetMonitorClientTypes.MonitorProcessingStatusCode? /// Additional information about the health of the data processing for the monitor. public var processingStatusInfo: Swift.String? - /// The resources that have been added for the monitor. Resources are listed by their Amazon Resource Names (ARNs). + /// The resources monitored by the monitor. Resources are listed by their Amazon Resource Names (ARNs). /// This member is required. public var resources: [Swift.String]? /// The status of the monitor. @@ -822,7 +822,7 @@ 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. + /// The percentage of the internet-facing traffic for your application to monitor with this monitor. If you set a city-networks maximum, that limit overrides the traffic percentage that you set. To learn more, see [Choosing an application traffic percentage to monitor ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMTrafficPercentage.html) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. public var trafficPercentageToMonitor: Swift.Int public init( @@ -1054,7 +1054,7 @@ extension InternetMonitorClientTypes { /// When the health event was last updated. /// This member is required. public var lastUpdatedAt: ClientRuntime.Date? - /// The impact on global traffic monitored by this monitor for this health event. + /// The impact on total traffic that a health event has, in increased latency or reduced availability. This is the percentage of how much latency has increased or availability has decreased during the event, compared to what is typical for traffic from this client location to the Amazon Web Services location using this client network. public var percentOfTotalTrafficImpacted: Swift.Double? /// When a health event started. /// This member is required. @@ -1096,12 +1096,16 @@ extension InternetMonitorClientTypes { extension InternetMonitorClientTypes { public enum HealthEventImpactType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case availability + case localAvailability + case localPerformance case performance case sdkUnknown(Swift.String) public static var allCases: [HealthEventImpactType] { return [ .availability, + .localAvailability, + .localPerformance, .performance, .sdkUnknown("") ] @@ -1113,6 +1117,8 @@ extension InternetMonitorClientTypes { public var rawValue: Swift.String { switch self { case .availability: return "AVAILABILITY" + case .localAvailability: return "LOCAL_AVAILABILITY" + case .localPerformance: return "LOCAL_PERFORMANCE" case .performance: return "PERFORMANCE" case let .sdkUnknown(s): return s } @@ -1159,15 +1165,23 @@ extension InternetMonitorClientTypes { extension InternetMonitorClientTypes.HealthEventsConfig: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case availabilityLocalHealthEventsConfig = "AvailabilityLocalHealthEventsConfig" case availabilityScoreThreshold = "AvailabilityScoreThreshold" + case performanceLocalHealthEventsConfig = "PerformanceLocalHealthEventsConfig" case performanceScoreThreshold = "PerformanceScoreThreshold" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let availabilityLocalHealthEventsConfig = self.availabilityLocalHealthEventsConfig { + try encodeContainer.encode(availabilityLocalHealthEventsConfig, forKey: .availabilityLocalHealthEventsConfig) + } if availabilityScoreThreshold != 0.0 { try encodeContainer.encode(availabilityScoreThreshold, forKey: .availabilityScoreThreshold) } + if let performanceLocalHealthEventsConfig = self.performanceLocalHealthEventsConfig { + try encodeContainer.encode(performanceLocalHealthEventsConfig, forKey: .performanceLocalHealthEventsConfig) + } if performanceScoreThreshold != 0.0 { try encodeContainer.encode(performanceScoreThreshold, forKey: .performanceScoreThreshold) } @@ -1179,23 +1193,35 @@ extension InternetMonitorClientTypes.HealthEventsConfig: Swift.Codable { availabilityScoreThreshold = availabilityScoreThresholdDecoded let performanceScoreThresholdDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .performanceScoreThreshold) ?? 0.0 performanceScoreThreshold = performanceScoreThresholdDecoded + let availabilityLocalHealthEventsConfigDecoded = try containerValues.decodeIfPresent(InternetMonitorClientTypes.LocalHealthEventsConfig.self, forKey: .availabilityLocalHealthEventsConfig) + availabilityLocalHealthEventsConfig = availabilityLocalHealthEventsConfigDecoded + let performanceLocalHealthEventsConfigDecoded = try containerValues.decodeIfPresent(InternetMonitorClientTypes.LocalHealthEventsConfig.self, forKey: .performanceLocalHealthEventsConfig) + performanceLocalHealthEventsConfig = performanceLocalHealthEventsConfigDecoded } } extension InternetMonitorClientTypes { - /// A complex type for the configuration. Defines the health event threshold percentages, for performance score and availability score. Amazon CloudWatch Internet Monitor creates a health event when there's an internet issue that affects your application end users where a health score percentage is at or below a set threshold. If you don't set a health event threshold, the default value is 95%. + /// A complex type with the configuration information that determines the threshold and other conditions for when Internet Monitor creates a health event for an overall performance or availability issue, across an application's geographies. Defines the percentages, for overall performance scores and availability scores for an application, that are the thresholds for when Amazon CloudWatch Internet Monitor creates a health event. You can override the defaults to set a custom threshold for overall performance or availability scores, or both. You can also set thresholds for local health scores,, where Internet Monitor creates a health event when scores cross a threshold for one or more city-networks, in addition to creating an event when an overall score crosses a threshold. If you don't set a health event threshold, the default value is 95%. For local thresholds, you also set a minimum percentage of overall traffic that is impacted by an issue before Internet Monitor creates an event. In addition, you can disable local thresholds, for performance scores, availability scores, or both. For more information, see [ Change health event thresholds](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-overview.html#IMUpdateThresholdFromOverview) in the Internet Monitor section of the CloudWatch User Guide. public struct HealthEventsConfig: Swift.Equatable { + /// The configuration that determines the threshold and other conditions for when Internet Monitor creates a health event for a local availability issue. + public var availabilityLocalHealthEventsConfig: InternetMonitorClientTypes.LocalHealthEventsConfig? /// The health event threshold percentage set for availability scores. public var availabilityScoreThreshold: Swift.Double + /// The configuration that determines the threshold and other conditions for when Internet Monitor creates a health event for a local performance issue. + public var performanceLocalHealthEventsConfig: InternetMonitorClientTypes.LocalHealthEventsConfig? /// The health event threshold percentage set for performance scores. public var performanceScoreThreshold: Swift.Double public init( + availabilityLocalHealthEventsConfig: InternetMonitorClientTypes.LocalHealthEventsConfig? = nil, availabilityScoreThreshold: Swift.Double = 0.0, + performanceLocalHealthEventsConfig: InternetMonitorClientTypes.LocalHealthEventsConfig? = nil, performanceScoreThreshold: Swift.Double = 0.0 ) { + self.availabilityLocalHealthEventsConfig = availabilityLocalHealthEventsConfig self.availabilityScoreThreshold = availabilityScoreThreshold + self.performanceLocalHealthEventsConfig = performanceLocalHealthEventsConfig self.performanceScoreThreshold = performanceScoreThreshold } } @@ -1507,7 +1533,7 @@ extension InternetMonitorClientTypes.InternetHealth: Swift.Codable { } extension InternetMonitorClientTypes { - /// Internet health includes measurements calculated by Amazon CloudWatch Internet Monitor about the performance and availability for your application on the internet. Amazon Web Services has substantial historical data about internet performance and availability between Amazon Web Services services and different network providers and geographies. By applying statistical analysis to the data, Internet Monitor can detect when the performance and availability for your application has dropped, compared to an estimated baseline that's already calculated. To make it easier to see those drops, we report that information to you in the form of health scores: a performance score and an availability score. + /// Internet health includes measurements calculated by Amazon CloudWatch Internet Monitor about the performance and availability for your application on the internet. Amazon Web Services has substantial historical data about internet performance and availability between Amazon Web Services services and different network providers and geographies. By applying statistical analysis to the data, Internet Monitor can detect when the performance and availability for your application has dropped, compared to an estimated baseline that's already calculated. To make it easier to see those drops, Internet Monitor reports the information to you in the form of health scores: a performance score and an availability score. public struct InternetHealth: Swift.Equatable { /// Availability in Internet Monitor represents the estimated percentage of traffic that is not seeing an availability drop. For example, an availability score of 99% for an end user and service location pair is equivalent to 1% of the traffic experiencing an availability drop for that pair. For more information, see [How Internet Monitor calculates performance and availability scores](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html#IMExperienceScores) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. public var availability: InternetMonitorClientTypes.AvailabilityMeasurement? @@ -1995,6 +2021,93 @@ extension ListTagsForResourceOutputResponseBody: Swift.Decodable { } } +extension InternetMonitorClientTypes.LocalHealthEventsConfig: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case healthScoreThreshold = "HealthScoreThreshold" + case minTrafficImpact = "MinTrafficImpact" + case status = "Status" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if healthScoreThreshold != 0.0 { + try encodeContainer.encode(healthScoreThreshold, forKey: .healthScoreThreshold) + } + if minTrafficImpact != 0.0 { + try encodeContainer.encode(minTrafficImpact, forKey: .minTrafficImpact) + } + 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 statusDecoded = try containerValues.decodeIfPresent(InternetMonitorClientTypes.LocalHealthEventsConfigStatus.self, forKey: .status) + status = statusDecoded + let healthScoreThresholdDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .healthScoreThreshold) ?? 0.0 + healthScoreThreshold = healthScoreThresholdDecoded + let minTrafficImpactDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .minTrafficImpact) ?? 0.0 + minTrafficImpact = minTrafficImpactDecoded + } +} + +extension InternetMonitorClientTypes { + /// A complex type with the configuration information that determines the threshold and other conditions for when Internet Monitor creates a health event for a local performance or availability issue, when scores cross a threshold for one or more city-networks. Defines the percentages, for performance scores or availability scores, that are the local thresholds for when Amazon CloudWatch Internet Monitor creates a health event. Also defines whether a local threshold is enabled or disabled, and the minimum percentage of overall traffic that must be impacted by an issue before Internet Monitor creates an event when a threshold is crossed for a local health score. For more information, see [ Change health event thresholds](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-overview.html#IMUpdateThresholdFromOverview) in the Internet Monitor section of the CloudWatch User Guide. + public struct LocalHealthEventsConfig: Swift.Equatable { + /// The health event threshold percentage set for a local health score. + public var healthScoreThreshold: Swift.Double + /// The minimum percentage of overall traffic for an application that must be impacted by an issue before Internet Monitor creates an event when a threshold is crossed for a local health score. + public var minTrafficImpact: Swift.Double + /// The status of whether Internet Monitor creates a health event based on a threshold percentage set for a local health score. The status can be ENABLED or DISABLED. + public var status: InternetMonitorClientTypes.LocalHealthEventsConfigStatus? + + public init( + healthScoreThreshold: Swift.Double = 0.0, + minTrafficImpact: Swift.Double = 0.0, + status: InternetMonitorClientTypes.LocalHealthEventsConfigStatus? = nil + ) + { + self.healthScoreThreshold = healthScoreThreshold + self.minTrafficImpact = minTrafficImpact + self.status = status + } + } + +} + +extension InternetMonitorClientTypes { + public enum LocalHealthEventsConfigStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case disabled + case enabled + case sdkUnknown(Swift.String) + + public static var allCases: [LocalHealthEventsConfigStatus] { + 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 = LocalHealthEventsConfigStatus(rawValue: rawValue) ?? LocalHealthEventsConfigStatus.sdkUnknown(rawValue) + } + } +} + extension InternetMonitorClientTypes { public enum LogDeliveryStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled @@ -2399,13 +2512,13 @@ extension InternetMonitorClientTypes.PerformanceMeasurement: Swift.Codable { } extension InternetMonitorClientTypes { - /// Measurements about the performance for your application on the internet calculated by Amazon CloudWatch Internet Monitor. Amazon Web Services has substantial historical data about internet performance and availability between Amazon Web Services services and different network providers and geographies. By applying statistical analysis to the data, Internet Monitor can detect when the performance and availability for your application has dropped, compared to an estimated baseline that's already calculated. To make it easier to see those drops, we report that information to you in the form of health scores: a performance score and an availability score. Performance in Internet Monitor represents the estimated percentage of traffic that is not seeing a performance drop. For example, a performance score of 99% for an end user and service location pair is equivalent to 1% of the traffic experiencing a performance drop for that pair. For more information, see [How Internet Monitor calculates performance and availability scores](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html#IMExperienceScores) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. + /// Amazon CloudWatch Internet Monitor calculates measurements about the performance for your application's internet traffic between client locations and Amazon Web Services. Amazon Web Services has substantial historical data about internet performance and availability between Amazon Web Services services and different network providers and geographies. By applying statistical analysis to the data, Internet Monitor can detect when the performance and availability for your application has dropped, compared to an estimated baseline that's already calculated. To make it easier to see those drops, we report that information to you in the form of health scores: a performance score and an availability score. Performance in Internet Monitor represents the estimated percentage of traffic that is not seeing a performance drop. For example, a performance score of 99% for an end user and service location pair is equivalent to 1% of the traffic experiencing a performance drop for that pair. For more information, see [How Internet Monitor calculates performance and availability scores](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html#IMExperienceScores) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. public struct PerformanceMeasurement: Swift.Equatable { /// Experience scores, or health scores, are calculated for different geographic and network provider combinations (that is, different granularities) and also totaled into global scores. If you view performance or availability scores without filtering for any specific geography or service provider, Amazon CloudWatch Internet Monitor provides global health scores. The Amazon CloudWatch Internet Monitor chapter in the CloudWatch User Guide includes detailed information about how Internet Monitor calculates health scores, including performance and availability scores, and when it creates and resolves health events. For more information, see [How Amazon Web Services calculates performance and availability scores](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html#IMExperienceScores) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. public var experienceScore: Swift.Double? /// How much performance impact was caused by a health event at a client location. For performance, this is the percentage of how much latency increased during the event compared to typical performance for traffic, from this client location to an Amazon Web Services location, using a specific client network. For more information, see [When Amazon Web Services creates and resolves health events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html#IMHealthEventStartStop) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. public var percentOfClientLocationImpacted: Swift.Double? - /// How much performance impact was caused by a health event for total traffic globally. For performance, this is the percentage of how much latency increased during the event compared to typical performance for your application traffic globally. For more information, see [When Amazon Web Services creates and resolves health events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html#IMHealthEventStartStop) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. + /// The impact on total traffic that a health event has, in increased latency or reduced availability. This is the percentage of how much latency has increased or availability has decreased during the event, compared to what is typical for traffic from this client location to the Amazon Web Services location using this client network. For more information, see [When Amazon Web Services creates and resolves health events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html#IMHealthEventStartStop) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. public var percentOfTotalTrafficImpacted: Swift.Double? /// This is the percentage of how much round-trip time increased during the event compared to typical round-trip time for your application for traffic. For more information, see [When Amazon Web Services creates and resolves health events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-inside-internet-monitor.html#IMHealthEventStartStop) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. public var roundTripTime: InternetMonitorClientTypes.RoundTripTime? @@ -2963,22 +3076,22 @@ extension UpdateMonitorInput: ClientRuntime.URLPathProvider { public struct UpdateMonitorInput: Swift.Equatable { /// A unique, case-sensitive string of up to 64 ASCII characters that you specify to make an idempotent API request. You should not reuse the same client token for other API requests. public var clientToken: Swift.String? - /// The list of health event thresholds. A health event threshold percentage, for performance and availability, determines when Internet Monitor creates a health event when there's an internet issue that affects your application end users. + /// The list of health score thresholds. A threshold percentage for health scores, along with other configuration information, determines when Internet Monitor creates a health event when there's an internet issue that affects your application end users. For more information, see [ Change health event thresholds](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-overview.html#IMUpdateThresholdFromOverview) in the Internet Monitor section of the CloudWatch User Guide. public var healthEventsConfig: InternetMonitorClientTypes.HealthEventsConfig? /// 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, that clients access the resources through. + /// The maximum number of city-networks to monitor for your application. A city-network is the location (city) where clients access your application resources from and the ASN or network provider, such as an internet service provider (ISP), that clients access the resources through. Setting this limit can help control billing costs. public var maxCityNetworksToMonitor: Swift.Int /// The name of the monitor. /// This member is required. public var monitorName: Swift.String? - /// The resources to include in a monitor, which you provide as a set of Amazon Resource Names (ARNs). You can add a combination of Amazon Virtual Private Clouds (VPCs) and Amazon CloudFront distributions, or you can add Amazon WorkSpaces directories. You can't add all three types of resources. If you add only VPC resources, at least one VPC must have an Internet Gateway attached to it, to make sure that it has internet connectivity. + /// The resources to include in a monitor, which you provide as a set of Amazon Resource Names (ARNs). Resources can be VPCs, NLBs, Amazon CloudFront distributions, or Amazon WorkSpaces directories. You can add a combination of VPCs and CloudFront distributions, or you can add WorkSpaces directories, or you can add NLBs. You can't add NLBs or WorkSpaces directories together with any other resources. If you add only Amazon Virtual Private Clouds resources, at least one VPC must have an Internet Gateway attached to it, to make sure that it has internet connectivity. public var resourcesToAdd: [Swift.String]? /// The resources to remove from a monitor, which you provide as a set of Amazon Resource Names (ARNs). 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. + /// The percentage of the internet-facing traffic for your application that you want to monitor with this monitor. If you set a city-networks maximum, that limit overrides the traffic percentage that you set. To learn more, see [Choosing an application traffic percentage to monitor ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/IMTrafficPercentage.html) in the Amazon CloudWatch Internet Monitor section of the CloudWatch User Guide. public var trafficPercentageToMonitor: Swift.Int public init( diff --git a/Sources/Services/AWSIvs/models/Models.swift b/Sources/Services/AWSIvs/models/Models.swift index 5790bf64d62..e238c80d959 100644 --- a/Sources/Services/AWSIvs/models/Models.swift +++ b/Sources/Services/AWSIvs/models/Models.swift @@ -586,6 +586,9 @@ public enum BatchStartViewerSessionRevocationOutputError: ClientRuntime.HttpResp let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PendingVerification": return try await PendingVerification(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } @@ -1412,6 +1415,7 @@ extension CreateRecordingConfigurationInput: Swift.Encodable { case destinationConfiguration case name case recordingReconnectWindowSeconds + case renditionConfiguration case tags case thumbnailConfiguration } @@ -1427,6 +1431,9 @@ extension CreateRecordingConfigurationInput: Swift.Encodable { if recordingReconnectWindowSeconds != 0 { try encodeContainer.encode(recordingReconnectWindowSeconds, forKey: .recordingReconnectWindowSeconds) } + if let renditionConfiguration = self.renditionConfiguration { + try encodeContainer.encode(renditionConfiguration, forKey: .renditionConfiguration) + } if let tags = tags { var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) for (dictKey0, tags0) in tags { @@ -1453,6 +1460,8 @@ public struct CreateRecordingConfigurationInput: Swift.Equatable { public var name: Swift.String? /// If a broadcast disconnects and then reconnects within the specified interval, the multiple streams will be considered a single broadcast and merged together. Default: 0. public var recordingReconnectWindowSeconds: Swift.Int + /// Object that describes which renditions should be recorded for a stream. + public var renditionConfiguration: IvsClientTypes.RenditionConfiguration? /// Array of 1-50 maps, each of the form string:string (key:value). See [Tagging Amazon Web Services Resources](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html) for more information, including restrictions that apply to tags and "Tag naming limits and requirements"; Amazon IVS has no service-specific constraints beyond what is documented there. public var tags: [Swift.String:Swift.String]? /// A complex type that allows you to enable/disable the recording of thumbnails for a live session and modify the interval at which thumbnails are generated for the live session. @@ -1462,6 +1471,7 @@ public struct CreateRecordingConfigurationInput: Swift.Equatable { destinationConfiguration: IvsClientTypes.DestinationConfiguration? = nil, name: Swift.String? = nil, recordingReconnectWindowSeconds: Swift.Int = 0, + renditionConfiguration: IvsClientTypes.RenditionConfiguration? = nil, tags: [Swift.String:Swift.String]? = nil, thumbnailConfiguration: IvsClientTypes.ThumbnailConfiguration? = nil ) @@ -1469,6 +1479,7 @@ public struct CreateRecordingConfigurationInput: Swift.Equatable { self.destinationConfiguration = destinationConfiguration self.name = name self.recordingReconnectWindowSeconds = recordingReconnectWindowSeconds + self.renditionConfiguration = renditionConfiguration self.tags = tags self.thumbnailConfiguration = thumbnailConfiguration } @@ -1480,6 +1491,7 @@ struct CreateRecordingConfigurationInputBody: Swift.Equatable { let tags: [Swift.String:Swift.String]? let thumbnailConfiguration: IvsClientTypes.ThumbnailConfiguration? let recordingReconnectWindowSeconds: Swift.Int + let renditionConfiguration: IvsClientTypes.RenditionConfiguration? } extension CreateRecordingConfigurationInputBody: Swift.Decodable { @@ -1487,6 +1499,7 @@ extension CreateRecordingConfigurationInputBody: Swift.Decodable { case destinationConfiguration case name case recordingReconnectWindowSeconds + case renditionConfiguration case tags case thumbnailConfiguration } @@ -1512,6 +1525,8 @@ extension CreateRecordingConfigurationInputBody: Swift.Decodable { thumbnailConfiguration = thumbnailConfigurationDecoded let recordingReconnectWindowSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .recordingReconnectWindowSeconds) ?? 0 recordingReconnectWindowSeconds = recordingReconnectWindowSecondsDecoded + let renditionConfigurationDecoded = try containerValues.decodeIfPresent(IvsClientTypes.RenditionConfiguration.self, forKey: .renditionConfiguration) + renditionConfiguration = renditionConfigurationDecoded } } @@ -4126,6 +4141,7 @@ extension IvsClientTypes.RecordingConfiguration: Swift.Codable { case destinationConfiguration case name case recordingReconnectWindowSeconds + case renditionConfiguration case state case tags case thumbnailConfiguration @@ -4145,6 +4161,9 @@ extension IvsClientTypes.RecordingConfiguration: Swift.Codable { if recordingReconnectWindowSeconds != 0 { try encodeContainer.encode(recordingReconnectWindowSeconds, forKey: .recordingReconnectWindowSeconds) } + if let renditionConfiguration = self.renditionConfiguration { + try encodeContainer.encode(renditionConfiguration, forKey: .renditionConfiguration) + } if let state = self.state { try encodeContainer.encode(state.rawValue, forKey: .state) } @@ -4184,6 +4203,8 @@ extension IvsClientTypes.RecordingConfiguration: Swift.Codable { thumbnailConfiguration = thumbnailConfigurationDecoded let recordingReconnectWindowSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .recordingReconnectWindowSeconds) ?? 0 recordingReconnectWindowSeconds = recordingReconnectWindowSecondsDecoded + let renditionConfigurationDecoded = try containerValues.decodeIfPresent(IvsClientTypes.RenditionConfiguration.self, forKey: .renditionConfiguration) + renditionConfiguration = renditionConfigurationDecoded } } @@ -4200,6 +4221,8 @@ extension IvsClientTypes { public var name: Swift.String? /// If a broadcast disconnects and then reconnects within the specified interval, the multiple streams will be considered a single broadcast and merged together. Default: 0. public var recordingReconnectWindowSeconds: Swift.Int + /// Object that describes which renditions should be recorded for a stream. + public var renditionConfiguration: IvsClientTypes.RenditionConfiguration? /// Indicates the current state of the recording configuration. When the state is ACTIVE, the configuration is ready for recording a channel stream. /// This member is required. public var state: IvsClientTypes.RecordingConfigurationState? @@ -4213,6 +4236,7 @@ extension IvsClientTypes { destinationConfiguration: IvsClientTypes.DestinationConfiguration? = nil, name: Swift.String? = nil, recordingReconnectWindowSeconds: Swift.Int = 0, + renditionConfiguration: IvsClientTypes.RenditionConfiguration? = nil, state: IvsClientTypes.RecordingConfigurationState? = nil, tags: [Swift.String:Swift.String]? = nil, thumbnailConfiguration: IvsClientTypes.ThumbnailConfiguration? = nil @@ -4222,6 +4246,7 @@ extension IvsClientTypes { self.destinationConfiguration = destinationConfiguration self.name = name self.recordingReconnectWindowSeconds = recordingReconnectWindowSeconds + self.renditionConfiguration = renditionConfiguration self.state = state self.tags = tags self.thumbnailConfiguration = thumbnailConfiguration @@ -4387,6 +4412,136 @@ extension IvsClientTypes { } } +extension IvsClientTypes.RenditionConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case renditionSelection + case renditions + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let renditionSelection = self.renditionSelection { + try encodeContainer.encode(renditionSelection.rawValue, forKey: .renditionSelection) + } + if let renditions = renditions { + var renditionsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .renditions) + for renditionconfigurationrendition0 in renditions { + try renditionsContainer.encode(renditionconfigurationrendition0.rawValue) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let renditionSelectionDecoded = try containerValues.decodeIfPresent(IvsClientTypes.RenditionConfigurationRenditionSelection.self, forKey: .renditionSelection) + renditionSelection = renditionSelectionDecoded + let renditionsContainer = try containerValues.decodeIfPresent([IvsClientTypes.RenditionConfigurationRendition?].self, forKey: .renditions) + var renditionsDecoded0:[IvsClientTypes.RenditionConfigurationRendition]? = nil + if let renditionsContainer = renditionsContainer { + renditionsDecoded0 = [IvsClientTypes.RenditionConfigurationRendition]() + for string0 in renditionsContainer { + if let string0 = string0 { + renditionsDecoded0?.append(string0) + } + } + } + renditions = renditionsDecoded0 + } +} + +extension IvsClientTypes { + /// Object that describes which renditions should be recorded for a stream. + public struct RenditionConfiguration: Swift.Equatable { + /// Indicates which set of renditions are recorded for a stream. For BASIC channels, the CUSTOM value has no effect. If CUSTOM is specified, a set of renditions must be specified in the renditions field. Default: ALL. + public var renditionSelection: IvsClientTypes.RenditionConfigurationRenditionSelection? + /// Indicates which renditions are recorded for a stream, if renditionSelection is CUSTOM; otherwise, this field is irrelevant. The selected renditions are recorded if they are available during the stream. If a selected rendition is unavailable, the best available rendition is recorded. For details on the resolution dimensions of each rendition, see [Auto-Record to Amazon S3](https://docs.aws.amazon.com/ivs/latest/userguide/record-to-s3.html). + public var renditions: [IvsClientTypes.RenditionConfigurationRendition]? + + public init( + renditionSelection: IvsClientTypes.RenditionConfigurationRenditionSelection? = nil, + renditions: [IvsClientTypes.RenditionConfigurationRendition]? = nil + ) + { + self.renditionSelection = renditionSelection + self.renditions = renditions + } + } + +} + +extension IvsClientTypes { + public enum RenditionConfigurationRendition: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case fullHd + case hd + case lowestResolution + case sd + case sdkUnknown(Swift.String) + + public static var allCases: [RenditionConfigurationRendition] { + return [ + .fullHd, + .hd, + .lowestResolution, + .sd, + .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 .fullHd: return "FULL_HD" + case .hd: return "HD" + case .lowestResolution: return "LOWEST_RESOLUTION" + case .sd: return "SD" + 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 = RenditionConfigurationRendition(rawValue: rawValue) ?? RenditionConfigurationRendition.sdkUnknown(rawValue) + } + } +} + +extension IvsClientTypes { + public enum RenditionConfigurationRenditionSelection: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case all + case custom + case `none` + case sdkUnknown(Swift.String) + + public static var allCases: [RenditionConfigurationRenditionSelection] { + return [ + .all, + .custom, + .none, + .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 .all: return "ALL" + case .custom: return "CUSTOM" + case .none: return "NONE" + 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 = RenditionConfigurationRenditionSelection(rawValue: rawValue) ?? RenditionConfigurationRenditionSelection.sdkUnknown(rawValue) + } + } +} + extension ResourceNotFoundException { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -4615,6 +4770,8 @@ public enum StartViewerSessionRevocationOutputError: ClientRuntime.HttpResponseE switch restJSONError.errorType { case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PendingVerification": return try await PendingVerification(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -5569,6 +5726,8 @@ extension ThrottlingExceptionBody: Swift.Decodable { extension IvsClientTypes.ThumbnailConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case recordingMode + case resolution + case storage case targetIntervalSeconds } @@ -5577,6 +5736,15 @@ extension IvsClientTypes.ThumbnailConfiguration: Swift.Codable { if let recordingMode = self.recordingMode { try encodeContainer.encode(recordingMode.rawValue, forKey: .recordingMode) } + if let resolution = self.resolution { + try encodeContainer.encode(resolution.rawValue, forKey: .resolution) + } + if let storage = storage { + var storageContainer = encodeContainer.nestedUnkeyedContainer(forKey: .storage) + for thumbnailconfigurationstorage0 in storage { + try storageContainer.encode(thumbnailconfigurationstorage0.rawValue) + } + } if targetIntervalSeconds != 0 { try encodeContainer.encode(targetIntervalSeconds, forKey: .targetIntervalSeconds) } @@ -5588,6 +5756,19 @@ extension IvsClientTypes.ThumbnailConfiguration: Swift.Codable { recordingMode = recordingModeDecoded let targetIntervalSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .targetIntervalSeconds) ?? 0 targetIntervalSeconds = targetIntervalSecondsDecoded + let resolutionDecoded = try containerValues.decodeIfPresent(IvsClientTypes.ThumbnailConfigurationResolution.self, forKey: .resolution) + resolution = resolutionDecoded + let storageContainer = try containerValues.decodeIfPresent([IvsClientTypes.ThumbnailConfigurationStorage?].self, forKey: .storage) + var storageDecoded0:[IvsClientTypes.ThumbnailConfigurationStorage]? = nil + if let storageContainer = storageContainer { + storageDecoded0 = [IvsClientTypes.ThumbnailConfigurationStorage]() + for string0 in storageContainer { + if let string0 = string0 { + storageDecoded0?.append(string0) + } + } + } + storage = storageDecoded0 } } @@ -5596,21 +5777,99 @@ extension IvsClientTypes { public struct ThumbnailConfiguration: Swift.Equatable { /// Thumbnail recording mode. Default: INTERVAL. public var recordingMode: IvsClientTypes.RecordingMode? - /// The targeted thumbnail-generation interval in seconds. This is configurable (and required) only if recordingMode is INTERVAL. Default: 60. Important: Setting a value for targetIntervalSeconds does not guarantee that thumbnails are generated at the specified interval. For thumbnails to be generated at the targetIntervalSeconds interval, the IDR/Keyframe value for the input video must be less than the targetIntervalSeconds value. See [ Amazon IVS Streaming Configuration](https://docs.aws.amazon.com/ivs/latest/userguide/streaming-config.html) for information on setting IDR/Keyframe to the recommended value in video-encoder settings. + /// Indicates the desired resolution of recorded thumbnails. Thumbnails are recorded at the selected resolution if the corresponding rendition is available during the stream; otherwise, they are recorded at source resolution. For more information about resolution values and their corresponding height and width dimensions, see [Auto-Record to Amazon S3](https://docs.aws.amazon.com/ivs/latest/userguide/record-to-s3.html). Default: Null (source resolution is returned). + public var resolution: IvsClientTypes.ThumbnailConfigurationResolution? + /// Indicates the format in which thumbnails are recorded. SEQUENTIAL records all generated thumbnails in a serial manner, to the media/thumbnails directory. LATEST saves the latest thumbnail in media/latest_thumbnail/thumb.jpg and overwrites it at the interval specified by targetIntervalSeconds. You can enable both SEQUENTIAL and LATEST. Default: SEQUENTIAL. + public var storage: [IvsClientTypes.ThumbnailConfigurationStorage]? + /// The targeted thumbnail-generation interval in seconds. This is configurable (and required) only if recordingMode is INTERVAL. Default: 60. Important: For the BASIC channel type, setting a value for targetIntervalSeconds does not guarantee that thumbnails are generated at the specified interval. For thumbnails to be generated at the targetIntervalSeconds interval, the IDR/Keyframe value for the input video must be less than the targetIntervalSeconds value. See [ Amazon IVS Streaming Configuration](https://docs.aws.amazon.com/ivs/latest/userguide/streaming-config.html) for information on setting IDR/Keyframe to the recommended value in video-encoder settings. public var targetIntervalSeconds: Swift.Int public init( recordingMode: IvsClientTypes.RecordingMode? = nil, + resolution: IvsClientTypes.ThumbnailConfigurationResolution? = nil, + storage: [IvsClientTypes.ThumbnailConfigurationStorage]? = nil, targetIntervalSeconds: Swift.Int = 0 ) { self.recordingMode = recordingMode + self.resolution = resolution + self.storage = storage self.targetIntervalSeconds = targetIntervalSeconds } } } +extension IvsClientTypes { + public enum ThumbnailConfigurationResolution: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case fullHd + case hd + case lowestResolution + case sd + case sdkUnknown(Swift.String) + + public static var allCases: [ThumbnailConfigurationResolution] { + return [ + .fullHd, + .hd, + .lowestResolution, + .sd, + .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 .fullHd: return "FULL_HD" + case .hd: return "HD" + case .lowestResolution: return "LOWEST_RESOLUTION" + case .sd: return "SD" + 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 = ThumbnailConfigurationResolution(rawValue: rawValue) ?? ThumbnailConfigurationResolution.sdkUnknown(rawValue) + } + } +} + +extension IvsClientTypes { + public enum ThumbnailConfigurationStorage: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case latest + case sequential + case sdkUnknown(Swift.String) + + public static var allCases: [ThumbnailConfigurationStorage] { + return [ + .latest, + .sequential, + .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 .latest: return "LATEST" + case .sequential: return "SEQUENTIAL" + 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 = ThumbnailConfigurationStorage(rawValue: rawValue) ?? ThumbnailConfigurationStorage.sdkUnknown(rawValue) + } + } +} + extension IvsClientTypes { public enum TranscodePreset: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case constrainedbandwidthtranscodepreset diff --git a/Sources/Services/AWSKafka/KafkaClient.swift b/Sources/Services/AWSKafka/KafkaClient.swift index bd237ef5544..de598ed510b 100644 --- a/Sources/Services/AWSKafka/KafkaClient.swift +++ b/Sources/Services/AWSKafka/KafkaClient.swift @@ -482,6 +482,39 @@ extension KafkaClient: KafkaClientProtocol { return result } + /// Returns a description of the cluster operation specified by the ARN. + public func describeClusterOperationV2(input: DescribeClusterOperationV2Input) async throws -> DescribeClusterOperationV2OutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "describeClusterOperationV2") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "kafka") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "describeClusterOperationV2") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Returns a description of the MSK cluster whose Amazon Resource Name (ARN) is specified in the request. public func describeClusterV2(input: DescribeClusterV2Input) async throws -> DescribeClusterV2OutputResponse { @@ -782,6 +815,40 @@ extension KafkaClient: KafkaClientProtocol { return result } + /// Returns a list of all the operations that have been performed on the specified MSK cluster. + public func listClusterOperationsV2(input: ListClusterOperationsV2Input) async throws -> ListClusterOperationsV2OutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listClusterOperationsV2") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "kafka") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listClusterOperationsV2") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Returns a list of all the MSK clusters in the current Region. public func listClusters(input: ListClustersInput) async throws -> ListClustersOutputResponse { diff --git a/Sources/Services/AWSKafka/KafkaClientProtocol.swift b/Sources/Services/AWSKafka/KafkaClientProtocol.swift index e52bb41d258..9e1c882f30b 100644 --- a/Sources/Services/AWSKafka/KafkaClientProtocol.swift +++ b/Sources/Services/AWSKafka/KafkaClientProtocol.swift @@ -28,6 +28,8 @@ public protocol KafkaClientProtocol { func describeCluster(input: DescribeClusterInput) async throws -> DescribeClusterOutputResponse /// Returns a description of the cluster operation specified by the ARN. func describeClusterOperation(input: DescribeClusterOperationInput) async throws -> DescribeClusterOperationOutputResponse + /// Returns a description of the cluster operation specified by the ARN. + func describeClusterOperationV2(input: DescribeClusterOperationV2Input) async throws -> DescribeClusterOperationV2OutputResponse /// Returns a description of the MSK cluster whose Amazon Resource Name (ARN) is specified in the request. func describeClusterV2(input: DescribeClusterV2Input) async throws -> DescribeClusterV2OutputResponse /// Returns a description of this MSK configuration. @@ -46,6 +48,8 @@ public protocol KafkaClientProtocol { func listClientVpcConnections(input: ListClientVpcConnectionsInput) async throws -> ListClientVpcConnectionsOutputResponse /// Returns a list of all the operations that have been performed on the specified MSK cluster. func listClusterOperations(input: ListClusterOperationsInput) async throws -> ListClusterOperationsOutputResponse + /// Returns a list of all the operations that have been performed on the specified MSK cluster. + func listClusterOperationsV2(input: ListClusterOperationsV2Input) async throws -> ListClusterOperationsV2OutputResponse /// Returns a list of all the MSK clusters in the current Region. func listClusters(input: ListClustersInput) async throws -> ListClustersOutputResponse /// Returns a list of all the MSK clusters in the current Region. diff --git a/Sources/Services/AWSKafka/Paginators.swift b/Sources/Services/AWSKafka/Paginators.swift index 3baa9a1ac8c..ae16bdbbe67 100644 --- a/Sources/Services/AWSKafka/Paginators.swift +++ b/Sources/Services/AWSKafka/Paginators.swift @@ -64,6 +64,37 @@ extension PaginatorSequence where Input == ListClusterOperationsInput, Output == return try await self.asyncCompactMap { item in item.clusterOperationInfoList } } } +extension KafkaClient { + /// Paginate over `[ListClusterOperationsV2OutputResponse]` 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 `[ListClusterOperationsV2Input]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListClusterOperationsV2OutputResponse` + public func listClusterOperationsV2Paginated(input: ListClusterOperationsV2Input) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListClusterOperationsV2Input.nextToken, outputKey: \ListClusterOperationsV2OutputResponse.nextToken, paginationFunction: self.listClusterOperationsV2(input:)) + } +} + +extension ListClusterOperationsV2Input: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListClusterOperationsV2Input { + return ListClusterOperationsV2Input( + clusterArn: self.clusterArn, + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListClusterOperationsV2Input, Output == ListClusterOperationsV2OutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listClusterOperationsV2Paginated` + /// to access the nested member `[KafkaClientTypes.ClusterOperationV2Summary]` + /// - Returns: `[KafkaClientTypes.ClusterOperationV2Summary]` + public func clusterOperationInfoList() async throws -> [KafkaClientTypes.ClusterOperationV2Summary] { + return try await self.asyncCompactMap { item in item.clusterOperationInfoList } + } +} extension KafkaClient { /// Paginate over `[ListClustersOutputResponse]` results. /// diff --git a/Sources/Services/AWSKafka/models/Models.swift b/Sources/Services/AWSKafka/models/Models.swift index d7d4999c508..93e20115668 100644 --- a/Sources/Services/AWSKafka/models/Models.swift +++ b/Sources/Services/AWSKafka/models/Models.swift @@ -1599,6 +1599,338 @@ extension KafkaClientTypes { } +extension KafkaClientTypes.ClusterOperationV2: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clusterArn = "clusterArn" + case clusterType = "clusterType" + case endTime = "endTime" + case errorInfo = "errorInfo" + case operationArn = "operationArn" + case operationState = "operationState" + case operationType = "operationType" + case provisioned = "provisioned" + case serverless = "serverless" + case startTime = "startTime" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let clusterArn = self.clusterArn { + try encodeContainer.encode(clusterArn, forKey: .clusterArn) + } + if let clusterType = self.clusterType { + try encodeContainer.encode(clusterType.rawValue, forKey: .clusterType) + } + if let endTime = self.endTime { + try encodeContainer.encodeTimestamp(endTime, format: .dateTime, forKey: .endTime) + } + if let errorInfo = self.errorInfo { + try encodeContainer.encode(errorInfo, forKey: .errorInfo) + } + if let operationArn = self.operationArn { + try encodeContainer.encode(operationArn, forKey: .operationArn) + } + if let operationState = self.operationState { + try encodeContainer.encode(operationState, forKey: .operationState) + } + if let operationType = self.operationType { + try encodeContainer.encode(operationType, forKey: .operationType) + } + if let provisioned = self.provisioned { + try encodeContainer.encode(provisioned, forKey: .provisioned) + } + if let serverless = self.serverless { + try encodeContainer.encode(serverless, forKey: .serverless) + } + if let startTime = self.startTime { + try encodeContainer.encodeTimestamp(startTime, format: .dateTime, forKey: .startTime) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let clusterArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clusterArn) + clusterArn = clusterArnDecoded + let clusterTypeDecoded = try containerValues.decodeIfPresent(KafkaClientTypes.ClusterType.self, forKey: .clusterType) + clusterType = clusterTypeDecoded + let startTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .startTime) + startTime = startTimeDecoded + let endTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .endTime) + endTime = endTimeDecoded + let errorInfoDecoded = try containerValues.decodeIfPresent(KafkaClientTypes.ErrorInfo.self, forKey: .errorInfo) + errorInfo = errorInfoDecoded + let operationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .operationArn) + operationArn = operationArnDecoded + let operationStateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .operationState) + operationState = operationStateDecoded + let operationTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .operationType) + operationType = operationTypeDecoded + let provisionedDecoded = try containerValues.decodeIfPresent(KafkaClientTypes.ClusterOperationV2Provisioned.self, forKey: .provisioned) + provisioned = provisionedDecoded + let serverlessDecoded = try containerValues.decodeIfPresent(KafkaClientTypes.ClusterOperationV2Serverless.self, forKey: .serverless) + serverless = serverlessDecoded + } +} + +extension KafkaClientTypes { + /// Returns information about a cluster operation. + public struct ClusterOperationV2: Swift.Equatable { + /// ARN of the cluster. + public var clusterArn: Swift.String? + /// Type of the backend cluster. + public var clusterType: KafkaClientTypes.ClusterType? + /// The time at which the operation finished. + public var endTime: ClientRuntime.Date? + /// If cluster operation failed from an error, it describes the error. + public var errorInfo: KafkaClientTypes.ErrorInfo? + /// ARN of the cluster operation. + public var operationArn: Swift.String? + /// State of the cluster operation. + public var operationState: Swift.String? + /// Type of the cluster operation. + public var operationType: Swift.String? + /// Properties of a provisioned cluster. + public var provisioned: KafkaClientTypes.ClusterOperationV2Provisioned? + /// Properties of a serverless cluster. + public var serverless: KafkaClientTypes.ClusterOperationV2Serverless? + /// The time at which operation was started. + public var startTime: ClientRuntime.Date? + + public init( + clusterArn: Swift.String? = nil, + clusterType: KafkaClientTypes.ClusterType? = nil, + endTime: ClientRuntime.Date? = nil, + errorInfo: KafkaClientTypes.ErrorInfo? = nil, + operationArn: Swift.String? = nil, + operationState: Swift.String? = nil, + operationType: Swift.String? = nil, + provisioned: KafkaClientTypes.ClusterOperationV2Provisioned? = nil, + serverless: KafkaClientTypes.ClusterOperationV2Serverless? = nil, + startTime: ClientRuntime.Date? = nil + ) + { + self.clusterArn = clusterArn + self.clusterType = clusterType + self.endTime = endTime + self.errorInfo = errorInfo + self.operationArn = operationArn + self.operationState = operationState + self.operationType = operationType + self.provisioned = provisioned + self.serverless = serverless + self.startTime = startTime + } + } + +} + +extension KafkaClientTypes.ClusterOperationV2Provisioned: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case operationSteps = "operationSteps" + case sourceClusterInfo = "sourceClusterInfo" + case targetClusterInfo = "targetClusterInfo" + case vpcConnectionInfo = "vpcConnectionInfo" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let operationSteps = operationSteps { + var operationStepsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .operationSteps) + for clusteroperationstep0 in operationSteps { + try operationStepsContainer.encode(clusteroperationstep0) + } + } + if let sourceClusterInfo = self.sourceClusterInfo { + try encodeContainer.encode(sourceClusterInfo, forKey: .sourceClusterInfo) + } + if let targetClusterInfo = self.targetClusterInfo { + try encodeContainer.encode(targetClusterInfo, forKey: .targetClusterInfo) + } + if let vpcConnectionInfo = self.vpcConnectionInfo { + try encodeContainer.encode(vpcConnectionInfo, forKey: .vpcConnectionInfo) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let operationStepsContainer = try containerValues.decodeIfPresent([KafkaClientTypes.ClusterOperationStep?].self, forKey: .operationSteps) + var operationStepsDecoded0:[KafkaClientTypes.ClusterOperationStep]? = nil + if let operationStepsContainer = operationStepsContainer { + operationStepsDecoded0 = [KafkaClientTypes.ClusterOperationStep]() + for structure0 in operationStepsContainer { + if let structure0 = structure0 { + operationStepsDecoded0?.append(structure0) + } + } + } + operationSteps = operationStepsDecoded0 + let sourceClusterInfoDecoded = try containerValues.decodeIfPresent(KafkaClientTypes.MutableClusterInfo.self, forKey: .sourceClusterInfo) + sourceClusterInfo = sourceClusterInfoDecoded + let targetClusterInfoDecoded = try containerValues.decodeIfPresent(KafkaClientTypes.MutableClusterInfo.self, forKey: .targetClusterInfo) + targetClusterInfo = targetClusterInfoDecoded + let vpcConnectionInfoDecoded = try containerValues.decodeIfPresent(KafkaClientTypes.VpcConnectionInfo.self, forKey: .vpcConnectionInfo) + vpcConnectionInfo = vpcConnectionInfoDecoded + } +} + +extension KafkaClientTypes { + /// Returns information about a provisioned cluster operation. + public struct ClusterOperationV2Provisioned: Swift.Equatable { + /// Steps completed during the operation. + public var operationSteps: [KafkaClientTypes.ClusterOperationStep]? + /// Information about cluster attributes before a cluster is updated. + public var sourceClusterInfo: KafkaClientTypes.MutableClusterInfo? + /// Information about cluster attributes after a cluster is updated. + public var targetClusterInfo: KafkaClientTypes.MutableClusterInfo? + /// Description of the VPC connection for CreateVpcConnection and DeleteVpcConnection operations. + public var vpcConnectionInfo: KafkaClientTypes.VpcConnectionInfo? + + public init( + operationSteps: [KafkaClientTypes.ClusterOperationStep]? = nil, + sourceClusterInfo: KafkaClientTypes.MutableClusterInfo? = nil, + targetClusterInfo: KafkaClientTypes.MutableClusterInfo? = nil, + vpcConnectionInfo: KafkaClientTypes.VpcConnectionInfo? = nil + ) + { + self.operationSteps = operationSteps + self.sourceClusterInfo = sourceClusterInfo + self.targetClusterInfo = targetClusterInfo + self.vpcConnectionInfo = vpcConnectionInfo + } + } + +} + +extension KafkaClientTypes.ClusterOperationV2Serverless: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case vpcConnectionInfo = "vpcConnectionInfo" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let vpcConnectionInfo = self.vpcConnectionInfo { + try encodeContainer.encode(vpcConnectionInfo, forKey: .vpcConnectionInfo) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let vpcConnectionInfoDecoded = try containerValues.decodeIfPresent(KafkaClientTypes.VpcConnectionInfoServerless.self, forKey: .vpcConnectionInfo) + vpcConnectionInfo = vpcConnectionInfoDecoded + } +} + +extension KafkaClientTypes { + /// Returns information about a serverless cluster operation. + public struct ClusterOperationV2Serverless: Swift.Equatable { + /// Description of the VPC connection for CreateVpcConnection and DeleteVpcConnection operations. + public var vpcConnectionInfo: KafkaClientTypes.VpcConnectionInfoServerless? + + public init( + vpcConnectionInfo: KafkaClientTypes.VpcConnectionInfoServerless? = nil + ) + { + self.vpcConnectionInfo = vpcConnectionInfo + } + } + +} + +extension KafkaClientTypes.ClusterOperationV2Summary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clusterArn = "clusterArn" + case clusterType = "clusterType" + case endTime = "endTime" + case operationArn = "operationArn" + case operationState = "operationState" + case operationType = "operationType" + case startTime = "startTime" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let clusterArn = self.clusterArn { + try encodeContainer.encode(clusterArn, forKey: .clusterArn) + } + if let clusterType = self.clusterType { + try encodeContainer.encode(clusterType.rawValue, forKey: .clusterType) + } + if let endTime = self.endTime { + try encodeContainer.encodeTimestamp(endTime, format: .dateTime, forKey: .endTime) + } + if let operationArn = self.operationArn { + try encodeContainer.encode(operationArn, forKey: .operationArn) + } + if let operationState = self.operationState { + try encodeContainer.encode(operationState, forKey: .operationState) + } + if let operationType = self.operationType { + try encodeContainer.encode(operationType, forKey: .operationType) + } + if let startTime = self.startTime { + try encodeContainer.encodeTimestamp(startTime, format: .dateTime, forKey: .startTime) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let clusterArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clusterArn) + clusterArn = clusterArnDecoded + let clusterTypeDecoded = try containerValues.decodeIfPresent(KafkaClientTypes.ClusterType.self, forKey: .clusterType) + clusterType = clusterTypeDecoded + let startTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .startTime) + startTime = startTimeDecoded + let endTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .endTime) + endTime = endTimeDecoded + let operationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .operationArn) + operationArn = operationArnDecoded + let operationStateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .operationState) + operationState = operationStateDecoded + let operationTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .operationType) + operationType = operationTypeDecoded + } +} + +extension KafkaClientTypes { + /// Returns information about a cluster operation. + public struct ClusterOperationV2Summary: Swift.Equatable { + /// ARN of the cluster. + public var clusterArn: Swift.String? + /// Type of the backend cluster. + public var clusterType: KafkaClientTypes.ClusterType? + /// The time at which the operation finished. + public var endTime: ClientRuntime.Date? + /// ARN of the cluster operation. + public var operationArn: Swift.String? + /// State of the cluster operation. + public var operationState: Swift.String? + /// Type of the cluster operation. + public var operationType: Swift.String? + /// The time at which operation was started. + public var startTime: ClientRuntime.Date? + + public init( + clusterArn: Swift.String? = nil, + clusterType: KafkaClientTypes.ClusterType? = nil, + endTime: ClientRuntime.Date? = nil, + operationArn: Swift.String? = nil, + operationState: Swift.String? = nil, + operationType: Swift.String? = nil, + startTime: ClientRuntime.Date? = nil + ) + { + self.clusterArn = clusterArn + self.clusterType = clusterType + self.endTime = endTime + self.operationArn = operationArn + self.operationState = operationState + self.operationType = operationType + self.startTime = startTime + } + } + +} + extension KafkaClientTypes { /// The state of the Apache Kafka cluster. public enum ClusterState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { @@ -3528,6 +3860,94 @@ extension DescribeClusterOperationOutputResponseBody: Swift.Decodable { } } +extension DescribeClusterOperationV2Input: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let clusterOperationArn = clusterOperationArn else { + return nil + } + return "/api/v2/operations/\(clusterOperationArn.urlPercentEncoding())" + } +} + +public struct DescribeClusterOperationV2Input: Swift.Equatable { + /// ARN of the cluster operation to describe. + /// This member is required. + public var clusterOperationArn: Swift.String? + + public init( + clusterOperationArn: Swift.String? = nil + ) + { + self.clusterOperationArn = clusterOperationArn + } +} + +struct DescribeClusterOperationV2InputBody: Swift.Equatable { +} + +extension DescribeClusterOperationV2InputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DescribeClusterOperationV2OutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "BadRequestException": return try await BadRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ForbiddenException": return try await ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerErrorException": return try await InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "NotFoundException": return try await NotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceUnavailableException": return try await ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "TooManyRequestsException": return try await TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "UnauthorizedException": return try await UnauthorizedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DescribeClusterOperationV2OutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeClusterOperationV2OutputResponseBody = try responseDecoder.decode(responseBody: data) + self.clusterOperationInfo = output.clusterOperationInfo + } else { + self.clusterOperationInfo = nil + } + } +} + +public struct DescribeClusterOperationV2OutputResponse: Swift.Equatable { + /// Cluster operation information + public var clusterOperationInfo: KafkaClientTypes.ClusterOperationV2? + + public init( + clusterOperationInfo: KafkaClientTypes.ClusterOperationV2? = nil + ) + { + self.clusterOperationInfo = clusterOperationInfo + } +} + +struct DescribeClusterOperationV2OutputResponseBody: Swift.Equatable { + let clusterOperationInfo: KafkaClientTypes.ClusterOperationV2? +} + +extension DescribeClusterOperationV2OutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clusterOperationInfo = "clusterOperationInfo" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let clusterOperationInfoDecoded = try containerValues.decodeIfPresent(KafkaClientTypes.ClusterOperationV2.self, forKey: .clusterOperationInfo) + clusterOperationInfo = clusterOperationInfoDecoded + } +} + public enum DescribeClusterOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) @@ -5401,6 +5821,138 @@ extension ListClusterOperationsOutputResponseBody: Swift.Decodable { } } +extension ListClusterOperationsV2Input: 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 ListClusterOperationsV2Input: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let clusterArn = clusterArn else { + return nil + } + return "/api/v2/clusters/\(clusterArn.urlPercentEncoding())/operations" + } +} + +public struct ListClusterOperationsV2Input: Swift.Equatable { + /// The arn of the cluster whose operations are being requested. + /// This member is required. + public var clusterArn: Swift.String? + /// The maxResults of the query. + public var maxResults: Swift.Int? + /// The nextToken of the query. + public var nextToken: Swift.String? + + public init( + clusterArn: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.clusterArn = clusterArn + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListClusterOperationsV2InputBody: Swift.Equatable { +} + +extension ListClusterOperationsV2InputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum ListClusterOperationsV2OutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "BadRequestException": return try await BadRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ForbiddenException": return try await ForbiddenException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerErrorException": return try await InternalServerErrorException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "NotFoundException": return try await NotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceUnavailableException": return try await ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "TooManyRequestsException": return try await TooManyRequestsException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "UnauthorizedException": return try await UnauthorizedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListClusterOperationsV2OutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListClusterOperationsV2OutputResponseBody = try responseDecoder.decode(responseBody: data) + self.clusterOperationInfoList = output.clusterOperationInfoList + self.nextToken = output.nextToken + } else { + self.clusterOperationInfoList = nil + self.nextToken = nil + } + } +} + +public struct ListClusterOperationsV2OutputResponse: Swift.Equatable { + /// An array of cluster operation information objects. + public var clusterOperationInfoList: [KafkaClientTypes.ClusterOperationV2Summary]? + /// If the response of ListClusterOperationsV2 is truncated, it returns a NextToken in the response. This NextToken should be sent in the subsequent request to ListClusterOperationsV2. + public var nextToken: Swift.String? + + public init( + clusterOperationInfoList: [KafkaClientTypes.ClusterOperationV2Summary]? = nil, + nextToken: Swift.String? = nil + ) + { + self.clusterOperationInfoList = clusterOperationInfoList + self.nextToken = nextToken + } +} + +struct ListClusterOperationsV2OutputResponseBody: Swift.Equatable { + let clusterOperationInfoList: [KafkaClientTypes.ClusterOperationV2Summary]? + let nextToken: Swift.String? +} + +extension ListClusterOperationsV2OutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clusterOperationInfoList = "clusterOperationInfoList" + case nextToken = "nextToken" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let clusterOperationInfoListContainer = try containerValues.decodeIfPresent([KafkaClientTypes.ClusterOperationV2Summary?].self, forKey: .clusterOperationInfoList) + var clusterOperationInfoListDecoded0:[KafkaClientTypes.ClusterOperationV2Summary]? = nil + if let clusterOperationInfoListContainer = clusterOperationInfoListContainer { + clusterOperationInfoListDecoded0 = [KafkaClientTypes.ClusterOperationV2Summary]() + for structure0 in clusterOperationInfoListContainer { + if let structure0 = structure0 { + clusterOperationInfoListDecoded0?.append(structure0) + } + } + } + clusterOperationInfoList = clusterOperationInfoListDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + extension ListClustersInput: ClientRuntime.QueryItemProvider { public var queryItems: [ClientRuntime.URLQueryItem] { get throws { @@ -10484,6 +11036,71 @@ extension KafkaClientTypes { } +extension KafkaClientTypes.VpcConnectionInfoServerless: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationTime = "creationTime" + case owner = "owner" + case userIdentity = "userIdentity" + case vpcConnectionArn = "vpcConnectionArn" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let creationTime = self.creationTime { + try encodeContainer.encodeTimestamp(creationTime, format: .dateTime, forKey: .creationTime) + } + if let owner = self.owner { + try encodeContainer.encode(owner, forKey: .owner) + } + if let userIdentity = self.userIdentity { + try encodeContainer.encode(userIdentity, forKey: .userIdentity) + } + if let vpcConnectionArn = self.vpcConnectionArn { + try encodeContainer.encode(vpcConnectionArn, forKey: .vpcConnectionArn) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let creationTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .creationTime) + creationTime = creationTimeDecoded + let ownerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .owner) + owner = ownerDecoded + let userIdentityDecoded = try containerValues.decodeIfPresent(KafkaClientTypes.UserIdentity.self, forKey: .userIdentity) + userIdentity = userIdentityDecoded + let vpcConnectionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .vpcConnectionArn) + vpcConnectionArn = vpcConnectionArnDecoded + } +} + +extension KafkaClientTypes { + /// Description of the VPC connection. + public struct VpcConnectionInfoServerless: Swift.Equatable { + /// The time when Amazon MSK creates the VPC Connnection. + public var creationTime: ClientRuntime.Date? + /// The owner of the VPC Connection. + public var owner: Swift.String? + /// Description of the requester that calls the API operation. + public var userIdentity: KafkaClientTypes.UserIdentity? + /// The Amazon Resource Name (ARN) of the VPC connection. + public var vpcConnectionArn: Swift.String? + + public init( + creationTime: ClientRuntime.Date? = nil, + owner: Swift.String? = nil, + userIdentity: KafkaClientTypes.UserIdentity? = nil, + vpcConnectionArn: Swift.String? = nil + ) + { + self.creationTime = creationTime + self.owner = owner + self.userIdentity = userIdentity + self.vpcConnectionArn = vpcConnectionArn + } + } + +} + extension KafkaClientTypes { /// The state of a VPC connection. public enum VpcConnectionState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { diff --git a/Sources/Services/AWSLakeFormation/LakeFormationClient.swift b/Sources/Services/AWSLakeFormation/LakeFormationClient.swift index 9fbce403d74..1c7e13b6764 100644 --- a/Sources/Services/AWSLakeFormation/LakeFormationClient.swift +++ b/Sources/Services/AWSLakeFormation/LakeFormationClient.swift @@ -1147,7 +1147,7 @@ extension LakeFormationClient: LakeFormationClientProtocol { return result } - /// Returns a list of the principal permissions on the resource, filtered by the permissions of the caller. For example, if you are granted an ALTER permission, you are able to see only the principal permissions for ALTER. This operation returns only those permissions that have been explicitly granted. For information about permissions, see [Security and Access Control to Metadata and Data](https://docs-aws.amazon.com/lake-formation/latest/dg/security-data-access.html). + /// Returns a list of the principal permissions on the resource, filtered by the permissions of the caller. For example, if you are granted an ALTER permission, you are able to see only the principal permissions for ALTER. This operation returns only those permissions that have been explicitly granted. For information about permissions, see [Security and Access Control to Metadata and Data](https://docs.aws.amazon.com/lake-formation/latest/dg/security-data-access.html). public func listPermissions(input: ListPermissionsInput) async throws -> ListPermissionsOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSLakeFormation/LakeFormationClientProtocol.swift b/Sources/Services/AWSLakeFormation/LakeFormationClientProtocol.swift index b78877e5c10..7d6d3dad57b 100644 --- a/Sources/Services/AWSLakeFormation/LakeFormationClientProtocol.swift +++ b/Sources/Services/AWSLakeFormation/LakeFormationClientProtocol.swift @@ -64,7 +64,7 @@ public protocol LakeFormationClientProtocol { func listDataCellsFilter(input: ListDataCellsFilterInput) async throws -> ListDataCellsFilterOutputResponse /// Lists LF-tags that the requester has permission to view. func listLFTags(input: ListLFTagsInput) async throws -> ListLFTagsOutputResponse - /// Returns a list of the principal permissions on the resource, filtered by the permissions of the caller. For example, if you are granted an ALTER permission, you are able to see only the principal permissions for ALTER. This operation returns only those permissions that have been explicitly granted. For information about permissions, see [Security and Access Control to Metadata and Data](https://docs-aws.amazon.com/lake-formation/latest/dg/security-data-access.html). + /// Returns a list of the principal permissions on the resource, filtered by the permissions of the caller. For example, if you are granted an ALTER permission, you are able to see only the principal permissions for ALTER. This operation returns only those permissions that have been explicitly granted. For information about permissions, see [Security and Access Control to Metadata and Data](https://docs.aws.amazon.com/lake-formation/latest/dg/security-data-access.html). func listPermissions(input: ListPermissionsInput) async throws -> ListPermissionsOutputResponse /// Lists the resources registered to be managed by the Data Catalog. func listResources(input: ListResourcesInput) async throws -> ListResourcesOutputResponse diff --git a/Sources/Services/AWSLakeFormation/models/Models.swift b/Sources/Services/AWSLakeFormation/models/Models.swift index 3982823ce48..7e148a3e3da 100644 --- a/Sources/Services/AWSLakeFormation/models/Models.swift +++ b/Sources/Services/AWSLakeFormation/models/Models.swift @@ -1661,7 +1661,7 @@ extension LakeFormationClientTypes.DataCellsFilter: Swift.Codable { extension LakeFormationClientTypes { /// A structure that describes certain columns on certain rows. public struct DataCellsFilter: Swift.Equatable { - /// A list of column names. + /// A list of column names and/or nested column attributes. When specifying nested attributes, use a qualified dot (.) delimited format such as "address"."zip". Nested attributes within this list may not exceed a depth of 5. public var columnNames: [Swift.String]? /// A wildcard with exclusions. You must specify either a ColumnNames list or the ColumnWildCard. public var columnWildcard: LakeFormationClientTypes.ColumnWildcard? @@ -1859,12 +1859,14 @@ extension LakeFormationClientTypes { extension LakeFormationClientTypes.DataLakeSettings: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case allowExternalDataFiltering = "AllowExternalDataFiltering" + case allowFullTableExternalDataAccess = "AllowFullTableExternalDataAccess" case authorizedSessionTagValueList = "AuthorizedSessionTagValueList" case createDatabaseDefaultPermissions = "CreateDatabaseDefaultPermissions" case createTableDefaultPermissions = "CreateTableDefaultPermissions" case dataLakeAdmins = "DataLakeAdmins" case externalDataFilteringAllowList = "ExternalDataFilteringAllowList" case parameters = "Parameters" + case readOnlyAdmins = "ReadOnlyAdmins" case trustedResourceOwners = "TrustedResourceOwners" } @@ -1873,6 +1875,9 @@ extension LakeFormationClientTypes.DataLakeSettings: Swift.Codable { if let allowExternalDataFiltering = self.allowExternalDataFiltering { try encodeContainer.encode(allowExternalDataFiltering, forKey: .allowExternalDataFiltering) } + if let allowFullTableExternalDataAccess = self.allowFullTableExternalDataAccess { + try encodeContainer.encode(allowFullTableExternalDataAccess, forKey: .allowFullTableExternalDataAccess) + } if let authorizedSessionTagValueList = authorizedSessionTagValueList { var authorizedSessionTagValueListContainer = encodeContainer.nestedUnkeyedContainer(forKey: .authorizedSessionTagValueList) for namestring0 in authorizedSessionTagValueList { @@ -1909,6 +1914,12 @@ extension LakeFormationClientTypes.DataLakeSettings: Swift.Codable { try parametersContainer.encode(parametersMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) } } + if let readOnlyAdmins = readOnlyAdmins { + var readOnlyAdminsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .readOnlyAdmins) + for datalakeprincipal0 in readOnlyAdmins { + try readOnlyAdminsContainer.encode(datalakeprincipal0) + } + } if let trustedResourceOwners = trustedResourceOwners { var trustedResourceOwnersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .trustedResourceOwners) for catalogidstring0 in trustedResourceOwners { @@ -1930,6 +1941,17 @@ extension LakeFormationClientTypes.DataLakeSettings: Swift.Codable { } } dataLakeAdmins = dataLakeAdminsDecoded0 + let readOnlyAdminsContainer = try containerValues.decodeIfPresent([LakeFormationClientTypes.DataLakePrincipal?].self, forKey: .readOnlyAdmins) + var readOnlyAdminsDecoded0:[LakeFormationClientTypes.DataLakePrincipal]? = nil + if let readOnlyAdminsContainer = readOnlyAdminsContainer { + readOnlyAdminsDecoded0 = [LakeFormationClientTypes.DataLakePrincipal]() + for structure0 in readOnlyAdminsContainer { + if let structure0 = structure0 { + readOnlyAdminsDecoded0?.append(structure0) + } + } + } + readOnlyAdmins = readOnlyAdminsDecoded0 let createDatabaseDefaultPermissionsContainer = try containerValues.decodeIfPresent([LakeFormationClientTypes.PrincipalPermissions?].self, forKey: .createDatabaseDefaultPermissions) var createDatabaseDefaultPermissionsDecoded0:[LakeFormationClientTypes.PrincipalPermissions]? = nil if let createDatabaseDefaultPermissionsContainer = createDatabaseDefaultPermissionsContainer { @@ -1976,6 +1998,8 @@ extension LakeFormationClientTypes.DataLakeSettings: Swift.Codable { trustedResourceOwners = trustedResourceOwnersDecoded0 let allowExternalDataFilteringDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .allowExternalDataFiltering) allowExternalDataFiltering = allowExternalDataFilteringDecoded + let allowFullTableExternalDataAccessDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .allowFullTableExternalDataAccess) + allowFullTableExternalDataAccess = allowFullTableExternalDataAccessDecoded let externalDataFilteringAllowListContainer = try containerValues.decodeIfPresent([LakeFormationClientTypes.DataLakePrincipal?].self, forKey: .externalDataFilteringAllowList) var externalDataFilteringAllowListDecoded0:[LakeFormationClientTypes.DataLakePrincipal]? = nil if let externalDataFilteringAllowListContainer = externalDataFilteringAllowListContainer { @@ -2004,8 +2028,10 @@ extension LakeFormationClientTypes.DataLakeSettings: Swift.Codable { extension LakeFormationClientTypes { /// A structure representing a list of Lake Formation principals designated as data lake administrators and lists of principal permission entries for default create database and default create table permissions. public struct DataLakeSettings: Swift.Equatable { - /// Whether to allow Amazon EMR clusters to access data managed by Lake Formation. If true, you allow Amazon EMR clusters to access data in Amazon S3 locations that are registered with Lake Formation. If false or null, no Amazon EMR clusters will be able to access data in Amazon S3 locations that are registered with Lake Formation. For more information, see [(Optional) Allow Data Filtering on Amazon EMR](https://docs-aws.amazon.com/lake-formation/latest/dg/getting-started-setup.html#emr-switch). + /// Whether to allow Amazon EMR clusters to access data managed by Lake Formation. If true, you allow Amazon EMR clusters to access data in Amazon S3 locations that are registered with Lake Formation. If false or null, no Amazon EMR clusters will be able to access data in Amazon S3 locations that are registered with Lake Formation. For more information, see [(Optional) Allow external data filtering](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-LF-setup.html#external-data-filter). public var allowExternalDataFiltering: Swift.Bool? + /// Whether to allow a third-party query engine to get data access credentials without session tags when a caller has full data access permissions. + public var allowFullTableExternalDataAccess: Swift.Bool? /// Lake Formation relies on a privileged process secured by Amazon EMR or the third party integrator to tag the user's role while assuming it. Lake Formation will publish the acceptable key-value pair, for example key = "LakeFormationTrustedCaller" and value = "TRUE" and the third party integrator must properly tag the temporary security credentials that will be used to call Lake Formation's administrative APIs. public var authorizedSessionTagValueList: [Swift.String]? /// Specifies whether access control on newly created database is managed by Lake Formation permissions or exclusively by IAM permissions. A null value indicates access control by Lake Formation permissions. A value that assigns ALL to IAM_ALLOWED_PRINCIPALS indicates access control by IAM permissions. This is referred to as the setting "Use only IAM access control," and is for backward compatibility with the Glue permission model implemented by IAM permissions. The only permitted values are an empty array or an array that contains a single JSON object that grants ALL to IAM_ALLOWED_PRINCIPALS. For more information, see [Changing the Default Security Settings for Your Data Lake](https://docs.aws.amazon.com/lake-formation/latest/dg/change-settings.html). @@ -2018,27 +2044,33 @@ extension LakeFormationClientTypes { public var externalDataFilteringAllowList: [LakeFormationClientTypes.DataLakePrincipal]? /// A key-value map that provides an additional configuration on your data lake. CrossAccountVersion is the key you can configure in the Parameters field. Accepted values for the CrossAccountVersion key are 1, 2, and 3. public var parameters: [Swift.String:Swift.String]? + /// A list of Lake Formation principals with only view access to the resources, without the ability to make changes. Supported principals are IAM users or IAM roles. + public var readOnlyAdmins: [LakeFormationClientTypes.DataLakePrincipal]? /// A list of the resource-owning account IDs that the caller's account can use to share their user access details (user ARNs). The user ARNs can be logged in the resource owner's CloudTrail log. You may want to specify this property when you are in a high-trust boundary, such as the same team or company. public var trustedResourceOwners: [Swift.String]? public init( allowExternalDataFiltering: Swift.Bool? = nil, + allowFullTableExternalDataAccess: Swift.Bool? = nil, authorizedSessionTagValueList: [Swift.String]? = nil, createDatabaseDefaultPermissions: [LakeFormationClientTypes.PrincipalPermissions]? = nil, createTableDefaultPermissions: [LakeFormationClientTypes.PrincipalPermissions]? = nil, dataLakeAdmins: [LakeFormationClientTypes.DataLakePrincipal]? = nil, externalDataFilteringAllowList: [LakeFormationClientTypes.DataLakePrincipal]? = nil, parameters: [Swift.String:Swift.String]? = nil, + readOnlyAdmins: [LakeFormationClientTypes.DataLakePrincipal]? = nil, trustedResourceOwners: [Swift.String]? = nil ) { self.allowExternalDataFiltering = allowExternalDataFiltering + self.allowFullTableExternalDataAccess = allowFullTableExternalDataAccess self.authorizedSessionTagValueList = authorizedSessionTagValueList self.createDatabaseDefaultPermissions = createDatabaseDefaultPermissions self.createTableDefaultPermissions = createTableDefaultPermissions self.dataLakeAdmins = dataLakeAdmins self.externalDataFilteringAllowList = externalDataFilteringAllowList self.parameters = parameters + self.readOnlyAdmins = readOnlyAdmins self.trustedResourceOwners = trustedResourceOwners } } @@ -4482,7 +4514,6 @@ public struct GetTemporaryGluePartitionCredentialsInput: Swift.Equatable { /// Filters the request based on the user having been granted a list of specified permissions on the requested resource(s). public var permissions: [LakeFormationClientTypes.Permission]? /// A list of supported permission types for the partition. Valid values are COLUMN_PERMISSION and CELL_FILTER_PERMISSION. - /// This member is required. public var supportedPermissionTypes: [LakeFormationClientTypes.PermissionType]? /// The ARN of the partitions' table. /// This member is required. @@ -4695,7 +4726,6 @@ public struct GetTemporaryGlueTableCredentialsInput: Swift.Equatable { /// Filters the request based on the user having been granted a list of specified permissions on the requested resource(s). public var permissions: [LakeFormationClientTypes.Permission]? /// A list of supported permission types for the table. Valid values are COLUMN_PERMISSION and CELL_FILTER_PERMISSION. - /// This member is required. public var supportedPermissionTypes: [LakeFormationClientTypes.PermissionType]? /// The ARN identifying a table in the Data Catalog for the temporary credentials request. /// This member is required. @@ -6970,12 +7000,13 @@ extension LakeFormationClientTypes { case alter case associate case createDatabase + case createLfTag case createTable - case createTag case dataLocationAccess case delete case describe case drop + case grantWithLfTagExpression case insert case select case sdkUnknown(Swift.String) @@ -6986,12 +7017,13 @@ extension LakeFormationClientTypes { .alter, .associate, .createDatabase, + .createLfTag, .createTable, - .createTag, .dataLocationAccess, .delete, .describe, .drop, + .grantWithLfTagExpression, .insert, .select, .sdkUnknown("") @@ -7007,12 +7039,13 @@ extension LakeFormationClientTypes { case .alter: return "ALTER" case .associate: return "ASSOCIATE" case .createDatabase: return "CREATE_DATABASE" + case .createLfTag: return "CREATE_LF_TAG" case .createTable: return "CREATE_TABLE" - case .createTag: return "CREATE_TAG" case .dataLocationAccess: return "DATA_LOCATION_ACCESS" case .delete: return "DELETE" case .describe: return "DESCRIBE" case .drop: return "DROP" + case .grantWithLfTagExpression: return "GRANT_WITH_LF_TAG_EXPRESSION" case .insert: return "INSERT" case .select: return "SELECT" case let .sdkUnknown(s): return s @@ -7030,12 +7063,16 @@ extension LakeFormationClientTypes { public enum PermissionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case cellFilterPermission case columnPermission + case nestedCellPermission + case nestedPermission case sdkUnknown(Swift.String) public static var allCases: [PermissionType] { return [ .cellFilterPermission, .columnPermission, + .nestedCellPermission, + .nestedPermission, .sdkUnknown("") ] } @@ -7047,6 +7084,8 @@ extension LakeFormationClientTypes { switch self { case .cellFilterPermission: return "CELL_FILTER_PERMISSION" case .columnPermission: return "COLUMN_PERMISSION" + case .nestedCellPermission: return "NESTED_CELL_PERMISSION" + case .nestedPermission: return "NESTED_PERMISSION" case let .sdkUnknown(s): return s } } diff --git a/Sources/Services/AWSLambda/models/Models.swift b/Sources/Services/AWSLambda/models/Models.swift index 790ef39e3d8..d3ebd1266a2 100644 --- a/Sources/Services/AWSLambda/models/Models.swift +++ b/Sources/Services/AWSLambda/models/Models.swift @@ -16082,6 +16082,7 @@ extension LambdaClientTypes { case providedal2 case python27 case python310 + case python311 case python36 case python37 case python38 @@ -16117,6 +16118,7 @@ extension LambdaClientTypes { .providedal2, .python27, .python310, + .python311, .python36, .python37, .python38, @@ -16157,6 +16159,7 @@ extension LambdaClientTypes { case .providedal2: return "provided.al2" case .python27: return "python2.7" case .python310: return "python3.10" + case .python311: return "python3.11" case .python36: return "python3.6" case .python37: return "python3.7" case .python38: return "python3.8" diff --git a/Sources/Services/AWSLexModelsV2/LexModelsV2Client.swift b/Sources/Services/AWSLexModelsV2/LexModelsV2Client.swift index 14399715e98..15ee753fbcf 100644 --- a/Sources/Services/AWSLexModelsV2/LexModelsV2Client.swift +++ b/Sources/Services/AWSLexModelsV2/LexModelsV2Client.swift @@ -2082,6 +2082,149 @@ extension LexModelsV2Client: LexModelsV2ClientProtocol { return result } + /// Retrieves summary metrics for the intents in your bot. The following fields are required: + /// + /// * metrics – A list of [AnalyticsIntentMetric](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentMetric.html) objects. In each object, use the name field to specify the metric to calculate, the statistic field to specify whether to calculate the Sum, Average, or Max number, and the order field to specify whether to sort the results in Ascending or Descending order. + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// + /// Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results, the groupBy field to specify categories by which to group the results, and the binBy field to specify time intervals by which to group the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + /// + /// + /// Note that an order field exists in both binBy and metrics. You can specify only one order in a given request. + public func listIntentMetrics(input: ListIntentMetricsInput) async throws -> ListIntentMetricsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listIntentMetrics") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lex") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listIntentMetrics") + 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.serviceSpecific.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: "ListIntentMetricsRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Retrieves summary statistics for a path of intents that users take over sessions with your bot. The following fields are required: + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// * intentPath – Define an order of intents for which you want to retrieve metrics. Separate intents in the path with a forward slash. For example, populate the intentPath field with /BookCar/BookHotel to see details about how many times users invoked the BookCar and BookHotel intents in that order. + /// + /// + /// Use the optional filters field to filter the results. + public func listIntentPaths(input: ListIntentPathsInput) async throws -> ListIntentPathsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listIntentPaths") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lex") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listIntentPaths") + 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.serviceSpecific.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: "ListIntentPathsRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Retrieves summary metrics for the stages within intents in your bot. The following fields are required: + /// + /// * metrics – A list of [AnalyticsIntentStageMetric](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentStageMetric.html) objects. In each object, use the name field to specify the metric to calculate, the statistic field to specify whether to calculate the Sum, Average, or Max number, and the order field to specify whether to sort the results in Ascending or Descending order. + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// + /// Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results, the groupBy field to specify categories by which to group the results, and the binBy field to specify time intervals by which to group the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + /// + /// + /// Note that an order field exists in both binBy and metrics. You can only specify one order in a given request. + public func listIntentStageMetrics(input: ListIntentStageMetricsInput) async throws -> ListIntentStageMetricsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listIntentStageMetrics") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lex") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listIntentStageMetrics") + 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.serviceSpecific.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: "ListIntentStageMetricsRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Get a list of intents that meet the specified criteria. public func listIntents(input: ListIntentsInput) async throws -> ListIntentsOutputResponse { @@ -2154,6 +2297,96 @@ extension LexModelsV2Client: LexModelsV2ClientProtocol { return result } + /// Retrieves a list of metadata for individual user sessions with your bot. The startDateTime and endDateTime fields are required. These fields define a time range for which you want to retrieve results. Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results and the sortBy field to specify the values by which to sort the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + public func listSessionAnalyticsData(input: ListSessionAnalyticsDataInput) async throws -> ListSessionAnalyticsDataOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listSessionAnalyticsData") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lex") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listSessionAnalyticsData") + 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.serviceSpecific.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: "ListSessionAnalyticsDataRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Retrieves summary metrics for the user sessions with your bot. The following fields are required: + /// + /// * metrics – A list of [AnalyticsSessionMetric](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsSessionMetric.html) objects. In each object, use the name field to specify the metric to calculate, the statistic field to specify whether to calculate the Sum, Average, or Max number, and the order field to specify whether to sort the results in Ascending or Descending order. + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// + /// Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results, the groupBy field to specify categories by which to group the results, and the binBy field to specify time intervals by which to group the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + /// + /// + /// Note that an order field exists in both binBy and metrics. Currently, you can specify it in either field, but not in both. + public func listSessionMetrics(input: ListSessionMetricsInput) async throws -> ListSessionMetricsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listSessionMetrics") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lex") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listSessionMetrics") + 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.serviceSpecific.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: "ListSessionMetricsRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Gets a list of slot types that match the specified criteria. public func listSlotTypes(input: ListSlotTypesInput) async throws -> ListSlotTypesOutputResponse { @@ -2403,6 +2636,101 @@ extension LexModelsV2Client: LexModelsV2ClientProtocol { return result } + /// To use this API operation, your IAM role must have permissions to perform the [ListAggregatedUtterances](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListAggregatedUtterances.html) operation, which provides access to utterance-related analytics. See [Viewing utterance statistics](https://docs.aws.amazon.com/lexv2/latest/dg/monitoring-utterances.html) for the IAM policy to apply to the IAM role. Retrieves a list of metadata for individual user utterances to your bot. The following fields are required: + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// + /// Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results and the sortBy field to specify the values by which to sort the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + public func listUtteranceAnalyticsData(input: ListUtteranceAnalyticsDataInput) async throws -> ListUtteranceAnalyticsDataOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listUtteranceAnalyticsData") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lex") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listUtteranceAnalyticsData") + 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.serviceSpecific.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: "ListUtteranceAnalyticsDataRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// To use this API operation, your IAM role must have permissions to perform the [ListAggregatedUtterances](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListAggregatedUtterances.html) operation, which provides access to utterance-related analytics. See [Viewing utterance statistics](https://docs.aws.amazon.com/lexv2/latest/dg/monitoring-utterances.html) for the IAM policy to apply to the IAM role. Retrieves summary metrics for the utterances in your bot. The following fields are required: + /// + /// * metrics – A list of [AnalyticsUtteranceMetric](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsUtteranceMetric.html) objects. In each object, use the name field to specify the metric to calculate, the statistic field to specify whether to calculate the Sum, Average, or Max number, and the order field to specify whether to sort the results in Ascending or Descending order. + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// + /// Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results, the groupBy field to specify categories by which to group the results, and the binBy field to specify time intervals by which to group the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + /// + /// + /// Note that an order field exists in both binBy and metrics. Currently, you can specify it in either field, but not in both. + public func listUtteranceMetrics(input: ListUtteranceMetricsInput) async throws -> ListUtteranceMetricsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listUtteranceMetrics") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lex") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listUtteranceMetrics") + 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.serviceSpecific.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: "ListUtteranceMetricsRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Search for associated transcripts that meet the specified criteria. public func searchAssociatedTranscripts(input: SearchAssociatedTranscriptsInput) async throws -> SearchAssociatedTranscriptsOutputResponse { diff --git a/Sources/Services/AWSLexModelsV2/LexModelsV2ClientProtocol.swift b/Sources/Services/AWSLexModelsV2/LexModelsV2ClientProtocol.swift index 597fdeba1f6..9a4512b2bcb 100644 --- a/Sources/Services/AWSLexModelsV2/LexModelsV2ClientProtocol.swift +++ b/Sources/Services/AWSLexModelsV2/LexModelsV2ClientProtocol.swift @@ -138,10 +138,73 @@ public protocol LexModelsV2ClientProtocol { func listExports(input: ListExportsInput) async throws -> ListExportsOutputResponse /// Lists the imports for a bot, bot locale, or custom vocabulary. Imports are kept in the list for 7 days. func listImports(input: ListImportsInput) async throws -> ListImportsOutputResponse + /// Retrieves summary metrics for the intents in your bot. The following fields are required: + /// + /// * metrics – A list of [AnalyticsIntentMetric](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentMetric.html) objects. In each object, use the name field to specify the metric to calculate, the statistic field to specify whether to calculate the Sum, Average, or Max number, and the order field to specify whether to sort the results in Ascending or Descending order. + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// + /// Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results, the groupBy field to specify categories by which to group the results, and the binBy field to specify time intervals by which to group the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + /// + /// + /// Note that an order field exists in both binBy and metrics. You can specify only one order in a given request. + func listIntentMetrics(input: ListIntentMetricsInput) async throws -> ListIntentMetricsOutputResponse + /// Retrieves summary statistics for a path of intents that users take over sessions with your bot. The following fields are required: + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// * intentPath – Define an order of intents for which you want to retrieve metrics. Separate intents in the path with a forward slash. For example, populate the intentPath field with /BookCar/BookHotel to see details about how many times users invoked the BookCar and BookHotel intents in that order. + /// + /// + /// Use the optional filters field to filter the results. + func listIntentPaths(input: ListIntentPathsInput) async throws -> ListIntentPathsOutputResponse /// Get a list of intents that meet the specified criteria. func listIntents(input: ListIntentsInput) async throws -> ListIntentsOutputResponse + /// Retrieves summary metrics for the stages within intents in your bot. The following fields are required: + /// + /// * metrics – A list of [AnalyticsIntentStageMetric](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsIntentStageMetric.html) objects. In each object, use the name field to specify the metric to calculate, the statistic field to specify whether to calculate the Sum, Average, or Max number, and the order field to specify whether to sort the results in Ascending or Descending order. + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// + /// Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results, the groupBy field to specify categories by which to group the results, and the binBy field to specify time intervals by which to group the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + /// + /// + /// Note that an order field exists in both binBy and metrics. You can only specify one order in a given request. + func listIntentStageMetrics(input: ListIntentStageMetricsInput) async throws -> ListIntentStageMetricsOutputResponse /// Gets a list of recommended intents provided by the bot recommendation that you can use in your bot. Intents in the response are ordered by relevance. func listRecommendedIntents(input: ListRecommendedIntentsInput) async throws -> ListRecommendedIntentsOutputResponse + /// Retrieves a list of metadata for individual user sessions with your bot. The startDateTime and endDateTime fields are required. These fields define a time range for which you want to retrieve results. Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results and the sortBy field to specify the values by which to sort the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + func listSessionAnalyticsData(input: ListSessionAnalyticsDataInput) async throws -> ListSessionAnalyticsDataOutputResponse + /// Retrieves summary metrics for the user sessions with your bot. The following fields are required: + /// + /// * metrics – A list of [AnalyticsSessionMetric](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsSessionMetric.html) objects. In each object, use the name field to specify the metric to calculate, the statistic field to specify whether to calculate the Sum, Average, or Max number, and the order field to specify whether to sort the results in Ascending or Descending order. + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// + /// Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results, the groupBy field to specify categories by which to group the results, and the binBy field to specify time intervals by which to group the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + /// + /// + /// Note that an order field exists in both binBy and metrics. Currently, you can specify it in either field, but not in both. + func listSessionMetrics(input: ListSessionMetricsInput) async throws -> ListSessionMetricsOutputResponse /// Gets a list of slots that match the specified criteria. func listSlots(input: ListSlotsInput) async throws -> ListSlotsOutputResponse /// Gets a list of slot types that match the specified criteria. @@ -156,6 +219,33 @@ public protocol LexModelsV2ClientProtocol { func listTestSetRecords(input: ListTestSetRecordsInput) async throws -> ListTestSetRecordsOutputResponse /// The list of the test sets func listTestSets(input: ListTestSetsInput) async throws -> ListTestSetsOutputResponse + /// To use this API operation, your IAM role must have permissions to perform the [ListAggregatedUtterances](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListAggregatedUtterances.html) operation, which provides access to utterance-related analytics. See [Viewing utterance statistics](https://docs.aws.amazon.com/lexv2/latest/dg/monitoring-utterances.html) for the IAM policy to apply to the IAM role. Retrieves a list of metadata for individual user utterances to your bot. The following fields are required: + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// + /// Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results and the sortBy field to specify the values by which to sort the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + func listUtteranceAnalyticsData(input: ListUtteranceAnalyticsDataInput) async throws -> ListUtteranceAnalyticsDataOutputResponse + /// To use this API operation, your IAM role must have permissions to perform the [ListAggregatedUtterances](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListAggregatedUtterances.html) operation, which provides access to utterance-related analytics. See [Viewing utterance statistics](https://docs.aws.amazon.com/lexv2/latest/dg/monitoring-utterances.html) for the IAM policy to apply to the IAM role. Retrieves summary metrics for the utterances in your bot. The following fields are required: + /// + /// * metrics – A list of [AnalyticsUtteranceMetric](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_AnalyticsUtteranceMetric.html) objects. In each object, use the name field to specify the metric to calculate, the statistic field to specify whether to calculate the Sum, Average, or Max number, and the order field to specify whether to sort the results in Ascending or Descending order. + /// + /// * startDateTime and endDateTime – Define a time range for which you want to retrieve results. + /// + /// + /// Of the optional fields, you can organize the results in the following ways: + /// + /// * Use the filters field to filter the results, the groupBy field to specify categories by which to group the results, and the binBy field to specify time intervals by which to group the results. + /// + /// * Use the maxResults field to limit the number of results to return in a single response and the nextToken field to return the next batch of results if the response does not return the full set of results. + /// + /// + /// Note that an order field exists in both binBy and metrics. Currently, you can specify it in either field, but not in both. + func listUtteranceMetrics(input: ListUtteranceMetricsInput) async throws -> ListUtteranceMetricsOutputResponse /// Search for associated transcripts that meet the specified criteria. func searchAssociatedTranscripts(input: SearchAssociatedTranscriptsInput) async throws -> SearchAssociatedTranscriptsOutputResponse /// Use this to provide your transcript data, and to start the bot recommendation process. diff --git a/Sources/Services/AWSLexModelsV2/Paginators.swift b/Sources/Services/AWSLexModelsV2/Paginators.swift index b1d52a26511..1139a1ae418 100644 --- a/Sources/Services/AWSLexModelsV2/Paginators.swift +++ b/Sources/Services/AWSLexModelsV2/Paginators.swift @@ -269,6 +269,34 @@ extension ListImportsInput: ClientRuntime.PaginateToken { sortBy: self.sortBy )} } +extension LexModelsV2Client { + /// Paginate over `[ListIntentMetricsOutputResponse]` 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 `[ListIntentMetricsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListIntentMetricsOutputResponse` + public func listIntentMetricsPaginated(input: ListIntentMetricsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListIntentMetricsInput.nextToken, outputKey: \ListIntentMetricsOutputResponse.nextToken, paginationFunction: self.listIntentMetrics(input:)) + } +} + +extension ListIntentMetricsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListIntentMetricsInput { + return ListIntentMetricsInput( + binBy: self.binBy, + botId: self.botId, + endDateTime: self.endDateTime, + filters: self.filters, + groupBy: self.groupBy, + maxResults: self.maxResults, + metrics: self.metrics, + nextToken: token, + startDateTime: self.startDateTime + )} +} extension LexModelsV2Client { /// Paginate over `[ListIntentsOutputResponse]` results. /// @@ -295,6 +323,34 @@ extension ListIntentsInput: ClientRuntime.PaginateToken { sortBy: self.sortBy )} } +extension LexModelsV2Client { + /// Paginate over `[ListIntentStageMetricsOutputResponse]` 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 `[ListIntentStageMetricsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListIntentStageMetricsOutputResponse` + public func listIntentStageMetricsPaginated(input: ListIntentStageMetricsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListIntentStageMetricsInput.nextToken, outputKey: \ListIntentStageMetricsOutputResponse.nextToken, paginationFunction: self.listIntentStageMetrics(input:)) + } +} + +extension ListIntentStageMetricsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListIntentStageMetricsInput { + return ListIntentStageMetricsInput( + binBy: self.binBy, + botId: self.botId, + endDateTime: self.endDateTime, + filters: self.filters, + groupBy: self.groupBy, + maxResults: self.maxResults, + metrics: self.metrics, + nextToken: token, + startDateTime: self.startDateTime + )} +} extension LexModelsV2Client { /// Paginate over `[ListRecommendedIntentsOutputResponse]` results. /// @@ -320,6 +376,60 @@ extension ListRecommendedIntentsInput: ClientRuntime.PaginateToken { nextToken: token )} } +extension LexModelsV2Client { + /// Paginate over `[ListSessionAnalyticsDataOutputResponse]` 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 `[ListSessionAnalyticsDataInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListSessionAnalyticsDataOutputResponse` + public func listSessionAnalyticsDataPaginated(input: ListSessionAnalyticsDataInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListSessionAnalyticsDataInput.nextToken, outputKey: \ListSessionAnalyticsDataOutputResponse.nextToken, paginationFunction: self.listSessionAnalyticsData(input:)) + } +} + +extension ListSessionAnalyticsDataInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListSessionAnalyticsDataInput { + return ListSessionAnalyticsDataInput( + botId: self.botId, + endDateTime: self.endDateTime, + filters: self.filters, + maxResults: self.maxResults, + nextToken: token, + sortBy: self.sortBy, + startDateTime: self.startDateTime + )} +} +extension LexModelsV2Client { + /// Paginate over `[ListSessionMetricsOutputResponse]` 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 `[ListSessionMetricsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListSessionMetricsOutputResponse` + public func listSessionMetricsPaginated(input: ListSessionMetricsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListSessionMetricsInput.nextToken, outputKey: \ListSessionMetricsOutputResponse.nextToken, paginationFunction: self.listSessionMetrics(input:)) + } +} + +extension ListSessionMetricsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListSessionMetricsInput { + return ListSessionMetricsInput( + binBy: self.binBy, + botId: self.botId, + endDateTime: self.endDateTime, + filters: self.filters, + groupBy: self.groupBy, + maxResults: self.maxResults, + metrics: self.metrics, + nextToken: token, + startDateTime: self.startDateTime + )} +} extension LexModelsV2Client { /// Paginate over `[ListSlotsOutputResponse]` results. /// @@ -462,3 +572,58 @@ extension ListTestSetsInput: ClientRuntime.PaginateToken { sortBy: self.sortBy )} } +extension LexModelsV2Client { + /// Paginate over `[ListUtteranceAnalyticsDataOutputResponse]` 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 `[ListUtteranceAnalyticsDataInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListUtteranceAnalyticsDataOutputResponse` + public func listUtteranceAnalyticsDataPaginated(input: ListUtteranceAnalyticsDataInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListUtteranceAnalyticsDataInput.nextToken, outputKey: \ListUtteranceAnalyticsDataOutputResponse.nextToken, paginationFunction: self.listUtteranceAnalyticsData(input:)) + } +} + +extension ListUtteranceAnalyticsDataInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListUtteranceAnalyticsDataInput { + return ListUtteranceAnalyticsDataInput( + botId: self.botId, + endDateTime: self.endDateTime, + filters: self.filters, + maxResults: self.maxResults, + nextToken: token, + sortBy: self.sortBy, + startDateTime: self.startDateTime + )} +} +extension LexModelsV2Client { + /// Paginate over `[ListUtteranceMetricsOutputResponse]` 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 `[ListUtteranceMetricsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListUtteranceMetricsOutputResponse` + public func listUtteranceMetricsPaginated(input: ListUtteranceMetricsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListUtteranceMetricsInput.nextToken, outputKey: \ListUtteranceMetricsOutputResponse.nextToken, paginationFunction: self.listUtteranceMetrics(input:)) + } +} + +extension ListUtteranceMetricsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListUtteranceMetricsInput { + return ListUtteranceMetricsInput( + attributes: self.attributes, + binBy: self.binBy, + botId: self.botId, + endDateTime: self.endDateTime, + filters: self.filters, + groupBy: self.groupBy, + maxResults: self.maxResults, + metrics: self.metrics, + nextToken: token, + startDateTime: self.startDateTime + )} +} diff --git a/Sources/Services/AWSLexModelsV2/models/Models.swift b/Sources/Services/AWSLexModelsV2/models/Models.swift index 83bf602f37b..16e96bfd127 100644 --- a/Sources/Services/AWSLexModelsV2/models/Models.swift +++ b/Sources/Services/AWSLexModelsV2/models/Models.swift @@ -527,110 +527,16 @@ extension LexModelsV2ClientTypes { } -extension LexModelsV2ClientTypes.AssociatedTranscript: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case transcript - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let transcript = self.transcript { - try encodeContainer.encode(transcript, forKey: .transcript) - } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let transcriptDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .transcript) - transcript = transcriptDecoded - } -} - -extension LexModelsV2ClientTypes { - /// The object containing information that associates the recommended intent/slot type with a conversation. - public struct AssociatedTranscript: Swift.Equatable { - /// The content of the transcript that meets the search filter criteria. For the JSON format of the transcript, see [Output transcript format](https://docs.aws.amazon.com/lexv2/latest/dg/designing-output-format.html). - public var transcript: Swift.String? - - public init( - transcript: Swift.String? = nil - ) - { - self.transcript = transcript - } - } - -} - -extension LexModelsV2ClientTypes.AssociatedTranscriptFilter: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case name - case values - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let name = self.name { - try encodeContainer.encode(name.rawValue, forKey: .name) - } - if let values = values { - var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) - for filtervalue0 in values { - try valuesContainer.encode(filtervalue0) - } - } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AssociatedTranscriptFilterName.self, forKey: .name) - name = nameDecoded - let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) - var valuesDecoded0:[Swift.String]? = nil - if let valuesContainer = valuesContainer { - valuesDecoded0 = [Swift.String]() - for string0 in valuesContainer { - if let string0 = string0 { - valuesDecoded0?.append(string0) - } - } - } - values = valuesDecoded0 - } -} - -extension LexModelsV2ClientTypes { - /// Filters to search for the associated transcript. - public struct AssociatedTranscriptFilter: Swift.Equatable { - /// The name of the field to use for filtering. The allowed names are IntentId and SlotTypeId. - /// This member is required. - public var name: LexModelsV2ClientTypes.AssociatedTranscriptFilterName? - /// The values to use to filter the transcript. - /// This member is required. - public var values: [Swift.String]? - - public init( - name: LexModelsV2ClientTypes.AssociatedTranscriptFilterName? = nil, - values: [Swift.String]? = nil - ) - { - self.name = name - self.values = values - } - } - -} - extension LexModelsV2ClientTypes { - public enum AssociatedTranscriptFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case intentid - case slottypeid + public enum AnalyticsBinByName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case conversationstarttime + case utterancetimestamp case sdkUnknown(Swift.String) - public static var allCases: [AssociatedTranscriptFilterName] { + public static var allCases: [AnalyticsBinByName] { return [ - .intentid, - .slottypeid, + .conversationstarttime, + .utterancetimestamp, .sdkUnknown("") ] } @@ -640,166 +546,209 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .intentid: return "IntentId" - case .slottypeid: return "SlotTypeId" + case .conversationstarttime: return "ConversationStartTime" + case .utterancetimestamp: return "UtteranceTimestamp" 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 = AssociatedTranscriptFilterName(rawValue: rawValue) ?? AssociatedTranscriptFilterName.sdkUnknown(rawValue) + self = AnalyticsBinByName(rawValue: rawValue) ?? AnalyticsBinByName.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.AudioAndDTMFInputSpecification: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsBinBySpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case audioSpecification - case dtmfSpecification - case startTimeoutMs + case interval + case name + case order } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let audioSpecification = self.audioSpecification { - try encodeContainer.encode(audioSpecification, forKey: .audioSpecification) + if let interval = self.interval { + try encodeContainer.encode(interval.rawValue, forKey: .interval) } - if let dtmfSpecification = self.dtmfSpecification { - try encodeContainer.encode(dtmfSpecification, forKey: .dtmfSpecification) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - if let startTimeoutMs = self.startTimeoutMs { - try encodeContainer.encode(startTimeoutMs, forKey: .startTimeoutMs) + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let startTimeoutMsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .startTimeoutMs) - startTimeoutMs = startTimeoutMsDecoded - let audioSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AudioSpecification.self, forKey: .audioSpecification) - audioSpecification = audioSpecificationDecoded - let dtmfSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DTMFSpecification.self, forKey: .dtmfSpecification) - dtmfSpecification = dtmfSpecificationDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsBinByName.self, forKey: .name) + name = nameDecoded + let intervalDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsInterval.self, forKey: .interval) + interval = intervalDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSortOrder.self, forKey: .order) + order = orderDecoded } } extension LexModelsV2ClientTypes { - /// Specifies the audio and DTMF input specification. - public struct AudioAndDTMFInputSpecification: Swift.Equatable { - /// Specifies the settings on audio input. - public var audioSpecification: LexModelsV2ClientTypes.AudioSpecification? - /// Specifies the settings on DTMF input. - public var dtmfSpecification: LexModelsV2ClientTypes.DTMFSpecification? - /// Time for which a bot waits before assuming that the customer isn't going to speak or press a key. This timeout is shared between Audio and DTMF inputs. + /// Contains the time metric, interval, and method by which to bin the analytics data. + public struct AnalyticsBinBySpecification: Swift.Equatable { + /// Specifies the interval of time by which to bin the analytics data. /// This member is required. - public var startTimeoutMs: Swift.Int? + public var interval: LexModelsV2ClientTypes.AnalyticsInterval? + /// Specifies the time metric by which to bin the analytics data. + /// This member is required. + public var name: LexModelsV2ClientTypes.AnalyticsBinByName? + /// Specifies whether to bin the analytics data in ascending or descending order. If this field is left blank, the default order is by the key of the bin in descending order. + public var order: LexModelsV2ClientTypes.AnalyticsSortOrder? public init( - audioSpecification: LexModelsV2ClientTypes.AudioSpecification? = nil, - dtmfSpecification: LexModelsV2ClientTypes.DTMFSpecification? = nil, - startTimeoutMs: Swift.Int? = nil + interval: LexModelsV2ClientTypes.AnalyticsInterval? = nil, + name: LexModelsV2ClientTypes.AnalyticsBinByName? = nil, + order: LexModelsV2ClientTypes.AnalyticsSortOrder? = nil ) { - self.audioSpecification = audioSpecification - self.dtmfSpecification = dtmfSpecification - self.startTimeoutMs = startTimeoutMs + self.interval = interval + self.name = name + self.order = order } } } -extension LexModelsV2ClientTypes.AudioLogDestination: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsBinKey: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case s3Bucket + case name + case value } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let s3Bucket = self.s3Bucket { - try encodeContainer.encode(s3Bucket, forKey: .s3Bucket) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let s3BucketDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.S3BucketLogDestination.self, forKey: .s3Bucket) - s3Bucket = s3BucketDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsBinByName.self, forKey: .name) + name = nameDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .value) + value = valueDecoded } } extension LexModelsV2ClientTypes { - /// The location of audio log files collected when conversation logging is enabled for a bot. - public struct AudioLogDestination: Swift.Equatable { - /// The Amazon S3 bucket where the audio log files are stored. The IAM role specified in the roleArn parameter of the [CreateBot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBot.html) operation must have permission to write to this bucket. - /// This member is required. - public var s3Bucket: LexModelsV2ClientTypes.S3BucketLogDestination? + /// An object containing the criterion by which to bin the results and the value that defines that bin. + public struct AnalyticsBinKey: Swift.Equatable { + /// The criterion by which to bin the results. + public var name: LexModelsV2ClientTypes.AnalyticsBinByName? + /// The value of the criterion that defines the bin. + public var value: Swift.Int? public init( - s3Bucket: LexModelsV2ClientTypes.S3BucketLogDestination? = nil + name: LexModelsV2ClientTypes.AnalyticsBinByName? = nil, + value: Swift.Int? = nil ) { - self.s3Bucket = s3Bucket + self.name = name + self.value = value } } } -extension LexModelsV2ClientTypes.AudioLogSetting: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case destination - case enabled - } +extension LexModelsV2ClientTypes { + public enum AnalyticsCommonFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case botaliasid + case botversion + case channel + case localeid + case modality + case sdkUnknown(Swift.String) - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let destination = self.destination { - try encodeContainer.encode(destination, forKey: .destination) + public static var allCases: [AnalyticsCommonFilterName] { + return [ + .botaliasid, + .botversion, + .channel, + .localeid, + .modality, + .sdkUnknown("") + ] } - if enabled != false { - try encodeContainer.encode(enabled, forKey: .enabled) + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + public var rawValue: Swift.String { + switch self { + case .botaliasid: return "BotAliasId" + case .botversion: return "BotVersion" + case .channel: return "Channel" + case .localeid: return "LocaleId" + case .modality: return "Modality" + 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 = AnalyticsCommonFilterName(rawValue: rawValue) ?? AnalyticsCommonFilterName.sdkUnknown(rawValue) } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) ?? false - enabled = enabledDecoded - let destinationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AudioLogDestination.self, forKey: .destination) - destination = destinationDecoded } } extension LexModelsV2ClientTypes { - /// Settings for logging audio of conversations between Amazon Lex and a user. You specify whether to log audio and the Amazon S3 bucket where the audio file is stored. - public struct AudioLogSetting: Swift.Equatable { - /// The location of audio log files collected when conversation logging is enabled for a bot. - /// This member is required. - public var destination: LexModelsV2ClientTypes.AudioLogDestination? - /// Determines whether audio logging in enabled for the bot. - /// This member is required. - public var enabled: Swift.Bool + public enum AnalyticsFilterOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case equals + case greaterthan + case lessthan + case sdkUnknown(Swift.String) - public init( - destination: LexModelsV2ClientTypes.AudioLogDestination? = nil, - enabled: Swift.Bool = false - ) - { - self.destination = destination - self.enabled = enabled + public static var allCases: [AnalyticsFilterOperator] { + return [ + .equals, + .greaterthan, + .lessthan, + .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 .equals: return "EQ" + case .greaterthan: return "GT" + case .lessthan: return "LT" + 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 = AnalyticsFilterOperator(rawValue: rawValue) ?? AnalyticsFilterOperator.sdkUnknown(rawValue) } } - } extension LexModelsV2ClientTypes { - public enum AudioRecognitionStrategy: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case useslotvaluesascustomvocabulary + public enum AnalyticsIntentField: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case intentendstate + case intentlevel + case intentname case sdkUnknown(Swift.String) - public static var allCases: [AudioRecognitionStrategy] { + public static var allCases: [AnalyticsIntentField] { return [ - .useslotvaluesascustomvocabulary, + .intentendstate, + .intentlevel, + .intentname, .sdkUnknown("") ] } @@ -809,771 +758,1050 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .useslotvaluesascustomvocabulary: return "UseSlotValuesAsCustomVocabulary" + case .intentendstate: return "IntentEndState" + case .intentlevel: return "IntentLevel" + case .intentname: return "IntentName" 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 = AudioRecognitionStrategy(rawValue: rawValue) ?? AudioRecognitionStrategy.sdkUnknown(rawValue) + self = AnalyticsIntentField(rawValue: rawValue) ?? AnalyticsIntentField.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.AudioSpecification: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsIntentFilter: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case endTimeoutMs - case maxLengthMs + case name + case `operator` = "operator" + case values } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let endTimeoutMs = self.endTimeoutMs { - try encodeContainer.encode(endTimeoutMs, forKey: .endTimeoutMs) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - if let maxLengthMs = self.maxLengthMs { - try encodeContainer.encode(maxLengthMs, forKey: .maxLengthMs) + if let `operator` = self.`operator` { + try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + } + if let values = values { + var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) + for analyticsfiltervalue0 in values { + try valuesContainer.encode(analyticsfiltervalue0) + } } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let maxLengthMsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxLengthMs) - maxLengthMs = maxLengthMsDecoded - let endTimeoutMsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .endTimeoutMs) - endTimeoutMs = endTimeoutMsDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsIntentFilterName.self, forKey: .name) + name = nameDecoded + let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsFilterOperator.self, forKey: .operator) + `operator` = operatorDecoded + let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) + var valuesDecoded0:[Swift.String]? = nil + if let valuesContainer = valuesContainer { + valuesDecoded0 = [Swift.String]() + for string0 in valuesContainer { + if let string0 = string0 { + valuesDecoded0?.append(string0) + } + } + } + values = valuesDecoded0 } } extension LexModelsV2ClientTypes { - /// Specifies the audio input specifications. - public struct AudioSpecification: Swift.Equatable { - /// Time for which a bot waits after the customer stops speaking to assume the utterance is finished. + /// Contains fields describing a condition by which to filter the intents. The expression may be understood as name + /// operator + /// + /// values. For example: + /// + /// * IntentName CO Book – The intent name contains the string "Book." + /// + /// * BotVersion EQ 2 – The bot version is equal to two. + /// + /// + /// The operators that each filter supports are listed below: + /// + /// * BotAlias – EQ. + /// + /// * BotVersion – EQ. + /// + /// * LocaleId – EQ. + /// + /// * Modality – EQ. + /// + /// * Channel – EQ. + /// + /// * SessionId – EQ. + /// + /// * OriginatingRequestId – EQ. + /// + /// * IntentName – EQ, CO. + /// + /// * IntentEndState – EQ, CO. + public struct AnalyticsIntentFilter: Swift.Equatable { + /// The category by which to filter the intents. The descriptions for each option are as follows: + /// + /// * BotAlias – The name of the bot alias. + /// + /// * BotVersion – The version of the bot. + /// + /// * LocaleId – The locale of the bot. + /// + /// * Modality – The modality of the session with the bot (audio, DTMF, or text). + /// + /// * Channel – The channel that the bot is integrated with. + /// + /// * SessionId – The identifier of the session with the bot. + /// + /// * OriginatingRequestId – The identifier of the first request in a session. + /// + /// * IntentName – The name of the intent. + /// + /// * IntentEndState – The final state of the intent. /// This member is required. - public var endTimeoutMs: Swift.Int? - /// Time for how long Amazon Lex waits before speech input is truncated and the speech is returned to application. + public var name: LexModelsV2ClientTypes.AnalyticsIntentFilterName? + /// The operation by which to filter the category. The following operations are possible: + /// + /// * CO – Contains + /// + /// * EQ – Equals + /// + /// * GT – Greater than + /// + /// * LT – Less than + /// + /// + /// The operators that each filter supports are listed below: + /// + /// * BotAlias – EQ. + /// + /// * BotVersion – EQ. + /// + /// * LocaleId – EQ. + /// + /// * Modality – EQ. + /// + /// * Channel – EQ. + /// + /// * SessionId – EQ. + /// + /// * OriginatingRequestId – EQ. + /// + /// * IntentName – EQ, CO. + /// + /// * IntentEndState – EQ, CO. /// This member is required. - public var maxLengthMs: Swift.Int? + public var `operator`: LexModelsV2ClientTypes.AnalyticsFilterOperator? + /// An array containing the values of the category by which to apply the operator to filter the results. You can provide multiple values if the operator is EQ or CO. If you provide multiple values, you filter for results that equal/contain any of the values. For example, if the name, operator, and values fields are Modality, EQ, and [Speech, Text], the operation filters for results where the modality was either Speech or Text. + /// This member is required. + public var values: [Swift.String]? public init( - endTimeoutMs: Swift.Int? = nil, - maxLengthMs: Swift.Int? = nil + name: LexModelsV2ClientTypes.AnalyticsIntentFilterName? = nil, + `operator`: LexModelsV2ClientTypes.AnalyticsFilterOperator? = nil, + values: [Swift.String]? = nil ) { - self.endTimeoutMs = endTimeoutMs - self.maxLengthMs = maxLengthMs + self.name = name + self.`operator` = `operator` + self.values = values } } } -extension BatchCreateCustomVocabularyItemInput: Swift.Encodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case customVocabularyItemList - } +extension LexModelsV2ClientTypes { + public enum AnalyticsIntentFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case botaliasid + case botversion + case channel + case intentendstate + case intentname + case localeid + case modality + case originatingrequestid + case sessionid + case sdkUnknown(Swift.String) - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let customVocabularyItemList = customVocabularyItemList { - var customVocabularyItemListContainer = encodeContainer.nestedUnkeyedContainer(forKey: .customVocabularyItemList) - for newcustomvocabularyitem0 in customVocabularyItemList { - try customVocabularyItemListContainer.encode(newcustomvocabularyitem0) + public static var allCases: [AnalyticsIntentFilterName] { + return [ + .botaliasid, + .botversion, + .channel, + .intentendstate, + .intentname, + .localeid, + .modality, + .originatingrequestid, + .sessionid, + .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 .botaliasid: return "BotAliasId" + case .botversion: return "BotVersion" + case .channel: return "Channel" + case .intentendstate: return "IntentEndState" + case .intentname: return "IntentName" + case .localeid: return "LocaleId" + case .modality: return "Modality" + case .originatingrequestid: return "OriginatingRequestId" + case .sessionid: return "SessionId" + 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 = AnalyticsIntentFilterName(rawValue: rawValue) ?? AnalyticsIntentFilterName.sdkUnknown(rawValue) + } } } -extension BatchCreateCustomVocabularyItemInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil +extension LexModelsV2ClientTypes.AnalyticsIntentGroupByKey: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case value + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - guard let localeId = localeId else { - return nil + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary/DEFAULT/batchcreate" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsIntentField.self, forKey: .name) + name = nameDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .value) + value = valueDecoded } } -public struct BatchCreateCustomVocabularyItemInput: Swift.Equatable { - /// The identifier of the bot associated with this custom vocabulary. - /// This member is required. - public var botId: Swift.String? - /// The identifier of the version of the bot associated with this custom vocabulary. - /// This member is required. - public var botVersion: Swift.String? - /// A list of new custom vocabulary items. Each entry must contain a phrase and can optionally contain a displayAs and/or a weight. - /// This member is required. - public var customVocabularyItemList: [LexModelsV2ClientTypes.NewCustomVocabularyItem]? - /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? +extension LexModelsV2ClientTypes { + /// Contains the category by which the intent analytics were grouped and a member of that category. + public struct AnalyticsIntentGroupByKey: Swift.Equatable { + /// A category by which the intent analytics were grouped. + public var name: LexModelsV2ClientTypes.AnalyticsIntentField? + /// A member of the category by which the intent analytics were grouped. + public var value: Swift.String? - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - customVocabularyItemList: [LexModelsV2ClientTypes.NewCustomVocabularyItem]? = nil, - localeId: Swift.String? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.customVocabularyItemList = customVocabularyItemList - self.localeId = localeId + public init( + name: LexModelsV2ClientTypes.AnalyticsIntentField? = nil, + value: Swift.String? = nil + ) + { + self.name = name + self.value = value + } } -} -struct BatchCreateCustomVocabularyItemInputBody: Swift.Equatable { - let customVocabularyItemList: [LexModelsV2ClientTypes.NewCustomVocabularyItem]? } -extension BatchCreateCustomVocabularyItemInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.AnalyticsIntentGroupBySpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case customVocabularyItemList + case 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.rawValue, forKey: .name) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let customVocabularyItemListContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.NewCustomVocabularyItem?].self, forKey: .customVocabularyItemList) - var customVocabularyItemListDecoded0:[LexModelsV2ClientTypes.NewCustomVocabularyItem]? = nil - if let customVocabularyItemListContainer = customVocabularyItemListContainer { - customVocabularyItemListDecoded0 = [LexModelsV2ClientTypes.NewCustomVocabularyItem]() - for structure0 in customVocabularyItemListContainer { - if let structure0 = structure0 { - customVocabularyItemListDecoded0?.append(structure0) - } - } - } - customVocabularyItemList = customVocabularyItemListDecoded0 + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsIntentField.self, forKey: .name) + name = nameDecoded } } -public enum BatchCreateCustomVocabularyItemOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) +extension LexModelsV2ClientTypes { + /// Contains the category by which to group the intents. + public struct AnalyticsIntentGroupBySpecification: Swift.Equatable { + /// Specifies whether to group the intent stages by their name or their end state. + /// This member is required. + public var name: LexModelsV2ClientTypes.AnalyticsIntentField? + + public init( + name: LexModelsV2ClientTypes.AnalyticsIntentField? = nil + ) + { + self.name = name } } + } -extension BatchCreateCustomVocabularyItemOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: BatchCreateCustomVocabularyItemOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botVersion = output.botVersion - self.errors = output.errors - self.localeId = output.localeId - self.resources = output.resources - } else { - self.botId = nil - self.botVersion = nil - self.errors = nil - self.localeId = nil - self.resources = nil +extension LexModelsV2ClientTypes.AnalyticsIntentMetric: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case order + case statistic + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) + } + if let statistic = self.statistic { + try encodeContainer.encode(statistic.rawValue, forKey: .statistic) } } -} -public struct BatchCreateCustomVocabularyItemOutputResponse: Swift.Equatable { - /// The identifier of the bot associated with this custom vocabulary. - public var botId: Swift.String? - /// The identifier of the version of the bot associated with this custom vocabulary. - public var botVersion: Swift.String? - /// A list of custom vocabulary items that failed to create during the operation. The reason for the error is contained within each error object. - public var errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? - /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - public var localeId: Swift.String? - /// A list of custom vocabulary items that were successfully created during the operation. - public var resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? - - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil, - localeId: Swift.String? = nil, - resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.errors = errors - self.localeId = localeId - self.resources = resources + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsIntentMetricName.self, forKey: .name) + name = nameDecoded + let statisticDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsMetricStatistic.self, forKey: .statistic) + statistic = statisticDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSortOrder.self, forKey: .order) + order = orderDecoded } } -struct BatchCreateCustomVocabularyItemOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? - let resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? -} +extension LexModelsV2ClientTypes { + /// Contains the metric and the summary statistic you want to calculate, and the order in which to sort the results, for the intents in the bot. + public struct AnalyticsIntentMetric: Swift.Equatable { + /// The metric for which you want to get intent summary statistics. + /// + /// * Count – The number of times the intent was invoked. + /// + /// * Success – The number of times the intent succeeded. + /// + /// * Failure – The number of times the intent failed. + /// + /// * Switched – The number of times there was a switch to a different intent. + /// + /// * Dropped – The number of times the user dropped the intent. + /// This member is required. + public var name: LexModelsV2ClientTypes.AnalyticsIntentMetricName? + /// Specifies whether to sort the results in ascending or descending order. + public var order: LexModelsV2ClientTypes.AnalyticsSortOrder? + /// The summary statistic to calculate. + /// + /// * Sum – The total count for the category you provide in name. + /// + /// * Average – The total count divided by the number of intents in the category you provide in name. + /// + /// * Max – The highest count in the category you provide in name. + /// This member is required. + public var statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? -extension BatchCreateCustomVocabularyItemOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case errors - case localeId - case resources + public init( + name: LexModelsV2ClientTypes.AnalyticsIntentMetricName? = nil, + order: LexModelsV2ClientTypes.AnalyticsSortOrder? = nil, + statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? = nil + ) + { + self.name = name + self.order = order + self.statistic = statistic + } } - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let errorsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.FailedCustomVocabularyItem?].self, forKey: .errors) - var errorsDecoded0:[LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil - if let errorsContainer = errorsContainer { - errorsDecoded0 = [LexModelsV2ClientTypes.FailedCustomVocabularyItem]() - for structure0 in errorsContainer { - if let structure0 = structure0 { - errorsDecoded0?.append(structure0) - } - } +} + +extension LexModelsV2ClientTypes { + public enum AnalyticsIntentMetricName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case count + case dropped + case failure + case success + case switched + case sdkUnknown(Swift.String) + + public static var allCases: [AnalyticsIntentMetricName] { + return [ + .count, + .dropped, + .failure, + .success, + .switched, + .sdkUnknown("") + ] } - errors = errorsDecoded0 - let resourcesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyItem?].self, forKey: .resources) - var resourcesDecoded0:[LexModelsV2ClientTypes.CustomVocabularyItem]? = nil - if let resourcesContainer = resourcesContainer { - resourcesDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyItem]() - for structure0 in resourcesContainer { - if let structure0 = structure0 { - resourcesDecoded0?.append(structure0) - } + 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 .count: return "Count" + case .dropped: return "Dropped" + case .failure: return "Failure" + case .success: return "Success" + case .switched: return "Switched" + case let .sdkUnknown(s): return s } } - resources = resourcesDecoded0 + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = AnalyticsIntentMetricName(rawValue: rawValue) ?? AnalyticsIntentMetricName.sdkUnknown(rawValue) + } } } -extension BatchDeleteCustomVocabularyItemInput: Swift.Encodable { +extension LexModelsV2ClientTypes.AnalyticsIntentMetricResult: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case customVocabularyItemList + case name + case statistic + case value } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let customVocabularyItemList = customVocabularyItemList { - var customVocabularyItemListContainer = encodeContainer.nestedUnkeyedContainer(forKey: .customVocabularyItemList) - for customvocabularyentryid0 in customVocabularyItemList { - try customVocabularyItemListContainer.encode(customvocabularyentryid0) - } + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let statistic = self.statistic { + try encodeContainer.encode(statistic.rawValue, forKey: .statistic) + } + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) } } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsIntentMetricName.self, forKey: .name) + name = nameDecoded + let statisticDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsMetricStatistic.self, forKey: .statistic) + statistic = statisticDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .value) + value = valueDecoded + } } -extension BatchDeleteCustomVocabularyItemInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil +extension LexModelsV2ClientTypes { + /// An object containing the results for the intent metric you requested. + public struct AnalyticsIntentMetricResult: Swift.Equatable { + /// The metric that you requested. See [Key definitions](https://docs.aws.amazon.com/lexv2/latest/dg/analytics-key-definitions.html) for more details about these metrics. + /// + /// * Count – The number of times the intent was invoked. + /// + /// * Success – The number of times the intent succeeded. + /// + /// * Failure – The number of times the intent failed. + /// + /// * Switched – The number of times there was a switch to a different intent. + /// + /// * Dropped – The number of times the user dropped the intent. + public var name: LexModelsV2ClientTypes.AnalyticsIntentMetricName? + /// The statistic that you requested to calculate. + /// + /// * Sum – The total count for the category you provide in name. + /// + /// * Average – The total count divided by the number of intents in the category you provide in name. + /// + /// * Max – The highest count in the category you provide in name. + public var statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? + /// The value of the summary statistic for the metric that you requested. + public var value: Swift.Double? + + public init( + name: LexModelsV2ClientTypes.AnalyticsIntentMetricName? = nil, + statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? = nil, + value: Swift.Double? = nil + ) + { + self.name = name + self.statistic = statistic + self.value = value } - guard let botVersion = botVersion else { - return nil + } + +} + +extension LexModelsV2ClientTypes.AnalyticsIntentNodeSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case intentCount + case intentLevel + case intentName + case intentPath + case nodeType + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let intentCount = self.intentCount { + try encodeContainer.encode(intentCount, forKey: .intentCount) } - guard let localeId = localeId else { - return nil + if let intentLevel = self.intentLevel { + try encodeContainer.encode(intentLevel, forKey: .intentLevel) } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary/DEFAULT/batchdelete" + if let intentName = self.intentName { + try encodeContainer.encode(intentName, forKey: .intentName) + } + if let intentPath = self.intentPath { + try encodeContainer.encode(intentPath, forKey: .intentPath) + } + if let nodeType = self.nodeType { + try encodeContainer.encode(nodeType.rawValue, forKey: .nodeType) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) + intentName = intentNameDecoded + let intentPathDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentPath) + intentPath = intentPathDecoded + let intentCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .intentCount) + intentCount = intentCountDecoded + let intentLevelDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .intentLevel) + intentLevel = intentLevelDecoded + let nodeTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsNodeType.self, forKey: .nodeType) + nodeType = nodeTypeDecoded } } -public struct BatchDeleteCustomVocabularyItemInput: Swift.Equatable { - /// The identifier of the bot associated with this custom vocabulary. - /// This member is required. - public var botId: Swift.String? - /// The identifier of the version of the bot associated with this custom vocabulary. - /// This member is required. - public var botVersion: Swift.String? - /// A list of custom vocabulary items requested to be deleted. Each entry must contain the unique custom vocabulary entry identifier. - /// This member is required. - public var customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyEntryId]? - /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? +extension LexModelsV2ClientTypes { + /// An object containing information about the requested path. + public struct AnalyticsIntentNodeSummary: Swift.Equatable { + /// The total number of sessions that follow the given path to the given intent. + public var intentCount: Swift.Int? + /// The number of intents up to and including the requested path. + public var intentLevel: Swift.Int? + /// The name of the intent at the end of the requested path. + public var intentName: Swift.String? + /// The path. + public var intentPath: Swift.String? + /// Specifies whether the node is the end of a path (Exit) or not (Inner). + public var nodeType: LexModelsV2ClientTypes.AnalyticsNodeType? - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyEntryId]? = nil, - localeId: Swift.String? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.customVocabularyItemList = customVocabularyItemList - self.localeId = localeId + public init( + intentCount: Swift.Int? = nil, + intentLevel: Swift.Int? = nil, + intentName: Swift.String? = nil, + intentPath: Swift.String? = nil, + nodeType: LexModelsV2ClientTypes.AnalyticsNodeType? = nil + ) + { + self.intentCount = intentCount + self.intentLevel = intentLevel + self.intentName = intentName + self.intentPath = intentPath + self.nodeType = nodeType + } } -} -struct BatchDeleteCustomVocabularyItemInputBody: Swift.Equatable { - let customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyEntryId]? } -extension BatchDeleteCustomVocabularyItemInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.AnalyticsIntentResult: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case customVocabularyItemList + case binKeys + case groupByKeys + case metricsResults + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let binKeys = binKeys { + var binKeysContainer = encodeContainer.nestedUnkeyedContainer(forKey: .binKeys) + for analyticsbinkey0 in binKeys { + try binKeysContainer.encode(analyticsbinkey0) + } + } + if let groupByKeys = groupByKeys { + var groupByKeysContainer = encodeContainer.nestedUnkeyedContainer(forKey: .groupByKeys) + for analyticsintentgroupbykey0 in groupByKeys { + try groupByKeysContainer.encode(analyticsintentgroupbykey0) + } + } + if let metricsResults = metricsResults { + var metricsResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .metricsResults) + for analyticsintentmetricresult0 in metricsResults { + try metricsResultsContainer.encode(analyticsintentmetricresult0) + } + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let customVocabularyItemListContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyEntryId?].self, forKey: .customVocabularyItemList) - var customVocabularyItemListDecoded0:[LexModelsV2ClientTypes.CustomVocabularyEntryId]? = nil - if let customVocabularyItemListContainer = customVocabularyItemListContainer { - customVocabularyItemListDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyEntryId]() - for structure0 in customVocabularyItemListContainer { + let binKeysContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsBinKey?].self, forKey: .binKeys) + var binKeysDecoded0:[LexModelsV2ClientTypes.AnalyticsBinKey]? = nil + if let binKeysContainer = binKeysContainer { + binKeysDecoded0 = [LexModelsV2ClientTypes.AnalyticsBinKey]() + for structure0 in binKeysContainer { if let structure0 = structure0 { - customVocabularyItemListDecoded0?.append(structure0) + binKeysDecoded0?.append(structure0) } } } - customVocabularyItemList = customVocabularyItemListDecoded0 + binKeys = binKeysDecoded0 + let groupByKeysContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentGroupByKey?].self, forKey: .groupByKeys) + var groupByKeysDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentGroupByKey]? = nil + if let groupByKeysContainer = groupByKeysContainer { + groupByKeysDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentGroupByKey]() + for structure0 in groupByKeysContainer { + if let structure0 = structure0 { + groupByKeysDecoded0?.append(structure0) + } + } + } + groupByKeys = groupByKeysDecoded0 + let metricsResultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentMetricResult?].self, forKey: .metricsResults) + var metricsResultsDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentMetricResult]? = nil + if let metricsResultsContainer = metricsResultsContainer { + metricsResultsDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentMetricResult]() + for structure0 in metricsResultsContainer { + if let structure0 = structure0 { + metricsResultsDecoded0?.append(structure0) + } + } + } + metricsResults = metricsResultsDecoded0 } } -public enum BatchDeleteCustomVocabularyItemOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) +extension LexModelsV2ClientTypes { + /// An object containing the results for the intent metrics you requested and the bin and/or group(s) they refer to, if applicable. + public struct AnalyticsIntentResult: Swift.Equatable { + /// A list of objects containing the criteria you requested for binning results and the values of the bins. + public var binKeys: [LexModelsV2ClientTypes.AnalyticsBinKey]? + /// A list of objects containing the criteria you requested for grouping results and the values of the groups. + public var groupByKeys: [LexModelsV2ClientTypes.AnalyticsIntentGroupByKey]? + /// A list of objects, each of which contains a metric you want to list, the statistic for the metric you want to return, and the method by which to organize the results. + public var metricsResults: [LexModelsV2ClientTypes.AnalyticsIntentMetricResult]? + + public init( + binKeys: [LexModelsV2ClientTypes.AnalyticsBinKey]? = nil, + groupByKeys: [LexModelsV2ClientTypes.AnalyticsIntentGroupByKey]? = nil, + metricsResults: [LexModelsV2ClientTypes.AnalyticsIntentMetricResult]? = nil + ) + { + self.binKeys = binKeys + self.groupByKeys = groupByKeys + self.metricsResults = metricsResults } } + } -extension BatchDeleteCustomVocabularyItemOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: BatchDeleteCustomVocabularyItemOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botVersion = output.botVersion - self.errors = output.errors - self.localeId = output.localeId - self.resources = output.resources - } else { - self.botId = nil - self.botVersion = nil - self.errors = nil - self.localeId = nil - self.resources = nil +extension LexModelsV2ClientTypes { + public enum AnalyticsIntentStageField: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case intentstagename + case switchedtointent + case sdkUnknown(Swift.String) + + public static var allCases: [AnalyticsIntentStageField] { + return [ + .intentstagename, + .switchedtointent, + .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 .intentstagename: return "IntentStageName" + case .switchedtointent: return "SwitchedToIntent" + 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 = AnalyticsIntentStageField(rawValue: rawValue) ?? AnalyticsIntentStageField.sdkUnknown(rawValue) } } } -public struct BatchDeleteCustomVocabularyItemOutputResponse: Swift.Equatable { - /// The identifier of the bot associated with this custom vocabulary. - public var botId: Swift.String? - /// The identifier of the version of the bot associated with this custom vocabulary. - public var botVersion: Swift.String? - /// A list of custom vocabulary items that failed to delete during the operation. The reason for the error is contained within each error object. - public var errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? - /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see Supported languages (https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - public var localeId: Swift.String? - /// A list of custom vocabulary items that were successfully deleted during the operation. - public var resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? - - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil, - localeId: Swift.String? = nil, - resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.errors = errors - self.localeId = localeId - self.resources = resources +extension LexModelsV2ClientTypes.AnalyticsIntentStageFilter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case `operator` = "operator" + case values } -} - -struct BatchDeleteCustomVocabularyItemOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? - let resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? -} -extension BatchDeleteCustomVocabularyItemOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case errors - case localeId - case resources + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let `operator` = self.`operator` { + try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + } + if let values = values { + var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) + for analyticsfiltervalue0 in values { + try valuesContainer.encode(analyticsfiltervalue0) + } + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let errorsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.FailedCustomVocabularyItem?].self, forKey: .errors) - var errorsDecoded0:[LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil - if let errorsContainer = errorsContainer { - errorsDecoded0 = [LexModelsV2ClientTypes.FailedCustomVocabularyItem]() - for structure0 in errorsContainer { - if let structure0 = structure0 { - errorsDecoded0?.append(structure0) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsIntentStageFilterName.self, forKey: .name) + name = nameDecoded + let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsFilterOperator.self, forKey: .operator) + `operator` = operatorDecoded + let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) + var valuesDecoded0:[Swift.String]? = nil + if let valuesContainer = valuesContainer { + valuesDecoded0 = [Swift.String]() + for string0 in valuesContainer { + if let string0 = string0 { + valuesDecoded0?.append(string0) } } } - errors = errorsDecoded0 - let resourcesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyItem?].self, forKey: .resources) - var resourcesDecoded0:[LexModelsV2ClientTypes.CustomVocabularyItem]? = nil - if let resourcesContainer = resourcesContainer { - resourcesDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyItem]() - for structure0 in resourcesContainer { - if let structure0 = structure0 { - resourcesDecoded0?.append(structure0) - } + values = valuesDecoded0 + } +} + +extension LexModelsV2ClientTypes { + /// Contains fields describing a condition by which to filter the intent stages. The expression may be understood as name + /// operator + /// + /// values. For example: + /// + /// * IntentName CO Book – The intent name contains the string "Book." + /// + /// * BotVersion EQ 2 – The bot version is equal to two. + /// + /// + /// The operators that each filter supports are listed below: + /// + /// * BotAlias – EQ. + /// + /// * BotVersion – EQ. + /// + /// * LocaleId – EQ. + /// + /// * Modality – EQ. + /// + /// * Channel – EQ. + /// + /// * SessionId – EQ. + /// + /// * OriginatingRequestId – EQ. + /// + /// * IntentName – EQ, CO. + /// + /// * IntentStageName – EQ, CO. + public struct AnalyticsIntentStageFilter: Swift.Equatable { + /// The category by which to filter the intent stages. The descriptions for each option are as follows: + /// + /// * BotAlias – The name of the bot alias. + /// + /// * BotVersion – The version of the bot. + /// + /// * LocaleId – The locale of the bot. + /// + /// * Modality – The modality of the session with the bot (audio, DTMF, or text). + /// + /// * Channel – The channel that the bot is integrated with. + /// + /// * SessionId – The identifier of the session with the bot. + /// + /// * OriginatingRequestId – The identifier of the first request in a session. + /// + /// * IntentName – The name of the intent. + /// + /// * IntentStageName – The stage in the intent. + /// This member is required. + public var name: LexModelsV2ClientTypes.AnalyticsIntentStageFilterName? + /// The operation by which to filter the category. The following operations are possible: + /// + /// * CO – Contains + /// + /// * EQ – Equals + /// + /// * GT – Greater than + /// + /// * LT – Less than + /// + /// + /// The operators that each filter supports are listed below: + /// + /// * BotAlias – EQ. + /// + /// * BotVersion – EQ. + /// + /// * LocaleId – EQ. + /// + /// * Modality – EQ. + /// + /// * Channel – EQ. + /// + /// * SessionId – EQ. + /// + /// * OriginatingRequestId – EQ. + /// + /// * IntentName – EQ, CO. + /// + /// * IntentStageName – EQ, CO. + /// This member is required. + public var `operator`: LexModelsV2ClientTypes.AnalyticsFilterOperator? + /// An array containing the values of the category by which to apply the operator to filter the results. You can provide multiple values if the operator is EQ or CO. If you provide multiple values, you filter for results that equal/contain any of the values. For example, if the name, operator, and values fields are Modality, EQ, and [Speech, Text], the operation filters for results where the modality was either Speech or Text. + /// This member is required. + public var values: [Swift.String]? + + public init( + name: LexModelsV2ClientTypes.AnalyticsIntentStageFilterName? = nil, + `operator`: LexModelsV2ClientTypes.AnalyticsFilterOperator? = nil, + values: [Swift.String]? = nil + ) + { + self.name = name + self.`operator` = `operator` + self.values = values + } + } + +} + +extension LexModelsV2ClientTypes { + public enum AnalyticsIntentStageFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case botaliasid + case botversion + case channel + case intentname + case intentstagename + case localeid + case modality + case originatingrequestid + case sessionid + case sdkUnknown(Swift.String) + + public static var allCases: [AnalyticsIntentStageFilterName] { + return [ + .botaliasid, + .botversion, + .channel, + .intentname, + .intentstagename, + .localeid, + .modality, + .originatingrequestid, + .sessionid, + .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 .botaliasid: return "BotAliasId" + case .botversion: return "BotVersion" + case .channel: return "Channel" + case .intentname: return "IntentName" + case .intentstagename: return "IntentStageName" + case .localeid: return "LocaleId" + case .modality: return "Modality" + case .originatingrequestid: return "OriginatingRequestId" + case .sessionid: return "SessionId" + case let .sdkUnknown(s): return s } } - resources = resourcesDecoded0 + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = AnalyticsIntentStageFilterName(rawValue: rawValue) ?? AnalyticsIntentStageFilterName.sdkUnknown(rawValue) + } } } -extension BatchUpdateCustomVocabularyItemInput: Swift.Encodable { +extension LexModelsV2ClientTypes.AnalyticsIntentStageGroupByKey: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case customVocabularyItemList + case name + case value } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let customVocabularyItemList = customVocabularyItemList { - var customVocabularyItemListContainer = encodeContainer.nestedUnkeyedContainer(forKey: .customVocabularyItemList) - for customvocabularyitem0 in customVocabularyItemList { - try customVocabularyItemListContainer.encode(customvocabularyitem0) - } + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) } } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsIntentStageField.self, forKey: .name) + name = nameDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .value) + value = valueDecoded + } } -extension BatchUpdateCustomVocabularyItemInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil - } - guard let localeId = localeId else { - return nil +extension LexModelsV2ClientTypes { + /// Contains the category by which the intent stage analytics and the values for that category were grouped. + public struct AnalyticsIntentStageGroupByKey: Swift.Equatable { + /// A category by which the intent stage analytics were grouped. + public var name: LexModelsV2ClientTypes.AnalyticsIntentStageField? + /// A member of the category by which the intent stage analytics were grouped. + public var value: Swift.String? + + public init( + name: LexModelsV2ClientTypes.AnalyticsIntentStageField? = nil, + value: Swift.String? = nil + ) + { + self.name = name + self.value = value } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary/DEFAULT/batchupdate" } + } -public struct BatchUpdateCustomVocabularyItemInput: Swift.Equatable { - /// The identifier of the bot associated with this custom vocabulary - /// This member is required. - public var botId: Swift.String? - /// The identifier of the version of the bot associated with this custom vocabulary. - /// This member is required. - public var botVersion: Swift.String? - /// A list of custom vocabulary items with updated fields. Each entry must contain a phrase and can optionally contain a displayAs and/or a weight. - /// This member is required. - public var customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyItem]? - /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? - - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyItem]? = nil, - localeId: Swift.String? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.customVocabularyItemList = customVocabularyItemList - self.localeId = localeId - } -} - -struct BatchUpdateCustomVocabularyItemInputBody: Swift.Equatable { - let customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyItem]? -} - -extension BatchUpdateCustomVocabularyItemInputBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case customVocabularyItemList - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let customVocabularyItemListContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyItem?].self, forKey: .customVocabularyItemList) - var customVocabularyItemListDecoded0:[LexModelsV2ClientTypes.CustomVocabularyItem]? = nil - if let customVocabularyItemListContainer = customVocabularyItemListContainer { - customVocabularyItemListDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyItem]() - for structure0 in customVocabularyItemListContainer { - if let structure0 = structure0 { - customVocabularyItemListDecoded0?.append(structure0) - } - } - } - customVocabularyItemList = customVocabularyItemListDecoded0 - } -} - -public enum BatchUpdateCustomVocabularyItemOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) - } - } -} - -extension BatchUpdateCustomVocabularyItemOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: BatchUpdateCustomVocabularyItemOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botVersion = output.botVersion - self.errors = output.errors - self.localeId = output.localeId - self.resources = output.resources - } else { - self.botId = nil - self.botVersion = nil - self.errors = nil - self.localeId = nil - self.resources = nil - } - } -} - -public struct BatchUpdateCustomVocabularyItemOutputResponse: Swift.Equatable { - /// The identifier of the bot associated with this custom vocabulary. - public var botId: Swift.String? - /// The identifier of the version of the bot associated with this custom vocabulary. - public var botVersion: Swift.String? - /// A list of custom vocabulary items that failed to update during the operation. The reason for the error is contained within each error object. - public var errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? - /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - public var localeId: Swift.String? - /// A list of custom vocabulary items that were successfully updated during the operation. - public var resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? - - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil, - localeId: Swift.String? = nil, - resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.errors = errors - self.localeId = localeId - self.resources = resources - } -} - -struct BatchUpdateCustomVocabularyItemOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? - let resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? -} - -extension BatchUpdateCustomVocabularyItemOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case errors - case localeId - case resources - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let errorsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.FailedCustomVocabularyItem?].self, forKey: .errors) - var errorsDecoded0:[LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil - if let errorsContainer = errorsContainer { - errorsDecoded0 = [LexModelsV2ClientTypes.FailedCustomVocabularyItem]() - for structure0 in errorsContainer { - if let structure0 = structure0 { - errorsDecoded0?.append(structure0) - } - } - } - errors = errorsDecoded0 - let resourcesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyItem?].self, forKey: .resources) - var resourcesDecoded0:[LexModelsV2ClientTypes.CustomVocabularyItem]? = nil - if let resourcesContainer = resourcesContainer { - resourcesDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyItem]() - for structure0 in resourcesContainer { - if let structure0 = structure0 { - resourcesDecoded0?.append(structure0) - } - } - } - resources = resourcesDecoded0 - } -} - -extension LexModelsV2ClientTypes.BotAliasHistoryEvent: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsIntentStageGroupBySpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botVersion - case endDate - case startDate + case name } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) - } - if let endDate = self.endDate { - try encodeContainer.encodeTimestamp(endDate, format: .epochSeconds, forKey: .endDate) - } - if let startDate = self.startDate { - try encodeContainer.encodeTimestamp(startDate, format: .epochSeconds, forKey: .startDate) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let startDateDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startDate) - startDate = startDateDecoded - let endDateDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endDate) - endDate = endDateDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsIntentStageField.self, forKey: .name) + name = nameDecoded } } extension LexModelsV2ClientTypes { - /// Provides a record of an event that affects a bot alias. For example, when the version of a bot that the alias points to changes. - public struct BotAliasHistoryEvent: Swift.Equatable { - /// The version of the bot that was used in the event. - public var botVersion: Swift.String? - /// The date and time that the event ended. - public var endDate: ClientRuntime.Date? - /// The date and time that the event started. - public var startDate: ClientRuntime.Date? + /// Contains the category by which to group the intent stages. + public struct AnalyticsIntentStageGroupBySpecification: Swift.Equatable { + /// Specifies whether to group the intent stages by their name or the intent to which the session was switched. + /// This member is required. + public var name: LexModelsV2ClientTypes.AnalyticsIntentStageField? public init( - botVersion: Swift.String? = nil, - endDate: ClientRuntime.Date? = nil, - startDate: ClientRuntime.Date? = nil + name: LexModelsV2ClientTypes.AnalyticsIntentStageField? = nil ) { - self.botVersion = botVersion - self.endDate = endDate - self.startDate = startDate + self.name = name } } } -extension LexModelsV2ClientTypes.BotAliasLocaleSettings: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsIntentStageMetric: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case codeHookSpecification - case enabled + case name + case order + case statistic } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let codeHookSpecification = self.codeHookSpecification { - try encodeContainer.encode(codeHookSpecification, forKey: .codeHookSpecification) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - if enabled != false { - try encodeContainer.encode(enabled, forKey: .enabled) + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) + } + if let statistic = self.statistic { + try encodeContainer.encode(statistic.rawValue, forKey: .statistic) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) ?? false - enabled = enabledDecoded - let codeHookSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CodeHookSpecification.self, forKey: .codeHookSpecification) - codeHookSpecification = codeHookSpecificationDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsIntentStageMetricName.self, forKey: .name) + name = nameDecoded + let statisticDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsMetricStatistic.self, forKey: .statistic) + statistic = statisticDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSortOrder.self, forKey: .order) + order = orderDecoded } } extension LexModelsV2ClientTypes { - /// Specifies settings that are unique to a locale. For example, you can use different Lambda function depending on the bot's locale. - public struct BotAliasLocaleSettings: Swift.Equatable { - /// Specifies the Lambda function that should be used in the locale. - public var codeHookSpecification: LexModelsV2ClientTypes.CodeHookSpecification? - /// Determines whether the locale is enabled for the bot. If the value is false, the locale isn't available for use. + /// Contains the metric and the summary statistic you want to calculate, and the order in which to sort the results, for the intent stages across the user sessions with the bot. + public struct AnalyticsIntentStageMetric: Swift.Equatable { + /// The metric for which you want to get intent stage summary statistics. See [Key definitions](https://docs.aws.amazon.com/lexv2/latest/dg/analytics-key-definitions.html) for more details about these metrics. + /// + /// * Count – The number of times the intent stage occurred. + /// + /// * Success – The number of times the intent stage succeeded. + /// + /// * Failure – The number of times the intent stage failed. + /// + /// * Dropped – The number of times the user dropped the intent stage. + /// + /// * Retry – The number of times the bot tried to elicit a response from the user at this stage. /// This member is required. - public var enabled: Swift.Bool + public var name: LexModelsV2ClientTypes.AnalyticsIntentStageMetricName? + /// Specifies whether to sort the results in ascending or descending order of the summary statistic (value in the response). + public var order: LexModelsV2ClientTypes.AnalyticsSortOrder? + /// The summary statistic to calculate. + /// + /// * Sum – The total count for the category you provide in name. + /// + /// * Average – The total count divided by the number of intent stages in the category you provide in name. + /// + /// * Max – The highest count in the category you provide in name. + /// This member is required. + public var statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? public init( - codeHookSpecification: LexModelsV2ClientTypes.CodeHookSpecification? = nil, - enabled: Swift.Bool = false + name: LexModelsV2ClientTypes.AnalyticsIntentStageMetricName? = nil, + order: LexModelsV2ClientTypes.AnalyticsSortOrder? = nil, + statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? = nil ) { - self.codeHookSpecification = codeHookSpecification - self.enabled = enabled + self.name = name + self.order = order + self.statistic = statistic } } } extension LexModelsV2ClientTypes { - public enum BotAliasStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case available - case creating - case deleting + public enum AnalyticsIntentStageMetricName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case count + case dropped case failed + case retry + case success case sdkUnknown(Swift.String) - public static var allCases: [BotAliasStatus] { + public static var allCases: [AnalyticsIntentStageMetricName] { return [ - .available, - .creating, - .deleting, + .count, + .dropped, .failed, + .retry, + .success, .sdkUnknown("") ] } @@ -1583,222 +1811,322 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .available: return "Available" - case .creating: return "Creating" - case .deleting: return "Deleting" + case .count: return "Count" + case .dropped: return "Dropped" case .failed: return "Failed" + case .retry: return "Retry" + case .success: return "Success" 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 = BotAliasStatus(rawValue: rawValue) ?? BotAliasStatus.sdkUnknown(rawValue) + self = AnalyticsIntentStageMetricName(rawValue: rawValue) ?? AnalyticsIntentStageMetricName.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.BotAliasSummary: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsIntentStageMetricResult: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botAliasId - case botAliasName - case botAliasStatus - case botVersion - case creationDateTime - case description - case lastUpdatedDateTime + case name + case statistic + case value } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botAliasId = self.botAliasId { - try encodeContainer.encode(botAliasId, forKey: .botAliasId) - } - if let botAliasName = self.botAliasName { - try encodeContainer.encode(botAliasName, forKey: .botAliasName) - } - if let botAliasStatus = self.botAliasStatus { - try encodeContainer.encode(botAliasStatus.rawValue, forKey: .botAliasStatus) - } - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) - } - if let creationDateTime = self.creationDateTime { - try encodeContainer.encodeTimestamp(creationDateTime, format: .epochSeconds, forKey: .creationDateTime) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) + if let statistic = self.statistic { + try encodeContainer.encode(statistic.rawValue, forKey: .statistic) } - if let lastUpdatedDateTime = self.lastUpdatedDateTime { - try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) - botAliasId = botAliasIdDecoded - let botAliasNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasName) - botAliasName = botAliasNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let botAliasStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotAliasStatus.self, forKey: .botAliasStatus) - botAliasStatus = botAliasStatusDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsIntentStageMetricName.self, forKey: .name) + name = nameDecoded + let statisticDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsMetricStatistic.self, forKey: .statistic) + statistic = statisticDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .value) + value = valueDecoded } } extension LexModelsV2ClientTypes { - /// Summary information about bot aliases returned from the [ListBotAliases](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBotAliases.html) operation. - public struct BotAliasSummary: Swift.Equatable { - /// The unique identifier assigned to the bot alias. You can use this ID to get detailed information about the alias using the [DescribeBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeBotAlias.html) operation. - public var botAliasId: Swift.String? - /// The name of the bot alias. - public var botAliasName: Swift.String? - /// The current state of the bot alias. If the status is Available, the alias is ready for use. - public var botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? - /// The version of the bot that the bot alias references. - public var botVersion: Swift.String? - /// A timestamp of the date and time that the bot alias was created. - public var creationDateTime: ClientRuntime.Date? - /// The description of the bot alias. - public var description: Swift.String? - /// A timestamp of the date and time that the bot alias was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? + /// An object containing the results for an intent stage metric you requested. + public struct AnalyticsIntentStageMetricResult: Swift.Equatable { + /// The metric that you requested. + /// + /// * Count – The number of times the intent stage occurred. + /// + /// * Success – The number of times the intent stage succeeded. + /// + /// * Failure – The number of times the intent stage failed. + /// + /// * Dropped – The number of times the user dropped the intent stage. + /// + /// * Retry – The number of times the bot tried to elicit a response from the user at this stage. + public var name: LexModelsV2ClientTypes.AnalyticsIntentStageMetricName? + /// The summary statistic that you requested to calculate. + /// + /// * Sum – The total count for the category you provide in name. + /// + /// * Average – The total count divided by the number of intent stages in the category you provide in name. + /// + /// * Max – The highest count in the category you provide in name. + public var statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? + /// The value of the summary statistic for the metric that you requested. + public var value: Swift.Double? public init( - botAliasId: Swift.String? = nil, - botAliasName: Swift.String? = nil, - botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? = nil, - botVersion: Swift.String? = nil, - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil + name: LexModelsV2ClientTypes.AnalyticsIntentStageMetricName? = nil, + statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? = nil, + value: Swift.Double? = nil ) { - self.botAliasId = botAliasId - self.botAliasName = botAliasName - self.botAliasStatus = botAliasStatus - self.botVersion = botVersion - self.creationDateTime = creationDateTime - self.description = description - self.lastUpdatedDateTime = lastUpdatedDateTime + self.name = name + self.statistic = statistic + self.value = value } } } -extension LexModelsV2ClientTypes.BotAliasTestExecutionTarget: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsIntentStageResult: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botAliasId - case botId - case localeId + case binKeys + case groupByKeys + case metricsResults } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botAliasId = self.botAliasId { - try encodeContainer.encode(botAliasId, forKey: .botAliasId) + if let binKeys = binKeys { + var binKeysContainer = encodeContainer.nestedUnkeyedContainer(forKey: .binKeys) + for analyticsbinkey0 in binKeys { + try binKeysContainer.encode(analyticsbinkey0) + } } - if let botId = self.botId { - try encodeContainer.encode(botId, forKey: .botId) + if let groupByKeys = groupByKeys { + var groupByKeysContainer = encodeContainer.nestedUnkeyedContainer(forKey: .groupByKeys) + for analyticsintentstagegroupbykey0 in groupByKeys { + try groupByKeysContainer.encode(analyticsintentstagegroupbykey0) + } } - if let localeId = self.localeId { - try encodeContainer.encode(localeId, forKey: .localeId) + if let metricsResults = metricsResults { + var metricsResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .metricsResults) + for analyticsintentstagemetricresult0 in metricsResults { + try metricsResultsContainer.encode(analyticsintentstagemetricresult0) + } } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) - botAliasId = botAliasIdDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded + let binKeysContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsBinKey?].self, forKey: .binKeys) + var binKeysDecoded0:[LexModelsV2ClientTypes.AnalyticsBinKey]? = nil + if let binKeysContainer = binKeysContainer { + binKeysDecoded0 = [LexModelsV2ClientTypes.AnalyticsBinKey]() + for structure0 in binKeysContainer { + if let structure0 = structure0 { + binKeysDecoded0?.append(structure0) + } + } + } + binKeys = binKeysDecoded0 + let groupByKeysContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentStageGroupByKey?].self, forKey: .groupByKeys) + var groupByKeysDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentStageGroupByKey]? = nil + if let groupByKeysContainer = groupByKeysContainer { + groupByKeysDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentStageGroupByKey]() + for structure0 in groupByKeysContainer { + if let structure0 = structure0 { + groupByKeysDecoded0?.append(structure0) + } + } + } + groupByKeys = groupByKeysDecoded0 + let metricsResultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentStageMetricResult?].self, forKey: .metricsResults) + var metricsResultsDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentStageMetricResult]? = nil + if let metricsResultsContainer = metricsResultsContainer { + metricsResultsDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentStageMetricResult]() + for structure0 in metricsResultsContainer { + if let structure0 = structure0 { + metricsResultsDecoded0?.append(structure0) + } + } + } + metricsResults = metricsResultsDecoded0 } } extension LexModelsV2ClientTypes { - /// The target Amazon S3 location for the test set execution using a bot alias. - public struct BotAliasTestExecutionTarget: Swift.Equatable { - /// The bot alias Id of the bot alias used in the test set execution. - /// This member is required. - public var botAliasId: Swift.String? - /// The bot Id of the bot alias used in the test set execution. - /// This member is required. - public var botId: Swift.String? - /// The locale Id of the bot alias used in the test set execution. - /// This member is required. - public var localeId: Swift.String? + /// An object containing the results for the intent stage metrics you requested and the bin and/or group they refer to, if applicable. + public struct AnalyticsIntentStageResult: Swift.Equatable { + /// A list of objects containing the criteria you requested for binning results and the values of the bins. + public var binKeys: [LexModelsV2ClientTypes.AnalyticsBinKey]? + /// A list of objects containing the criteria you requested for grouping results and the values of the bins. + public var groupByKeys: [LexModelsV2ClientTypes.AnalyticsIntentStageGroupByKey]? + /// A list of objects, each of which contains a metric you want to list, the statistic for the metric you want to return, and the method by which to organize the results. + public var metricsResults: [LexModelsV2ClientTypes.AnalyticsIntentStageMetricResult]? public init( - botAliasId: Swift.String? = nil, - botId: Swift.String? = nil, - localeId: Swift.String? = nil + binKeys: [LexModelsV2ClientTypes.AnalyticsBinKey]? = nil, + groupByKeys: [LexModelsV2ClientTypes.AnalyticsIntentStageGroupByKey]? = nil, + metricsResults: [LexModelsV2ClientTypes.AnalyticsIntentStageMetricResult]? = nil ) { - self.botAliasId = botAliasId - self.botId = botId - self.localeId = localeId + self.binKeys = binKeys + self.groupByKeys = groupByKeys + self.metricsResults = metricsResults } } } -extension LexModelsV2ClientTypes.BotExportSpecification: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - } +extension LexModelsV2ClientTypes { + public enum AnalyticsInterval: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case oneday + case onehour + case sdkUnknown(Swift.String) - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botId = self.botId { - try encodeContainer.encode(botId, forKey: .botId) + public static var allCases: [AnalyticsInterval] { + return [ + .oneday, + .onehour, + .sdkUnknown("") + ] } - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) + 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 .oneday: return "OneDay" + case .onehour: return "OneHour" + 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 = AnalyticsInterval(rawValue: rawValue) ?? AnalyticsInterval.sdkUnknown(rawValue) } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded +extension LexModelsV2ClientTypes { + public enum AnalyticsMetricStatistic: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case avg + case max + case sum + case sdkUnknown(Swift.String) + + public static var allCases: [AnalyticsMetricStatistic] { + return [ + .avg, + .max, + .sum, + .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 .avg: return "Avg" + case .max: return "Max" + case .sum: return "Sum" + 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 = AnalyticsMetricStatistic(rawValue: rawValue) ?? AnalyticsMetricStatistic.sdkUnknown(rawValue) + } } } extension LexModelsV2ClientTypes { - /// Provides the identity of a the bot that was exported. - public struct BotExportSpecification: Swift.Equatable { - /// The identifier of the bot assigned by Amazon Lex. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot that was exported. This will be either DRAFT or the version number. - /// This member is required. - public var botVersion: Swift.String? + public enum AnalyticsModality: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case dtmf + case multimode + case speech + case text + case sdkUnknown(Swift.String) - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil - ) - { - self.botId = botId - self.botVersion = botVersion + public static var allCases: [AnalyticsModality] { + return [ + .dtmf, + .multimode, + .speech, + .text, + .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 .dtmf: return "DTMF" + case .multimode: return "MultiMode" + case .speech: return "Speech" + case .text: return "Text" + 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 = AnalyticsModality(rawValue: rawValue) ?? AnalyticsModality.sdkUnknown(rawValue) } } +} +extension LexModelsV2ClientTypes { + public enum AnalyticsNodeType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case exit + case inner + case sdkUnknown(Swift.String) + + public static var allCases: [AnalyticsNodeType] { + return [ + .exit, + .inner, + .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 .exit: return "Exit" + case .inner: return "Inner" + 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 = AnalyticsNodeType(rawValue: rawValue) ?? AnalyticsNodeType.sdkUnknown(rawValue) + } + } } -extension LexModelsV2ClientTypes.BotFilter: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsPathFilter: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case name case `operator` = "operator" @@ -1815,16 +2143,18 @@ extension LexModelsV2ClientTypes.BotFilter: Swift.Codable { } if let values = values { var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) - for filtervalue0 in values { - try valuesContainer.encode(filtervalue0) + for analyticsfiltervalue0 in values { + try valuesContainer.encode(analyticsfiltervalue0) } } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotFilterName.self, forKey: .name) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsCommonFilterName.self, forKey: .name) name = nameDecoded + let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsFilterOperator.self, forKey: .operator) + `operator` = operatorDecoded let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) var valuesDecoded0:[Swift.String]? = nil if let valuesContainer = valuesContainer { @@ -1836,27 +2166,76 @@ extension LexModelsV2ClientTypes.BotFilter: Swift.Codable { } } values = valuesDecoded0 - let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotFilterOperator.self, forKey: .operator) - `operator` = operatorDecoded } } extension LexModelsV2ClientTypes { - /// Filters the responses returned by the ListBots operation. - public struct BotFilter: Swift.Equatable { - /// The name of the field to filter the list of bots. - /// This member is required. - public var name: LexModelsV2ClientTypes.BotFilterName? - /// The operator to use for the filter. Specify EQ when the ListBots operation should return only aliases that equal the specified value. Specify CO when the ListBots operation should return aliases that contain the specified value. - /// This member is required. - public var `operator`: LexModelsV2ClientTypes.BotFilterOperator? - /// The value to use for filtering the list of bots. + /// Contains fields describing a condition by which to filter the paths. The expression may be understood as name + /// operator + /// + /// values. For example: + /// + /// * LocaleId EQ en – The locale is "en". + /// + /// * BotVersion EQ 2 – The bot version is equal to two. + /// + /// + /// The operators that each filter supports are listed below: + /// + /// * BotAlias – EQ. + /// + /// * BotVersion – EQ. + /// + /// * LocaleId – EQ. + /// + /// * Modality – EQ. + /// + /// * Channel – EQ. + public struct AnalyticsPathFilter: Swift.Equatable { + /// The category by which to filter the intent paths. The descriptions for each option are as follows: + /// + /// * BotAlias – The name of the bot alias. + /// + /// * BotVersion – The version of the bot. + /// + /// * LocaleId – The locale of the bot. + /// + /// * Modality – The modality of the session with the bot (audio, DTMF, or text). + /// + /// * Channel – The channel that the bot is integrated with. + /// This member is required. + public var name: LexModelsV2ClientTypes.AnalyticsCommonFilterName? + /// The operation by which to filter the category. The following operations are possible: + /// + /// * CO – Contains + /// + /// * EQ – Equals + /// + /// * GT – Greater than + /// + /// * LT – Less than + /// + /// + /// The operators that each filter supports are listed below: + /// + /// * BotAlias – EQ. + /// + /// * BotVersion – EQ. + /// + /// * LocaleId – EQ. + /// + /// * Modality – EQ. + /// + /// * Channel – EQ. + /// This member is required. + public var `operator`: LexModelsV2ClientTypes.AnalyticsFilterOperator? + /// An array containing the values of the category by which to apply the operator to filter the results. You can provide multiple values if the operator is EQ or CO. If you provide multiple values, you filter for results that equal/contain any of the values. For example, if the name, operator, and values fields are Modality, EQ, and [Speech, Text], the operation filters for results where the modality was either Speech or Text. /// This member is required. public var values: [Swift.String]? public init( - name: LexModelsV2ClientTypes.BotFilterName? = nil, - `operator`: LexModelsV2ClientTypes.BotFilterOperator? = nil, + name: LexModelsV2ClientTypes.AnalyticsCommonFilterName? = nil, + `operator`: LexModelsV2ClientTypes.AnalyticsFilterOperator? = nil, values: [Swift.String]? = nil ) { @@ -1869,15 +2248,15 @@ extension LexModelsV2ClientTypes { } extension LexModelsV2ClientTypes { - public enum BotFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case botname - case bottype + public enum AnalyticsSessionField: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case conversationendstate + case localeid case sdkUnknown(Swift.String) - public static var allCases: [BotFilterName] { + public static var allCases: [AnalyticsSessionField] { return [ - .botname, - .bottype, + .conversationendstate, + .localeid, .sdkUnknown("") ] } @@ -1887,31 +2266,196 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .botname: return "BotName" - case .bottype: return "BotType" + case .conversationendstate: return "ConversationEndState" + case .localeid: return "LocaleId" 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 = BotFilterName(rawValue: rawValue) ?? BotFilterName.sdkUnknown(rawValue) + self = AnalyticsSessionField(rawValue: rawValue) ?? AnalyticsSessionField.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.AnalyticsSessionFilter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case `operator` = "operator" + case values + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let `operator` = self.`operator` { + try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + } + if let values = values { + var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) + for analyticsfiltervalue0 in values { + try valuesContainer.encode(analyticsfiltervalue0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSessionFilterName.self, forKey: .name) + name = nameDecoded + let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsFilterOperator.self, forKey: .operator) + `operator` = operatorDecoded + let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) + var valuesDecoded0:[Swift.String]? = nil + if let valuesContainer = valuesContainer { + valuesDecoded0 = [Swift.String]() + for string0 in valuesContainer { + if let string0 = string0 { + valuesDecoded0?.append(string0) + } + } } + values = valuesDecoded0 } } extension LexModelsV2ClientTypes { - public enum BotFilterOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case contains - case equals - case notequals + /// Contains fields describing a condition by which to filter the sessions. The expression may be understood as name + /// operator + /// + /// values. For example: + /// + /// * LocaleId EQ en – The locale is "en". + /// + /// * Duration GT 200 – The duration is greater than 200 seconds. + /// + /// + /// The operators that each filter supports are listed below: + /// + /// * BotAlias – EQ. + /// + /// * BotVersion – EQ. + /// + /// * LocaleId – EQ. + /// + /// * Modality – EQ. + /// + /// * Channel – EQ. + /// + /// * Duration – EQ, GT, LT. + /// + /// * conversationEndState – EQ, CO. + /// + /// * SessionId – EQ. + /// + /// * OriginatingRequestId – EQ. + /// + /// * IntentPath – EQ. + public struct AnalyticsSessionFilter: Swift.Equatable { + /// The category by which to filter the sessions. The descriptions for each option are as follows: + /// + /// * BotAlias – The name of the bot alias. + /// + /// * BotVersion – The version of the bot. + /// + /// * LocaleId – The locale of the bot. + /// + /// * Modality – The modality of the session with the bot (audio, DTMF, or text). + /// + /// * Channel – The channel that the bot is integrated with. + /// + /// * Duration – The duration of the session. + /// + /// * conversationEndState – The final state of the session. + /// + /// * SessionId – The identifier of the session with the bot. + /// + /// * OriginatingRequestId – The identifier of the first request in a session. + /// + /// * IntentPath – The order of intents taken in a session. + /// This member is required. + public var name: LexModelsV2ClientTypes.AnalyticsSessionFilterName? + /// The operation by which to filter the category. The following operations are possible: + /// + /// * CO – Contains + /// + /// * EQ – Equals + /// + /// * GT – Greater than + /// + /// * LT – Less than + /// + /// + /// The operators that each filter supports are listed below: + /// + /// * BotAlias – EQ. + /// + /// * BotVersion – EQ. + /// + /// * LocaleId – EQ. + /// + /// * Modality – EQ. + /// + /// * Channel – EQ. + /// + /// * Duration – EQ, GT, LT. + /// + /// * conversationEndState – EQ, CO. + /// + /// * SessionId – EQ. + /// + /// * OriginatingRequestId – EQ. + /// + /// * IntentPath – EQ. + /// This member is required. + public var `operator`: LexModelsV2ClientTypes.AnalyticsFilterOperator? + /// An array containing the values of the category by which to apply the operator to filter the results. You can provide multiple values if the operator is EQ or CO. If you provide multiple values, you filter for results that equal/contain any of the values. For example, if the name, operator, and values fields are Modality, EQ, and [Speech, Text], the operation filters for results where the modality was either Speech or Text. + /// This member is required. + public var values: [Swift.String]? + + public init( + name: LexModelsV2ClientTypes.AnalyticsSessionFilterName? = nil, + `operator`: LexModelsV2ClientTypes.AnalyticsFilterOperator? = nil, + values: [Swift.String]? = nil + ) + { + self.name = name + self.`operator` = `operator` + self.values = values + } + } + +} + +extension LexModelsV2ClientTypes { + public enum AnalyticsSessionFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case botaliasid + case botversion + case channel + case conversationendstate + case duration + case intentpath + case localeid + case modality + case originatingrequestid + case sessionid case sdkUnknown(Swift.String) - public static var allCases: [BotFilterOperator] { + public static var allCases: [AnalyticsSessionFilterName] { return [ - .contains, - .equals, - .notequals, + .botaliasid, + .botversion, + .channel, + .conversationendstate, + .duration, + .intentpath, + .localeid, + .modality, + .originatingrequestid, + .sessionid, .sdkUnknown("") ] } @@ -1921,195 +2465,113 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .contains: return "CO" - case .equals: return "EQ" - case .notequals: return "NE" + case .botaliasid: return "BotAliasId" + case .botversion: return "BotVersion" + case .channel: return "Channel" + case .conversationendstate: return "ConversationEndState" + case .duration: return "Duration" + case .intentpath: return "IntentPath" + case .localeid: return "LocaleId" + case .modality: return "Modality" + case .originatingrequestid: return "OriginatingRequestId" + case .sessionid: return "SessionId" 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 = BotFilterOperator(rawValue: rawValue) ?? BotFilterOperator.sdkUnknown(rawValue) + self = AnalyticsSessionFilterName(rawValue: rawValue) ?? AnalyticsSessionFilterName.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.BotImportSpecification: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsSessionGroupByKey: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botName - case botTags - case dataPrivacy - case idleSessionTTLInSeconds - case roleArn - case testBotAliasTags + case name + case value } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botName = self.botName { - try encodeContainer.encode(botName, forKey: .botName) - } - if let botTags = botTags { - var botTagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .botTags) - for (dictKey0, tagMap0) in botTags { - try botTagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } - } - if let dataPrivacy = self.dataPrivacy { - try encodeContainer.encode(dataPrivacy, forKey: .dataPrivacy) - } - if let idleSessionTTLInSeconds = self.idleSessionTTLInSeconds { - try encodeContainer.encode(idleSessionTTLInSeconds, forKey: .idleSessionTTLInSeconds) - } - if let roleArn = self.roleArn { - try encodeContainer.encode(roleArn, forKey: .roleArn) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - if let testBotAliasTags = testBotAliasTags { - var testBotAliasTagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .testBotAliasTags) - for (dictKey0, tagMap0) in testBotAliasTags { - try testBotAliasTagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) - botName = botNameDecoded - let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) - roleArn = roleArnDecoded - let dataPrivacyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DataPrivacy.self, forKey: .dataPrivacy) - dataPrivacy = dataPrivacyDecoded - let idleSessionTTLInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .idleSessionTTLInSeconds) - idleSessionTTLInSeconds = idleSessionTTLInSecondsDecoded - let botTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .botTags) - var botTagsDecoded0: [Swift.String:Swift.String]? = nil - if let botTagsContainer = botTagsContainer { - botTagsDecoded0 = [Swift.String:Swift.String]() - for (key0, tagvalue0) in botTagsContainer { - if let tagvalue0 = tagvalue0 { - botTagsDecoded0?[key0] = tagvalue0 - } - } - } - botTags = botTagsDecoded0 - let testBotAliasTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .testBotAliasTags) - var testBotAliasTagsDecoded0: [Swift.String:Swift.String]? = nil - if let testBotAliasTagsContainer = testBotAliasTagsContainer { - testBotAliasTagsDecoded0 = [Swift.String:Swift.String]() - for (key0, tagvalue0) in testBotAliasTagsContainer { - if let tagvalue0 = tagvalue0 { - testBotAliasTagsDecoded0?[key0] = tagvalue0 - } - } - } - testBotAliasTags = testBotAliasTagsDecoded0 + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSessionField.self, forKey: .name) + name = nameDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .value) + value = valueDecoded } } extension LexModelsV2ClientTypes { - /// Provides the bot parameters required for importing a bot. - public struct BotImportSpecification: Swift.Equatable { - /// The name that Amazon Lex should use for the bot. - /// This member is required. - public var botName: Swift.String? - /// A list of tags to add to the bot. You can only add tags when you import a bot. You can't use the UpdateBot operation to update tags. To update tags, use the TagResource operation. - public var botTags: [Swift.String:Swift.String]? - /// By default, data stored by Amazon Lex is encrypted. The DataPrivacy structure provides settings that determine how Amazon Lex handles special cases of securing the data for your bot. - /// This member is required. - public var dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? - /// The time, in seconds, that Amazon Lex should keep information about a user's conversation with the bot. A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Lex deletes any data provided before the timeout. You can specify between 60 (1 minute) and 86,400 (24 hours) seconds. - public var idleSessionTTLInSeconds: Swift.Int? - /// The Amazon Resource Name (ARN) of the IAM role used to build and run the bot. - /// This member is required. - public var roleArn: Swift.String? - /// A list of tags to add to the test alias for a bot. You can only add tags when you import a bot. You can't use the UpdateAlias operation to update tags. To update tags on the test alias, use the TagResource operation. - public var testBotAliasTags: [Swift.String:Swift.String]? + /// Contains the category by which the session analytics were grouped and a member of that category. + public struct AnalyticsSessionGroupByKey: Swift.Equatable { + /// The category by which the session analytics were grouped. + public var name: LexModelsV2ClientTypes.AnalyticsSessionField? + /// A member of the category by which the session analytics were grouped. + public var value: Swift.String? public init( - botName: Swift.String? = nil, - botTags: [Swift.String:Swift.String]? = nil, - dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? = nil, - idleSessionTTLInSeconds: Swift.Int? = nil, - roleArn: Swift.String? = nil, - testBotAliasTags: [Swift.String:Swift.String]? = nil + name: LexModelsV2ClientTypes.AnalyticsSessionField? = nil, + value: Swift.String? = nil ) { - self.botName = botName - self.botTags = botTags - self.dataPrivacy = dataPrivacy - self.idleSessionTTLInSeconds = idleSessionTTLInSeconds - self.roleArn = roleArn - self.testBotAliasTags = testBotAliasTags + self.name = name + self.value = value } } } -extension LexModelsV2ClientTypes.BotLocaleExportSpecification: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsSessionGroupBySpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case localeId + case name } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botId = self.botId { - try encodeContainer.encode(botId, forKey: .botId) - } - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) - } - if let localeId = self.localeId { - try encodeContainer.encode(localeId, forKey: .localeId) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSessionField.self, forKey: .name) + name = nameDecoded } } extension LexModelsV2ClientTypes { - /// Provides the bot locale parameters required for exporting a bot locale. - public struct BotLocaleExportSpecification: Swift.Equatable { - /// The identifier of the bot to create the locale for. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot to export. - /// This member is required. - public var botVersion: Swift.String? - /// The identifier of the language and locale to export. The string must match one of the locales in the bot. + /// Contains the category by which to group the sessions. + public struct AnalyticsSessionGroupBySpecification: Swift.Equatable { + /// Specifies whether to group the session by their end state or their locale. /// This member is required. - public var localeId: Swift.String? + public var name: LexModelsV2ClientTypes.AnalyticsSessionField? public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - localeId: Swift.String? = nil + name: LexModelsV2ClientTypes.AnalyticsSessionField? = nil ) { - self.botId = botId - self.botVersion = botVersion - self.localeId = localeId + self.name = name } } } -extension LexModelsV2ClientTypes.BotLocaleFilter: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsSessionMetric: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case name - case `operator` = "operator" - case values + case order + case statistic } public func encode(to encoder: Swift.Encoder) throws { @@ -2117,103 +2579,91 @@ extension LexModelsV2ClientTypes.BotLocaleFilter: Swift.Codable { if let name = self.name { try encodeContainer.encode(name.rawValue, forKey: .name) } - if let `operator` = self.`operator` { - try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) } - if let values = values { - var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) - for filtervalue0 in values { - try valuesContainer.encode(filtervalue0) - } + if let statistic = self.statistic { + try encodeContainer.encode(statistic.rawValue, forKey: .statistic) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleFilterName.self, forKey: .name) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSessionMetricName.self, forKey: .name) name = nameDecoded - let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) - var valuesDecoded0:[Swift.String]? = nil - if let valuesContainer = valuesContainer { - valuesDecoded0 = [Swift.String]() - for string0 in valuesContainer { - if let string0 = string0 { - valuesDecoded0?.append(string0) - } - } - } - values = valuesDecoded0 - let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleFilterOperator.self, forKey: .operator) - `operator` = operatorDecoded + let statisticDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsMetricStatistic.self, forKey: .statistic) + statistic = statisticDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSortOrder.self, forKey: .order) + order = orderDecoded } } extension LexModelsV2ClientTypes { - /// Filters responses returned by the ListBotLocales operation. - public struct BotLocaleFilter: Swift.Equatable { - /// The name of the field to filter the list of bots. - /// This member is required. - public var name: LexModelsV2ClientTypes.BotLocaleFilterName? - /// The operator to use for the filter. Specify EQ when the ListBotLocales operation should return only aliases that equal the specified value. Specify CO when the ListBotLocales operation should return aliases that contain the specified value. + /// Contains the metric and the summary statistic you want to calculate, and the order in which to sort the results, for the user sessions with the bot. + public struct AnalyticsSessionMetric: Swift.Equatable { + /// The metric for which you want to get session summary statistics. + /// + /// * Count – The number of sessions. + /// + /// * Success – The number of sessions that succeeded. + /// + /// * Failure – The number of sessions that failed. + /// + /// * Dropped – The number of sessions that the user dropped. + /// + /// * Duration – The duration of sessions. + /// + /// * TurnsPerSession – The number of turns in the sessions. + /// + /// * Concurrency – The number of sessions occurring in the same period of time. /// This member is required. - public var `operator`: LexModelsV2ClientTypes.BotLocaleFilterOperator? - /// The value to use for filtering the list of bots. + public var name: LexModelsV2ClientTypes.AnalyticsSessionMetricName? + /// Specifies whether to sort the results in ascending or descending order. + public var order: LexModelsV2ClientTypes.AnalyticsSortOrder? + /// The summary statistic to calculate. + /// + /// * Sum – The total count for the category you provide in name. + /// + /// * Average – The total count divided by the number of sessions in the category you provide in name. + /// + /// * Max – The highest count in the category you provide in name. /// This member is required. - public var values: [Swift.String]? + public var statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? public init( - name: LexModelsV2ClientTypes.BotLocaleFilterName? = nil, - `operator`: LexModelsV2ClientTypes.BotLocaleFilterOperator? = nil, - values: [Swift.String]? = nil + name: LexModelsV2ClientTypes.AnalyticsSessionMetricName? = nil, + order: LexModelsV2ClientTypes.AnalyticsSortOrder? = nil, + statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? = nil ) { self.name = name - self.`operator` = `operator` - self.values = values + self.order = order + self.statistic = statistic } } } extension LexModelsV2ClientTypes { - public enum BotLocaleFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case botlocalename - case sdkUnknown(Swift.String) - - public static var allCases: [BotLocaleFilterName] { - return [ - .botlocalename, - .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 .botlocalename: return "BotLocaleName" - 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 = BotLocaleFilterName(rawValue: rawValue) ?? BotLocaleFilterName.sdkUnknown(rawValue) - } - } -} - -extension LexModelsV2ClientTypes { - public enum BotLocaleFilterOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case contains - case equals + public enum AnalyticsSessionMetricName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case concurrency + case count + case dropped + case duration + case failure + case success + case turnsperconversation case sdkUnknown(Swift.String) - public static var allCases: [BotLocaleFilterOperator] { + public static var allCases: [AnalyticsSessionMetricName] { return [ - .contains, - .equals, + .concurrency, + .count, + .dropped, + .duration, + .failure, + .success, + .turnsperconversation, .sdkUnknown("") ] } @@ -2223,160 +2673,202 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .contains: return "CO" - case .equals: return "EQ" + case .concurrency: return "Concurrency" + case .count: return "Count" + case .dropped: return "Dropped" + case .duration: return "Duration" + case .failure: return "Failure" + case .success: return "Success" + case .turnsperconversation: return "TurnsPerConversation" 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 = BotLocaleFilterOperator(rawValue: rawValue) ?? BotLocaleFilterOperator.sdkUnknown(rawValue) + self = AnalyticsSessionMetricName(rawValue: rawValue) ?? AnalyticsSessionMetricName.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.BotLocaleHistoryEvent: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsSessionMetricResult: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case event - case eventDate + case name + case statistic + case value } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let event = self.event { - try encodeContainer.encode(event, forKey: .event) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - if let eventDate = self.eventDate { - try encodeContainer.encodeTimestamp(eventDate, format: .epochSeconds, forKey: .eventDate) + if let statistic = self.statistic { + try encodeContainer.encode(statistic.rawValue, forKey: .statistic) + } + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let eventDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .event) - event = eventDecoded - let eventDateDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .eventDate) - eventDate = eventDateDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSessionMetricName.self, forKey: .name) + name = nameDecoded + let statisticDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsMetricStatistic.self, forKey: .statistic) + statistic = statisticDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .value) + value = valueDecoded } } extension LexModelsV2ClientTypes { - /// Provides information about an event that occurred affecting the bot locale. - public struct BotLocaleHistoryEvent: Swift.Equatable { - /// A description of the event that occurred. - /// This member is required. - public var event: Swift.String? - /// A timestamp of the date and time that the event occurred. - /// This member is required. - public var eventDate: ClientRuntime.Date? + /// An object containing the results for a session metric you requested. + public struct AnalyticsSessionMetricResult: Swift.Equatable { + /// The metric that you requested. + /// + /// * Count – The number of sessions. + /// + /// * Success – The number of sessions that succeeded. + /// + /// * Failure – The number of sessions that failed. + /// + /// * Dropped – The number of sessions that the user dropped. + /// + /// * Duration – The duration of sessions. + /// + /// * TurnPersession – The number of turns in the sessions. + /// + /// * Concurrency – The number of sessions occurring in the same period of time. + public var name: LexModelsV2ClientTypes.AnalyticsSessionMetricName? + /// The summary statistic that you requested to calculate. + /// + /// * Sum – The total count for the category you provide in name. + /// + /// * Average – The total count divided by the number of sessions in the category you provide in name. + /// + /// * Max – The highest count in the category you provide in name. + public var statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? + /// The value of the summary statistic for the metric that you requested. + public var value: Swift.Double? public init( - event: Swift.String? = nil, - eventDate: ClientRuntime.Date? = nil + name: LexModelsV2ClientTypes.AnalyticsSessionMetricName? = nil, + statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? = nil, + value: Swift.Double? = nil ) { - self.event = event - self.eventDate = eventDate + self.name = name + self.statistic = statistic + self.value = value } } } -extension LexModelsV2ClientTypes.BotLocaleImportSpecification: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsSessionResult: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case localeId - case nluIntentConfidenceThreshold - case voiceSettings + case binKeys + case groupByKeys + case metricsResults } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botId = self.botId { - try encodeContainer.encode(botId, forKey: .botId) - } - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) - } - if let localeId = self.localeId { - try encodeContainer.encode(localeId, forKey: .localeId) + if let binKeys = binKeys { + var binKeysContainer = encodeContainer.nestedUnkeyedContainer(forKey: .binKeys) + for analyticsbinkey0 in binKeys { + try binKeysContainer.encode(analyticsbinkey0) + } } - if let nluIntentConfidenceThreshold = self.nluIntentConfidenceThreshold { - try encodeContainer.encode(nluIntentConfidenceThreshold, forKey: .nluIntentConfidenceThreshold) + if let groupByKeys = groupByKeys { + var groupByKeysContainer = encodeContainer.nestedUnkeyedContainer(forKey: .groupByKeys) + for analyticssessiongroupbykey0 in groupByKeys { + try groupByKeysContainer.encode(analyticssessiongroupbykey0) + } } - if let voiceSettings = self.voiceSettings { - try encodeContainer.encode(voiceSettings, forKey: .voiceSettings) + if let metricsResults = metricsResults { + var metricsResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .metricsResults) + for analyticssessionmetricresult0 in metricsResults { + try metricsResultsContainer.encode(analyticssessionmetricresult0) + } } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let nluIntentConfidenceThresholdDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .nluIntentConfidenceThreshold) - nluIntentConfidenceThreshold = nluIntentConfidenceThresholdDecoded - let voiceSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.VoiceSettings.self, forKey: .voiceSettings) - voiceSettings = voiceSettingsDecoded + let binKeysContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsBinKey?].self, forKey: .binKeys) + var binKeysDecoded0:[LexModelsV2ClientTypes.AnalyticsBinKey]? = nil + if let binKeysContainer = binKeysContainer { + binKeysDecoded0 = [LexModelsV2ClientTypes.AnalyticsBinKey]() + for structure0 in binKeysContainer { + if let structure0 = structure0 { + binKeysDecoded0?.append(structure0) + } + } + } + binKeys = binKeysDecoded0 + let groupByKeysContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsSessionGroupByKey?].self, forKey: .groupByKeys) + var groupByKeysDecoded0:[LexModelsV2ClientTypes.AnalyticsSessionGroupByKey]? = nil + if let groupByKeysContainer = groupByKeysContainer { + groupByKeysDecoded0 = [LexModelsV2ClientTypes.AnalyticsSessionGroupByKey]() + for structure0 in groupByKeysContainer { + if let structure0 = structure0 { + groupByKeysDecoded0?.append(structure0) + } + } + } + groupByKeys = groupByKeysDecoded0 + let metricsResultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsSessionMetricResult?].self, forKey: .metricsResults) + var metricsResultsDecoded0:[LexModelsV2ClientTypes.AnalyticsSessionMetricResult]? = nil + if let metricsResultsContainer = metricsResultsContainer { + metricsResultsDecoded0 = [LexModelsV2ClientTypes.AnalyticsSessionMetricResult]() + for structure0 in metricsResultsContainer { + if let structure0 = structure0 { + metricsResultsDecoded0?.append(structure0) + } + } + } + metricsResults = metricsResultsDecoded0 } } extension LexModelsV2ClientTypes { - /// Provides the bot locale parameters required for importing a bot locale. - public struct BotLocaleImportSpecification: Swift.Equatable { - /// The identifier of the bot to import the locale to. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot to import the locale to. This can only be the DRAFT version of the bot. - /// This member is required. - public var botVersion: Swift.String? - /// The identifier of the language and locale that the bot will be used in. The string must match one of the supported locales. All of the intents, slot types, and slots used in the bot must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? - /// Determines the threshold where Amazon Lex will insert the AMAZON.FallbackIntent, AMAZON.KendraSearchIntent, or both when returning alternative intents. AMAZON.FallbackIntent and AMAZON.KendraSearchIntent are only inserted if they are configured for the bot. For example, suppose a bot is configured with the confidence threshold of 0.80 and the AMAZON.FallbackIntent. Amazon Lex returns three alternative intents with the following confidence scores: IntentA (0.70), IntentB (0.60), IntentC (0.50). The response from the PostText operation would be: - /// - /// * AMAZON.FallbackIntent - /// - /// * IntentA - /// - /// * IntentB - /// - /// * IntentC - public var nluIntentConfidenceThreshold: Swift.Double? - /// Defines settings for using an Amazon Polly voice to communicate with a user. - public var voiceSettings: LexModelsV2ClientTypes.VoiceSettings? + /// An object containing the results for the session metrics you requested and the bin and/or group(s) they refer to, if applicable. + public struct AnalyticsSessionResult: Swift.Equatable { + /// A list of objects containing the criteria you requested for binning results and the values of the bins. + public var binKeys: [LexModelsV2ClientTypes.AnalyticsBinKey]? + /// A list of objects containing the criteria you requested for grouping results and the values of the bins. + public var groupByKeys: [LexModelsV2ClientTypes.AnalyticsSessionGroupByKey]? + /// A list of objects, each of which contains a metric you want to list, the statistic for the metric you want to return, and the method by which to organize the results. + public var metricsResults: [LexModelsV2ClientTypes.AnalyticsSessionMetricResult]? public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - localeId: Swift.String? = nil, - nluIntentConfidenceThreshold: Swift.Double? = nil, - voiceSettings: LexModelsV2ClientTypes.VoiceSettings? = nil + binKeys: [LexModelsV2ClientTypes.AnalyticsBinKey]? = nil, + groupByKeys: [LexModelsV2ClientTypes.AnalyticsSessionGroupByKey]? = nil, + metricsResults: [LexModelsV2ClientTypes.AnalyticsSessionMetricResult]? = nil ) { - self.botId = botId - self.botVersion = botVersion - self.localeId = localeId - self.nluIntentConfidenceThreshold = nluIntentConfidenceThreshold - self.voiceSettings = voiceSettings + self.binKeys = binKeys + self.groupByKeys = groupByKeys + self.metricsResults = metricsResults } } } extension LexModelsV2ClientTypes { - public enum BotLocaleSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case botlocalename + public enum AnalyticsSessionSortByName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case conversationstarttime + case duration + case numberofturns case sdkUnknown(Swift.String) - public static var allCases: [BotLocaleSortAttribute] { + public static var allCases: [AnalyticsSessionSortByName] { return [ - .botlocalename, + .conversationstarttime, + .duration, + .numberofturns, .sdkUnknown("") ] } @@ -2386,89 +2878,96 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .botlocalename: return "BotLocaleName" + case .conversationstarttime: return "ConversationStartTime" + case .duration: return "Duration" + case .numberofturns: return "NumberOfTurns" 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 = BotLocaleSortAttribute(rawValue: rawValue) ?? BotLocaleSortAttribute.sdkUnknown(rawValue) + self = AnalyticsSessionSortByName(rawValue: rawValue) ?? AnalyticsSessionSortByName.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.BotLocaleSortBy: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case attribute - case order +extension LexModelsV2ClientTypes { + public enum AnalyticsSortOrder: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case ascending + case descending + case sdkUnknown(Swift.String) + + public static var allCases: [AnalyticsSortOrder] { + return [ + .ascending, + .descending, + .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 .ascending: return "Ascending" + case .descending: return "Descending" + 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 = AnalyticsSortOrder(rawValue: rawValue) ?? AnalyticsSortOrder.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.AnalyticsUtteranceAttribute: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let attribute = self.attribute { - try encodeContainer.encode(attribute.rawValue, forKey: .attribute) - } - if let order = self.order { - try encodeContainer.encode(order.rawValue, forKey: .order) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleSortAttribute.self, forKey: .attribute) - attribute = attributeDecoded - let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) - order = orderDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsUtteranceAttributeName.self, forKey: .name) + name = nameDecoded } } extension LexModelsV2ClientTypes { - /// Specifies attributes for sorting a list of bot locales. - public struct BotLocaleSortBy: Swift.Equatable { - /// The bot locale attribute to sort by. + /// An object that specifies the last used intent at the time of the utterance as an attribute to return. + public struct AnalyticsUtteranceAttribute: Swift.Equatable { + /// An attribute to return. The only available attribute is the intent that the bot mapped the utterance to. /// This member is required. - public var attribute: LexModelsV2ClientTypes.BotLocaleSortAttribute? - /// Specifies whether to sort the bot locales in ascending or descending order. - /// This member is required. - public var order: LexModelsV2ClientTypes.SortOrder? + public var name: LexModelsV2ClientTypes.AnalyticsUtteranceAttributeName? public init( - attribute: LexModelsV2ClientTypes.BotLocaleSortAttribute? = nil, - order: LexModelsV2ClientTypes.SortOrder? = nil + name: LexModelsV2ClientTypes.AnalyticsUtteranceAttributeName? = nil ) { - self.attribute = attribute - self.order = order + self.name = name } } } extension LexModelsV2ClientTypes { - public enum BotLocaleStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case building - case built - case creating - case deleting - case failed - case importing - case notbuilt - case processing - case readyexpresstesting + public enum AnalyticsUtteranceAttributeName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case lastusedintent case sdkUnknown(Swift.String) - public static var allCases: [BotLocaleStatus] { + public static var allCases: [AnalyticsUtteranceAttributeName] { return [ - .building, - .built, - .creating, - .deleting, - .failed, - .importing, - .notbuilt, - .processing, - .readyexpresstesting, + .lastusedintent, .sdkUnknown("") ] } @@ -2478,315 +2977,254 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .building: return "Building" - case .built: return "Built" - case .creating: return "Creating" - case .deleting: return "Deleting" - case .failed: return "Failed" - case .importing: return "Importing" - case .notbuilt: return "NotBuilt" - case .processing: return "Processing" - case .readyexpresstesting: return "ReadyExpressTesting" + case .lastusedintent: return "LastUsedIntent" 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 = BotLocaleStatus(rawValue: rawValue) ?? BotLocaleStatus.sdkUnknown(rawValue) + self = AnalyticsUtteranceAttributeName(rawValue: rawValue) ?? AnalyticsUtteranceAttributeName.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.BotLocaleSummary: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsUtteranceAttributeResult: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botLocaleStatus - case description - case lastBuildSubmittedDateTime - case lastUpdatedDateTime - case localeId - case localeName + case lastUsedIntent } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botLocaleStatus = self.botLocaleStatus { - try encodeContainer.encode(botLocaleStatus.rawValue, forKey: .botLocaleStatus) - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let lastBuildSubmittedDateTime = self.lastBuildSubmittedDateTime { - try encodeContainer.encodeTimestamp(lastBuildSubmittedDateTime, format: .epochSeconds, forKey: .lastBuildSubmittedDateTime) - } - if let lastUpdatedDateTime = self.lastUpdatedDateTime { - try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) - } - if let localeId = self.localeId { - try encodeContainer.encode(localeId, forKey: .localeId) - } - if let localeName = self.localeName { - try encodeContainer.encode(localeName, forKey: .localeName) + if let lastUsedIntent = self.lastUsedIntent { + try encodeContainer.encode(lastUsedIntent, forKey: .lastUsedIntent) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let localeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeName) - localeName = localeNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let botLocaleStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleStatus.self, forKey: .botLocaleStatus) - botLocaleStatus = botLocaleStatusDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded - let lastBuildSubmittedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastBuildSubmittedDateTime) - lastBuildSubmittedDateTime = lastBuildSubmittedDateTimeDecoded + let lastUsedIntentDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastUsedIntent) + lastUsedIntent = lastUsedIntentDecoded } } extension LexModelsV2ClientTypes { - /// Summary information about bot locales returned by the [ListBotLocales](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBotLocales.html) operation. - public struct BotLocaleSummary: Swift.Equatable { - /// The current status of the bot locale. When the status is Built the locale is ready for use. - public var botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? - /// The description of the bot locale. - public var description: Swift.String? - /// A timestamp of the date and time that the bot locale was last built. - public var lastBuildSubmittedDateTime: ClientRuntime.Date? - /// A timestamp of the date and time that the bot locale was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The language and locale of the bot locale. - public var localeId: Swift.String? - /// The name of the bot locale. - public var localeName: Swift.String? + /// An object containing the intent that the bot mapped the utterance to. + public struct AnalyticsUtteranceAttributeResult: Swift.Equatable { + /// The intent that the bot mapped the utterance to. + public var lastUsedIntent: Swift.String? public init( - botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? = nil, - description: Swift.String? = nil, - lastBuildSubmittedDateTime: ClientRuntime.Date? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - localeId: Swift.String? = nil, - localeName: Swift.String? = nil + lastUsedIntent: Swift.String? = nil ) { - self.botLocaleStatus = botLocaleStatus - self.description = description - self.lastBuildSubmittedDateTime = lastBuildSubmittedDateTime - self.lastUpdatedDateTime = lastUpdatedDateTime - self.localeId = localeId - self.localeName = localeName + self.lastUsedIntent = lastUsedIntent } } } -extension LexModelsV2ClientTypes.BotMember: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botMemberAliasId - case botMemberAliasName - case botMemberId - case botMemberName - case botMemberVersion - } +extension LexModelsV2ClientTypes { + public enum AnalyticsUtteranceField: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case utterancestate + case utterancetext + case sdkUnknown(Swift.String) - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botMemberAliasId = self.botMemberAliasId { - try encodeContainer.encode(botMemberAliasId, forKey: .botMemberAliasId) - } - if let botMemberAliasName = self.botMemberAliasName { - try encodeContainer.encode(botMemberAliasName, forKey: .botMemberAliasName) - } - if let botMemberId = self.botMemberId { - try encodeContainer.encode(botMemberId, forKey: .botMemberId) + public static var allCases: [AnalyticsUtteranceField] { + return [ + .utterancestate, + .utterancetext, + .sdkUnknown("") + ] } - if let botMemberName = self.botMemberName { - try encodeContainer.encode(botMemberName, forKey: .botMemberName) + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) } - if let botMemberVersion = self.botMemberVersion { - try encodeContainer.encode(botMemberVersion, forKey: .botMemberVersion) + public var rawValue: Swift.String { + switch self { + case .utterancestate: return "UtteranceState" + case .utterancetext: return "UtteranceText" + case let .sdkUnknown(s): return s + } } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botMemberIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botMemberId) - botMemberId = botMemberIdDecoded - let botMemberNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botMemberName) - botMemberName = botMemberNameDecoded - let botMemberAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botMemberAliasId) - botMemberAliasId = botMemberAliasIdDecoded - let botMemberAliasNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botMemberAliasName) - botMemberAliasName = botMemberAliasNameDecoded - let botMemberVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botMemberVersion) - botMemberVersion = botMemberVersionDecoded - } -} - -extension LexModelsV2ClientTypes { - /// A bot that is a member of a network of bots. - public struct BotMember: Swift.Equatable { - /// The alias ID of a bot that is a member of this network of bots. - /// This member is required. - public var botMemberAliasId: Swift.String? - /// The alias name of a bot that is a member of this network of bots. - /// This member is required. - public var botMemberAliasName: Swift.String? - /// The unique ID of a bot that is a member of this network of bots. - /// This member is required. - public var botMemberId: Swift.String? - /// The unique name of a bot that is a member of this network of bots. - /// This member is required. - public var botMemberName: Swift.String? - /// The version of a bot that is a member of this network of bots. - /// This member is required. - public var botMemberVersion: Swift.String? - - public init( - botMemberAliasId: Swift.String? = nil, - botMemberAliasName: Swift.String? = nil, - botMemberId: Swift.String? = nil, - botMemberName: Swift.String? = nil, - botMemberVersion: Swift.String? = nil - ) - { - self.botMemberAliasId = botMemberAliasId - self.botMemberAliasName = botMemberAliasName - self.botMemberId = botMemberId - self.botMemberName = botMemberName - self.botMemberVersion = botMemberVersion + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = AnalyticsUtteranceField(rawValue: rawValue) ?? AnalyticsUtteranceField.sdkUnknown(rawValue) } } - } -extension LexModelsV2ClientTypes.BotRecommendationResultStatistics: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsUtteranceFilter: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case intents - case slotTypes + case name + case `operator` = "operator" + case values } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let intents = self.intents { - try encodeContainer.encode(intents, forKey: .intents) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - if let slotTypes = self.slotTypes { - try encodeContainer.encode(slotTypes, forKey: .slotTypes) + if let `operator` = self.`operator` { + try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + } + if let values = values { + var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) + for analyticsfiltervalue0 in values { + try valuesContainer.encode(analyticsfiltervalue0) + } } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let intentsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentStatistics.self, forKey: .intents) - intents = intentsDecoded - let slotTypesDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotTypeStatistics.self, forKey: .slotTypes) - slotTypes = slotTypesDecoded - } -} - -extension LexModelsV2ClientTypes { - /// A statistical summary of the bot recommendation results. - public struct BotRecommendationResultStatistics: Swift.Equatable { - /// Statistical information about about the intents associated with the bot recommendation results. - public var intents: LexModelsV2ClientTypes.IntentStatistics? - /// Statistical information about the slot types associated with the bot recommendation results. - public var slotTypes: LexModelsV2ClientTypes.SlotTypeStatistics? - - public init( - intents: LexModelsV2ClientTypes.IntentStatistics? = nil, - slotTypes: LexModelsV2ClientTypes.SlotTypeStatistics? = nil - ) - { - self.intents = intents - self.slotTypes = slotTypes - } - } - -} - -extension LexModelsV2ClientTypes.BotRecommendationResults: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case associatedTranscriptsUrl - case botLocaleExportUrl - case statistics - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let associatedTranscriptsUrl = self.associatedTranscriptsUrl { - try encodeContainer.encode(associatedTranscriptsUrl, forKey: .associatedTranscriptsUrl) - } - if let botLocaleExportUrl = self.botLocaleExportUrl { - try encodeContainer.encode(botLocaleExportUrl, forKey: .botLocaleExportUrl) - } - if let statistics = self.statistics { - try encodeContainer.encode(statistics, forKey: .statistics) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsUtteranceFilterName.self, forKey: .name) + name = nameDecoded + let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsFilterOperator.self, forKey: .operator) + `operator` = operatorDecoded + let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) + var valuesDecoded0:[Swift.String]? = nil + if let valuesContainer = valuesContainer { + valuesDecoded0 = [Swift.String]() + for string0 in valuesContainer { + if let string0 = string0 { + valuesDecoded0?.append(string0) + } + } } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botLocaleExportUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botLocaleExportUrl) - botLocaleExportUrl = botLocaleExportUrlDecoded - let associatedTranscriptsUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .associatedTranscriptsUrl) - associatedTranscriptsUrl = associatedTranscriptsUrlDecoded - let statisticsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotRecommendationResultStatistics.self, forKey: .statistics) - statistics = statisticsDecoded + values = valuesDecoded0 } } extension LexModelsV2ClientTypes { - /// The object representing the URL of the bot definition, the URL of the associated transcript, and a statistical summary of the bot recommendation results. - public struct BotRecommendationResults: Swift.Equatable { - /// The presigned url link of the associated transcript. - public var associatedTranscriptsUrl: Swift.String? - /// The presigned URL link of the recommended bot definition. - public var botLocaleExportUrl: Swift.String? - /// The statistical summary of the bot recommendation results. - public var statistics: LexModelsV2ClientTypes.BotRecommendationResultStatistics? + /// Contains fields describing a condition by which to filter the utterances. The expression may be understood as name + /// operator + /// + /// values. For example: + /// + /// * LocaleId EQ Book – The locale is the string "en". + /// + /// * UtteranceText CO help – The text of the utterance contains the string "help". + /// + /// + /// The operators that each filter supports are listed below: + /// + /// * BotAlias – EQ. + /// + /// * BotVersion – EQ. + /// + /// * LocaleId – EQ. + /// + /// * Modality – EQ. + /// + /// * Channel – EQ. + /// + /// * SessionId – EQ. + /// + /// * OriginatingRequestId – EQ. + /// + /// * UtteranceState – EQ. + /// + /// * UtteranceText – EQ, CO. + public struct AnalyticsUtteranceFilter: Swift.Equatable { + /// The category by which to filter the utterances. The descriptions for each option are as follows: + /// + /// * BotAlias – The name of the bot alias. + /// + /// * BotVersion – The version of the bot. + /// + /// * LocaleId – The locale of the bot. + /// + /// * Modality – The modality of the session with the bot (audio, DTMF, or text). + /// + /// * Channel – The channel that the bot is integrated with. + /// + /// * SessionId – The identifier of the session with the bot. + /// + /// * OriginatingRequestId – The identifier of the first request in a session. + /// + /// * UtteranceState – The state of the utterance. + /// + /// * UtteranceText – The text in the utterance. + /// This member is required. + public var name: LexModelsV2ClientTypes.AnalyticsUtteranceFilterName? + /// The operation by which to filter the category. The following operations are possible: + /// + /// * CO – Contains + /// + /// * EQ – Equals + /// + /// * GT – Greater than + /// + /// * LT – Less than + /// + /// + /// The operators that each filter supports are listed below: + /// + /// * BotAlias – EQ. + /// + /// * BotVersion – EQ. + /// + /// * LocaleId – EQ. + /// + /// * Modality – EQ. + /// + /// * Channel – EQ. + /// + /// * SessionId – EQ. + /// + /// * OriginatingRequestId – EQ. + /// + /// * UtteranceState – EQ. + /// + /// * UtteranceText – EQ, CO. + /// This member is required. + public var `operator`: LexModelsV2ClientTypes.AnalyticsFilterOperator? + /// An array containing the values of the category by which to apply the operator to filter the results. You can provide multiple values if the operator is EQ or CO. If you provide multiple values, you filter for results that equal/contain any of the values. For example, if the name, operator, and values fields are Modality, EQ, and [Speech, Text], the operation filters for results where the modality was either Speech or Text. + /// This member is required. + public var values: [Swift.String]? public init( - associatedTranscriptsUrl: Swift.String? = nil, - botLocaleExportUrl: Swift.String? = nil, - statistics: LexModelsV2ClientTypes.BotRecommendationResultStatistics? = nil + name: LexModelsV2ClientTypes.AnalyticsUtteranceFilterName? = nil, + `operator`: LexModelsV2ClientTypes.AnalyticsFilterOperator? = nil, + values: [Swift.String]? = nil ) { - self.associatedTranscriptsUrl = associatedTranscriptsUrl - self.botLocaleExportUrl = botLocaleExportUrl - self.statistics = statistics + self.name = name + self.`operator` = `operator` + self.values = values } } } extension LexModelsV2ClientTypes { - public enum BotRecommendationStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case available - case deleted - case deleting - case downloading - case failed - case processing - case stopped - case stopping - case updating + public enum AnalyticsUtteranceFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case botaliasid + case botversion + case channel + case localeid + case modality + case originatingrequestid + case sessionid + case utterancestate + case utterancetext case sdkUnknown(Swift.String) - public static var allCases: [BotRecommendationStatus] { + public static var allCases: [AnalyticsUtteranceFilterName] { return [ - .available, - .deleted, - .deleting, - .downloading, - .failed, - .processing, - .stopped, - .stopping, - .updating, + .botaliasid, + .botversion, + .channel, + .localeid, + .modality, + .originatingrequestid, + .sessionid, + .utterancestate, + .utterancetext, .sdkUnknown("") ] } @@ -2796,191 +3234,192 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .available: return "Available" - case .deleted: return "Deleted" - case .deleting: return "Deleting" - case .downloading: return "Downloading" - case .failed: return "Failed" - case .processing: return "Processing" - case .stopped: return "Stopped" - case .stopping: return "Stopping" - case .updating: return "Updating" + case .botaliasid: return "BotAliasId" + case .botversion: return "BotVersion" + case .channel: return "Channel" + case .localeid: return "LocaleId" + case .modality: return "Modality" + case .originatingrequestid: return "OriginatingRequestId" + case .sessionid: return "SessionId" + case .utterancestate: return "UtteranceState" + case .utterancetext: return "UtteranceText" 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 = BotRecommendationStatus(rawValue: rawValue) ?? BotRecommendationStatus.sdkUnknown(rawValue) + self = AnalyticsUtteranceFilterName(rawValue: rawValue) ?? AnalyticsUtteranceFilterName.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.BotRecommendationSummary: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsUtteranceGroupByKey: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botRecommendationId - case botRecommendationStatus - case creationDateTime - case lastUpdatedDateTime + case name + case value } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botRecommendationId = self.botRecommendationId { - try encodeContainer.encode(botRecommendationId, forKey: .botRecommendationId) - } - if let botRecommendationStatus = self.botRecommendationStatus { - try encodeContainer.encode(botRecommendationStatus.rawValue, forKey: .botRecommendationStatus) - } - if let creationDateTime = self.creationDateTime { - try encodeContainer.encodeTimestamp(creationDateTime, format: .epochSeconds, forKey: .creationDateTime) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - if let lastUpdatedDateTime = self.lastUpdatedDateTime { - try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botRecommendationStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotRecommendationStatus.self, forKey: .botRecommendationStatus) - botRecommendationStatus = botRecommendationStatusDecoded - let botRecommendationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botRecommendationId) - botRecommendationId = botRecommendationIdDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsUtteranceField.self, forKey: .name) + name = nameDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .value) + value = valueDecoded } } extension LexModelsV2ClientTypes { - /// A summary of the bot recommendation. - public struct BotRecommendationSummary: Swift.Equatable { - /// The unique identifier of the bot recommendation to be updated. - /// This member is required. - public var botRecommendationId: Swift.String? - /// The status of the bot recommendation. If the status is Failed, then the reasons for the failure are listed in the failureReasons field. - /// This member is required. - public var botRecommendationStatus: LexModelsV2ClientTypes.BotRecommendationStatus? - /// A timestamp of the date and time that the bot recommendation was created. - public var creationDateTime: ClientRuntime.Date? - /// A timestamp of the date and time that the bot recommendation was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? + /// Contains the category by which the utterance analytics were grouped and the values for that category. + public struct AnalyticsUtteranceGroupByKey: Swift.Equatable { + /// The category by which the utterance analytics were grouped. + public var name: LexModelsV2ClientTypes.AnalyticsUtteranceField? + /// A member of the category by which the utterance analytics were grouped. + public var value: Swift.String? public init( - botRecommendationId: Swift.String? = nil, - botRecommendationStatus: LexModelsV2ClientTypes.BotRecommendationStatus? = nil, - creationDateTime: ClientRuntime.Date? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil + name: LexModelsV2ClientTypes.AnalyticsUtteranceField? = nil, + value: Swift.String? = nil ) { - self.botRecommendationId = botRecommendationId - self.botRecommendationStatus = botRecommendationStatus - self.creationDateTime = creationDateTime - self.lastUpdatedDateTime = lastUpdatedDateTime + self.name = name + self.value = value } } } -extension LexModelsV2ClientTypes { - public enum BotSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case botname - case sdkUnknown(Swift.String) - - public static var allCases: [BotSortAttribute] { - return [ - .botname, - .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 .botname: return "BotName" - 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 = BotSortAttribute(rawValue: rawValue) ?? BotSortAttribute.sdkUnknown(rawValue) - } - } -} - -extension LexModelsV2ClientTypes.BotSortBy: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsUtteranceGroupBySpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case attribute - case order + case name } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let attribute = self.attribute { - try encodeContainer.encode(attribute.rawValue, forKey: .attribute) - } - if let order = self.order { - try encodeContainer.encode(order.rawValue, forKey: .order) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotSortAttribute.self, forKey: .attribute) - attribute = attributeDecoded - let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsUtteranceField.self, forKey: .name) + name = nameDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Contains the category by which to group the utterances. + public struct AnalyticsUtteranceGroupBySpecification: Swift.Equatable { + /// Specifies whether to group the utterances by their text or their state. + /// This member is required. + public var name: LexModelsV2ClientTypes.AnalyticsUtteranceField? + + public init( + name: LexModelsV2ClientTypes.AnalyticsUtteranceField? = nil + ) + { + self.name = name + } + } + +} + +extension LexModelsV2ClientTypes.AnalyticsUtteranceMetric: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case order + case statistic + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) + } + if let statistic = self.statistic { + try encodeContainer.encode(statistic.rawValue, forKey: .statistic) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsUtteranceMetricName.self, forKey: .name) + name = nameDecoded + let statisticDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsMetricStatistic.self, forKey: .statistic) + statistic = statisticDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSortOrder.self, forKey: .order) order = orderDecoded } } extension LexModelsV2ClientTypes { - /// Specifies attributes for sorting a list of bots. - public struct BotSortBy: Swift.Equatable { - /// The attribute to use to sort the list of bots. + /// Contains the metric and the summary statistic you want to calculate, and the order in which to sort the results, for the utterances across the user sessions with the bot. + public struct AnalyticsUtteranceMetric: Swift.Equatable { + /// The metric for which you want to get utterance summary statistics. + /// + /// * Count – The number of utterances. + /// + /// * Missed – The number of utterances that Amazon Lex failed to recognize. + /// + /// * Detected – The number of utterances that Amazon Lex managed to detect. + /// + /// * UtteranceTimestamp – The date and time of the utterance. /// This member is required. - public var attribute: LexModelsV2ClientTypes.BotSortAttribute? - /// The order to sort the list. You can choose ascending or descending. + public var name: LexModelsV2ClientTypes.AnalyticsUtteranceMetricName? + /// Specifies whether to sort the results in ascending or descending order. + public var order: LexModelsV2ClientTypes.AnalyticsSortOrder? + /// The summary statistic to calculate. + /// + /// * Sum – The total count for the category you provide in name. + /// + /// * Average – The total count divided by the number of utterances in the category you provide in name. + /// + /// * Max – The highest count in the category you provide in name. /// This member is required. - public var order: LexModelsV2ClientTypes.SortOrder? + public var statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? public init( - attribute: LexModelsV2ClientTypes.BotSortAttribute? = nil, - order: LexModelsV2ClientTypes.SortOrder? = nil + name: LexModelsV2ClientTypes.AnalyticsUtteranceMetricName? = nil, + order: LexModelsV2ClientTypes.AnalyticsSortOrder? = nil, + statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? = nil ) { - self.attribute = attribute + self.name = name self.order = order + self.statistic = statistic } } } extension LexModelsV2ClientTypes { - public enum BotStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case available - case creating - case deleting - case failed - case importing - case inactive - case updating - case versioning + public enum AnalyticsUtteranceMetricName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case count + case detected + case missed + case utterancetimestamp case sdkUnknown(Swift.String) - public static var allCases: [BotStatus] { + public static var allCases: [AnalyticsUtteranceMetricName] { return [ - .available, - .creating, - .deleting, - .failed, - .importing, - .inactive, - .updating, - .versioning, + .count, + .detected, + .missed, + .utterancetimestamp, .sdkUnknown("") ] } @@ -2990,196 +3429,211 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .available: return "Available" - case .creating: return "Creating" - case .deleting: return "Deleting" - case .failed: return "Failed" - case .importing: return "Importing" - case .inactive: return "Inactive" - case .updating: return "Updating" - case .versioning: return "Versioning" + case .count: return "Count" + case .detected: return "Detected" + case .missed: return "Missed" + case .utterancetimestamp: return "UtteranceTimestamp" 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 = BotStatus(rawValue: rawValue) ?? BotStatus.sdkUnknown(rawValue) + self = AnalyticsUtteranceMetricName(rawValue: rawValue) ?? AnalyticsUtteranceMetricName.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.BotSummary: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsUtteranceMetricResult: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botName - case botStatus - case botType - case description - case lastUpdatedDateTime - case latestBotVersion + case name + case statistic + case value } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botId = self.botId { - try encodeContainer.encode(botId, forKey: .botId) - } - if let botName = self.botName { - try encodeContainer.encode(botName, forKey: .botName) - } - if let botStatus = self.botStatus { - try encodeContainer.encode(botStatus.rawValue, forKey: .botStatus) - } - if let botType = self.botType { - try encodeContainer.encode(botType.rawValue, forKey: .botType) - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - if let lastUpdatedDateTime = self.lastUpdatedDateTime { - try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) + if let statistic = self.statistic { + try encodeContainer.encode(statistic.rawValue, forKey: .statistic) } - if let latestBotVersion = self.latestBotVersion { - try encodeContainer.encode(latestBotVersion, forKey: .latestBotVersion) + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) - botName = botNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) - botStatus = botStatusDecoded - let latestBotVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .latestBotVersion) - latestBotVersion = latestBotVersionDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded - let botTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotType.self, forKey: .botType) - botType = botTypeDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsUtteranceMetricName.self, forKey: .name) + name = nameDecoded + let statisticDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsMetricStatistic.self, forKey: .statistic) + statistic = statisticDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .value) + value = valueDecoded } } extension LexModelsV2ClientTypes { - /// Summary information about a bot returned by the [ListBots](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBots.html) operation. - public struct BotSummary: Swift.Equatable { - /// The unique identifier assigned to the bot. Use this ID to get detailed information about the bot with the [DescribeBot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeBot.html) operation. - public var botId: Swift.String? - /// The name of the bot. - public var botName: Swift.String? - /// The current status of the bot. When the status is Available the bot is ready for use. - public var botStatus: LexModelsV2ClientTypes.BotStatus? - /// The type of the bot. - public var botType: LexModelsV2ClientTypes.BotType? - /// The description of the bot. - public var description: Swift.String? - /// The date and time that the bot was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The latest numerical version in use for the bot. - public var latestBotVersion: Swift.String? + /// An object containing the results for the utterance metric you requested. + public struct AnalyticsUtteranceMetricResult: Swift.Equatable { + /// The metric that you requested. + /// + /// * Count – The number of utterances. + /// + /// * Missed – The number of utterances that Amazon Lex failed to recognize. + /// + /// * Detected – The number of utterances that Amazon Lex managed to detect. + /// + /// * UtteranceTimestamp – The date and time of the utterance. + public var name: LexModelsV2ClientTypes.AnalyticsUtteranceMetricName? + /// The summary statistic that you requested to calculate. + /// + /// * Sum – The total count for the category you provide in name. + /// + /// * Average – The total count divided by the number of utterances in the category you provide in name. + /// + /// * Max – The highest count in the category you provide in name. + public var statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? + /// The value of the summary statistic for the metric that you requested. + public var value: Swift.Double? public init( - botId: Swift.String? = nil, - botName: Swift.String? = nil, - botStatus: LexModelsV2ClientTypes.BotStatus? = nil, - botType: LexModelsV2ClientTypes.BotType? = nil, - description: Swift.String? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - latestBotVersion: Swift.String? = nil + name: LexModelsV2ClientTypes.AnalyticsUtteranceMetricName? = nil, + statistic: LexModelsV2ClientTypes.AnalyticsMetricStatistic? = nil, + value: Swift.Double? = nil ) { - self.botId = botId - self.botName = botName - self.botStatus = botStatus - self.botType = botType - self.description = description - self.lastUpdatedDateTime = lastUpdatedDateTime - self.latestBotVersion = latestBotVersion + self.name = name + self.statistic = statistic + self.value = value } } } -extension LexModelsV2ClientTypes { - public enum BotType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case bot - case botnetwork - case sdkUnknown(Swift.String) - - public static var allCases: [BotType] { - return [ - .bot, - .botnetwork, - .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 .bot: return "Bot" - case .botnetwork: return "BotNetwork" - 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 = BotType(rawValue: rawValue) ?? BotType.sdkUnknown(rawValue) - } - } -} - -extension LexModelsV2ClientTypes.BotVersionLocaleDetails: Swift.Codable { +extension LexModelsV2ClientTypes.AnalyticsUtteranceResult: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case sourceBotVersion + case attributeResults + case binKeys + case groupByKeys + case metricsResults } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let sourceBotVersion = self.sourceBotVersion { - try encodeContainer.encode(sourceBotVersion, forKey: .sourceBotVersion) + if let attributeResults = attributeResults { + var attributeResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .attributeResults) + for analyticsutteranceattributeresult0 in attributeResults { + try attributeResultsContainer.encode(analyticsutteranceattributeresult0) + } + } + if let binKeys = binKeys { + var binKeysContainer = encodeContainer.nestedUnkeyedContainer(forKey: .binKeys) + for analyticsbinkey0 in binKeys { + try binKeysContainer.encode(analyticsbinkey0) + } + } + if let groupByKeys = groupByKeys { + var groupByKeysContainer = encodeContainer.nestedUnkeyedContainer(forKey: .groupByKeys) + for analyticsutterancegroupbykey0 in groupByKeys { + try groupByKeysContainer.encode(analyticsutterancegroupbykey0) + } + } + if let metricsResults = metricsResults { + var metricsResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .metricsResults) + for analyticsutterancemetricresult0 in metricsResults { + try metricsResultsContainer.encode(analyticsutterancemetricresult0) + } } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sourceBotVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceBotVersion) - sourceBotVersion = sourceBotVersionDecoded + let binKeysContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsBinKey?].self, forKey: .binKeys) + var binKeysDecoded0:[LexModelsV2ClientTypes.AnalyticsBinKey]? = nil + if let binKeysContainer = binKeysContainer { + binKeysDecoded0 = [LexModelsV2ClientTypes.AnalyticsBinKey]() + for structure0 in binKeysContainer { + if let structure0 = structure0 { + binKeysDecoded0?.append(structure0) + } + } + } + binKeys = binKeysDecoded0 + let groupByKeysContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsUtteranceGroupByKey?].self, forKey: .groupByKeys) + var groupByKeysDecoded0:[LexModelsV2ClientTypes.AnalyticsUtteranceGroupByKey]? = nil + if let groupByKeysContainer = groupByKeysContainer { + groupByKeysDecoded0 = [LexModelsV2ClientTypes.AnalyticsUtteranceGroupByKey]() + for structure0 in groupByKeysContainer { + if let structure0 = structure0 { + groupByKeysDecoded0?.append(structure0) + } + } + } + groupByKeys = groupByKeysDecoded0 + let metricsResultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsUtteranceMetricResult?].self, forKey: .metricsResults) + var metricsResultsDecoded0:[LexModelsV2ClientTypes.AnalyticsUtteranceMetricResult]? = nil + if let metricsResultsContainer = metricsResultsContainer { + metricsResultsDecoded0 = [LexModelsV2ClientTypes.AnalyticsUtteranceMetricResult]() + for structure0 in metricsResultsContainer { + if let structure0 = structure0 { + metricsResultsDecoded0?.append(structure0) + } + } + } + metricsResults = metricsResultsDecoded0 + let attributeResultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsUtteranceAttributeResult?].self, forKey: .attributeResults) + var attributeResultsDecoded0:[LexModelsV2ClientTypes.AnalyticsUtteranceAttributeResult]? = nil + if let attributeResultsContainer = attributeResultsContainer { + attributeResultsDecoded0 = [LexModelsV2ClientTypes.AnalyticsUtteranceAttributeResult]() + for structure0 in attributeResultsContainer { + if let structure0 = structure0 { + attributeResultsDecoded0?.append(structure0) + } + } + } + attributeResults = attributeResultsDecoded0 } } extension LexModelsV2ClientTypes { - /// The version of a bot used for a bot locale. - public struct BotVersionLocaleDetails: Swift.Equatable { - /// The version of a bot used for a bot locale. - /// This member is required. - public var sourceBotVersion: Swift.String? + /// An object containing the results for the utterance metrics you requested and the bin and/or group(s) they refer to, if applicable. + public struct AnalyticsUtteranceResult: Swift.Equatable { + /// A list of objects containing information about the last used intent at the time of an utterance. + public var attributeResults: [LexModelsV2ClientTypes.AnalyticsUtteranceAttributeResult]? + /// A list of objects containing the criteria you requested for binning results and the values of the bins. + public var binKeys: [LexModelsV2ClientTypes.AnalyticsBinKey]? + /// A list of objects containing the criteria you requested for grouping results and the values of the bins. + public var groupByKeys: [LexModelsV2ClientTypes.AnalyticsUtteranceGroupByKey]? + /// A list of objects, each of which contains a metric you want to list, the statistic for the metric you want to return, and the method by which to organize the results. + public var metricsResults: [LexModelsV2ClientTypes.AnalyticsUtteranceMetricResult]? public init( - sourceBotVersion: Swift.String? = nil + attributeResults: [LexModelsV2ClientTypes.AnalyticsUtteranceAttributeResult]? = nil, + binKeys: [LexModelsV2ClientTypes.AnalyticsBinKey]? = nil, + groupByKeys: [LexModelsV2ClientTypes.AnalyticsUtteranceGroupByKey]? = nil, + metricsResults: [LexModelsV2ClientTypes.AnalyticsUtteranceMetricResult]? = nil ) { - self.sourceBotVersion = sourceBotVersion + self.attributeResults = attributeResults + self.binKeys = binKeys + self.groupByKeys = groupByKeys + self.metricsResults = metricsResults } } } extension LexModelsV2ClientTypes { - public enum BotVersionSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case botversion + public enum AnalyticsUtteranceSortByName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case utterancetimestamp case sdkUnknown(Swift.String) - public static var allCases: [BotVersionSortAttribute] { + public static var allCases: [AnalyticsUtteranceSortByName] { return [ - .botversion, + .utterancetimestamp, .sdkUnknown("") ] } @@ -3189,412 +3643,291 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .botversion: return "BotVersion" + case .utterancetimestamp: return "UtteranceTimestamp" 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 = BotVersionSortAttribute(rawValue: rawValue) ?? BotVersionSortAttribute.sdkUnknown(rawValue) + self = AnalyticsUtteranceSortByName(rawValue: rawValue) ?? AnalyticsUtteranceSortByName.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.BotVersionSortBy: Swift.Codable { +extension LexModelsV2ClientTypes.AssociatedTranscript: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case attribute - case order + case transcript } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let attribute = self.attribute { - try encodeContainer.encode(attribute.rawValue, forKey: .attribute) - } - if let order = self.order { - try encodeContainer.encode(order.rawValue, forKey: .order) + if let transcript = self.transcript { + try encodeContainer.encode(transcript, forKey: .transcript) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotVersionSortAttribute.self, forKey: .attribute) - attribute = attributeDecoded - let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) - order = orderDecoded + let transcriptDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .transcript) + transcript = transcriptDecoded } } extension LexModelsV2ClientTypes { - /// Specifies attributes for sorting a list of bot versions. - public struct BotVersionSortBy: Swift.Equatable { - /// The attribute to use to sort the list of versions. - /// This member is required. - public var attribute: LexModelsV2ClientTypes.BotVersionSortAttribute? - /// The order to sort the list. You can specify ascending or descending order. - /// This member is required. - public var order: LexModelsV2ClientTypes.SortOrder? + /// The object containing information that associates the recommended intent/slot type with a conversation. + public struct AssociatedTranscript: Swift.Equatable { + /// The content of the transcript that meets the search filter criteria. For the JSON format of the transcript, see [Output transcript format](https://docs.aws.amazon.com/lexv2/latest/dg/designing-output-format.html). + public var transcript: Swift.String? public init( - attribute: LexModelsV2ClientTypes.BotVersionSortAttribute? = nil, - order: LexModelsV2ClientTypes.SortOrder? = nil + transcript: Swift.String? = nil ) { - self.attribute = attribute - self.order = order + self.transcript = transcript } } } -extension LexModelsV2ClientTypes.BotVersionSummary: Swift.Codable { +extension LexModelsV2ClientTypes.AssociatedTranscriptFilter: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botName - case botStatus - case botVersion - case creationDateTime - case description + case name + case values } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botName = self.botName { - try encodeContainer.encode(botName, forKey: .botName) - } - if let botStatus = self.botStatus { - try encodeContainer.encode(botStatus.rawValue, forKey: .botStatus) - } - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) - } - if let creationDateTime = self.creationDateTime { - try encodeContainer.encodeTimestamp(creationDateTime, format: .epochSeconds, forKey: .creationDateTime) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) + if let values = values { + var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) + for filtervalue0 in values { + try valuesContainer.encode(filtervalue0) + } } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) - botName = botNameDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) - botStatus = botStatusDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AssociatedTranscriptFilterName.self, forKey: .name) + name = nameDecoded + let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) + var valuesDecoded0:[Swift.String]? = nil + if let valuesContainer = valuesContainer { + valuesDecoded0 = [Swift.String]() + for string0 in valuesContainer { + if let string0 = string0 { + valuesDecoded0?.append(string0) + } + } + } + values = valuesDecoded0 } } extension LexModelsV2ClientTypes { - /// Summary information about a bot version returned by the [ListBotVersions](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBotVersions.html) operation. - public struct BotVersionSummary: Swift.Equatable { - /// The name of the bot associated with the version. - public var botName: Swift.String? - /// The status of the bot. When the status is available, the version of the bot is ready for use. - public var botStatus: LexModelsV2ClientTypes.BotStatus? - /// The numeric version of the bot, or DRAFT to indicate that this is the version of the bot that can be updated.. - public var botVersion: Swift.String? - /// A timestamp of the date and time that the version was created. - public var creationDateTime: ClientRuntime.Date? - /// The description of the version. - public var description: Swift.String? + /// Filters to search for the associated transcript. + public struct AssociatedTranscriptFilter: Swift.Equatable { + /// The name of the field to use for filtering. The allowed names are IntentId and SlotTypeId. + /// This member is required. + public var name: LexModelsV2ClientTypes.AssociatedTranscriptFilterName? + /// The values to use to filter the transcript. + /// This member is required. + public var values: [Swift.String]? public init( - botName: Swift.String? = nil, - botStatus: LexModelsV2ClientTypes.BotStatus? = nil, - botVersion: Swift.String? = nil, - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil + name: LexModelsV2ClientTypes.AssociatedTranscriptFilterName? = nil, + values: [Swift.String]? = nil ) { - self.botName = botName - self.botStatus = botStatus - self.botVersion = botVersion - self.creationDateTime = creationDateTime - self.description = description + self.name = name + self.values = values } } } -extension BuildBotLocaleInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil +extension LexModelsV2ClientTypes { + public enum AssociatedTranscriptFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case intentid + case slottypeid + case sdkUnknown(Swift.String) + + public static var allCases: [AssociatedTranscriptFilterName] { + return [ + .intentid, + .slottypeid, + .sdkUnknown("") + ] } - guard let botVersion = botVersion else { - return nil + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) } - guard let localeId = localeId else { - return nil + public var rawValue: Swift.String { + switch self { + case .intentid: return "IntentId" + case .slottypeid: return "SlotTypeId" + 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 = AssociatedTranscriptFilterName(rawValue: rawValue) ?? AssociatedTranscriptFilterName.sdkUnknown(rawValue) } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())" } } -public struct BuildBotLocaleInput: Swift.Equatable { - /// The identifier of the bot to build. The identifier is returned in the response from the [CreateBot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBot.html) operation. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot to build. This can only be the draft version of the bot. - /// This member is required. - public var botVersion: Swift.String? - /// The identifier of the language and locale that the bot will be used in. The string must match one of the supported locales. All of the intents, slot types, and slots used in the bot must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? - - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - localeId: Swift.String? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.localeId = localeId +extension LexModelsV2ClientTypes.AudioAndDTMFInputSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case audioSpecification + case dtmfSpecification + case startTimeoutMs } -} -struct BuildBotLocaleInputBody: Swift.Equatable { -} - -extension BuildBotLocaleInputBody: Swift.Decodable { + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let audioSpecification = self.audioSpecification { + try encodeContainer.encode(audioSpecification, forKey: .audioSpecification) + } + if let dtmfSpecification = self.dtmfSpecification { + try encodeContainer.encode(dtmfSpecification, forKey: .dtmfSpecification) + } + if let startTimeoutMs = self.startTimeoutMs { + try encodeContainer.encode(startTimeoutMs, forKey: .startTimeoutMs) + } + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let startTimeoutMsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .startTimeoutMs) + startTimeoutMs = startTimeoutMsDecoded + let audioSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AudioSpecification.self, forKey: .audioSpecification) + audioSpecification = audioSpecificationDecoded + let dtmfSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DTMFSpecification.self, forKey: .dtmfSpecification) + dtmfSpecification = dtmfSpecificationDecoded } } -public enum BuildBotLocaleOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) +extension LexModelsV2ClientTypes { + /// Specifies the audio and DTMF input specification. + public struct AudioAndDTMFInputSpecification: Swift.Equatable { + /// Specifies the settings on audio input. + public var audioSpecification: LexModelsV2ClientTypes.AudioSpecification? + /// Specifies the settings on DTMF input. + public var dtmfSpecification: LexModelsV2ClientTypes.DTMFSpecification? + /// Time for which a bot waits before assuming that the customer isn't going to speak or press a key. This timeout is shared between Audio and DTMF inputs. + /// This member is required. + public var startTimeoutMs: Swift.Int? + + public init( + audioSpecification: LexModelsV2ClientTypes.AudioSpecification? = nil, + dtmfSpecification: LexModelsV2ClientTypes.DTMFSpecification? = nil, + startTimeoutMs: Swift.Int? = nil + ) + { + self.audioSpecification = audioSpecification + self.dtmfSpecification = dtmfSpecification + self.startTimeoutMs = startTimeoutMs } } + } -extension BuildBotLocaleOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: BuildBotLocaleOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botLocaleStatus = output.botLocaleStatus - self.botVersion = output.botVersion - self.lastBuildSubmittedDateTime = output.lastBuildSubmittedDateTime - self.localeId = output.localeId - } else { - self.botId = nil - self.botLocaleStatus = nil - self.botVersion = nil - self.lastBuildSubmittedDateTime = nil - self.localeId = nil +extension LexModelsV2ClientTypes.AudioLogDestination: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case s3Bucket + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let s3Bucket = self.s3Bucket { + try encodeContainer.encode(s3Bucket, forKey: .s3Bucket) } - } -} - -public struct BuildBotLocaleOutputResponse: Swift.Equatable { - /// The identifier of the specified bot. - public var botId: Swift.String? - /// The bot's build status. When the status is ReadyExpressTesting you can test the bot using the utterances defined for the intents and slot types. When the status is Built, the bot is ready for use and can be tested using any utterance. - public var botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? - /// The version of the bot that was built. This is only the draft version of the bot. - public var botVersion: Swift.String? - /// A timestamp indicating the date and time that the bot was last built for this locale. - public var lastBuildSubmittedDateTime: ClientRuntime.Date? - /// The language and locale specified of where the bot can be used. - public var localeId: Swift.String? - - public init( - botId: Swift.String? = nil, - botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? = nil, - botVersion: Swift.String? = nil, - lastBuildSubmittedDateTime: ClientRuntime.Date? = nil, - localeId: Swift.String? = nil - ) - { - self.botId = botId - self.botLocaleStatus = botLocaleStatus - self.botVersion = botVersion - self.lastBuildSubmittedDateTime = lastBuildSubmittedDateTime - self.localeId = localeId - } -} - -struct BuildBotLocaleOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? - let lastBuildSubmittedDateTime: ClientRuntime.Date? -} - -extension BuildBotLocaleOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botLocaleStatus - case botVersion - case lastBuildSubmittedDateTime - case localeId - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let botLocaleStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleStatus.self, forKey: .botLocaleStatus) - botLocaleStatus = botLocaleStatusDecoded - let lastBuildSubmittedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastBuildSubmittedDateTime) - lastBuildSubmittedDateTime = lastBuildSubmittedDateTimeDecoded - } -} - -extension LexModelsV2ClientTypes { - public enum BuiltInIntentSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case intentsignature - case sdkUnknown(Swift.String) - - public static var allCases: [BuiltInIntentSortAttribute] { - return [ - .intentsignature, - .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 .intentsignature: return "IntentSignature" - 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 = BuiltInIntentSortAttribute(rawValue: rawValue) ?? BuiltInIntentSortAttribute.sdkUnknown(rawValue) - } - } -} - -extension LexModelsV2ClientTypes.BuiltInIntentSortBy: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case attribute - case order - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let attribute = self.attribute { - try encodeContainer.encode(attribute.rawValue, forKey: .attribute) - } - if let order = self.order { - try encodeContainer.encode(order.rawValue, forKey: .order) - } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BuiltInIntentSortAttribute.self, forKey: .attribute) - attribute = attributeDecoded - let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) - order = orderDecoded + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let s3BucketDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.S3BucketLogDestination.self, forKey: .s3Bucket) + s3Bucket = s3BucketDecoded } } extension LexModelsV2ClientTypes { - /// Specifies attributes for sorting a list of built-in intents. - public struct BuiltInIntentSortBy: Swift.Equatable { - /// The attribute to use to sort the list of built-in intents. - /// This member is required. - public var attribute: LexModelsV2ClientTypes.BuiltInIntentSortAttribute? - /// The order to sort the list. You can specify ascending or descending order. + /// The location of audio log files collected when conversation logging is enabled for a bot. + public struct AudioLogDestination: Swift.Equatable { + /// The Amazon S3 bucket where the audio log files are stored. The IAM role specified in the roleArn parameter of the [CreateBot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBot.html) operation must have permission to write to this bucket. /// This member is required. - public var order: LexModelsV2ClientTypes.SortOrder? + public var s3Bucket: LexModelsV2ClientTypes.S3BucketLogDestination? public init( - attribute: LexModelsV2ClientTypes.BuiltInIntentSortAttribute? = nil, - order: LexModelsV2ClientTypes.SortOrder? = nil + s3Bucket: LexModelsV2ClientTypes.S3BucketLogDestination? = nil ) { - self.attribute = attribute - self.order = order + self.s3Bucket = s3Bucket } } } -extension LexModelsV2ClientTypes.BuiltInIntentSummary: Swift.Codable { +extension LexModelsV2ClientTypes.AudioLogSetting: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case description - case intentSignature + case destination + case enabled } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) + if let destination = self.destination { + try encodeContainer.encode(destination, forKey: .destination) } - if let intentSignature = self.intentSignature { - try encodeContainer.encode(intentSignature, forKey: .intentSignature) + if enabled != false { + try encodeContainer.encode(enabled, forKey: .enabled) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let intentSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentSignature) - intentSignature = intentSignatureDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded + let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) ?? false + enabled = enabledDecoded + let destinationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AudioLogDestination.self, forKey: .destination) + destination = destinationDecoded } } extension LexModelsV2ClientTypes { - /// Provides summary information about a built-in intent for the [ ListBuiltInIntents ](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBuiltInIntents.html) operation. - public struct BuiltInIntentSummary: Swift.Equatable { - /// The description of the intent. - public var description: Swift.String? - /// The signature of the built-in intent. Use this to specify the parent intent of a derived intent. - public var intentSignature: Swift.String? + /// Settings for logging audio of conversations between Amazon Lex and a user. You specify whether to log audio and the Amazon S3 bucket where the audio file is stored. + public struct AudioLogSetting: Swift.Equatable { + /// The location of audio log files collected when conversation logging is enabled for a bot. + /// This member is required. + public var destination: LexModelsV2ClientTypes.AudioLogDestination? + /// Determines whether audio logging in enabled for the bot. + /// This member is required. + public var enabled: Swift.Bool public init( - description: Swift.String? = nil, - intentSignature: Swift.String? = nil + destination: LexModelsV2ClientTypes.AudioLogDestination? = nil, + enabled: Swift.Bool = false ) { - self.description = description - self.intentSignature = intentSignature + self.destination = destination + self.enabled = enabled } } } extension LexModelsV2ClientTypes { - public enum BuiltInSlotTypeSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case slottypesignature + public enum AudioRecognitionStrategy: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case useslotvaluesascustomvocabulary case sdkUnknown(Swift.String) - public static var allCases: [BuiltInSlotTypeSortAttribute] { + public static var allCases: [AudioRecognitionStrategy] { return [ - .slottypesignature, + .useslotvaluesascustomvocabulary, .sdkUnknown("") ] } @@ -3604,927 +3937,894 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .slottypesignature: return "SlotTypeSignature" + case .useslotvaluesascustomvocabulary: return "UseSlotValuesAsCustomVocabulary" 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 = BuiltInSlotTypeSortAttribute(rawValue: rawValue) ?? BuiltInSlotTypeSortAttribute.sdkUnknown(rawValue) + self = AudioRecognitionStrategy(rawValue: rawValue) ?? AudioRecognitionStrategy.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.BuiltInSlotTypeSortBy: Swift.Codable { +extension LexModelsV2ClientTypes.AudioSpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case attribute - case order + case endTimeoutMs + case maxLengthMs } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let attribute = self.attribute { - try encodeContainer.encode(attribute.rawValue, forKey: .attribute) + if let endTimeoutMs = self.endTimeoutMs { + try encodeContainer.encode(endTimeoutMs, forKey: .endTimeoutMs) } - if let order = self.order { - try encodeContainer.encode(order.rawValue, forKey: .order) + if let maxLengthMs = self.maxLengthMs { + try encodeContainer.encode(maxLengthMs, forKey: .maxLengthMs) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BuiltInSlotTypeSortAttribute.self, forKey: .attribute) - attribute = attributeDecoded - let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) - order = orderDecoded + let maxLengthMsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxLengthMs) + maxLengthMs = maxLengthMsDecoded + let endTimeoutMsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .endTimeoutMs) + endTimeoutMs = endTimeoutMsDecoded } } extension LexModelsV2ClientTypes { - /// Specifies attributes for sorting a list of built-in slot types. - public struct BuiltInSlotTypeSortBy: Swift.Equatable { - /// The attribute to use to sort the list of built-in intents. + /// Specifies the audio input specifications. + public struct AudioSpecification: Swift.Equatable { + /// Time for which a bot waits after the customer stops speaking to assume the utterance is finished. /// This member is required. - public var attribute: LexModelsV2ClientTypes.BuiltInSlotTypeSortAttribute? - /// The order to sort the list. You can choose ascending or descending. + public var endTimeoutMs: Swift.Int? + /// Time for how long Amazon Lex waits before speech input is truncated and the speech is returned to application. /// This member is required. - public var order: LexModelsV2ClientTypes.SortOrder? + public var maxLengthMs: Swift.Int? public init( - attribute: LexModelsV2ClientTypes.BuiltInSlotTypeSortAttribute? = nil, - order: LexModelsV2ClientTypes.SortOrder? = nil + endTimeoutMs: Swift.Int? = nil, + maxLengthMs: Swift.Int? = nil ) { - self.attribute = attribute - self.order = order + self.endTimeoutMs = endTimeoutMs + self.maxLengthMs = maxLengthMs } } } -extension LexModelsV2ClientTypes.BuiltInSlotTypeSummary: Swift.Codable { +extension BatchCreateCustomVocabularyItemInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case description - case slotTypeSignature + case customVocabularyItemList } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let slotTypeSignature = self.slotTypeSignature { - try encodeContainer.encode(slotTypeSignature, forKey: .slotTypeSignature) + if let customVocabularyItemList = customVocabularyItemList { + var customVocabularyItemListContainer = encodeContainer.nestedUnkeyedContainer(forKey: .customVocabularyItemList) + for newcustomvocabularyitem0 in customVocabularyItemList { + try customVocabularyItemListContainer.encode(newcustomvocabularyitem0) + } } } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let slotTypeSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeSignature) - slotTypeSignature = slotTypeSignatureDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - } } -extension LexModelsV2ClientTypes { - /// Provides summary information about a built-in slot type for the [ ListBuiltInSlotTypes ](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBuiltInSlotTypes.html) operation. - public struct BuiltInSlotTypeSummary: Swift.Equatable { - /// The description of the built-in slot type. - public var description: Swift.String? - /// The signature of the built-in slot type. Use this to specify the parent slot type of a derived slot type. - public var slotTypeSignature: Swift.String? - - public init( - description: Swift.String? = nil, - slotTypeSignature: Swift.String? = nil - ) - { - self.description = description - self.slotTypeSignature = slotTypeSignature +extension BatchCreateCustomVocabularyItemInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - } - -} - -extension LexModelsV2ClientTypes.Button: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case text - case value - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let text = self.text { - try encodeContainer.encode(text, forKey: .text) + guard let botVersion = botVersion else { + return nil } - if let value = self.value { - try encodeContainer.encode(value, forKey: .value) + guard let localeId = localeId else { + return nil } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let textDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .text) - text = textDecoded - let valueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .value) - value = valueDecoded + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary/DEFAULT/batchcreate" } } -extension LexModelsV2ClientTypes { - /// Describes a button to use on a response card used to gather slot values from a user. - public struct Button: Swift.Equatable { - /// The text that appears on the button. Use this to tell the user what value is returned when they choose this button. - /// This member is required. - public var text: Swift.String? - /// The value returned to Amazon Lex when the user chooses this button. This must be one of the slot values configured for the slot. - /// This member is required. - public var value: Swift.String? +public struct BatchCreateCustomVocabularyItemInput: Swift.Equatable { + /// The identifier of the bot associated with this custom vocabulary. + /// This member is required. + public var botId: Swift.String? + /// The identifier of the version of the bot associated with this custom vocabulary. + /// This member is required. + public var botVersion: Swift.String? + /// A list of new custom vocabulary items. Each entry must contain a phrase and can optionally contain a displayAs and/or a weight. + /// This member is required. + public var customVocabularyItemList: [LexModelsV2ClientTypes.NewCustomVocabularyItem]? + /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? - public init( - text: Swift.String? = nil, - value: Swift.String? = nil - ) - { - self.text = text - self.value = value - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + customVocabularyItemList: [LexModelsV2ClientTypes.NewCustomVocabularyItem]? = nil, + localeId: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.customVocabularyItemList = customVocabularyItemList + self.localeId = localeId } +} +struct BatchCreateCustomVocabularyItemInputBody: Swift.Equatable { + let customVocabularyItemList: [LexModelsV2ClientTypes.NewCustomVocabularyItem]? } -extension LexModelsV2ClientTypes.CloudWatchLogGroupLogDestination: Swift.Codable { +extension BatchCreateCustomVocabularyItemInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case cloudWatchLogGroupArn - case logPrefix - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let cloudWatchLogGroupArn = self.cloudWatchLogGroupArn { - try encodeContainer.encode(cloudWatchLogGroupArn, forKey: .cloudWatchLogGroupArn) - } - if let logPrefix = self.logPrefix { - try encodeContainer.encode(logPrefix, forKey: .logPrefix) - } + case customVocabularyItemList } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let cloudWatchLogGroupArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .cloudWatchLogGroupArn) - cloudWatchLogGroupArn = cloudWatchLogGroupArnDecoded - let logPrefixDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .logPrefix) - logPrefix = logPrefixDecoded + let customVocabularyItemListContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.NewCustomVocabularyItem?].self, forKey: .customVocabularyItemList) + var customVocabularyItemListDecoded0:[LexModelsV2ClientTypes.NewCustomVocabularyItem]? = nil + if let customVocabularyItemListContainer = customVocabularyItemListContainer { + customVocabularyItemListDecoded0 = [LexModelsV2ClientTypes.NewCustomVocabularyItem]() + for structure0 in customVocabularyItemListContainer { + if let structure0 = structure0 { + customVocabularyItemListDecoded0?.append(structure0) + } + } + } + customVocabularyItemList = customVocabularyItemListDecoded0 } } -extension LexModelsV2ClientTypes { - /// The Amazon CloudWatch Logs log group where the text and metadata logs are delivered. The log group must exist before you enable logging. - public struct CloudWatchLogGroupLogDestination: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the log group where text and metadata logs are delivered. - /// This member is required. - public var cloudWatchLogGroupArn: Swift.String? - /// The prefix of the log stream name within the log group that you specified - /// This member is required. - public var logPrefix: Swift.String? - - public init( - cloudWatchLogGroupArn: Swift.String? = nil, - logPrefix: Swift.String? = nil - ) - { - self.cloudWatchLogGroupArn = cloudWatchLogGroupArn - self.logPrefix = logPrefix +public enum BatchCreateCustomVocabularyItemOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } - } -extension LexModelsV2ClientTypes.CodeHookSpecification: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case lambdaCodeHook - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let lambdaCodeHook = self.lambdaCodeHook { - try encodeContainer.encode(lambdaCodeHook, forKey: .lambdaCodeHook) +extension BatchCreateCustomVocabularyItemOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: BatchCreateCustomVocabularyItemOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botVersion = output.botVersion + self.errors = output.errors + self.localeId = output.localeId + self.resources = output.resources + } else { + self.botId = nil + self.botVersion = nil + self.errors = nil + self.localeId = nil + self.resources = nil } } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let lambdaCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.LambdaCodeHook.self, forKey: .lambdaCodeHook) - lambdaCodeHook = lambdaCodeHookDecoded - } } -extension LexModelsV2ClientTypes { - /// Contains information about code hooks that Amazon Lex calls during a conversation. - public struct CodeHookSpecification: Swift.Equatable { - /// Specifies a Lambda function that verifies requests to a bot or fulfills the user's request to a bot. - /// This member is required. - public var lambdaCodeHook: LexModelsV2ClientTypes.LambdaCodeHook? +public struct BatchCreateCustomVocabularyItemOutputResponse: Swift.Equatable { + /// The identifier of the bot associated with this custom vocabulary. + public var botId: Swift.String? + /// The identifier of the version of the bot associated with this custom vocabulary. + public var botVersion: Swift.String? + /// A list of custom vocabulary items that failed to create during the operation. The reason for the error is contained within each error object. + public var errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? + /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + public var localeId: Swift.String? + /// A list of custom vocabulary items that were successfully created during the operation. + public var resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? - public init( - lambdaCodeHook: LexModelsV2ClientTypes.LambdaCodeHook? = nil - ) - { - self.lambdaCodeHook = lambdaCodeHook - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil, + localeId: Swift.String? = nil, + resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.errors = errors + self.localeId = localeId + self.resources = resources } +} +struct BatchCreateCustomVocabularyItemOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? + let resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? } -extension LexModelsV2ClientTypes.CompositeSlotTypeSetting: Swift.Codable { +extension BatchCreateCustomVocabularyItemOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case subSlots - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let subSlots = subSlots { - var subSlotsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .subSlots) - for subslottypecomposition0 in subSlots { - try subSlotsContainer.encode(subslottypecomposition0) - } - } + case botId + case botVersion + case errors + case localeId + case resources } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let subSlotsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SubSlotTypeComposition?].self, forKey: .subSlots) - var subSlotsDecoded0:[LexModelsV2ClientTypes.SubSlotTypeComposition]? = nil - if let subSlotsContainer = subSlotsContainer { - subSlotsDecoded0 = [LexModelsV2ClientTypes.SubSlotTypeComposition]() - for structure0 in subSlotsContainer { + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let errorsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.FailedCustomVocabularyItem?].self, forKey: .errors) + var errorsDecoded0:[LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil + if let errorsContainer = errorsContainer { + errorsDecoded0 = [LexModelsV2ClientTypes.FailedCustomVocabularyItem]() + for structure0 in errorsContainer { if let structure0 = structure0 { - subSlotsDecoded0?.append(structure0) + errorsDecoded0?.append(structure0) } } } - subSlots = subSlotsDecoded0 - } -} - -extension LexModelsV2ClientTypes { - /// A composite slot is a combination of two or more slots that capture multiple pieces of information in a single user input. - public struct CompositeSlotTypeSetting: Swift.Equatable { - /// Subslots in the composite slot. - public var subSlots: [LexModelsV2ClientTypes.SubSlotTypeComposition]? - - public init( - subSlots: [LexModelsV2ClientTypes.SubSlotTypeComposition]? = nil - ) - { - self.subSlots = subSlots + errors = errorsDecoded0 + let resourcesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyItem?].self, forKey: .resources) + var resourcesDecoded0:[LexModelsV2ClientTypes.CustomVocabularyItem]? = nil + if let resourcesContainer = resourcesContainer { + resourcesDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyItem]() + for structure0 in resourcesContainer { + if let structure0 = structure0 { + resourcesDecoded0?.append(structure0) + } + } } + resources = resourcesDecoded0 } - } -extension LexModelsV2ClientTypes.Condition: Swift.Codable { +extension BatchDeleteCustomVocabularyItemInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case expressionString + case customVocabularyItemList } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let expressionString = self.expressionString { - try encodeContainer.encode(expressionString, forKey: .expressionString) - } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let expressionStringDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .expressionString) - expressionString = expressionStringDecoded - } -} - -extension LexModelsV2ClientTypes { - /// Provides an expression that evaluates to true or false. - public struct Condition: Swift.Equatable { - /// The expression string that is evaluated. - /// This member is required. - public var expressionString: Swift.String? - - public init( - expressionString: Swift.String? = nil - ) - { - self.expressionString = expressionString + if let customVocabularyItemList = customVocabularyItemList { + var customVocabularyItemListContainer = encodeContainer.nestedUnkeyedContainer(forKey: .customVocabularyItemList) + for customvocabularyentryid0 in customVocabularyItemList { + try customVocabularyItemListContainer.encode(customvocabularyentryid0) + } } } - } -extension LexModelsV2ClientTypes.ConditionalBranch: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case condition - case name - case nextStep - case response - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let condition = self.condition { - try encodeContainer.encode(condition, forKey: .condition) - } - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) +extension BatchDeleteCustomVocabularyItemInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - if let nextStep = self.nextStep { - try encodeContainer.encode(nextStep, forKey: .nextStep) + guard let botVersion = botVersion else { + return nil } - if let response = self.response { - try encodeContainer.encode(response, forKey: .response) + guard let localeId = localeId else { + return nil } - } - - 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 conditionDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.Condition.self, forKey: .condition) - condition = conditionDecoded - let nextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .nextStep) - nextStep = nextStepDecoded - let responseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .response) - response = responseDecoded + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary/DEFAULT/batchdelete" } } -extension LexModelsV2ClientTypes { - /// A set of actions that Amazon Lex should run if the condition is matched. - public struct ConditionalBranch: Swift.Equatable { - /// Contains the expression to evaluate. If the condition is true, the branch's actions are taken. - /// This member is required. - public var condition: LexModelsV2ClientTypes.Condition? - /// The name of the branch. - /// This member is required. - public var name: Swift.String? - /// The next step in the conversation. - /// This member is required. - public var nextStep: LexModelsV2ClientTypes.DialogState? - /// Specifies a list of message groups that Amazon Lex uses to respond the user input. - public var response: LexModelsV2ClientTypes.ResponseSpecification? +public struct BatchDeleteCustomVocabularyItemInput: Swift.Equatable { + /// The identifier of the bot associated with this custom vocabulary. + /// This member is required. + public var botId: Swift.String? + /// The identifier of the version of the bot associated with this custom vocabulary. + /// This member is required. + public var botVersion: Swift.String? + /// A list of custom vocabulary items requested to be deleted. Each entry must contain the unique custom vocabulary entry identifier. + /// This member is required. + public var customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyEntryId]? + /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? - public init( - condition: LexModelsV2ClientTypes.Condition? = nil, - name: Swift.String? = nil, - nextStep: LexModelsV2ClientTypes.DialogState? = nil, - response: LexModelsV2ClientTypes.ResponseSpecification? = nil - ) - { - self.condition = condition - self.name = name - self.nextStep = nextStep - self.response = response - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyEntryId]? = nil, + localeId: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.customVocabularyItemList = customVocabularyItemList + self.localeId = localeId } +} +struct BatchDeleteCustomVocabularyItemInputBody: Swift.Equatable { + let customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyEntryId]? } -extension LexModelsV2ClientTypes.ConditionalSpecification: Swift.Codable { +extension BatchDeleteCustomVocabularyItemInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case active - case conditionalBranches - case defaultBranch - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let active = self.active { - try encodeContainer.encode(active, forKey: .active) - } - if let conditionalBranches = conditionalBranches { - var conditionalBranchesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .conditionalBranches) - for conditionalbranch0 in conditionalBranches { - try conditionalBranchesContainer.encode(conditionalbranch0) - } - } - if let defaultBranch = self.defaultBranch { - try encodeContainer.encode(defaultBranch, forKey: .defaultBranch) - } + case customVocabularyItemList } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) - active = activeDecoded - let conditionalBranchesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ConditionalBranch?].self, forKey: .conditionalBranches) - var conditionalBranchesDecoded0:[LexModelsV2ClientTypes.ConditionalBranch]? = nil - if let conditionalBranchesContainer = conditionalBranchesContainer { - conditionalBranchesDecoded0 = [LexModelsV2ClientTypes.ConditionalBranch]() - for structure0 in conditionalBranchesContainer { + let customVocabularyItemListContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyEntryId?].self, forKey: .customVocabularyItemList) + var customVocabularyItemListDecoded0:[LexModelsV2ClientTypes.CustomVocabularyEntryId]? = nil + if let customVocabularyItemListContainer = customVocabularyItemListContainer { + customVocabularyItemListDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyEntryId]() + for structure0 in customVocabularyItemListContainer { if let structure0 = structure0 { - conditionalBranchesDecoded0?.append(structure0) + customVocabularyItemListDecoded0?.append(structure0) } } } - conditionalBranches = conditionalBranchesDecoded0 - let defaultBranchDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DefaultConditionalBranch.self, forKey: .defaultBranch) - defaultBranch = defaultBranchDecoded + customVocabularyItemList = customVocabularyItemListDecoded0 } } -extension LexModelsV2ClientTypes { - /// Provides a list of conditional branches. Branches are evaluated in the order that they are entered in the list. The first branch with a condition that evaluates to true is executed. The last branch in the list is the default branch. The default branch should not have any condition expression. The default branch is executed if no other branch has a matching condition. - public struct ConditionalSpecification: Swift.Equatable { - /// Determines whether a conditional branch is active. When active is false, the conditions are not evaluated. - /// This member is required. - public var active: Swift.Bool? - /// A list of conditional branches. A conditional branch is made up of a condition, a response and a next step. The response and next step are executed when the condition is true. - /// This member is required. - public var conditionalBranches: [LexModelsV2ClientTypes.ConditionalBranch]? - /// The conditional branch that should be followed when the conditions for other branches are not satisfied. A conditional branch is made up of a condition, a response and a next step. - /// This member is required. - public var defaultBranch: LexModelsV2ClientTypes.DefaultConditionalBranch? - - public init( - active: Swift.Bool? = nil, - conditionalBranches: [LexModelsV2ClientTypes.ConditionalBranch]? = nil, - defaultBranch: LexModelsV2ClientTypes.DefaultConditionalBranch? = nil - ) - { - self.active = active - self.conditionalBranches = conditionalBranches - self.defaultBranch = defaultBranch +public enum BatchDeleteCustomVocabularyItemOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } - } -extension ConflictException { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { +extension BatchDeleteCustomVocabularyItemOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ConflictExceptionBody = try responseDecoder.decode(responseBody: data) - self.properties.message = output.message + let output: BatchDeleteCustomVocabularyItemOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botVersion = output.botVersion + self.errors = output.errors + self.localeId = output.localeId + self.resources = output.resources } else { - self.properties.message = nil + self.botId = nil + self.botVersion = nil + self.errors = nil + self.localeId = nil + self.resources = nil } - self.httpResponse = httpResponse - self.requestID = requestID - self.message = message } } -/// The action that you tried to perform couldn't be completed because the resource is in a conflicting state. For example, deleting a bot that is in the CREATING state. Try your request again. -public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ConflictException" } - public static var fault: ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? +public struct BatchDeleteCustomVocabularyItemOutputResponse: Swift.Equatable { + /// The identifier of the bot associated with this custom vocabulary. + public var botId: Swift.String? + /// The identifier of the version of the bot associated with this custom vocabulary. + public var botVersion: Swift.String? + /// A list of custom vocabulary items that failed to delete during the operation. The reason for the error is contained within each error object. + public var errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? + /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see Supported languages (https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + public var localeId: Swift.String? + /// A list of custom vocabulary items that were successfully deleted during the operation. + public var resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? public init( - message: Swift.String? = nil + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil, + localeId: Swift.String? = nil, + resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? = nil ) { - self.properties.message = message + self.botId = botId + self.botVersion = botVersion + self.errors = errors + self.localeId = localeId + self.resources = resources } } -struct ConflictExceptionBody: Swift.Equatable { - let message: Swift.String? +struct BatchDeleteCustomVocabularyItemOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? + let resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? } -extension ConflictExceptionBody: Swift.Decodable { +extension BatchDeleteCustomVocabularyItemOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message + case botId + case botVersion + case errors + case localeId + case resources } 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 botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let errorsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.FailedCustomVocabularyItem?].self, forKey: .errors) + var errorsDecoded0:[LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil + if let errorsContainer = errorsContainer { + errorsDecoded0 = [LexModelsV2ClientTypes.FailedCustomVocabularyItem]() + for structure0 in errorsContainer { + if let structure0 = structure0 { + errorsDecoded0?.append(structure0) + } + } + } + errors = errorsDecoded0 + let resourcesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyItem?].self, forKey: .resources) + var resourcesDecoded0:[LexModelsV2ClientTypes.CustomVocabularyItem]? = nil + if let resourcesContainer = resourcesContainer { + resourcesDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyItem]() + for structure0 in resourcesContainer { + if let structure0 = structure0 { + resourcesDecoded0?.append(structure0) + } + } + } + resources = resourcesDecoded0 } } -extension LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem: Swift.Codable { +extension BatchUpdateCustomVocabularyItemInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case intentName - case matchResult + case customVocabularyItemList } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let intentName = self.intentName { - try encodeContainer.encode(intentName, forKey: .intentName) - } - if let matchResult = self.matchResult { - try encodeContainer.encode(matchResult.rawValue, forKey: .matchResult) + if let customVocabularyItemList = customVocabularyItemList { + var customVocabularyItemListContainer = encodeContainer.nestedUnkeyedContainer(forKey: .customVocabularyItemList) + for customvocabularyitem0 in customVocabularyItemList { + try customVocabularyItemListContainer.encode(customvocabularyitem0) + } } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) - intentName = intentNameDecoded - let matchResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .matchResult) - matchResult = matchResultDecoded +extension BatchUpdateCustomVocabularyItemInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil + } + guard let botVersion = botVersion else { + return nil + } + guard let localeId = localeId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary/DEFAULT/batchupdate" } } -extension LexModelsV2ClientTypes { - /// The item listing the evaluation of intent level success or failure. - public struct ConversationLevelIntentClassificationResultItem: Swift.Equatable { - /// The intent name used in the evaluation of intent level success or failure. - /// This member is required. - public var intentName: Swift.String? - /// The number of times the specific intent is used in the evaluation of intent level success or failure. - /// This member is required. - public var matchResult: LexModelsV2ClientTypes.TestResultMatchStatus? +public struct BatchUpdateCustomVocabularyItemInput: Swift.Equatable { + /// The identifier of the bot associated with this custom vocabulary + /// This member is required. + public var botId: Swift.String? + /// The identifier of the version of the bot associated with this custom vocabulary. + /// This member is required. + public var botVersion: Swift.String? + /// A list of custom vocabulary items with updated fields. Each entry must contain a phrase and can optionally contain a displayAs and/or a weight. + /// This member is required. + public var customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyItem]? + /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? - public init( - intentName: Swift.String? = nil, - matchResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil - ) - { - self.intentName = intentName - self.matchResult = matchResult - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyItem]? = nil, + localeId: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.customVocabularyItemList = customVocabularyItemList + self.localeId = localeId } +} +struct BatchUpdateCustomVocabularyItemInputBody: Swift.Equatable { + let customVocabularyItemList: [LexModelsV2ClientTypes.CustomVocabularyItem]? } -extension LexModelsV2ClientTypes.ConversationLevelResultDetail: Swift.Codable { +extension BatchUpdateCustomVocabularyItemInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case endToEndResult - case speechTranscriptionResult - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let endToEndResult = self.endToEndResult { - try encodeContainer.encode(endToEndResult.rawValue, forKey: .endToEndResult) - } - if let speechTranscriptionResult = self.speechTranscriptionResult { - try encodeContainer.encode(speechTranscriptionResult.rawValue, forKey: .speechTranscriptionResult) - } + case customVocabularyItemList } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let endToEndResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .endToEndResult) - endToEndResult = endToEndResultDecoded - let speechTranscriptionResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .speechTranscriptionResult) - speechTranscriptionResult = speechTranscriptionResultDecoded + let customVocabularyItemListContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyItem?].self, forKey: .customVocabularyItemList) + var customVocabularyItemListDecoded0:[LexModelsV2ClientTypes.CustomVocabularyItem]? = nil + if let customVocabularyItemListContainer = customVocabularyItemListContainer { + customVocabularyItemListDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyItem]() + for structure0 in customVocabularyItemListContainer { + if let structure0 = structure0 { + customVocabularyItemListDecoded0?.append(structure0) + } + } + } + customVocabularyItemList = customVocabularyItemListDecoded0 } } -extension LexModelsV2ClientTypes { - /// The conversation level details of the conversation used in the test set. - public struct ConversationLevelResultDetail: Swift.Equatable { - /// The success or failure of the streaming of the conversation. - /// This member is required. - public var endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? - /// The speech transcription success or failure details of the conversation. - public var speechTranscriptionResult: LexModelsV2ClientTypes.TestResultMatchStatus? - - public init( - endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil, - speechTranscriptionResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil - ) - { - self.endToEndResult = endToEndResult - self.speechTranscriptionResult = speechTranscriptionResult +public enum BatchUpdateCustomVocabularyItemOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } - } -extension LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case intentName - case matchResult - case slotName - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let intentName = self.intentName { - try encodeContainer.encode(intentName, forKey: .intentName) - } - if let matchResult = self.matchResult { - try encodeContainer.encode(matchResult.rawValue, forKey: .matchResult) - } - if let slotName = self.slotName { - try encodeContainer.encode(slotName, forKey: .slotName) +extension BatchUpdateCustomVocabularyItemOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: BatchUpdateCustomVocabularyItemOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botVersion = output.botVersion + self.errors = output.errors + self.localeId = output.localeId + self.resources = output.resources + } else { + self.botId = nil + self.botVersion = nil + self.errors = nil + self.localeId = nil + self.resources = nil } } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) - intentName = intentNameDecoded - let slotNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotName) - slotName = slotNameDecoded - let matchResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .matchResult) - matchResult = matchResultDecoded - } } -extension LexModelsV2ClientTypes { - /// The slots used for the slot resolution in the conversation. - public struct ConversationLevelSlotResolutionResultItem: Swift.Equatable { - /// The intents used in the slots list for the slot resolution details. - /// This member is required. - public var intentName: Swift.String? - /// The number of matching slots used in the slots listings for the slot resolution evaluation. - /// This member is required. - public var matchResult: LexModelsV2ClientTypes.TestResultMatchStatus? - /// The slot name in the slots list for the slot resolution details. - /// This member is required. - public var slotName: Swift.String? +public struct BatchUpdateCustomVocabularyItemOutputResponse: Swift.Equatable { + /// The identifier of the bot associated with this custom vocabulary. + public var botId: Swift.String? + /// The identifier of the version of the bot associated with this custom vocabulary. + public var botVersion: Swift.String? + /// A list of custom vocabulary items that failed to update during the operation. The reason for the error is contained within each error object. + public var errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? + /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + public var localeId: Swift.String? + /// A list of custom vocabulary items that were successfully updated during the operation. + public var resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? - public init( - intentName: Swift.String? = nil, - matchResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil, - slotName: Swift.String? = nil - ) - { - self.intentName = intentName - self.matchResult = matchResult - self.slotName = slotName - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil, + localeId: Swift.String? = nil, + resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.errors = errors + self.localeId = localeId + self.resources = resources } +} +struct BatchUpdateCustomVocabularyItemOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let errors: [LexModelsV2ClientTypes.FailedCustomVocabularyItem]? + let resources: [LexModelsV2ClientTypes.CustomVocabularyItem]? } -extension LexModelsV2ClientTypes.ConversationLevelTestResultItem: Swift.Codable { +extension BatchUpdateCustomVocabularyItemOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case conversationId - case endToEndResult - case intentClassificationResults - case slotResolutionResults - case speechTranscriptionResult - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let conversationId = self.conversationId { - try encodeContainer.encode(conversationId, forKey: .conversationId) - } - if let endToEndResult = self.endToEndResult { - try encodeContainer.encode(endToEndResult.rawValue, forKey: .endToEndResult) - } - if let intentClassificationResults = intentClassificationResults { - var intentClassificationResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .intentClassificationResults) - for conversationlevelintentclassificationresultitem0 in intentClassificationResults { - try intentClassificationResultsContainer.encode(conversationlevelintentclassificationresultitem0) - } - } - if let slotResolutionResults = slotResolutionResults { - var slotResolutionResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .slotResolutionResults) - for conversationlevelslotresolutionresultitem0 in slotResolutionResults { - try slotResolutionResultsContainer.encode(conversationlevelslotresolutionresultitem0) - } - } - if let speechTranscriptionResult = self.speechTranscriptionResult { - try encodeContainer.encode(speechTranscriptionResult.rawValue, forKey: .speechTranscriptionResult) - } + case botId + case botVersion + case errors + case localeId + case resources } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let conversationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .conversationId) - conversationId = conversationIdDecoded - let endToEndResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .endToEndResult) - endToEndResult = endToEndResultDecoded - let speechTranscriptionResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .speechTranscriptionResult) - speechTranscriptionResult = speechTranscriptionResultDecoded - let intentClassificationResultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem?].self, forKey: .intentClassificationResults) - var intentClassificationResultsDecoded0:[LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem]? = nil - if let intentClassificationResultsContainer = intentClassificationResultsContainer { - intentClassificationResultsDecoded0 = [LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem]() - for structure0 in intentClassificationResultsContainer { + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let errorsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.FailedCustomVocabularyItem?].self, forKey: .errors) + var errorsDecoded0:[LexModelsV2ClientTypes.FailedCustomVocabularyItem]? = nil + if let errorsContainer = errorsContainer { + errorsDecoded0 = [LexModelsV2ClientTypes.FailedCustomVocabularyItem]() + for structure0 in errorsContainer { if let structure0 = structure0 { - intentClassificationResultsDecoded0?.append(structure0) + errorsDecoded0?.append(structure0) } } } - intentClassificationResults = intentClassificationResultsDecoded0 - let slotResolutionResultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem?].self, forKey: .slotResolutionResults) - var slotResolutionResultsDecoded0:[LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem]? = nil - if let slotResolutionResultsContainer = slotResolutionResultsContainer { - slotResolutionResultsDecoded0 = [LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem]() - for structure0 in slotResolutionResultsContainer { + errors = errorsDecoded0 + let resourcesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyItem?].self, forKey: .resources) + var resourcesDecoded0:[LexModelsV2ClientTypes.CustomVocabularyItem]? = nil + if let resourcesContainer = resourcesContainer { + resourcesDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyItem]() + for structure0 in resourcesContainer { if let structure0 = structure0 { - slotResolutionResultsDecoded0?.append(structure0) + resourcesDecoded0?.append(structure0) } } } - slotResolutionResults = slotResolutionResultsDecoded0 - } -} - -extension LexModelsV2ClientTypes { - /// The test result evaluation item at the conversation level. - public struct ConversationLevelTestResultItem: Swift.Equatable { - /// The conversation Id of the test result evaluation item. - /// This member is required. - public var conversationId: Swift.String? - /// The end-to-end success or failure of the test result evaluation item. - /// This member is required. - public var endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? - /// The intent classification of the test result evaluation item. - /// This member is required. - public var intentClassificationResults: [LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem]? - /// The slot success or failure of the test result evaluation item. - /// This member is required. - public var slotResolutionResults: [LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem]? - /// The speech transcription success or failure of the test result evaluation item. - public var speechTranscriptionResult: LexModelsV2ClientTypes.TestResultMatchStatus? - - public init( - conversationId: Swift.String? = nil, - endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil, - intentClassificationResults: [LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem]? = nil, - slotResolutionResults: [LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem]? = nil, - speechTranscriptionResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil - ) - { - self.conversationId = conversationId - self.endToEndResult = endToEndResult - self.intentClassificationResults = intentClassificationResults - self.slotResolutionResults = slotResolutionResults - self.speechTranscriptionResult = speechTranscriptionResult - } + resources = resourcesDecoded0 } - } -extension LexModelsV2ClientTypes.ConversationLevelTestResults: Swift.Codable { +extension LexModelsV2ClientTypes.BotAliasHistoryEvent: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case items + case botVersion + case endDate + case startDate } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let items = items { - var itemsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .items) - for conversationleveltestresultitem0 in items { - try itemsContainer.encode(conversationleveltestresultitem0) - } + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) + } + if let endDate = self.endDate { + try encodeContainer.encodeTimestamp(endDate, format: .epochSeconds, forKey: .endDate) + } + if let startDate = self.startDate { + try encodeContainer.encodeTimestamp(startDate, format: .epochSeconds, forKey: .startDate) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let itemsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ConversationLevelTestResultItem?].self, forKey: .items) - var itemsDecoded0:[LexModelsV2ClientTypes.ConversationLevelTestResultItem]? = nil - if let itemsContainer = itemsContainer { - itemsDecoded0 = [LexModelsV2ClientTypes.ConversationLevelTestResultItem]() - for structure0 in itemsContainer { - if let structure0 = structure0 { - itemsDecoded0?.append(structure0) - } - } - } - items = itemsDecoded0 + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let startDateDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startDate) + startDate = startDateDecoded + let endDateDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endDate) + endDate = endDateDecoded } } extension LexModelsV2ClientTypes { - /// The test set results data at the conversation level. - public struct ConversationLevelTestResults: Swift.Equatable { - /// The item list in the test set results data at the conversation level. - /// This member is required. - public var items: [LexModelsV2ClientTypes.ConversationLevelTestResultItem]? + /// Provides a record of an event that affects a bot alias. For example, when the version of a bot that the alias points to changes. + public struct BotAliasHistoryEvent: Swift.Equatable { + /// The version of the bot that was used in the event. + public var botVersion: Swift.String? + /// The date and time that the event ended. + public var endDate: ClientRuntime.Date? + /// The date and time that the event started. + public var startDate: ClientRuntime.Date? public init( - items: [LexModelsV2ClientTypes.ConversationLevelTestResultItem]? = nil + botVersion: Swift.String? = nil, + endDate: ClientRuntime.Date? = nil, + startDate: ClientRuntime.Date? = nil ) { - self.items = items + self.botVersion = botVersion + self.endDate = endDate + self.startDate = startDate } } } -extension LexModelsV2ClientTypes.ConversationLevelTestResultsFilterBy: Swift.Codable { +extension LexModelsV2ClientTypes.BotAliasLocaleSettings: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case endToEndResult + case codeHookSpecification + case enabled } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let endToEndResult = self.endToEndResult { - try encodeContainer.encode(endToEndResult.rawValue, forKey: .endToEndResult) + if let codeHookSpecification = self.codeHookSpecification { + try encodeContainer.encode(codeHookSpecification, forKey: .codeHookSpecification) + } + if enabled != false { + try encodeContainer.encode(enabled, forKey: .enabled) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let endToEndResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .endToEndResult) - endToEndResult = endToEndResultDecoded + let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) ?? false + enabled = enabledDecoded + let codeHookSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CodeHookSpecification.self, forKey: .codeHookSpecification) + codeHookSpecification = codeHookSpecificationDecoded } } extension LexModelsV2ClientTypes { - /// The selection to filter the test set results data at the conversation level. - public struct ConversationLevelTestResultsFilterBy: Swift.Equatable { - /// The selection of matched or mismatched end-to-end status to filter test set results data at the conversation level. - public var endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? + /// Specifies settings that are unique to a locale. For example, you can use different Lambda function depending on the bot's locale. + public struct BotAliasLocaleSettings: Swift.Equatable { + /// Specifies the Lambda function that should be used in the locale. + public var codeHookSpecification: LexModelsV2ClientTypes.CodeHookSpecification? + /// Determines whether the locale is enabled for the bot. If the value is false, the locale isn't available for use. + /// This member is required. + public var enabled: Swift.Bool public init( - endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil + codeHookSpecification: LexModelsV2ClientTypes.CodeHookSpecification? = nil, + enabled: Swift.Bool = false ) { - self.endToEndResult = endToEndResult + self.codeHookSpecification = codeHookSpecification + self.enabled = enabled } } } -extension LexModelsV2ClientTypes.ConversationLogSettings: Swift.Codable { +extension LexModelsV2ClientTypes { + public enum BotAliasStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case available + case creating + case deleting + case failed + case sdkUnknown(Swift.String) + + public static var allCases: [BotAliasStatus] { + return [ + .available, + .creating, + .deleting, + .failed, + .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 .creating: return "Creating" + case .deleting: return "Deleting" + case .failed: return "Failed" + 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 = BotAliasStatus(rawValue: rawValue) ?? BotAliasStatus.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.BotAliasSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case audioLogSettings - case textLogSettings + case botAliasId + case botAliasName + case botAliasStatus + case botVersion + case creationDateTime + case description + case lastUpdatedDateTime } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let audioLogSettings = audioLogSettings { - var audioLogSettingsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .audioLogSettings) - for audiologsetting0 in audioLogSettings { - try audioLogSettingsContainer.encode(audiologsetting0) - } + if let botAliasId = self.botAliasId { + try encodeContainer.encode(botAliasId, forKey: .botAliasId) } - if let textLogSettings = textLogSettings { - var textLogSettingsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .textLogSettings) - for textlogsetting0 in textLogSettings { - try textLogSettingsContainer.encode(textlogsetting0) - } + if let botAliasName = self.botAliasName { + try encodeContainer.encode(botAliasName, forKey: .botAliasName) + } + if let botAliasStatus = self.botAliasStatus { + try encodeContainer.encode(botAliasStatus.rawValue, forKey: .botAliasStatus) + } + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) + } + if let creationDateTime = self.creationDateTime { + try encodeContainer.encodeTimestamp(creationDateTime, format: .epochSeconds, forKey: .creationDateTime) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let lastUpdatedDateTime = self.lastUpdatedDateTime { + try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let textLogSettingsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.TextLogSetting?].self, forKey: .textLogSettings) - var textLogSettingsDecoded0:[LexModelsV2ClientTypes.TextLogSetting]? = nil - if let textLogSettingsContainer = textLogSettingsContainer { - textLogSettingsDecoded0 = [LexModelsV2ClientTypes.TextLogSetting]() - for structure0 in textLogSettingsContainer { - if let structure0 = structure0 { - textLogSettingsDecoded0?.append(structure0) - } - } - } - textLogSettings = textLogSettingsDecoded0 - let audioLogSettingsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AudioLogSetting?].self, forKey: .audioLogSettings) - var audioLogSettingsDecoded0:[LexModelsV2ClientTypes.AudioLogSetting]? = nil - if let audioLogSettingsContainer = audioLogSettingsContainer { - audioLogSettingsDecoded0 = [LexModelsV2ClientTypes.AudioLogSetting]() - for structure0 in audioLogSettingsContainer { - if let structure0 = structure0 { - audioLogSettingsDecoded0?.append(structure0) - } - } - } - audioLogSettings = audioLogSettingsDecoded0 + let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) + botAliasId = botAliasIdDecoded + let botAliasNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasName) + botAliasName = botAliasNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let botAliasStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotAliasStatus.self, forKey: .botAliasStatus) + botAliasStatus = botAliasStatusDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded } } extension LexModelsV2ClientTypes { - /// Configures conversation logging that saves audio, text, and metadata for the conversations with your users. - public struct ConversationLogSettings: Swift.Equatable { - /// The Amazon S3 settings for logging audio to an S3 bucket. - public var audioLogSettings: [LexModelsV2ClientTypes.AudioLogSetting]? - /// The Amazon CloudWatch Logs settings for logging text and metadata. - public var textLogSettings: [LexModelsV2ClientTypes.TextLogSetting]? + /// Summary information about bot aliases returned from the [ListBotAliases](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBotAliases.html) operation. + public struct BotAliasSummary: Swift.Equatable { + /// The unique identifier assigned to the bot alias. You can use this ID to get detailed information about the alias using the [DescribeBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeBotAlias.html) operation. + public var botAliasId: Swift.String? + /// The name of the bot alias. + public var botAliasName: Swift.String? + /// The current state of the bot alias. If the status is Available, the alias is ready for use. + public var botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? + /// The version of the bot that the bot alias references. + public var botVersion: Swift.String? + /// A timestamp of the date and time that the bot alias was created. + public var creationDateTime: ClientRuntime.Date? + /// The description of the bot alias. + public var description: Swift.String? + /// A timestamp of the date and time that the bot alias was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? public init( - audioLogSettings: [LexModelsV2ClientTypes.AudioLogSetting]? = nil, - textLogSettings: [LexModelsV2ClientTypes.TextLogSetting]? = nil + botAliasId: Swift.String? = nil, + botAliasName: Swift.String? = nil, + botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? = nil, + botVersion: Swift.String? = nil, + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil ) { - self.audioLogSettings = audioLogSettings - self.textLogSettings = textLogSettings + self.botAliasId = botAliasId + self.botAliasName = botAliasName + self.botAliasStatus = botAliasStatus + self.botVersion = botVersion + self.creationDateTime = creationDateTime + self.description = description + self.lastUpdatedDateTime = lastUpdatedDateTime } } } -extension LexModelsV2ClientTypes.ConversationLogsDataSource: Swift.Codable { +extension LexModelsV2ClientTypes.BotAliasTestExecutionTarget: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case botAliasId case botId - case filter case localeId } @@ -4536,9 +4836,6 @@ extension LexModelsV2ClientTypes.ConversationLogsDataSource: Swift.Codable { if let botId = self.botId { try encodeContainer.encode(botId, forKey: .botId) } - if let filter = self.filter { - try encodeContainer.encode(filter, forKey: .filter) - } if let localeId = self.localeId { try encodeContainer.encode(localeId, forKey: .localeId) } @@ -4552,1516 +4849,1609 @@ extension LexModelsV2ClientTypes.ConversationLogsDataSource: Swift.Codable { botAliasId = botAliasIdDecoded let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) localeId = localeIdDecoded - let filterDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConversationLogsDataSourceFilterBy.self, forKey: .filter) - filter = filterDecoded } } extension LexModelsV2ClientTypes { - /// The data source that uses conversation logs. - public struct ConversationLogsDataSource: Swift.Equatable { - /// The bot alias Id from the conversation logs. + /// The target Amazon S3 location for the test set execution using a bot alias. + public struct BotAliasTestExecutionTarget: Swift.Equatable { + /// The bot alias Id of the bot alias used in the test set execution. /// This member is required. public var botAliasId: Swift.String? - /// The bot Id from the conversation logs. + /// The bot Id of the bot alias used in the test set execution. /// This member is required. public var botId: Swift.String? - /// The filter for the data source of the conversation log. - /// This member is required. - public var filter: LexModelsV2ClientTypes.ConversationLogsDataSourceFilterBy? - /// The locale Id of the conversation log. + /// The locale Id of the bot alias used in the test set execution. /// This member is required. public var localeId: Swift.String? public init( botAliasId: Swift.String? = nil, botId: Swift.String? = nil, - filter: LexModelsV2ClientTypes.ConversationLogsDataSourceFilterBy? = nil, localeId: Swift.String? = nil ) { self.botAliasId = botAliasId self.botId = botId - self.filter = filter self.localeId = localeId } } } -extension LexModelsV2ClientTypes.ConversationLogsDataSourceFilterBy: Swift.Codable { +extension LexModelsV2ClientTypes.BotExportSpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case endTime - case inputMode - case startTime + case botId + case botVersion } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let endTime = self.endTime { - try encodeContainer.encodeTimestamp(endTime, format: .epochSeconds, forKey: .endTime) - } - if let inputMode = self.inputMode { - try encodeContainer.encode(inputMode.rawValue, forKey: .inputMode) + if let botId = self.botId { + try encodeContainer.encode(botId, forKey: .botId) } - if let startTime = self.startTime { - try encodeContainer.encodeTimestamp(startTime, format: .epochSeconds, forKey: .startTime) + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let startTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startTime) - startTime = startTimeDecoded - let endTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endTime) - endTime = endTimeDecoded - let inputModeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConversationLogsInputModeFilter.self, forKey: .inputMode) - inputMode = inputModeDecoded + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded } } extension LexModelsV2ClientTypes { - /// The selected data source to filter the conversation log. - public struct ConversationLogsDataSourceFilterBy: Swift.Equatable { - /// The end time for the conversation log. - /// This member is required. - public var endTime: ClientRuntime.Date? - /// The selection to filter by input mode for the conversation logs. + /// Provides the identity of a the bot that was exported. + public struct BotExportSpecification: Swift.Equatable { + /// The identifier of the bot assigned by Amazon Lex. /// This member is required. - public var inputMode: LexModelsV2ClientTypes.ConversationLogsInputModeFilter? - /// The start time for the conversation log. + public var botId: Swift.String? + /// The version of the bot that was exported. This will be either DRAFT or the version number. /// This member is required. - public var startTime: ClientRuntime.Date? + public var botVersion: Swift.String? public init( - endTime: ClientRuntime.Date? = nil, - inputMode: LexModelsV2ClientTypes.ConversationLogsInputModeFilter? = nil, - startTime: ClientRuntime.Date? = nil + botId: Swift.String? = nil, + botVersion: Swift.String? = nil ) { - self.endTime = endTime - self.inputMode = inputMode - self.startTime = startTime + self.botId = botId + self.botVersion = botVersion } } } -extension LexModelsV2ClientTypes { - public enum ConversationLogsInputModeFilter: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case speech - case text - case sdkUnknown(Swift.String) +extension LexModelsV2ClientTypes.BotFilter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case `operator` = "operator" + case values + } - public static var allCases: [ConversationLogsInputModeFilter] { - return [ - .speech, - .text, - .sdkUnknown("") - ] + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + if let `operator` = self.`operator` { + try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + } + if let values = values { + var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) + for filtervalue0 in values { + try valuesContainer.encode(filtervalue0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotFilterName.self, forKey: .name) + name = nameDecoded + let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) + var valuesDecoded0:[Swift.String]? = nil + if let valuesContainer = valuesContainer { + valuesDecoded0 = [Swift.String]() + for string0 in valuesContainer { + if let string0 = string0 { + valuesDecoded0?.append(string0) + } + } + } + values = valuesDecoded0 + let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotFilterOperator.self, forKey: .operator) + `operator` = operatorDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Filters the responses returned by the ListBots operation. + public struct BotFilter: Swift.Equatable { + /// The name of the field to filter the list of bots. + /// This member is required. + public var name: LexModelsV2ClientTypes.BotFilterName? + /// The operator to use for the filter. Specify EQ when the ListBots operation should return only aliases that equal the specified value. Specify CO when the ListBots operation should return aliases that contain the specified value. + /// This member is required. + public var `operator`: LexModelsV2ClientTypes.BotFilterOperator? + /// The value to use for filtering the list of bots. + /// This member is required. + public var values: [Swift.String]? + + public init( + name: LexModelsV2ClientTypes.BotFilterName? = nil, + `operator`: LexModelsV2ClientTypes.BotFilterOperator? = nil, + values: [Swift.String]? = nil + ) + { + self.name = name + self.`operator` = `operator` + self.values = values + } + } + +} + +extension LexModelsV2ClientTypes { + public enum BotFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case botname + case bottype + case sdkUnknown(Swift.String) + + public static var allCases: [BotFilterName] { + return [ + .botname, + .bottype, + .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 .speech: return "Speech" - case .text: return "Text" + case .botname: return "BotName" + case .bottype: return "BotType" 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 = ConversationLogsInputModeFilter(rawValue: rawValue) ?? ConversationLogsInputModeFilter.sdkUnknown(rawValue) + self = BotFilterName(rawValue: rawValue) ?? BotFilterName.sdkUnknown(rawValue) } } } -extension CreateBotAliasInput: Swift.Encodable { +extension LexModelsV2ClientTypes { + public enum BotFilterOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case contains + case equals + case notequals + case sdkUnknown(Swift.String) + + public static var allCases: [BotFilterOperator] { + return [ + .contains, + .equals, + .notequals, + .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 .contains: return "CO" + case .equals: return "EQ" + case .notequals: return "NE" + 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 = BotFilterOperator(rawValue: rawValue) ?? BotFilterOperator.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.BotImportSpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botAliasLocaleSettings - case botAliasName - case botVersion - case conversationLogSettings - case description - case sentimentAnalysisSettings - case tags + case botName + case botTags + case dataPrivacy + case idleSessionTTLInSeconds + case roleArn + case testBotAliasTags } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botAliasLocaleSettings = botAliasLocaleSettings { - var botAliasLocaleSettingsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .botAliasLocaleSettings) - for (dictKey0, botAliasLocaleSettingsMap0) in botAliasLocaleSettings { - try botAliasLocaleSettingsContainer.encode(botAliasLocaleSettingsMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + if let botName = self.botName { + try encodeContainer.encode(botName, forKey: .botName) + } + if let botTags = botTags { + var botTagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .botTags) + for (dictKey0, tagMap0) in botTags { + try botTagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) } } - if let botAliasName = self.botAliasName { - try encodeContainer.encode(botAliasName, forKey: .botAliasName) + if let dataPrivacy = self.dataPrivacy { + try encodeContainer.encode(dataPrivacy, forKey: .dataPrivacy) } - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) + if let idleSessionTTLInSeconds = self.idleSessionTTLInSeconds { + try encodeContainer.encode(idleSessionTTLInSeconds, forKey: .idleSessionTTLInSeconds) } - if let conversationLogSettings = self.conversationLogSettings { - try encodeContainer.encode(conversationLogSettings, forKey: .conversationLogSettings) + if let roleArn = self.roleArn { + try encodeContainer.encode(roleArn, forKey: .roleArn) } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) + if let testBotAliasTags = testBotAliasTags { + var testBotAliasTagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .testBotAliasTags) + for (dictKey0, tagMap0) in testBotAliasTags { + try testBotAliasTagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } } - if let sentimentAnalysisSettings = self.sentimentAnalysisSettings { - try encodeContainer.encode(sentimentAnalysisSettings, forKey: .sentimentAnalysisSettings) + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) + botName = botNameDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + let dataPrivacyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DataPrivacy.self, forKey: .dataPrivacy) + dataPrivacy = dataPrivacyDecoded + let idleSessionTTLInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .idleSessionTTLInSeconds) + idleSessionTTLInSeconds = idleSessionTTLInSecondsDecoded + let botTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .botTags) + var botTagsDecoded0: [Swift.String:Swift.String]? = nil + if let botTagsContainer = botTagsContainer { + botTagsDecoded0 = [Swift.String:Swift.String]() + for (key0, tagvalue0) in botTagsContainer { + if let tagvalue0 = tagvalue0 { + botTagsDecoded0?[key0] = tagvalue0 + } + } } - if let tags = tags { - var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) - for (dictKey0, tagMap0) in tags { - try tagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + botTags = botTagsDecoded0 + let testBotAliasTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .testBotAliasTags) + var testBotAliasTagsDecoded0: [Swift.String:Swift.String]? = nil + if let testBotAliasTagsContainer = testBotAliasTagsContainer { + testBotAliasTagsDecoded0 = [Swift.String:Swift.String]() + for (key0, tagvalue0) in testBotAliasTagsContainer { + if let tagvalue0 = tagvalue0 { + testBotAliasTagsDecoded0?[key0] = tagvalue0 + } } } + testBotAliasTags = testBotAliasTagsDecoded0 } } -extension CreateBotAliasInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil +extension LexModelsV2ClientTypes { + /// Provides the bot parameters required for importing a bot. + public struct BotImportSpecification: Swift.Equatable { + /// The name that Amazon Lex should use for the bot. + /// This member is required. + public var botName: Swift.String? + /// A list of tags to add to the bot. You can only add tags when you import a bot. You can't use the UpdateBot operation to update tags. To update tags, use the TagResource operation. + public var botTags: [Swift.String:Swift.String]? + /// By default, data stored by Amazon Lex is encrypted. The DataPrivacy structure provides settings that determine how Amazon Lex handles special cases of securing the data for your bot. + /// This member is required. + public var dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? + /// The time, in seconds, that Amazon Lex should keep information about a user's conversation with the bot. A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Lex deletes any data provided before the timeout. You can specify between 60 (1 minute) and 86,400 (24 hours) seconds. + public var idleSessionTTLInSeconds: Swift.Int? + /// The Amazon Resource Name (ARN) of the IAM role used to build and run the bot. + /// This member is required. + public var roleArn: Swift.String? + /// A list of tags to add to the test alias for a bot. You can only add tags when you import a bot. You can't use the UpdateAlias operation to update tags. To update tags on the test alias, use the TagResource operation. + public var testBotAliasTags: [Swift.String:Swift.String]? + + public init( + botName: Swift.String? = nil, + botTags: [Swift.String:Swift.String]? = nil, + dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? = nil, + idleSessionTTLInSeconds: Swift.Int? = nil, + roleArn: Swift.String? = nil, + testBotAliasTags: [Swift.String:Swift.String]? = nil + ) + { + self.botName = botName + self.botTags = botTags + self.dataPrivacy = dataPrivacy + self.idleSessionTTLInSeconds = idleSessionTTLInSeconds + self.roleArn = roleArn + self.testBotAliasTags = testBotAliasTags } - return "/bots/\(botId.urlPercentEncoding())/botaliases" } + } -public struct CreateBotAliasInput: Swift.Equatable { - /// Maps configuration information to a specific locale. You can use this parameter to specify a specific Lambda function to run different functions in different locales. - public var botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? - /// The alias to create. The name must be unique for the bot. - /// This member is required. - public var botAliasName: Swift.String? - /// The unique identifier of the bot that the alias applies to. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot that this alias points to. You can use the [UpdateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateBotAlias.html) operation to change the bot version associated with the alias. - public var botVersion: Swift.String? - /// Specifies whether Amazon Lex logs text and audio for a conversation with the bot. When you enable conversation logs, text logs store text input, transcripts of audio input, and associated metadata in Amazon CloudWatch Logs. Audio logs store audio input in Amazon S3. - public var conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? - /// A description of the alias. Use this description to help identify the alias. - public var description: Swift.String? - /// Determines whether Amazon Lex will use Amazon Comprehend to detect the sentiment of user utterances. - public var sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? - /// A list of tags to add to the bot alias. You can only add tags when you create an alias, you can't use the UpdateBotAlias operation to update the tags on a bot alias. To update tags, use the TagResource operation. - public var tags: [Swift.String:Swift.String]? +extension LexModelsV2ClientTypes.BotLocaleExportSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botId + case botVersion + case localeId + } - public init( - botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil, - botAliasName: Swift.String? = nil, - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? = nil, - description: Swift.String? = nil, - sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? = nil, - tags: [Swift.String:Swift.String]? = nil - ) - { - self.botAliasLocaleSettings = botAliasLocaleSettings - self.botAliasName = botAliasName - self.botId = botId - self.botVersion = botVersion - self.conversationLogSettings = conversationLogSettings - self.description = description - self.sentimentAnalysisSettings = sentimentAnalysisSettings - self.tags = tags + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botId = self.botId { + try encodeContainer.encode(botId, forKey: .botId) + } + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) + } + if let localeId = self.localeId { + try encodeContainer.encode(localeId, forKey: .localeId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded } } -struct CreateBotAliasInputBody: Swift.Equatable { - let botAliasName: Swift.String? - let description: Swift.String? - let botVersion: Swift.String? - let botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? - let conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? - let sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? - let tags: [Swift.String:Swift.String]? +extension LexModelsV2ClientTypes { + /// Provides the bot locale parameters required for exporting a bot locale. + public struct BotLocaleExportSpecification: Swift.Equatable { + /// The identifier of the bot to create the locale for. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot to export. + /// This member is required. + public var botVersion: Swift.String? + /// The identifier of the language and locale to export. The string must match one of the locales in the bot. + /// This member is required. + public var localeId: Swift.String? + + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId + } + } + } -extension CreateBotAliasInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.BotLocaleFilter: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botAliasLocaleSettings - case botAliasName - case botVersion - case conversationLogSettings - case description - case sentimentAnalysisSettings - case tags + case name + case `operator` = "operator" + case values } - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botAliasNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasName) - botAliasName = botAliasNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let botAliasLocaleSettingsContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.BotAliasLocaleSettings?].self, forKey: .botAliasLocaleSettings) - var botAliasLocaleSettingsDecoded0: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil - if let botAliasLocaleSettingsContainer = botAliasLocaleSettingsContainer { - botAliasLocaleSettingsDecoded0 = [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]() - for (key0, botaliaslocalesettings0) in botAliasLocaleSettingsContainer { - if let botaliaslocalesettings0 = botaliaslocalesettings0 { - botAliasLocaleSettingsDecoded0?[key0] = botaliaslocalesettings0 - } + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let `operator` = self.`operator` { + try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + } + if let values = values { + var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) + for filtervalue0 in values { + try valuesContainer.encode(filtervalue0) } } - botAliasLocaleSettings = botAliasLocaleSettingsDecoded0 - let conversationLogSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConversationLogSettings.self, forKey: .conversationLogSettings) - conversationLogSettings = conversationLogSettingsDecoded - let sentimentAnalysisSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SentimentAnalysisSettings.self, forKey: .sentimentAnalysisSettings) - sentimentAnalysisSettings = sentimentAnalysisSettingsDecoded - 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 + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleFilterName.self, forKey: .name) + name = nameDecoded + let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) + var valuesDecoded0:[Swift.String]? = nil + if let valuesContainer = valuesContainer { + valuesDecoded0 = [Swift.String]() + for string0 in valuesContainer { + if let string0 = string0 { + valuesDecoded0?.append(string0) } } } - tags = tagsDecoded0 + values = valuesDecoded0 + let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleFilterOperator.self, forKey: .operator) + `operator` = operatorDecoded } } -public enum CreateBotAliasOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) +extension LexModelsV2ClientTypes { + /// Filters responses returned by the ListBotLocales operation. + public struct BotLocaleFilter: Swift.Equatable { + /// The name of the field to filter the list of bots. + /// This member is required. + public var name: LexModelsV2ClientTypes.BotLocaleFilterName? + /// The operator to use for the filter. Specify EQ when the ListBotLocales operation should return only aliases that equal the specified value. Specify CO when the ListBotLocales operation should return aliases that contain the specified value. + /// This member is required. + public var `operator`: LexModelsV2ClientTypes.BotLocaleFilterOperator? + /// The value to use for filtering the list of bots. + /// This member is required. + public var values: [Swift.String]? + + public init( + name: LexModelsV2ClientTypes.BotLocaleFilterName? = nil, + `operator`: LexModelsV2ClientTypes.BotLocaleFilterOperator? = nil, + values: [Swift.String]? = nil + ) + { + self.name = name + self.`operator` = `operator` + self.values = values } } + } -extension CreateBotAliasOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: CreateBotAliasOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botAliasId = output.botAliasId - self.botAliasLocaleSettings = output.botAliasLocaleSettings - self.botAliasName = output.botAliasName - self.botAliasStatus = output.botAliasStatus - self.botId = output.botId - self.botVersion = output.botVersion - self.conversationLogSettings = output.conversationLogSettings - self.creationDateTime = output.creationDateTime - self.description = output.description - self.sentimentAnalysisSettings = output.sentimentAnalysisSettings - self.tags = output.tags - } else { - self.botAliasId = nil - self.botAliasLocaleSettings = nil - self.botAliasName = nil - self.botAliasStatus = nil - self.botId = nil - self.botVersion = nil - self.conversationLogSettings = nil - self.creationDateTime = nil - self.description = nil - self.sentimentAnalysisSettings = nil - self.tags = nil +extension LexModelsV2ClientTypes { + public enum BotLocaleFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case botlocalename + case sdkUnknown(Swift.String) + + public static var allCases: [BotLocaleFilterName] { + return [ + .botlocalename, + .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 .botlocalename: return "BotLocaleName" + 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 = BotLocaleFilterName(rawValue: rawValue) ?? BotLocaleFilterName.sdkUnknown(rawValue) } } } -public struct CreateBotAliasOutputResponse: Swift.Equatable { - /// The unique identifier of the bot alias. - public var botAliasId: Swift.String? - /// Configuration information for a specific locale. - public var botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? - /// The name specified for the bot alias. - public var botAliasName: Swift.String? - /// The current status of the alias. The alias is first put into the Creating state. When the alias is ready to be used, it is put into the Available state. You can use the DescribeBotAlias operation to get the current state of an alias. - public var botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? - /// The unique identifier of the bot that this alias applies to. - public var botId: Swift.String? - /// The version of the bot associated with this alias. - public var botVersion: Swift.String? - /// The conversation log settings specified for the alias. - public var conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? - /// A Unix timestamp indicating the date and time that the bot alias was created. - public var creationDateTime: ClientRuntime.Date? - /// The description specified for the bot alias. - public var description: Swift.String? - /// Determines whether Amazon Lex will use Amazon Comprehend to detect the sentiment of user utterances. - public var sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? - /// A list of tags associated with the bot alias. - public var tags: [Swift.String:Swift.String]? +extension LexModelsV2ClientTypes { + public enum BotLocaleFilterOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case contains + case equals + case sdkUnknown(Swift.String) - public init( - botAliasId: Swift.String? = nil, - botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil, - botAliasName: Swift.String? = nil, - botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? = nil, - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? = nil, - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? = nil, - tags: [Swift.String:Swift.String]? = nil - ) - { - self.botAliasId = botAliasId - self.botAliasLocaleSettings = botAliasLocaleSettings - self.botAliasName = botAliasName - self.botAliasStatus = botAliasStatus - self.botId = botId - self.botVersion = botVersion - self.conversationLogSettings = conversationLogSettings - self.creationDateTime = creationDateTime - self.description = description - self.sentimentAnalysisSettings = sentimentAnalysisSettings - self.tags = tags + public static var allCases: [BotLocaleFilterOperator] { + return [ + .contains, + .equals, + .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 .contains: return "CO" + case .equals: return "EQ" + 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 = BotLocaleFilterOperator(rawValue: rawValue) ?? BotLocaleFilterOperator.sdkUnknown(rawValue) + } } } -struct CreateBotAliasOutputResponseBody: Swift.Equatable { - let botAliasId: Swift.String? - let botAliasName: Swift.String? - let description: Swift.String? - let botVersion: Swift.String? - let botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? - let conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? - let sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? - let botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? - let botId: Swift.String? - let creationDateTime: ClientRuntime.Date? - let tags: [Swift.String:Swift.String]? -} - -extension CreateBotAliasOutputResponseBody: Swift.Decodable { +extension LexModelsV2ClientTypes.BotLocaleHistoryEvent: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botAliasId - case botAliasLocaleSettings - case botAliasName - case botAliasStatus - case botId - case botVersion - case conversationLogSettings - case creationDateTime - case description - case sentimentAnalysisSettings - case tags + case event + case eventDate + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let event = self.event { + try encodeContainer.encode(event, forKey: .event) + } + if let eventDate = self.eventDate { + try encodeContainer.encodeTimestamp(eventDate, format: .epochSeconds, forKey: .eventDate) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) - botAliasId = botAliasIdDecoded - let botAliasNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasName) - botAliasName = botAliasNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let botAliasLocaleSettingsContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.BotAliasLocaleSettings?].self, forKey: .botAliasLocaleSettings) - var botAliasLocaleSettingsDecoded0: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil - if let botAliasLocaleSettingsContainer = botAliasLocaleSettingsContainer { - botAliasLocaleSettingsDecoded0 = [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]() - for (key0, botaliaslocalesettings0) in botAliasLocaleSettingsContainer { - if let botaliaslocalesettings0 = botaliaslocalesettings0 { - botAliasLocaleSettingsDecoded0?[key0] = botaliaslocalesettings0 - } - } - } - botAliasLocaleSettings = botAliasLocaleSettingsDecoded0 - let conversationLogSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConversationLogSettings.self, forKey: .conversationLogSettings) - conversationLogSettings = conversationLogSettingsDecoded - let sentimentAnalysisSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SentimentAnalysisSettings.self, forKey: .sentimentAnalysisSettings) - sentimentAnalysisSettings = sentimentAnalysisSettingsDecoded - let botAliasStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotAliasStatus.self, forKey: .botAliasStatus) - botAliasStatus = botAliasStatusDecoded - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - 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 - } - } + let eventDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .event) + event = eventDecoded + let eventDateDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .eventDate) + eventDate = eventDateDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides information about an event that occurred affecting the bot locale. + public struct BotLocaleHistoryEvent: Swift.Equatable { + /// A description of the event that occurred. + /// This member is required. + public var event: Swift.String? + /// A timestamp of the date and time that the event occurred. + /// This member is required. + public var eventDate: ClientRuntime.Date? + + public init( + event: Swift.String? = nil, + eventDate: ClientRuntime.Date? = nil + ) + { + self.event = event + self.eventDate = eventDate } - tags = tagsDecoded0 } + } -extension CreateBotInput: Swift.Encodable { +extension LexModelsV2ClientTypes.BotLocaleImportSpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botMembers - case botName - case botTags - case botType - case dataPrivacy - case description - case idleSessionTTLInSeconds - case roleArn - case testBotAliasTags + case botId + case botVersion + case localeId + case nluIntentConfidenceThreshold + case voiceSettings } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botMembers = botMembers { - var botMembersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .botMembers) - for botmember0 in botMembers { - try botMembersContainer.encode(botmember0) - } - } - if let botName = self.botName { - try encodeContainer.encode(botName, forKey: .botName) - } - if let botTags = botTags { - var botTagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .botTags) - for (dictKey0, tagMap0) in botTags { - try botTagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } - } - if let botType = self.botType { - try encodeContainer.encode(botType.rawValue, forKey: .botType) - } - if let dataPrivacy = self.dataPrivacy { - try encodeContainer.encode(dataPrivacy, forKey: .dataPrivacy) + if let botId = self.botId { + try encodeContainer.encode(botId, forKey: .botId) } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) } - if let idleSessionTTLInSeconds = self.idleSessionTTLInSeconds { - try encodeContainer.encode(idleSessionTTLInSeconds, forKey: .idleSessionTTLInSeconds) + if let localeId = self.localeId { + try encodeContainer.encode(localeId, forKey: .localeId) } - if let roleArn = self.roleArn { - try encodeContainer.encode(roleArn, forKey: .roleArn) + if let nluIntentConfidenceThreshold = self.nluIntentConfidenceThreshold { + try encodeContainer.encode(nluIntentConfidenceThreshold, forKey: .nluIntentConfidenceThreshold) } - if let testBotAliasTags = testBotAliasTags { - var testBotAliasTagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .testBotAliasTags) - for (dictKey0, tagMap0) in testBotAliasTags { - try testBotAliasTagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } + if let voiceSettings = self.voiceSettings { + try encodeContainer.encode(voiceSettings, forKey: .voiceSettings) } } -} -extension CreateBotInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - return "/bots" + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let nluIntentConfidenceThresholdDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .nluIntentConfidenceThreshold) + nluIntentConfidenceThreshold = nluIntentConfidenceThresholdDecoded + let voiceSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.VoiceSettings.self, forKey: .voiceSettings) + voiceSettings = voiceSettingsDecoded } } -public struct CreateBotInput: Swift.Equatable { - /// The list of bot members in a network to be created. - public var botMembers: [LexModelsV2ClientTypes.BotMember]? - /// The name of the bot. The bot name must be unique in the account that creates the bot. - /// This member is required. - public var botName: Swift.String? - /// A list of tags to add to the bot. You can only add tags when you create a bot. You can't use the UpdateBot operation to update tags. To update tags, use the TagResource operation. - public var botTags: [Swift.String:Swift.String]? - /// The type of a bot to create. - public var botType: LexModelsV2ClientTypes.BotType? - /// Provides information on additional privacy protections Amazon Lex should use with the bot's data. - /// This member is required. - public var dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? - /// A description of the bot. It appears in lists to help you identify a particular bot. - public var description: Swift.String? - /// The time, in seconds, that Amazon Lex should keep information about a user's conversation with the bot. A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Lex deletes any data provided before the timeout. You can specify between 60 (1 minute) and 86,400 (24 hours) seconds. - /// This member is required. - public var idleSessionTTLInSeconds: Swift.Int? - /// The Amazon Resource Name (ARN) of an IAM role that has permission to access the bot. - /// This member is required. - public var roleArn: Swift.String? - /// A list of tags to add to the test alias for a bot. You can only add tags when you create a bot. You can't use the UpdateAlias operation to update tags. To update tags on the test alias, use the TagResource operation. - public var testBotAliasTags: [Swift.String:Swift.String]? - - public init( - botMembers: [LexModelsV2ClientTypes.BotMember]? = nil, - botName: Swift.String? = nil, - botTags: [Swift.String:Swift.String]? = nil, - botType: LexModelsV2ClientTypes.BotType? = nil, - dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? = nil, - description: Swift.String? = nil, - idleSessionTTLInSeconds: Swift.Int? = nil, - roleArn: Swift.String? = nil, - testBotAliasTags: [Swift.String:Swift.String]? = nil - ) - { - self.botMembers = botMembers - self.botName = botName - self.botTags = botTags - self.botType = botType - self.dataPrivacy = dataPrivacy - self.description = description - self.idleSessionTTLInSeconds = idleSessionTTLInSeconds - self.roleArn = roleArn - self.testBotAliasTags = testBotAliasTags +extension LexModelsV2ClientTypes { + /// Provides the bot locale parameters required for importing a bot locale. + public struct BotLocaleImportSpecification: Swift.Equatable { + /// The identifier of the bot to import the locale to. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot to import the locale to. This can only be the DRAFT version of the bot. + /// This member is required. + public var botVersion: Swift.String? + /// The identifier of the language and locale that the bot will be used in. The string must match one of the supported locales. All of the intents, slot types, and slots used in the bot must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? + /// Determines the threshold where Amazon Lex will insert the AMAZON.FallbackIntent, AMAZON.KendraSearchIntent, or both when returning alternative intents. AMAZON.FallbackIntent and AMAZON.KendraSearchIntent are only inserted if they are configured for the bot. For example, suppose a bot is configured with the confidence threshold of 0.80 and the AMAZON.FallbackIntent. Amazon Lex returns three alternative intents with the following confidence scores: IntentA (0.70), IntentB (0.60), IntentC (0.50). The response from the PostText operation would be: + /// + /// * AMAZON.FallbackIntent + /// + /// * IntentA + /// + /// * IntentB + /// + /// * IntentC + public var nluIntentConfidenceThreshold: Swift.Double? + /// Defines settings for using an Amazon Polly voice to communicate with a user. + public var voiceSettings: LexModelsV2ClientTypes.VoiceSettings? + + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil, + nluIntentConfidenceThreshold: Swift.Double? = nil, + voiceSettings: LexModelsV2ClientTypes.VoiceSettings? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId + self.nluIntentConfidenceThreshold = nluIntentConfidenceThreshold + self.voiceSettings = voiceSettings + } } + } -struct CreateBotInputBody: Swift.Equatable { - let botName: Swift.String? - let description: Swift.String? - let roleArn: Swift.String? - let dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? - let idleSessionTTLInSeconds: Swift.Int? - let botTags: [Swift.String:Swift.String]? - let testBotAliasTags: [Swift.String:Swift.String]? - let botType: LexModelsV2ClientTypes.BotType? - let botMembers: [LexModelsV2ClientTypes.BotMember]? +extension LexModelsV2ClientTypes { + public enum BotLocaleSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case botlocalename + case sdkUnknown(Swift.String) + + public static var allCases: [BotLocaleSortAttribute] { + return [ + .botlocalename, + .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 .botlocalename: return "BotLocaleName" + 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 = BotLocaleSortAttribute(rawValue: rawValue) ?? BotLocaleSortAttribute.sdkUnknown(rawValue) + } + } } -extension CreateBotInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.BotLocaleSortBy: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botMembers - case botName - case botTags - case botType - case dataPrivacy - case description - case idleSessionTTLInSeconds - case roleArn - case testBotAliasTags + case attribute + case order + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attribute = self.attribute { + try encodeContainer.encode(attribute.rawValue, forKey: .attribute) + } + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) - botName = botNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) - roleArn = roleArnDecoded - let dataPrivacyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DataPrivacy.self, forKey: .dataPrivacy) - dataPrivacy = dataPrivacyDecoded - let idleSessionTTLInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .idleSessionTTLInSeconds) - idleSessionTTLInSeconds = idleSessionTTLInSecondsDecoded - let botTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .botTags) - var botTagsDecoded0: [Swift.String:Swift.String]? = nil - if let botTagsContainer = botTagsContainer { - botTagsDecoded0 = [Swift.String:Swift.String]() - for (key0, tagvalue0) in botTagsContainer { - if let tagvalue0 = tagvalue0 { - botTagsDecoded0?[key0] = tagvalue0 - } - } + let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleSortAttribute.self, forKey: .attribute) + attribute = attributeDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) + order = orderDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Specifies attributes for sorting a list of bot locales. + public struct BotLocaleSortBy: Swift.Equatable { + /// The bot locale attribute to sort by. + /// This member is required. + public var attribute: LexModelsV2ClientTypes.BotLocaleSortAttribute? + /// Specifies whether to sort the bot locales in ascending or descending order. + /// This member is required. + public var order: LexModelsV2ClientTypes.SortOrder? + + public init( + attribute: LexModelsV2ClientTypes.BotLocaleSortAttribute? = nil, + order: LexModelsV2ClientTypes.SortOrder? = nil + ) + { + self.attribute = attribute + self.order = order } - botTags = botTagsDecoded0 - let testBotAliasTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .testBotAliasTags) - var testBotAliasTagsDecoded0: [Swift.String:Swift.String]? = nil - if let testBotAliasTagsContainer = testBotAliasTagsContainer { - testBotAliasTagsDecoded0 = [Swift.String:Swift.String]() - for (key0, tagvalue0) in testBotAliasTagsContainer { - if let tagvalue0 = tagvalue0 { - testBotAliasTagsDecoded0?[key0] = tagvalue0 - } - } + } + +} + +extension LexModelsV2ClientTypes { + public enum BotLocaleStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case building + case built + case creating + case deleting + case failed + case importing + case notbuilt + case processing + case readyexpresstesting + case sdkUnknown(Swift.String) + + public static var allCases: [BotLocaleStatus] { + return [ + .building, + .built, + .creating, + .deleting, + .failed, + .importing, + .notbuilt, + .processing, + .readyexpresstesting, + .sdkUnknown("") + ] } - testBotAliasTags = testBotAliasTagsDecoded0 - let botTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotType.self, forKey: .botType) - botType = botTypeDecoded - let botMembersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotMember?].self, forKey: .botMembers) - var botMembersDecoded0:[LexModelsV2ClientTypes.BotMember]? = nil - if let botMembersContainer = botMembersContainer { - botMembersDecoded0 = [LexModelsV2ClientTypes.BotMember]() - for structure0 in botMembersContainer { - if let structure0 = structure0 { - botMembersDecoded0?.append(structure0) - } + 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 .building: return "Building" + case .built: return "Built" + case .creating: return "Creating" + case .deleting: return "Deleting" + case .failed: return "Failed" + case .importing: return "Importing" + case .notbuilt: return "NotBuilt" + case .processing: return "Processing" + case .readyexpresstesting: return "ReadyExpressTesting" + case let .sdkUnknown(s): return s } } - botMembers = botMembersDecoded0 + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = BotLocaleStatus(rawValue: rawValue) ?? BotLocaleStatus.sdkUnknown(rawValue) + } } } -extension CreateBotLocaleInput: Swift.Encodable { +extension LexModelsV2ClientTypes.BotLocaleSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case botLocaleStatus case description + case lastBuildSubmittedDateTime + case lastUpdatedDateTime case localeId - case nluIntentConfidenceThreshold - case voiceSettings + case localeName } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botLocaleStatus = self.botLocaleStatus { + try encodeContainer.encode(botLocaleStatus.rawValue, forKey: .botLocaleStatus) + } if let description = self.description { try encodeContainer.encode(description, forKey: .description) } + if let lastBuildSubmittedDateTime = self.lastBuildSubmittedDateTime { + try encodeContainer.encodeTimestamp(lastBuildSubmittedDateTime, format: .epochSeconds, forKey: .lastBuildSubmittedDateTime) + } + if let lastUpdatedDateTime = self.lastUpdatedDateTime { + try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) + } if let localeId = self.localeId { try encodeContainer.encode(localeId, forKey: .localeId) } - if let nluIntentConfidenceThreshold = self.nluIntentConfidenceThreshold { - try encodeContainer.encode(nluIntentConfidenceThreshold, forKey: .nluIntentConfidenceThreshold) - } - if let voiceSettings = self.voiceSettings { - try encodeContainer.encode(voiceSettings, forKey: .voiceSettings) + if let localeName = self.localeName { + try encodeContainer.encode(localeName, forKey: .localeName) } } -} -extension CreateBotLocaleInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales" + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let localeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeName) + localeName = localeNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let botLocaleStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleStatus.self, forKey: .botLocaleStatus) + botLocaleStatus = botLocaleStatusDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let lastBuildSubmittedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastBuildSubmittedDateTime) + lastBuildSubmittedDateTime = lastBuildSubmittedDateTimeDecoded } } -public struct CreateBotLocaleInput: Swift.Equatable { - /// The identifier of the bot to create the locale for. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot to create the locale for. This can only be the draft version of the bot. - /// This member is required. - public var botVersion: Swift.String? - /// A description of the bot locale. Use this to help identify the bot locale in lists. - public var description: Swift.String? - /// The identifier of the language and locale that the bot will be used in. The string must match one of the supported locales. All of the intents, slot types, and slots used in the bot must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? - /// Determines the threshold where Amazon Lex will insert the AMAZON.FallbackIntent, AMAZON.KendraSearchIntent, or both when returning alternative intents. AMAZON.FallbackIntent and AMAZON.KendraSearchIntent are only inserted if they are configured for the bot. For example, suppose a bot is configured with the confidence threshold of 0.80 and the AMAZON.FallbackIntent. Amazon Lex returns three alternative intents with the following confidence scores: IntentA (0.70), IntentB (0.60), IntentC (0.50). The response from the RecognizeText operation would be: - /// - /// * AMAZON.FallbackIntent - /// - /// * IntentA - /// - /// * IntentB - /// - /// * IntentC - /// This member is required. - public var nluIntentConfidenceThreshold: Swift.Double? - /// The Amazon Polly voice ID that Amazon Lex uses for voice interaction with the user. - public var voiceSettings: LexModelsV2ClientTypes.VoiceSettings? +extension LexModelsV2ClientTypes { + /// Summary information about bot locales returned by the [ListBotLocales](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBotLocales.html) operation. + public struct BotLocaleSummary: Swift.Equatable { + /// The current status of the bot locale. When the status is Built the locale is ready for use. + public var botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? + /// The description of the bot locale. + public var description: Swift.String? + /// A timestamp of the date and time that the bot locale was last built. + public var lastBuildSubmittedDateTime: ClientRuntime.Date? + /// A timestamp of the date and time that the bot locale was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The language and locale of the bot locale. + public var localeId: Swift.String? + /// The name of the bot locale. + public var localeName: Swift.String? - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - description: Swift.String? = nil, - localeId: Swift.String? = nil, - nluIntentConfidenceThreshold: Swift.Double? = nil, - voiceSettings: LexModelsV2ClientTypes.VoiceSettings? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.description = description - self.localeId = localeId - self.nluIntentConfidenceThreshold = nluIntentConfidenceThreshold - self.voiceSettings = voiceSettings + public init( + botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? = nil, + description: Swift.String? = nil, + lastBuildSubmittedDateTime: ClientRuntime.Date? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + localeId: Swift.String? = nil, + localeName: Swift.String? = nil + ) + { + self.botLocaleStatus = botLocaleStatus + self.description = description + self.lastBuildSubmittedDateTime = lastBuildSubmittedDateTime + self.lastUpdatedDateTime = lastUpdatedDateTime + self.localeId = localeId + self.localeName = localeName + } } -} -struct CreateBotLocaleInputBody: Swift.Equatable { - let localeId: Swift.String? - let description: Swift.String? - let nluIntentConfidenceThreshold: Swift.Double? - let voiceSettings: LexModelsV2ClientTypes.VoiceSettings? } -extension CreateBotLocaleInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.BotMember: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case description - case localeId - case nluIntentConfidenceThreshold - case voiceSettings + case botMemberAliasId + case botMemberAliasName + case botMemberId + case botMemberName + case botMemberVersion + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botMemberAliasId = self.botMemberAliasId { + try encodeContainer.encode(botMemberAliasId, forKey: .botMemberAliasId) + } + if let botMemberAliasName = self.botMemberAliasName { + try encodeContainer.encode(botMemberAliasName, forKey: .botMemberAliasName) + } + if let botMemberId = self.botMemberId { + try encodeContainer.encode(botMemberId, forKey: .botMemberId) + } + if let botMemberName = self.botMemberName { + try encodeContainer.encode(botMemberName, forKey: .botMemberName) + } + if let botMemberVersion = self.botMemberVersion { + try encodeContainer.encode(botMemberVersion, forKey: .botMemberVersion) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let nluIntentConfidenceThresholdDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .nluIntentConfidenceThreshold) - nluIntentConfidenceThreshold = nluIntentConfidenceThresholdDecoded - let voiceSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.VoiceSettings.self, forKey: .voiceSettings) - voiceSettings = voiceSettingsDecoded + let botMemberIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botMemberId) + botMemberId = botMemberIdDecoded + let botMemberNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botMemberName) + botMemberName = botMemberNameDecoded + let botMemberAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botMemberAliasId) + botMemberAliasId = botMemberAliasIdDecoded + let botMemberAliasNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botMemberAliasName) + botMemberAliasName = botMemberAliasNameDecoded + let botMemberVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botMemberVersion) + botMemberVersion = botMemberVersionDecoded } } -public enum CreateBotLocaleOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) +extension LexModelsV2ClientTypes { + /// A bot that is a member of a network of bots. + public struct BotMember: Swift.Equatable { + /// The alias ID of a bot that is a member of this network of bots. + /// This member is required. + public var botMemberAliasId: Swift.String? + /// The alias name of a bot that is a member of this network of bots. + /// This member is required. + public var botMemberAliasName: Swift.String? + /// The unique ID of a bot that is a member of this network of bots. + /// This member is required. + public var botMemberId: Swift.String? + /// The unique name of a bot that is a member of this network of bots. + /// This member is required. + public var botMemberName: Swift.String? + /// The version of a bot that is a member of this network of bots. + /// This member is required. + public var botMemberVersion: Swift.String? + + public init( + botMemberAliasId: Swift.String? = nil, + botMemberAliasName: Swift.String? = nil, + botMemberId: Swift.String? = nil, + botMemberName: Swift.String? = nil, + botMemberVersion: Swift.String? = nil + ) + { + self.botMemberAliasId = botMemberAliasId + self.botMemberAliasName = botMemberAliasName + self.botMemberId = botMemberId + self.botMemberName = botMemberName + self.botMemberVersion = botMemberVersion } } + } -extension CreateBotLocaleOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: CreateBotLocaleOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botLocaleStatus = output.botLocaleStatus - self.botVersion = output.botVersion - self.creationDateTime = output.creationDateTime - self.description = output.description - self.localeId = output.localeId - self.localeName = output.localeName - self.nluIntentConfidenceThreshold = output.nluIntentConfidenceThreshold - self.voiceSettings = output.voiceSettings - } else { - self.botId = nil - self.botLocaleStatus = nil - self.botVersion = nil - self.creationDateTime = nil - self.description = nil - self.localeId = nil - self.localeName = nil - self.nluIntentConfidenceThreshold = nil - self.voiceSettings = nil +extension LexModelsV2ClientTypes.BotRecommendationResultStatistics: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case intents + case slotTypes + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let intents = self.intents { + try encodeContainer.encode(intents, forKey: .intents) + } + if let slotTypes = self.slotTypes { + try encodeContainer.encode(slotTypes, forKey: .slotTypes) } } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let intentsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentStatistics.self, forKey: .intents) + intents = intentsDecoded + let slotTypesDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotTypeStatistics.self, forKey: .slotTypes) + slotTypes = slotTypesDecoded + } } -public struct CreateBotLocaleOutputResponse: Swift.Equatable { - /// The specified bot identifier. - public var botId: Swift.String? - /// The status of the bot. When the status is Creating the bot locale is being configured. When the status is Building Amazon Lex is building the bot for testing and use. If the status of the bot is ReadyExpressTesting, you can test the bot using the exact utterances specified in the bots' intents. When the bot is ready for full testing or to run, the status is Built. If there was a problem with building the bot, the status is Failed. If the bot was saved but not built, the status is NotBuilt. - public var botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? - /// The specified bot version. - public var botVersion: Swift.String? - /// A timestamp specifying the date and time that the bot locale was created. - public var creationDateTime: ClientRuntime.Date? - /// The specified description of the bot locale. - public var description: Swift.String? - /// The specified locale identifier. - public var localeId: Swift.String? - /// The specified locale name. - public var localeName: Swift.String? - /// The specified confidence threshold for inserting the AMAZON.FallbackIntent and AMAZON.KendraSearchIntent intents. - public var nluIntentConfidenceThreshold: Swift.Double? - /// The Amazon Polly voice ID that Amazon Lex uses for voice interaction with the user. - public var voiceSettings: LexModelsV2ClientTypes.VoiceSettings? +extension LexModelsV2ClientTypes { + /// A statistical summary of the bot recommendation results. + public struct BotRecommendationResultStatistics: Swift.Equatable { + /// Statistical information about about the intents associated with the bot recommendation results. + public var intents: LexModelsV2ClientTypes.IntentStatistics? + /// Statistical information about the slot types associated with the bot recommendation results. + public var slotTypes: LexModelsV2ClientTypes.SlotTypeStatistics? - public init( - botId: Swift.String? = nil, - botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? = nil, - botVersion: Swift.String? = nil, - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - localeId: Swift.String? = nil, - localeName: Swift.String? = nil, - nluIntentConfidenceThreshold: Swift.Double? = nil, - voiceSettings: LexModelsV2ClientTypes.VoiceSettings? = nil - ) - { - self.botId = botId - self.botLocaleStatus = botLocaleStatus - self.botVersion = botVersion - self.creationDateTime = creationDateTime - self.description = description - self.localeId = localeId - self.localeName = localeName - self.nluIntentConfidenceThreshold = nluIntentConfidenceThreshold - self.voiceSettings = voiceSettings + public init( + intents: LexModelsV2ClientTypes.IntentStatistics? = nil, + slotTypes: LexModelsV2ClientTypes.SlotTypeStatistics? = nil + ) + { + self.intents = intents + self.slotTypes = slotTypes + } } -} -struct CreateBotLocaleOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botVersion: Swift.String? - let localeName: Swift.String? - let localeId: Swift.String? - let description: Swift.String? - let nluIntentConfidenceThreshold: Swift.Double? - let voiceSettings: LexModelsV2ClientTypes.VoiceSettings? - let botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? - let creationDateTime: ClientRuntime.Date? } -extension CreateBotLocaleOutputResponseBody: Swift.Decodable { +extension LexModelsV2ClientTypes.BotRecommendationResults: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botLocaleStatus - case botVersion - case creationDateTime - case description - case localeId - case localeName - case nluIntentConfidenceThreshold - case voiceSettings + case associatedTranscriptsUrl + case botLocaleExportUrl + case statistics + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let associatedTranscriptsUrl = self.associatedTranscriptsUrl { + try encodeContainer.encode(associatedTranscriptsUrl, forKey: .associatedTranscriptsUrl) + } + if let botLocaleExportUrl = self.botLocaleExportUrl { + try encodeContainer.encode(botLocaleExportUrl, forKey: .botLocaleExportUrl) + } + if let statistics = self.statistics { + try encodeContainer.encode(statistics, forKey: .statistics) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeName) - localeName = localeNameDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let nluIntentConfidenceThresholdDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .nluIntentConfidenceThreshold) - nluIntentConfidenceThreshold = nluIntentConfidenceThresholdDecoded - let voiceSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.VoiceSettings.self, forKey: .voiceSettings) - voiceSettings = voiceSettingsDecoded - let botLocaleStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleStatus.self, forKey: .botLocaleStatus) - botLocaleStatus = botLocaleStatusDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded + let botLocaleExportUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botLocaleExportUrl) + botLocaleExportUrl = botLocaleExportUrlDecoded + let associatedTranscriptsUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .associatedTranscriptsUrl) + associatedTranscriptsUrl = associatedTranscriptsUrlDecoded + let statisticsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotRecommendationResultStatistics.self, forKey: .statistics) + statistics = statisticsDecoded } } -public enum CreateBotOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) +extension LexModelsV2ClientTypes { + /// The object representing the URL of the bot definition, the URL of the associated transcript, and a statistical summary of the bot recommendation results. + public struct BotRecommendationResults: Swift.Equatable { + /// The presigned url link of the associated transcript. + public var associatedTranscriptsUrl: Swift.String? + /// The presigned URL link of the recommended bot definition. + public var botLocaleExportUrl: Swift.String? + /// The statistical summary of the bot recommendation results. + public var statistics: LexModelsV2ClientTypes.BotRecommendationResultStatistics? + + public init( + associatedTranscriptsUrl: Swift.String? = nil, + botLocaleExportUrl: Swift.String? = nil, + statistics: LexModelsV2ClientTypes.BotRecommendationResultStatistics? = nil + ) + { + self.associatedTranscriptsUrl = associatedTranscriptsUrl + self.botLocaleExportUrl = botLocaleExportUrl + self.statistics = statistics } } + } -extension CreateBotOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: CreateBotOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botMembers = output.botMembers - self.botName = output.botName - self.botStatus = output.botStatus - self.botTags = output.botTags - self.botType = output.botType - self.creationDateTime = output.creationDateTime - self.dataPrivacy = output.dataPrivacy - self.description = output.description - self.idleSessionTTLInSeconds = output.idleSessionTTLInSeconds - self.roleArn = output.roleArn - self.testBotAliasTags = output.testBotAliasTags - } else { - self.botId = nil - self.botMembers = nil - self.botName = nil - self.botStatus = nil - self.botTags = nil - self.botType = nil - self.creationDateTime = nil - self.dataPrivacy = nil - self.description = nil - self.idleSessionTTLInSeconds = nil - self.roleArn = nil - self.testBotAliasTags = nil +extension LexModelsV2ClientTypes { + public enum BotRecommendationStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case available + case deleted + case deleting + case downloading + case failed + case processing + case stopped + case stopping + case updating + case sdkUnknown(Swift.String) + + public static var allCases: [BotRecommendationStatus] { + return [ + .available, + .deleted, + .deleting, + .downloading, + .failed, + .processing, + .stopped, + .stopping, + .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 .available: return "Available" + case .deleted: return "Deleted" + case .deleting: return "Deleting" + case .downloading: return "Downloading" + case .failed: return "Failed" + case .processing: return "Processing" + case .stopped: return "Stopped" + 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 = BotRecommendationStatus(rawValue: rawValue) ?? BotRecommendationStatus.sdkUnknown(rawValue) } } } -public struct CreateBotOutputResponse: Swift.Equatable { - /// A unique identifier for a particular bot. You use this to identify the bot when you call other Amazon Lex API operations. - public var botId: Swift.String? - /// The list of bots in a network that was created. - public var botMembers: [LexModelsV2ClientTypes.BotMember]? - /// The name specified for the bot. - public var botName: Swift.String? - /// Shows the current status of the bot. The bot is first in the Creating status. Once the bot is read for use, it changes to the Available status. After the bot is created, you can use the DRAFT version of the bot. - public var botStatus: LexModelsV2ClientTypes.BotStatus? - /// A list of tags associated with the bot. - public var botTags: [Swift.String:Swift.String]? - /// The type of a bot that was created. - public var botType: LexModelsV2ClientTypes.BotType? - /// A timestamp indicating the date and time that the bot was created. - public var creationDateTime: ClientRuntime.Date? - /// The data privacy settings specified for the bot. - public var dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? - /// The description specified for the bot. - public var description: Swift.String? - /// The session idle time specified for the bot. - public var idleSessionTTLInSeconds: Swift.Int? - /// The IAM role specified for the bot. - public var roleArn: Swift.String? - /// A list of tags associated with the test alias for the bot. - public var testBotAliasTags: [Swift.String:Swift.String]? +extension LexModelsV2ClientTypes.BotRecommendationSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botRecommendationId + case botRecommendationStatus + case creationDateTime + case lastUpdatedDateTime + } - public init( - botId: Swift.String? = nil, - botMembers: [LexModelsV2ClientTypes.BotMember]? = nil, - botName: Swift.String? = nil, - botStatus: LexModelsV2ClientTypes.BotStatus? = nil, - botTags: [Swift.String:Swift.String]? = nil, - botType: LexModelsV2ClientTypes.BotType? = nil, - creationDateTime: ClientRuntime.Date? = nil, - dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? = nil, - description: Swift.String? = nil, - idleSessionTTLInSeconds: Swift.Int? = nil, - roleArn: Swift.String? = nil, - testBotAliasTags: [Swift.String:Swift.String]? = nil - ) - { - self.botId = botId - self.botMembers = botMembers - self.botName = botName - self.botStatus = botStatus - self.botTags = botTags - self.botType = botType - self.creationDateTime = creationDateTime - self.dataPrivacy = dataPrivacy - self.description = description - self.idleSessionTTLInSeconds = idleSessionTTLInSeconds - self.roleArn = roleArn - self.testBotAliasTags = testBotAliasTags - } -} - -struct CreateBotOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botName: Swift.String? - let description: Swift.String? - let roleArn: Swift.String? - let dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? - let idleSessionTTLInSeconds: Swift.Int? - let botStatus: LexModelsV2ClientTypes.BotStatus? - let creationDateTime: ClientRuntime.Date? - let botTags: [Swift.String:Swift.String]? - let testBotAliasTags: [Swift.String:Swift.String]? - let botType: LexModelsV2ClientTypes.BotType? - let botMembers: [LexModelsV2ClientTypes.BotMember]? -} - -extension CreateBotOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botMembers - case botName - case botStatus - case botTags - case botType - case creationDateTime - case dataPrivacy - case description - case idleSessionTTLInSeconds - case roleArn - case testBotAliasTags + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botRecommendationId = self.botRecommendationId { + try encodeContainer.encode(botRecommendationId, forKey: .botRecommendationId) + } + if let botRecommendationStatus = self.botRecommendationStatus { + try encodeContainer.encode(botRecommendationStatus.rawValue, forKey: .botRecommendationStatus) + } + if let creationDateTime = self.creationDateTime { + try encodeContainer.encodeTimestamp(creationDateTime, format: .epochSeconds, forKey: .creationDateTime) + } + if let lastUpdatedDateTime = self.lastUpdatedDateTime { + try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) - botName = botNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) - roleArn = roleArnDecoded - let dataPrivacyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DataPrivacy.self, forKey: .dataPrivacy) - dataPrivacy = dataPrivacyDecoded - let idleSessionTTLInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .idleSessionTTLInSeconds) - idleSessionTTLInSeconds = idleSessionTTLInSecondsDecoded - let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) - botStatus = botStatusDecoded + let botRecommendationStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotRecommendationStatus.self, forKey: .botRecommendationStatus) + botRecommendationStatus = botRecommendationStatusDecoded + let botRecommendationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botRecommendationId) + botRecommendationId = botRecommendationIdDecoded let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) creationDateTime = creationDateTimeDecoded - let botTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .botTags) - var botTagsDecoded0: [Swift.String:Swift.String]? = nil - if let botTagsContainer = botTagsContainer { - botTagsDecoded0 = [Swift.String:Swift.String]() - for (key0, tagvalue0) in botTagsContainer { - if let tagvalue0 = tagvalue0 { - botTagsDecoded0?[key0] = tagvalue0 - } - } + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + } +} + +extension LexModelsV2ClientTypes { + /// A summary of the bot recommendation. + public struct BotRecommendationSummary: Swift.Equatable { + /// The unique identifier of the bot recommendation to be updated. + /// This member is required. + public var botRecommendationId: Swift.String? + /// The status of the bot recommendation. If the status is Failed, then the reasons for the failure are listed in the failureReasons field. + /// This member is required. + public var botRecommendationStatus: LexModelsV2ClientTypes.BotRecommendationStatus? + /// A timestamp of the date and time that the bot recommendation was created. + public var creationDateTime: ClientRuntime.Date? + /// A timestamp of the date and time that the bot recommendation was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + + public init( + botRecommendationId: Swift.String? = nil, + botRecommendationStatus: LexModelsV2ClientTypes.BotRecommendationStatus? = nil, + creationDateTime: ClientRuntime.Date? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil + ) + { + self.botRecommendationId = botRecommendationId + self.botRecommendationStatus = botRecommendationStatus + self.creationDateTime = creationDateTime + self.lastUpdatedDateTime = lastUpdatedDateTime } - botTags = botTagsDecoded0 - let testBotAliasTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .testBotAliasTags) - var testBotAliasTagsDecoded0: [Swift.String:Swift.String]? = nil - if let testBotAliasTagsContainer = testBotAliasTagsContainer { - testBotAliasTagsDecoded0 = [Swift.String:Swift.String]() - for (key0, tagvalue0) in testBotAliasTagsContainer { - if let tagvalue0 = tagvalue0 { - testBotAliasTagsDecoded0?[key0] = tagvalue0 - } - } + } + +} + +extension LexModelsV2ClientTypes { + public enum BotSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case botname + case sdkUnknown(Swift.String) + + public static var allCases: [BotSortAttribute] { + return [ + .botname, + .sdkUnknown("") + ] } - testBotAliasTags = testBotAliasTagsDecoded0 - let botTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotType.self, forKey: .botType) - botType = botTypeDecoded - let botMembersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotMember?].self, forKey: .botMembers) - var botMembersDecoded0:[LexModelsV2ClientTypes.BotMember]? = nil - if let botMembersContainer = botMembersContainer { - botMembersDecoded0 = [LexModelsV2ClientTypes.BotMember]() - for structure0 in botMembersContainer { - if let structure0 = structure0 { - botMembersDecoded0?.append(structure0) - } + 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 .botname: return "BotName" + case let .sdkUnknown(s): return s } } - botMembers = botMembersDecoded0 + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = BotSortAttribute(rawValue: rawValue) ?? BotSortAttribute.sdkUnknown(rawValue) + } } } -extension CreateBotVersionInput: Swift.Encodable { +extension LexModelsV2ClientTypes.BotSortBy: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botVersionLocaleSpecification - case description + case attribute + case order } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botVersionLocaleSpecification = botVersionLocaleSpecification { - var botVersionLocaleSpecificationContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .botVersionLocaleSpecification) - for (dictKey0, botVersionLocaleSpecification0) in botVersionLocaleSpecification { - try botVersionLocaleSpecificationContainer.encode(botVersionLocaleSpecification0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } + if let attribute = self.attribute { + try encodeContainer.encode(attribute.rawValue, forKey: .attribute) } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) } } -} -extension CreateBotVersionInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions" + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotSortAttribute.self, forKey: .attribute) + attribute = attributeDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) + order = orderDecoded } } -public struct CreateBotVersionInput: Swift.Equatable { - /// The identifier of the bot to create the version for. - /// This member is required. - public var botId: Swift.String? - /// Specifies the locales that Amazon Lex adds to this version. You can choose the Draft version or any other previously published version for each locale. When you specify a source version, the locale data is copied from the source version to the new version. - /// This member is required. - public var botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? - /// A description of the version. Use the description to help identify the version in lists. - public var description: Swift.String? +extension LexModelsV2ClientTypes { + /// Specifies attributes for sorting a list of bots. + public struct BotSortBy: Swift.Equatable { + /// The attribute to use to sort the list of bots. + /// This member is required. + public var attribute: LexModelsV2ClientTypes.BotSortAttribute? + /// The order to sort the list. You can choose ascending or descending. + /// This member is required. + public var order: LexModelsV2ClientTypes.SortOrder? - public init( - botId: Swift.String? = nil, - botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? = nil, - description: Swift.String? = nil - ) - { - self.botId = botId - self.botVersionLocaleSpecification = botVersionLocaleSpecification - self.description = description + public init( + attribute: LexModelsV2ClientTypes.BotSortAttribute? = nil, + order: LexModelsV2ClientTypes.SortOrder? = nil + ) + { + self.attribute = attribute + self.order = order + } } -} -struct CreateBotVersionInputBody: Swift.Equatable { - let description: Swift.String? - let botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? } -extension CreateBotVersionInputBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botVersionLocaleSpecification - case description - } +extension LexModelsV2ClientTypes { + public enum BotStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case available + case creating + case deleting + case failed + case importing + case inactive + case updating + case versioning + case sdkUnknown(Swift.String) - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let botVersionLocaleSpecificationContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.BotVersionLocaleDetails?].self, forKey: .botVersionLocaleSpecification) - var botVersionLocaleSpecificationDecoded0: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? = nil - if let botVersionLocaleSpecificationContainer = botVersionLocaleSpecificationContainer { - botVersionLocaleSpecificationDecoded0 = [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]() - for (key0, botversionlocaledetails0) in botVersionLocaleSpecificationContainer { - if let botversionlocaledetails0 = botversionlocaledetails0 { - botVersionLocaleSpecificationDecoded0?[key0] = botversionlocaledetails0 - } - } + public static var allCases: [BotStatus] { + return [ + .available, + .creating, + .deleting, + .failed, + .importing, + .inactive, + .updating, + .versioning, + .sdkUnknown("") + ] } - botVersionLocaleSpecification = botVersionLocaleSpecificationDecoded0 - } -} - -public enum CreateBotVersionOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) } - } -} - -extension CreateBotVersionOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: CreateBotVersionOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botStatus = output.botStatus - self.botVersion = output.botVersion - self.botVersionLocaleSpecification = output.botVersionLocaleSpecification - self.creationDateTime = output.creationDateTime - self.description = output.description - } else { - self.botId = nil - self.botStatus = nil - self.botVersion = nil - self.botVersionLocaleSpecification = nil - self.creationDateTime = nil - self.description = nil + public var rawValue: Swift.String { + switch self { + case .available: return "Available" + case .creating: return "Creating" + case .deleting: return "Deleting" + case .failed: return "Failed" + case .importing: return "Importing" + case .inactive: return "Inactive" + case .updating: return "Updating" + case .versioning: return "Versioning" + 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 = BotStatus(rawValue: rawValue) ?? BotStatus.sdkUnknown(rawValue) } } } -public struct CreateBotVersionOutputResponse: Swift.Equatable { - /// The bot identifier specified in the request. - public var botId: Swift.String? - /// When you send a request to create or update a bot, Amazon Lex sets the status response element to Creating. After Amazon Lex builds the bot, it sets status to Available. If Amazon Lex can't build the bot, it sets status to Failed. - public var botStatus: LexModelsV2ClientTypes.BotStatus? - /// The version number assigned to the version. - public var botVersion: Swift.String? - /// The source versions used for each locale in the new version. - public var botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? - /// A timestamp of the date and time that the version was created. - public var creationDateTime: ClientRuntime.Date? - /// The description of the version specified in the request. - public var description: Swift.String? - - public init( - botId: Swift.String? = nil, - botStatus: LexModelsV2ClientTypes.BotStatus? = nil, - botVersion: Swift.String? = nil, - botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? = nil, - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil - ) - { - self.botId = botId - self.botStatus = botStatus - self.botVersion = botVersion - self.botVersionLocaleSpecification = botVersionLocaleSpecification - self.creationDateTime = creationDateTime - self.description = description - } -} - -struct CreateBotVersionOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let description: Swift.String? - let botVersion: Swift.String? - let botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? - let botStatus: LexModelsV2ClientTypes.BotStatus? - let creationDateTime: ClientRuntime.Date? -} - -extension CreateBotVersionOutputResponseBody: Swift.Decodable { +extension LexModelsV2ClientTypes.BotSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId + case botName case botStatus - case botVersion - case botVersionLocaleSpecification - case creationDateTime + case botType case description + case lastUpdatedDateTime + case latestBotVersion + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botId = self.botId { + try encodeContainer.encode(botId, forKey: .botId) + } + if let botName = self.botName { + try encodeContainer.encode(botName, forKey: .botName) + } + if let botStatus = self.botStatus { + try encodeContainer.encode(botStatus.rawValue, forKey: .botStatus) + } + if let botType = self.botType { + try encodeContainer.encode(botType.rawValue, forKey: .botType) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let lastUpdatedDateTime = self.lastUpdatedDateTime { + try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) + } + if let latestBotVersion = self.latestBotVersion { + try encodeContainer.encode(latestBotVersion, forKey: .latestBotVersion) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) botId = botIdDecoded + let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) + botName = botNameDecoded let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) description = descriptionDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let botVersionLocaleSpecificationContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.BotVersionLocaleDetails?].self, forKey: .botVersionLocaleSpecification) - var botVersionLocaleSpecificationDecoded0: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? = nil - if let botVersionLocaleSpecificationContainer = botVersionLocaleSpecificationContainer { - botVersionLocaleSpecificationDecoded0 = [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]() - for (key0, botversionlocaledetails0) in botVersionLocaleSpecificationContainer { - if let botversionlocaledetails0 = botversionlocaledetails0 { - botVersionLocaleSpecificationDecoded0?[key0] = botversionlocaledetails0 - } - } - } - botVersionLocaleSpecification = botVersionLocaleSpecificationDecoded0 let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) botStatus = botStatusDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded + let latestBotVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .latestBotVersion) + latestBotVersion = latestBotVersionDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let botTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotType.self, forKey: .botType) + botType = botTypeDecoded } } -extension CreateExportInput: Swift.CustomDebugStringConvertible { - public var debugDescription: Swift.String { - "CreateExportInput(fileFormat: \(Swift.String(describing: fileFormat)), resourceSpecification: \(Swift.String(describing: resourceSpecification)), filePassword: \"CONTENT_REDACTED\")"} -} - -extension CreateExportInput: Swift.Encodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case fileFormat - case filePassword - case resourceSpecification - } +extension LexModelsV2ClientTypes { + /// Summary information about a bot returned by the [ListBots](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBots.html) operation. + public struct BotSummary: Swift.Equatable { + /// The unique identifier assigned to the bot. Use this ID to get detailed information about the bot with the [DescribeBot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeBot.html) operation. + public var botId: Swift.String? + /// The name of the bot. + public var botName: Swift.String? + /// The current status of the bot. When the status is Available the bot is ready for use. + public var botStatus: LexModelsV2ClientTypes.BotStatus? + /// The type of the bot. + public var botType: LexModelsV2ClientTypes.BotType? + /// The description of the bot. + public var description: Swift.String? + /// The date and time that the bot was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The latest numerical version in use for the bot. + public var latestBotVersion: Swift.String? - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let fileFormat = self.fileFormat { - try encodeContainer.encode(fileFormat.rawValue, forKey: .fileFormat) - } - if let filePassword = self.filePassword { - try encodeContainer.encode(filePassword, forKey: .filePassword) - } - if let resourceSpecification = self.resourceSpecification { - try encodeContainer.encode(resourceSpecification, forKey: .resourceSpecification) + public init( + botId: Swift.String? = nil, + botName: Swift.String? = nil, + botStatus: LexModelsV2ClientTypes.BotStatus? = nil, + botType: LexModelsV2ClientTypes.BotType? = nil, + description: Swift.String? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + latestBotVersion: Swift.String? = nil + ) + { + self.botId = botId + self.botName = botName + self.botStatus = botStatus + self.botType = botType + self.description = description + self.lastUpdatedDateTime = lastUpdatedDateTime + self.latestBotVersion = latestBotVersion } } -} -extension CreateExportInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - return "/exports" - } } -public struct CreateExportInput: Swift.Equatable { - /// The file format of the bot or bot locale definition files. - /// This member is required. - public var fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? - /// An password to use to encrypt the exported archive. Using a password is optional, but you should encrypt the archive to protect the data in transit between Amazon Lex and your local computer. - public var filePassword: Swift.String? - /// Specifies the type of resource to export, either a bot or a bot locale. You can only specify one type of resource to export. - /// This member is required. - public var resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? +extension LexModelsV2ClientTypes { + public enum BotType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case bot + case botnetwork + case sdkUnknown(Swift.String) - public init( - fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? = nil, - filePassword: Swift.String? = nil, - resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? = nil - ) - { - self.fileFormat = fileFormat - self.filePassword = filePassword - self.resourceSpecification = resourceSpecification + public static var allCases: [BotType] { + return [ + .bot, + .botnetwork, + .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 .bot: return "Bot" + case .botnetwork: return "BotNetwork" + 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 = BotType(rawValue: rawValue) ?? BotType.sdkUnknown(rawValue) + } } } -struct CreateExportInputBody: Swift.Equatable { - let resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? - let fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? - let filePassword: Swift.String? -} - -extension CreateExportInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.BotVersionLocaleDetails: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case fileFormat - case filePassword - case resourceSpecification + case sourceBotVersion + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let sourceBotVersion = self.sourceBotVersion { + try encodeContainer.encode(sourceBotVersion, forKey: .sourceBotVersion) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let resourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportResourceSpecification.self, forKey: .resourceSpecification) - resourceSpecification = resourceSpecificationDecoded - let fileFormatDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportExportFileFormat.self, forKey: .fileFormat) - fileFormat = fileFormatDecoded - let filePasswordDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .filePassword) - filePassword = filePasswordDecoded + let sourceBotVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceBotVersion) + sourceBotVersion = sourceBotVersionDecoded } } -public enum CreateExportOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) - } - } -} +extension LexModelsV2ClientTypes { + /// The version of a bot used for a bot locale. + public struct BotVersionLocaleDetails: Swift.Equatable { + /// The version of a bot used for a bot locale. + /// This member is required. + public var sourceBotVersion: Swift.String? -extension CreateExportOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: CreateExportOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.creationDateTime = output.creationDateTime - self.exportId = output.exportId - self.exportStatus = output.exportStatus - self.fileFormat = output.fileFormat - self.resourceSpecification = output.resourceSpecification - } else { - self.creationDateTime = nil - self.exportId = nil - self.exportStatus = nil - self.fileFormat = nil - self.resourceSpecification = nil + public init( + sourceBotVersion: Swift.String? = nil + ) + { + self.sourceBotVersion = sourceBotVersion } } + } -public struct CreateExportOutputResponse: Swift.Equatable { - /// The date and time that the request to export a bot was created. - public var creationDateTime: ClientRuntime.Date? - /// An identifier for a specific request to create an export. - public var exportId: Swift.String? - /// The status of the export. When the status is Completed, you can use the [DescribeExport](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeExport.html) operation to get the pre-signed S3 URL link to your exported bot or bot locale. - public var exportStatus: LexModelsV2ClientTypes.ExportStatus? - /// The file format used for the bot or bot locale definition files. - public var fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? - /// A description of the type of resource that was exported, either a bot or a bot locale. - public var resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? +extension LexModelsV2ClientTypes { + public enum BotVersionSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case botversion + case sdkUnknown(Swift.String) - public init( - creationDateTime: ClientRuntime.Date? = nil, - exportId: Swift.String? = nil, - exportStatus: LexModelsV2ClientTypes.ExportStatus? = nil, - fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? = nil, - resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? = nil - ) - { - self.creationDateTime = creationDateTime - self.exportId = exportId - self.exportStatus = exportStatus - self.fileFormat = fileFormat - self.resourceSpecification = resourceSpecification + public static var allCases: [BotVersionSortAttribute] { + return [ + .botversion, + .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 .botversion: return "BotVersion" + 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 = BotVersionSortAttribute(rawValue: rawValue) ?? BotVersionSortAttribute.sdkUnknown(rawValue) + } } } -struct CreateExportOutputResponseBody: Swift.Equatable { - let exportId: Swift.String? - let resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? - let fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? - let exportStatus: LexModelsV2ClientTypes.ExportStatus? - let creationDateTime: ClientRuntime.Date? -} - -extension CreateExportOutputResponseBody: Swift.Decodable { +extension LexModelsV2ClientTypes.BotVersionSortBy: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case creationDateTime - case exportId - case exportStatus - case fileFormat - case resourceSpecification + case attribute + case order + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attribute = self.attribute { + try encodeContainer.encode(attribute.rawValue, forKey: .attribute) + } + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let exportIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .exportId) - exportId = exportIdDecoded - let resourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportResourceSpecification.self, forKey: .resourceSpecification) - resourceSpecification = resourceSpecificationDecoded - let fileFormatDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportExportFileFormat.self, forKey: .fileFormat) - fileFormat = fileFormatDecoded - let exportStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportStatus.self, forKey: .exportStatus) - exportStatus = exportStatusDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded + let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotVersionSortAttribute.self, forKey: .attribute) + attribute = attributeDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) + order = orderDecoded } } -extension CreateIntentInput: Swift.Encodable { +extension LexModelsV2ClientTypes { + /// Specifies attributes for sorting a list of bot versions. + public struct BotVersionSortBy: Swift.Equatable { + /// The attribute to use to sort the list of versions. + /// This member is required. + public var attribute: LexModelsV2ClientTypes.BotVersionSortAttribute? + /// The order to sort the list. You can specify ascending or descending order. + /// This member is required. + public var order: LexModelsV2ClientTypes.SortOrder? + + public init( + attribute: LexModelsV2ClientTypes.BotVersionSortAttribute? = nil, + order: LexModelsV2ClientTypes.SortOrder? = nil + ) + { + self.attribute = attribute + self.order = order + } + } + +} + +extension LexModelsV2ClientTypes.BotVersionSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case botName + case botStatus + case botVersion + case creationDateTime case description - case dialogCodeHook - case fulfillmentCodeHook - case initialResponseSetting - case inputContexts - case intentClosingSetting - case intentConfirmationSetting - case intentName - case kendraConfiguration - case outputContexts - case parentIntentSignature - case sampleUtterances } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let dialogCodeHook = self.dialogCodeHook { - try encodeContainer.encode(dialogCodeHook, forKey: .dialogCodeHook) + if let botName = self.botName { + try encodeContainer.encode(botName, forKey: .botName) } - if let fulfillmentCodeHook = self.fulfillmentCodeHook { - try encodeContainer.encode(fulfillmentCodeHook, forKey: .fulfillmentCodeHook) + if let botStatus = self.botStatus { + try encodeContainer.encode(botStatus.rawValue, forKey: .botStatus) } - if let initialResponseSetting = self.initialResponseSetting { - try encodeContainer.encode(initialResponseSetting, forKey: .initialResponseSetting) + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) } - if let inputContexts = inputContexts { - var inputContextsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputContexts) - for inputcontext0 in inputContexts { - try inputContextsContainer.encode(inputcontext0) - } + if let creationDateTime = self.creationDateTime { + try encodeContainer.encodeTimestamp(creationDateTime, format: .epochSeconds, forKey: .creationDateTime) } - if let intentClosingSetting = self.intentClosingSetting { - try encodeContainer.encode(intentClosingSetting, forKey: .intentClosingSetting) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) } - if let intentConfirmationSetting = self.intentConfirmationSetting { - try encodeContainer.encode(intentConfirmationSetting, forKey: .intentConfirmationSetting) - } - if let intentName = self.intentName { - try encodeContainer.encode(intentName, forKey: .intentName) - } - if let kendraConfiguration = self.kendraConfiguration { - try encodeContainer.encode(kendraConfiguration, forKey: .kendraConfiguration) - } - if let outputContexts = outputContexts { - var outputContextsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputContexts) - for outputcontext0 in outputContexts { - try outputContextsContainer.encode(outputcontext0) - } - } - if let parentIntentSignature = self.parentIntentSignature { - try encodeContainer.encode(parentIntentSignature, forKey: .parentIntentSignature) - } - if let sampleUtterances = sampleUtterances { - var sampleUtterancesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sampleUtterances) - for sampleutterance0 in sampleUtterances { - try sampleUtterancesContainer.encode(sampleutterance0) - } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) + botName = botNameDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) + botStatus = botStatusDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Summary information about a bot version returned by the [ListBotVersions](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBotVersions.html) operation. + public struct BotVersionSummary: Swift.Equatable { + /// The name of the bot associated with the version. + public var botName: Swift.String? + /// The status of the bot. When the status is available, the version of the bot is ready for use. + public var botStatus: LexModelsV2ClientTypes.BotStatus? + /// The numeric version of the bot, or DRAFT to indicate that this is the version of the bot that can be updated.. + public var botVersion: Swift.String? + /// A timestamp of the date and time that the version was created. + public var creationDateTime: ClientRuntime.Date? + /// The description of the version. + public var description: Swift.String? + + public init( + botName: Swift.String? = nil, + botStatus: LexModelsV2ClientTypes.BotStatus? = nil, + botVersion: Swift.String? = nil, + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil + ) + { + self.botName = botName + self.botStatus = botStatus + self.botVersion = botVersion + self.creationDateTime = creationDateTime + self.description = description } } + } -extension CreateIntentInput: ClientRuntime.URLPathProvider { +extension BuildBotLocaleInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil @@ -6072,170 +6462,43 @@ extension CreateIntentInput: ClientRuntime.URLPathProvider { guard let localeId = localeId else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents" + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())" } } -public struct CreateIntentInput: Swift.Equatable { - /// The identifier of the bot associated with this intent. +public struct BuildBotLocaleInput: Swift.Equatable { + /// The identifier of the bot to build. The identifier is returned in the response from the [CreateBot](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_CreateBot.html) operation. /// This member is required. public var botId: Swift.String? - /// The version of the bot associated with this intent. + /// The version of the bot to build. This can only be the draft version of the bot. /// This member is required. public var botVersion: Swift.String? - /// A description of the intent. Use the description to help identify the intent in lists. - public var description: Swift.String? - /// Specifies that Amazon Lex invokes the alias Lambda function for each user input. You can invoke this Lambda function to personalize user interaction. For example, suppose that your bot determines that the user's name is John. You Lambda function might retrieve John's information from a backend database and prepopulate some of the values. For example, if you find that John is gluten intolerant, you might set the corresponding intent slot, glutenIntolerant to true. You might find John's phone number and set the corresponding session attribute. - public var dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? - /// Specifies that Amazon Lex invokes the alias Lambda function when the intent is ready for fulfillment. You can invoke this function to complete the bot's transaction with the user. For example, in a pizza ordering bot, the Lambda function can look up the closest pizza restaurant to the customer's location and then place an order on the customer's behalf. - public var fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? - /// Configuration settings for the response that is sent to the user at the beginning of a conversation, before eliciting slot values. - public var initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? - /// A list of contexts that must be active for this intent to be considered by Amazon Lex. When an intent has an input context list, Amazon Lex only considers using the intent in an interaction with the user when the specified contexts are included in the active context list for the session. If the contexts are not active, then Amazon Lex will not use the intent. A context can be automatically activated using the outputContexts property or it can be set at runtime. For example, if there are two intents with different input contexts that respond to the same utterances, only the intent with the active context will respond. An intent may have up to 5 input contexts. If an intent has multiple input contexts, all of the contexts must be active to consider the intent. - public var inputContexts: [LexModelsV2ClientTypes.InputContext]? - /// Sets the response that Amazon Lex sends to the user when the intent is closed. - public var intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? - /// Provides prompts that Amazon Lex sends to the user to confirm the completion of an intent. If the user answers "no," the settings contain a statement that is sent to the user to end the intent. - public var intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? - /// The name of the intent. Intent names must be unique in the locale that contains the intent and cannot match the name of any built-in intent. - /// This member is required. - public var intentName: Swift.String? - /// Configuration information required to use the AMAZON.KendraSearchIntent intent to connect to an Amazon Kendra index. The AMAZON.KendraSearchIntent intent is called when Amazon Lex can't determine another intent to invoke. - public var kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? - /// The identifier of the language and locale where this intent is used. All of the bots, slot types, and slots used by the intent must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// The identifier of the language and locale that the bot will be used in. The string must match one of the supported locales. All of the intents, slot types, and slots used in the bot must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). /// This member is required. public var localeId: Swift.String? - /// A lists of contexts that the intent activates when it is fulfilled. You can use an output context to indicate the intents that Amazon Lex should consider for the next turn of the conversation with a customer. When you use the outputContextsList property, all of the contexts specified in the list are activated when the intent is fulfilled. You can set up to 10 output contexts. You can also set the number of conversation turns that the context should be active, or the length of time that the context should be active. - public var outputContexts: [LexModelsV2ClientTypes.OutputContext]? - /// A unique identifier for the built-in intent to base this intent on. - public var parentIntentSignature: Swift.String? - /// An array of strings that a user might say to signal the intent. For example, "I want a pizza", or "I want a {PizzaSize} pizza". In an utterance, slot names are enclosed in curly braces ("{", "}") to indicate where they should be displayed in the utterance shown to the user.. - public var sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, - description: Swift.String? = nil, - dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? = nil, - fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? = nil, - initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? = nil, - inputContexts: [LexModelsV2ClientTypes.InputContext]? = nil, - intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? = nil, - intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? = nil, - intentName: Swift.String? = nil, - kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? = nil, - localeId: Swift.String? = nil, - outputContexts: [LexModelsV2ClientTypes.OutputContext]? = nil, - parentIntentSignature: Swift.String? = nil, - sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? = nil + localeId: Swift.String? = nil ) { self.botId = botId self.botVersion = botVersion - self.description = description - self.dialogCodeHook = dialogCodeHook - self.fulfillmentCodeHook = fulfillmentCodeHook - self.initialResponseSetting = initialResponseSetting - self.inputContexts = inputContexts - self.intentClosingSetting = intentClosingSetting - self.intentConfirmationSetting = intentConfirmationSetting - self.intentName = intentName - self.kendraConfiguration = kendraConfiguration self.localeId = localeId - self.outputContexts = outputContexts - self.parentIntentSignature = parentIntentSignature - self.sampleUtterances = sampleUtterances } } -struct CreateIntentInputBody: Swift.Equatable { - let intentName: Swift.String? - let description: Swift.String? - let parentIntentSignature: Swift.String? - let sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? - let dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? - let fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? - let intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? - let intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? - let inputContexts: [LexModelsV2ClientTypes.InputContext]? - let outputContexts: [LexModelsV2ClientTypes.OutputContext]? - let kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? - let initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? +struct BuildBotLocaleInputBody: Swift.Equatable { } -extension CreateIntentInputBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case description - case dialogCodeHook - case fulfillmentCodeHook - case initialResponseSetting - case inputContexts - case intentClosingSetting - case intentConfirmationSetting - case intentName - case kendraConfiguration - case outputContexts - case parentIntentSignature - case sampleUtterances - } +extension BuildBotLocaleInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) - intentName = intentNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let parentIntentSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentIntentSignature) - parentIntentSignature = parentIntentSignatureDecoded - let sampleUtterancesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SampleUtterance?].self, forKey: .sampleUtterances) - var sampleUtterancesDecoded0:[LexModelsV2ClientTypes.SampleUtterance]? = nil - if let sampleUtterancesContainer = sampleUtterancesContainer { - sampleUtterancesDecoded0 = [LexModelsV2ClientTypes.SampleUtterance]() - for structure0 in sampleUtterancesContainer { - if let structure0 = structure0 { - sampleUtterancesDecoded0?.append(structure0) - } - } - } - sampleUtterances = sampleUtterancesDecoded0 - let dialogCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogCodeHookSettings.self, forKey: .dialogCodeHook) - dialogCodeHook = dialogCodeHookDecoded - let fulfillmentCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentCodeHookSettings.self, forKey: .fulfillmentCodeHook) - fulfillmentCodeHook = fulfillmentCodeHookDecoded - let intentConfirmationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentConfirmationSetting.self, forKey: .intentConfirmationSetting) - intentConfirmationSetting = intentConfirmationSettingDecoded - let intentClosingSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentClosingSetting.self, forKey: .intentClosingSetting) - intentClosingSetting = intentClosingSettingDecoded - let inputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.InputContext?].self, forKey: .inputContexts) - var inputContextsDecoded0:[LexModelsV2ClientTypes.InputContext]? = nil - if let inputContextsContainer = inputContextsContainer { - inputContextsDecoded0 = [LexModelsV2ClientTypes.InputContext]() - for structure0 in inputContextsContainer { - if let structure0 = structure0 { - inputContextsDecoded0?.append(structure0) - } - } - } - inputContexts = inputContextsDecoded0 - let outputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.OutputContext?].self, forKey: .outputContexts) - var outputContextsDecoded0:[LexModelsV2ClientTypes.OutputContext]? = nil - if let outputContextsContainer = outputContextsContainer { - outputContextsDecoded0 = [LexModelsV2ClientTypes.OutputContext]() - for structure0 in outputContextsContainer { - if let structure0 = structure0 { - outputContextsDecoded0?.append(structure0) - } - } - } - outputContexts = outputContextsDecoded0 - let kendraConfigurationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.KendraConfiguration.self, forKey: .kendraConfiguration) - kendraConfiguration = kendraConfigurationDecoded - let initialResponseSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.InitialResponseSetting.self, forKey: .initialResponseSetting) - initialResponseSetting = initialResponseSettingDecoded } } -public enum CreateIntentOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum BuildBotLocaleOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -6251,1575 +6514,1196 @@ public enum CreateIntentOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension CreateIntentOutputResponse: ClientRuntime.HttpResponseBinding { +extension BuildBotLocaleOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: CreateIntentOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: BuildBotLocaleOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId + self.botLocaleStatus = output.botLocaleStatus self.botVersion = output.botVersion - self.creationDateTime = output.creationDateTime - self.description = output.description - self.dialogCodeHook = output.dialogCodeHook - self.fulfillmentCodeHook = output.fulfillmentCodeHook - self.initialResponseSetting = output.initialResponseSetting - self.inputContexts = output.inputContexts - self.intentClosingSetting = output.intentClosingSetting - self.intentConfirmationSetting = output.intentConfirmationSetting - self.intentId = output.intentId - self.intentName = output.intentName - self.kendraConfiguration = output.kendraConfiguration + self.lastBuildSubmittedDateTime = output.lastBuildSubmittedDateTime self.localeId = output.localeId - self.outputContexts = output.outputContexts - self.parentIntentSignature = output.parentIntentSignature - self.sampleUtterances = output.sampleUtterances } else { self.botId = nil + self.botLocaleStatus = nil self.botVersion = nil - self.creationDateTime = nil - self.description = nil - self.dialogCodeHook = nil - self.fulfillmentCodeHook = nil - self.initialResponseSetting = nil - self.inputContexts = nil - self.intentClosingSetting = nil - self.intentConfirmationSetting = nil - self.intentId = nil - self.intentName = nil - self.kendraConfiguration = nil + self.lastBuildSubmittedDateTime = nil self.localeId = nil - self.outputContexts = nil - self.parentIntentSignature = nil - self.sampleUtterances = nil } } } -public struct CreateIntentOutputResponse: Swift.Equatable { - /// The identifier of the bot associated with the intent. +public struct BuildBotLocaleOutputResponse: Swift.Equatable { + /// The identifier of the specified bot. public var botId: Swift.String? - /// The version of the bot associated with the intent. - public var botVersion: Swift.String? - /// A timestamp of the date and time that the intent was created. - public var creationDateTime: ClientRuntime.Date? - /// The description specified for the intent. - public var description: Swift.String? - /// The dialog Lambda function specified for the intent. - public var dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? - /// The fulfillment Lambda function specified for the intent. - public var fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? - /// Configuration settings for the response that is sent to the user at the beginning of a conversation, before eliciting slot values. - public var initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? - /// The list of input contexts specified for the intent. - public var inputContexts: [LexModelsV2ClientTypes.InputContext]? - /// The closing setting specified for the intent. - public var intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? - /// The confirmation setting specified for the intent. - public var intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? - /// A unique identifier for the intent. - public var intentId: Swift.String? - /// The name specified for the intent. - public var intentName: Swift.String? - /// Configuration for searching a Amazon Kendra index specified for the intent. - public var kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? - /// The locale that the intent is specified to use. + /// The bot's build status. When the status is ReadyExpressTesting you can test the bot using the utterances defined for the intents and slot types. When the status is Built, the bot is ready for use and can be tested using any utterance. + public var botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? + /// The version of the bot that was built. This is only the draft version of the bot. + public var botVersion: Swift.String? + /// A timestamp indicating the date and time that the bot was last built for this locale. + public var lastBuildSubmittedDateTime: ClientRuntime.Date? + /// The language and locale specified of where the bot can be used. public var localeId: Swift.String? - /// The list of output contexts specified for the intent. - public var outputContexts: [LexModelsV2ClientTypes.OutputContext]? - /// The signature of the parent intent specified for the intent. - public var parentIntentSignature: Swift.String? - /// The sample utterances specified for the intent. - public var sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? public init( botId: Swift.String? = nil, + botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? = nil, botVersion: Swift.String? = nil, - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? = nil, - fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? = nil, - initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? = nil, - inputContexts: [LexModelsV2ClientTypes.InputContext]? = nil, - intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? = nil, - intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? = nil, - intentId: Swift.String? = nil, - intentName: Swift.String? = nil, - kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? = nil, - localeId: Swift.String? = nil, - outputContexts: [LexModelsV2ClientTypes.OutputContext]? = nil, - parentIntentSignature: Swift.String? = nil, - sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? = nil + lastBuildSubmittedDateTime: ClientRuntime.Date? = nil, + localeId: Swift.String? = nil ) { self.botId = botId + self.botLocaleStatus = botLocaleStatus self.botVersion = botVersion - self.creationDateTime = creationDateTime - self.description = description - self.dialogCodeHook = dialogCodeHook - self.fulfillmentCodeHook = fulfillmentCodeHook - self.initialResponseSetting = initialResponseSetting - self.inputContexts = inputContexts - self.intentClosingSetting = intentClosingSetting - self.intentConfirmationSetting = intentConfirmationSetting - self.intentId = intentId - self.intentName = intentName - self.kendraConfiguration = kendraConfiguration + self.lastBuildSubmittedDateTime = lastBuildSubmittedDateTime self.localeId = localeId - self.outputContexts = outputContexts - self.parentIntentSignature = parentIntentSignature - self.sampleUtterances = sampleUtterances } } -struct CreateIntentOutputResponseBody: Swift.Equatable { - let intentId: Swift.String? - let intentName: Swift.String? - let description: Swift.String? - let parentIntentSignature: Swift.String? - let sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? - let dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? - let fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? - let intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? - let intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? - let inputContexts: [LexModelsV2ClientTypes.InputContext]? - let outputContexts: [LexModelsV2ClientTypes.OutputContext]? - let kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? +struct BuildBotLocaleOutputResponseBody: Swift.Equatable { let botId: Swift.String? let botVersion: Swift.String? let localeId: Swift.String? - let creationDateTime: ClientRuntime.Date? - let initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? + let botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? + let lastBuildSubmittedDateTime: ClientRuntime.Date? } -extension CreateIntentOutputResponseBody: Swift.Decodable { +extension BuildBotLocaleOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId + case botLocaleStatus case botVersion - case creationDateTime - case description - case dialogCodeHook - case fulfillmentCodeHook - case initialResponseSetting - case inputContexts - case intentClosingSetting - case intentConfirmationSetting - case intentId - case intentName - case kendraConfiguration + case lastBuildSubmittedDateTime case localeId - case outputContexts - case parentIntentSignature - case sampleUtterances } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) - intentId = intentIdDecoded - let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) - intentName = intentNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let parentIntentSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentIntentSignature) - parentIntentSignature = parentIntentSignatureDecoded - let sampleUtterancesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SampleUtterance?].self, forKey: .sampleUtterances) - var sampleUtterancesDecoded0:[LexModelsV2ClientTypes.SampleUtterance]? = nil - if let sampleUtterancesContainer = sampleUtterancesContainer { - sampleUtterancesDecoded0 = [LexModelsV2ClientTypes.SampleUtterance]() - for structure0 in sampleUtterancesContainer { - if let structure0 = structure0 { - sampleUtterancesDecoded0?.append(structure0) - } - } - } - sampleUtterances = sampleUtterancesDecoded0 - let dialogCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogCodeHookSettings.self, forKey: .dialogCodeHook) - dialogCodeHook = dialogCodeHookDecoded - let fulfillmentCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentCodeHookSettings.self, forKey: .fulfillmentCodeHook) - fulfillmentCodeHook = fulfillmentCodeHookDecoded - let intentConfirmationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentConfirmationSetting.self, forKey: .intentConfirmationSetting) - intentConfirmationSetting = intentConfirmationSettingDecoded - let intentClosingSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentClosingSetting.self, forKey: .intentClosingSetting) - intentClosingSetting = intentClosingSettingDecoded - let inputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.InputContext?].self, forKey: .inputContexts) - var inputContextsDecoded0:[LexModelsV2ClientTypes.InputContext]? = nil - if let inputContextsContainer = inputContextsContainer { - inputContextsDecoded0 = [LexModelsV2ClientTypes.InputContext]() - for structure0 in inputContextsContainer { - if let structure0 = structure0 { - inputContextsDecoded0?.append(structure0) - } - } - } - inputContexts = inputContextsDecoded0 - let outputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.OutputContext?].self, forKey: .outputContexts) - var outputContextsDecoded0:[LexModelsV2ClientTypes.OutputContext]? = nil - if let outputContextsContainer = outputContextsContainer { - outputContextsDecoded0 = [LexModelsV2ClientTypes.OutputContext]() - for structure0 in outputContextsContainer { - if let structure0 = structure0 { - outputContextsDecoded0?.append(structure0) - } - } - } - outputContexts = outputContextsDecoded0 - let kendraConfigurationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.KendraConfiguration.self, forKey: .kendraConfiguration) - kendraConfiguration = kendraConfigurationDecoded let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) botId = botIdDecoded let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) botVersion = botVersionDecoded let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) localeId = localeIdDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let initialResponseSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.InitialResponseSetting.self, forKey: .initialResponseSetting) - initialResponseSetting = initialResponseSettingDecoded + let botLocaleStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleStatus.self, forKey: .botLocaleStatus) + botLocaleStatus = botLocaleStatusDecoded + let lastBuildSubmittedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastBuildSubmittedDateTime) + lastBuildSubmittedDateTime = lastBuildSubmittedDateTimeDecoded } } -extension CreateResourcePolicyInput: Swift.Encodable { +extension LexModelsV2ClientTypes { + public enum BuiltInIntentSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case intentsignature + case sdkUnknown(Swift.String) + + public static var allCases: [BuiltInIntentSortAttribute] { + return [ + .intentsignature, + .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 .intentsignature: return "IntentSignature" + 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 = BuiltInIntentSortAttribute(rawValue: rawValue) ?? BuiltInIntentSortAttribute.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.BuiltInIntentSortBy: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case policy + case attribute + case order } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let policy = self.policy { - try encodeContainer.encode(policy, forKey: .policy) + if let attribute = self.attribute { + try encodeContainer.encode(attribute.rawValue, forKey: .attribute) + } + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) } } -} -extension CreateResourcePolicyInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let resourceArn = resourceArn else { - return nil - } - return "/policy/\(resourceArn.urlPercentEncoding())" + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BuiltInIntentSortAttribute.self, forKey: .attribute) + attribute = attributeDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) + order = orderDecoded } } -public struct CreateResourcePolicyInput: Swift.Equatable { - /// A resource policy to add to the resource. The policy is a JSON structure that contains one or more statements that define the policy. The policy must follow the IAM syntax. For more information about the contents of a JSON policy document, see [ IAM JSON policy reference ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html). If the policy isn't valid, Amazon Lex returns a validation exception. - /// This member is required. - public var policy: Swift.String? - /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to. - /// This member is required. - public var resourceArn: Swift.String? +extension LexModelsV2ClientTypes { + /// Specifies attributes for sorting a list of built-in intents. + public struct BuiltInIntentSortBy: Swift.Equatable { + /// The attribute to use to sort the list of built-in intents. + /// This member is required. + public var attribute: LexModelsV2ClientTypes.BuiltInIntentSortAttribute? + /// The order to sort the list. You can specify ascending or descending order. + /// This member is required. + public var order: LexModelsV2ClientTypes.SortOrder? - public init( - policy: Swift.String? = nil, - resourceArn: Swift.String? = nil - ) - { - self.policy = policy - self.resourceArn = resourceArn + public init( + attribute: LexModelsV2ClientTypes.BuiltInIntentSortAttribute? = nil, + order: LexModelsV2ClientTypes.SortOrder? = nil + ) + { + self.attribute = attribute + self.order = order + } } -} -struct CreateResourcePolicyInputBody: Swift.Equatable { - let policy: Swift.String? } -extension CreateResourcePolicyInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.BuiltInIntentSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case policy + case description + case intentSignature + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let intentSignature = self.intentSignature { + try encodeContainer.encode(intentSignature, forKey: .intentSignature) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let policyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .policy) - policy = policyDecoded + let intentSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentSignature) + intentSignature = intentSignatureDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded } } -public enum CreateResourcePolicyOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) +extension LexModelsV2ClientTypes { + /// Provides summary information about a built-in intent for the [ ListBuiltInIntents ](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBuiltInIntents.html) operation. + public struct BuiltInIntentSummary: Swift.Equatable { + /// The description of the intent. + public var description: Swift.String? + /// The signature of the built-in intent. Use this to specify the parent intent of a derived intent. + public var intentSignature: Swift.String? + + public init( + description: Swift.String? = nil, + intentSignature: Swift.String? = nil + ) + { + self.description = description + self.intentSignature = intentSignature } } + } -extension CreateResourcePolicyOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: CreateResourcePolicyOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.resourceArn = output.resourceArn - self.revisionId = output.revisionId - } else { - self.resourceArn = nil - self.revisionId = nil +extension LexModelsV2ClientTypes { + public enum BuiltInSlotTypeSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case slottypesignature + case sdkUnknown(Swift.String) + + public static var allCases: [BuiltInSlotTypeSortAttribute] { + return [ + .slottypesignature, + .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 .slottypesignature: return "SlotTypeSignature" + 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 = BuiltInSlotTypeSortAttribute(rawValue: rawValue) ?? BuiltInSlotTypeSortAttribute.sdkUnknown(rawValue) } } } -public struct CreateResourcePolicyOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy was attached to. - public var resourceArn: Swift.String? - /// The current revision of the resource policy. Use the revision ID to make sure that you are updating the most current version of a resource policy when you add a policy statement to a resource, delete a resource, or update a resource. - public var revisionId: Swift.String? +extension LexModelsV2ClientTypes.BuiltInSlotTypeSortBy: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case attribute + case order + } - public init( - resourceArn: Swift.String? = nil, - revisionId: Swift.String? = nil - ) - { - self.resourceArn = resourceArn - self.revisionId = revisionId + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attribute = self.attribute { + try encodeContainer.encode(attribute.rawValue, forKey: .attribute) + } + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BuiltInSlotTypeSortAttribute.self, forKey: .attribute) + attribute = attributeDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) + order = orderDecoded } } -struct CreateResourcePolicyOutputResponseBody: Swift.Equatable { - let resourceArn: Swift.String? - let revisionId: Swift.String? +extension LexModelsV2ClientTypes { + /// Specifies attributes for sorting a list of built-in slot types. + public struct BuiltInSlotTypeSortBy: Swift.Equatable { + /// The attribute to use to sort the list of built-in intents. + /// This member is required. + public var attribute: LexModelsV2ClientTypes.BuiltInSlotTypeSortAttribute? + /// The order to sort the list. You can choose ascending or descending. + /// This member is required. + public var order: LexModelsV2ClientTypes.SortOrder? + + public init( + attribute: LexModelsV2ClientTypes.BuiltInSlotTypeSortAttribute? = nil, + order: LexModelsV2ClientTypes.SortOrder? = nil + ) + { + self.attribute = attribute + self.order = order + } + } + } -extension CreateResourcePolicyOutputResponseBody: Swift.Decodable { +extension LexModelsV2ClientTypes.BuiltInSlotTypeSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case resourceArn - case revisionId + case description + case slotTypeSignature + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let slotTypeSignature = self.slotTypeSignature { + try encodeContainer.encode(slotTypeSignature, forKey: .slotTypeSignature) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) - resourceArn = resourceArnDecoded - let revisionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .revisionId) - revisionId = revisionIdDecoded + let slotTypeSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeSignature) + slotTypeSignature = slotTypeSignatureDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded } } -extension CreateResourcePolicyStatementInput: Swift.Encodable { +extension LexModelsV2ClientTypes { + /// Provides summary information about a built-in slot type for the [ ListBuiltInSlotTypes ](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListBuiltInSlotTypes.html) operation. + public struct BuiltInSlotTypeSummary: Swift.Equatable { + /// The description of the built-in slot type. + public var description: Swift.String? + /// The signature of the built-in slot type. Use this to specify the parent slot type of a derived slot type. + public var slotTypeSignature: Swift.String? + + public init( + description: Swift.String? = nil, + slotTypeSignature: Swift.String? = nil + ) + { + self.description = description + self.slotTypeSignature = slotTypeSignature + } + } + +} + +extension LexModelsV2ClientTypes.Button: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case action - case condition - case effect - case principal - case statementId + case text + case value } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let action = action { - var actionContainer = encodeContainer.nestedUnkeyedContainer(forKey: .action) - for operation0 in action { - try actionContainer.encode(operation0) - } - } - if let condition = condition { - var conditionContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .condition) - for (dictKey0, conditionMap0) in condition { - var conditionMap0Container = conditionContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key(stringValue: dictKey0)) - for (dictKey1, conditionKeyValueMap1) in conditionMap0 { - try conditionMap0Container.encode(conditionKeyValueMap1, forKey: ClientRuntime.Key(stringValue: dictKey1)) - } - } - } - if let effect = self.effect { - try encodeContainer.encode(effect.rawValue, forKey: .effect) - } - if let principal = principal { - var principalContainer = encodeContainer.nestedUnkeyedContainer(forKey: .principal) - for principal0 in principal { - try principalContainer.encode(principal0) - } + if let text = self.text { + try encodeContainer.encode(text, forKey: .text) } - if let statementId = self.statementId { - try encodeContainer.encode(statementId, forKey: .statementId) + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) } } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let textDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .text) + text = textDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .value) + value = valueDecoded + } } -extension CreateResourcePolicyStatementInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let expectedRevisionId = expectedRevisionId { - let expectedRevisionIdQueryItem = ClientRuntime.URLQueryItem(name: "expectedRevisionId".urlPercentEncoding(), value: Swift.String(expectedRevisionId).urlPercentEncoding()) - items.append(expectedRevisionIdQueryItem) - } - return items +extension LexModelsV2ClientTypes { + /// Describes a button to use on a response card used to gather slot values from a user. + public struct Button: Swift.Equatable { + /// The text that appears on the button. Use this to tell the user what value is returned when they choose this button. + /// This member is required. + public var text: Swift.String? + /// The value returned to Amazon Lex when the user chooses this button. This must be one of the slot values configured for the slot. + /// This member is required. + public var value: Swift.String? + + public init( + text: Swift.String? = nil, + value: Swift.String? = nil + ) + { + self.text = text + self.value = value } } + } -extension CreateResourcePolicyStatementInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let resourceArn = resourceArn else { - return nil +extension LexModelsV2ClientTypes.CloudWatchLogGroupLogDestination: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case cloudWatchLogGroupArn + case logPrefix + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let cloudWatchLogGroupArn = self.cloudWatchLogGroupArn { + try encodeContainer.encode(cloudWatchLogGroupArn, forKey: .cloudWatchLogGroupArn) + } + if let logPrefix = self.logPrefix { + try encodeContainer.encode(logPrefix, forKey: .logPrefix) } - return "/policy/\(resourceArn.urlPercentEncoding())/statements" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let cloudWatchLogGroupArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .cloudWatchLogGroupArn) + cloudWatchLogGroupArn = cloudWatchLogGroupArnDecoded + let logPrefixDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .logPrefix) + logPrefix = logPrefixDecoded } } -public struct CreateResourcePolicyStatementInput: Swift.Equatable { - /// The Amazon Lex action that this policy either allows or denies. The action must apply to the resource type of the specified ARN. For more information, see [ Actions, resources, and condition keys for Amazon Lex V2](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlexv2.html). - /// This member is required. - public var action: [Swift.String]? - /// Specifies a condition when the policy is in effect. If the principal of the policy is a service principal, you must provide two condition blocks, one with a SourceAccount global condition key and one with a SourceArn global condition key. For more information, see [IAM JSON policy elements: Condition ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html). - public var condition: [Swift.String:[Swift.String:Swift.String]]? - /// Determines whether the statement allows or denies access to the resource. - /// This member is required. - public var effect: LexModelsV2ClientTypes.Effect? - /// The identifier of the revision of the policy to edit. If this revision ID doesn't match the current revision ID, Amazon Lex throws an exception. If you don't specify a revision, Amazon Lex overwrites the contents of the policy with the new values. - public var expectedRevisionId: Swift.String? - /// An IAM principal, such as an IAM user, IAM role, or Amazon Web Services services that is allowed or denied access to a resource. For more information, see [Amazon Web Services JSON policy elements: Principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html). - /// This member is required. - public var principal: [LexModelsV2ClientTypes.Principal]? - /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to. - /// This member is required. - public var resourceArn: Swift.String? - /// The name of the statement. The ID is the same as the Sid IAM property. The statement name must be unique within the policy. For more information, see [IAM JSON policy elements: Sid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html). - /// This member is required. - public var statementId: Swift.String? +extension LexModelsV2ClientTypes { + /// The Amazon CloudWatch Logs log group where the text and metadata logs are delivered. The log group must exist before you enable logging. + public struct CloudWatchLogGroupLogDestination: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the log group where text and metadata logs are delivered. + /// This member is required. + public var cloudWatchLogGroupArn: Swift.String? + /// The prefix of the log stream name within the log group that you specified + /// This member is required. + public var logPrefix: Swift.String? - public init( - action: [Swift.String]? = nil, - condition: [Swift.String:[Swift.String:Swift.String]]? = nil, - effect: LexModelsV2ClientTypes.Effect? = nil, - expectedRevisionId: Swift.String? = nil, - principal: [LexModelsV2ClientTypes.Principal]? = nil, - resourceArn: Swift.String? = nil, - statementId: Swift.String? = nil - ) - { - self.action = action - self.condition = condition - self.effect = effect - self.expectedRevisionId = expectedRevisionId - self.principal = principal - self.resourceArn = resourceArn - self.statementId = statementId + public init( + cloudWatchLogGroupArn: Swift.String? = nil, + logPrefix: Swift.String? = nil + ) + { + self.cloudWatchLogGroupArn = cloudWatchLogGroupArn + self.logPrefix = logPrefix + } } -} -struct CreateResourcePolicyStatementInputBody: Swift.Equatable { - let statementId: Swift.String? - let effect: LexModelsV2ClientTypes.Effect? - let principal: [LexModelsV2ClientTypes.Principal]? - let action: [Swift.String]? - let condition: [Swift.String:[Swift.String:Swift.String]]? } -extension CreateResourcePolicyStatementInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.CodeHookSpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case action - case condition - case effect - case principal - case statementId + case lambdaCodeHook + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let lambdaCodeHook = self.lambdaCodeHook { + try encodeContainer.encode(lambdaCodeHook, forKey: .lambdaCodeHook) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let statementIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .statementId) - statementId = statementIdDecoded - let effectDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.Effect.self, forKey: .effect) - effect = effectDecoded - let principalContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.Principal?].self, forKey: .principal) - var principalDecoded0:[LexModelsV2ClientTypes.Principal]? = nil - if let principalContainer = principalContainer { - principalDecoded0 = [LexModelsV2ClientTypes.Principal]() - for structure0 in principalContainer { - if let structure0 = structure0 { - principalDecoded0?.append(structure0) - } - } - } - principal = principalDecoded0 - let actionContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .action) - var actionDecoded0:[Swift.String]? = nil - if let actionContainer = actionContainer { - actionDecoded0 = [Swift.String]() - for string0 in actionContainer { - if let string0 = string0 { - actionDecoded0?.append(string0) - } - } - } - action = actionDecoded0 - let conditionContainer = try containerValues.decodeIfPresent([Swift.String: [Swift.String: Swift.String?]?].self, forKey: .condition) - var conditionDecoded0: [Swift.String:[Swift.String:Swift.String]]? = nil - if let conditionContainer = conditionContainer { - conditionDecoded0 = [Swift.String:[Swift.String:Swift.String]]() - for (key0, conditionkeyvaluemap0) in conditionContainer { - var conditionkeyvaluemap0Decoded0: [Swift.String: Swift.String]? = nil - if let conditionkeyvaluemap0 = conditionkeyvaluemap0 { - conditionkeyvaluemap0Decoded0 = [Swift.String: Swift.String]() - for (key1, conditionvalue1) in conditionkeyvaluemap0 { - if let conditionvalue1 = conditionvalue1 { - conditionkeyvaluemap0Decoded0?[key1] = conditionvalue1 - } - } - } - conditionDecoded0?[key0] = conditionkeyvaluemap0Decoded0 - } - } - condition = conditionDecoded0 + let lambdaCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.LambdaCodeHook.self, forKey: .lambdaCodeHook) + lambdaCodeHook = lambdaCodeHookDecoded } } -public enum CreateResourcePolicyStatementOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) +extension LexModelsV2ClientTypes { + /// Contains information about code hooks that Amazon Lex calls during a conversation. + public struct CodeHookSpecification: Swift.Equatable { + /// Specifies a Lambda function that verifies requests to a bot or fulfills the user's request to a bot. + /// This member is required. + public var lambdaCodeHook: LexModelsV2ClientTypes.LambdaCodeHook? + + public init( + lambdaCodeHook: LexModelsV2ClientTypes.LambdaCodeHook? = nil + ) + { + self.lambdaCodeHook = lambdaCodeHook } } + } -extension CreateResourcePolicyStatementOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: CreateResourcePolicyStatementOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.resourceArn = output.resourceArn - self.revisionId = output.revisionId - } else { - self.resourceArn = nil - self.revisionId = nil +extension LexModelsV2ClientTypes.CompositeSlotTypeSetting: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case subSlots + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let subSlots = subSlots { + var subSlotsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .subSlots) + for subslottypecomposition0 in subSlots { + try subSlotsContainer.encode(subslottypecomposition0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let subSlotsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SubSlotTypeComposition?].self, forKey: .subSlots) + var subSlotsDecoded0:[LexModelsV2ClientTypes.SubSlotTypeComposition]? = nil + if let subSlotsContainer = subSlotsContainer { + subSlotsDecoded0 = [LexModelsV2ClientTypes.SubSlotTypeComposition]() + for structure0 in subSlotsContainer { + if let structure0 = structure0 { + subSlotsDecoded0?.append(structure0) + } + } } + subSlots = subSlotsDecoded0 } } -public struct CreateResourcePolicyStatementOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to. - public var resourceArn: Swift.String? - /// The current revision of the resource policy. Use the revision ID to make sure that you are updating the most current version of a resource policy when you add a policy statement to a resource, delete a resource, or update a resource. - public var revisionId: Swift.String? +extension LexModelsV2ClientTypes { + /// A composite slot is a combination of two or more slots that capture multiple pieces of information in a single user input. + public struct CompositeSlotTypeSetting: Swift.Equatable { + /// Subslots in the composite slot. + public var subSlots: [LexModelsV2ClientTypes.SubSlotTypeComposition]? - public init( - resourceArn: Swift.String? = nil, - revisionId: Swift.String? = nil - ) - { - self.resourceArn = resourceArn - self.revisionId = revisionId + public init( + subSlots: [LexModelsV2ClientTypes.SubSlotTypeComposition]? = nil + ) + { + self.subSlots = subSlots + } } -} -struct CreateResourcePolicyStatementOutputResponseBody: Swift.Equatable { - let resourceArn: Swift.String? - let revisionId: Swift.String? } -extension CreateResourcePolicyStatementOutputResponseBody: Swift.Decodable { +extension LexModelsV2ClientTypes.Condition: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case resourceArn - case revisionId + case expressionString + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let expressionString = self.expressionString { + try encodeContainer.encode(expressionString, forKey: .expressionString) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) - resourceArn = resourceArnDecoded - let revisionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .revisionId) - revisionId = revisionIdDecoded + let expressionStringDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .expressionString) + expressionString = expressionStringDecoded } } -extension CreateSlotInput: Swift.Encodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case description - case multipleValuesSetting - case obfuscationSetting - case slotName - case slotTypeId - case subSlotSetting - case valueElicitationSetting +extension LexModelsV2ClientTypes { + /// Provides an expression that evaluates to true or false. + public struct Condition: Swift.Equatable { + /// The expression string that is evaluated. + /// This member is required. + public var expressionString: Swift.String? + + public init( + expressionString: Swift.String? = nil + ) + { + self.expressionString = expressionString + } + } + +} + +extension LexModelsV2ClientTypes.ConditionalBranch: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case condition + case name + case nextStep + case response } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let multipleValuesSetting = self.multipleValuesSetting { - try encodeContainer.encode(multipleValuesSetting, forKey: .multipleValuesSetting) - } - if let obfuscationSetting = self.obfuscationSetting { - try encodeContainer.encode(obfuscationSetting, forKey: .obfuscationSetting) - } - if let slotName = self.slotName { - try encodeContainer.encode(slotName, forKey: .slotName) + if let condition = self.condition { + try encodeContainer.encode(condition, forKey: .condition) } - if let slotTypeId = self.slotTypeId { - try encodeContainer.encode(slotTypeId, forKey: .slotTypeId) + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) } - if let subSlotSetting = self.subSlotSetting { - try encodeContainer.encode(subSlotSetting, forKey: .subSlotSetting) + if let nextStep = self.nextStep { + try encodeContainer.encode(nextStep, forKey: .nextStep) } - if let valueElicitationSetting = self.valueElicitationSetting { - try encodeContainer.encode(valueElicitationSetting, forKey: .valueElicitationSetting) + if let response = self.response { + try encodeContainer.encode(response, forKey: .response) } } -} -extension CreateSlotInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil - } - guard let localeId = localeId else { - return nil - } - guard let intentId = intentId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())/slots" + 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 conditionDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.Condition.self, forKey: .condition) + condition = conditionDecoded + let nextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .nextStep) + nextStep = nextStepDecoded + let responseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .response) + response = responseDecoded } } -public struct CreateSlotInput: Swift.Equatable { - /// The identifier of the bot associated with the slot. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot associated with the slot. - /// This member is required. - public var botVersion: Swift.String? - /// A description of the slot. Use this to help identify the slot in lists. - public var description: Swift.String? - /// The identifier of the intent that contains the slot. - /// This member is required. - public var intentId: Swift.String? - /// The identifier of the language and locale that the slot will be used in. The string must match one of the supported locales. All of the bots, intents, slot types used by the slot must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? - /// Indicates whether the slot returns multiple values in one response. Multi-value slots are only available in the en-US locale. If you set this value to true in any other locale, Amazon Lex throws a ValidationException. If the multipleValuesSetting is not set, the default value is false. - public var multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? - /// Determines how slot values are used in Amazon CloudWatch logs. If the value of the obfuscationSetting parameter is DefaultObfuscation, slot values are obfuscated in the log output. If the value is None, the actual value is present in the log output. The default is to obfuscate values in the CloudWatch logs. - public var obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? - /// The name of the slot. Slot names must be unique within the bot that contains the slot. - /// This member is required. - public var slotName: Swift.String? - /// The unique identifier for the slot type associated with this slot. The slot type determines the values that can be entered into the slot. - public var slotTypeId: Swift.String? - /// Specifications for the constituent sub slots and the expression for the composite slot. - public var subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? - /// Specifies prompts that Amazon Lex sends to the user to elicit a response that provides the value for the slot. - /// This member is required. - public var valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? +extension LexModelsV2ClientTypes { + /// A set of actions that Amazon Lex should run if the condition is matched. + public struct ConditionalBranch: Swift.Equatable { + /// Contains the expression to evaluate. If the condition is true, the branch's actions are taken. + /// This member is required. + public var condition: LexModelsV2ClientTypes.Condition? + /// The name of the branch. + /// This member is required. + public var name: Swift.String? + /// The next step in the conversation. + /// This member is required. + public var nextStep: LexModelsV2ClientTypes.DialogState? + /// Specifies a list of message groups that Amazon Lex uses to respond the user input. + public var response: LexModelsV2ClientTypes.ResponseSpecification? - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - description: Swift.String? = nil, - intentId: Swift.String? = nil, - localeId: Swift.String? = nil, - multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? = nil, - obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? = nil, - slotName: Swift.String? = nil, - slotTypeId: Swift.String? = nil, - subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? = nil, - valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.description = description - self.intentId = intentId - self.localeId = localeId - self.multipleValuesSetting = multipleValuesSetting - self.obfuscationSetting = obfuscationSetting - self.slotName = slotName - self.slotTypeId = slotTypeId - self.subSlotSetting = subSlotSetting - self.valueElicitationSetting = valueElicitationSetting + public init( + condition: LexModelsV2ClientTypes.Condition? = nil, + name: Swift.String? = nil, + nextStep: LexModelsV2ClientTypes.DialogState? = nil, + response: LexModelsV2ClientTypes.ResponseSpecification? = nil + ) + { + self.condition = condition + self.name = name + self.nextStep = nextStep + self.response = response + } } -} -struct CreateSlotInputBody: Swift.Equatable { - let slotName: Swift.String? - let description: Swift.String? - let slotTypeId: Swift.String? - let valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? - let obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? - let multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? - let subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? } -extension CreateSlotInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.ConditionalSpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case description - case multipleValuesSetting - case obfuscationSetting - case slotName - case slotTypeId - case subSlotSetting - case valueElicitationSetting + case active + case conditionalBranches + case defaultBranch } - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let slotNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotName) - slotName = slotNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let slotTypeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeId) - slotTypeId = slotTypeIdDecoded - let valueElicitationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueElicitationSetting.self, forKey: .valueElicitationSetting) - valueElicitationSetting = valueElicitationSettingDecoded - let obfuscationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ObfuscationSetting.self, forKey: .obfuscationSetting) - obfuscationSetting = obfuscationSettingDecoded - let multipleValuesSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.MultipleValuesSetting.self, forKey: .multipleValuesSetting) - multipleValuesSetting = multipleValuesSettingDecoded - let subSlotSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SubSlotSetting.self, forKey: .subSlotSetting) - subSlotSetting = subSlotSettingDecoded + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let active = self.active { + try encodeContainer.encode(active, forKey: .active) + } + if let conditionalBranches = conditionalBranches { + var conditionalBranchesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .conditionalBranches) + for conditionalbranch0 in conditionalBranches { + try conditionalBranchesContainer.encode(conditionalbranch0) + } + } + if let defaultBranch = self.defaultBranch { + try encodeContainer.encode(defaultBranch, forKey: .defaultBranch) + } } -} -public enum CreateSlotOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) + active = activeDecoded + let conditionalBranchesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ConditionalBranch?].self, forKey: .conditionalBranches) + var conditionalBranchesDecoded0:[LexModelsV2ClientTypes.ConditionalBranch]? = nil + if let conditionalBranchesContainer = conditionalBranchesContainer { + conditionalBranchesDecoded0 = [LexModelsV2ClientTypes.ConditionalBranch]() + for structure0 in conditionalBranchesContainer { + if let structure0 = structure0 { + conditionalBranchesDecoded0?.append(structure0) + } + } } + conditionalBranches = conditionalBranchesDecoded0 + let defaultBranchDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DefaultConditionalBranch.self, forKey: .defaultBranch) + defaultBranch = defaultBranchDecoded } } -extension CreateSlotOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: CreateSlotOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botVersion = output.botVersion - self.creationDateTime = output.creationDateTime - self.description = output.description - self.intentId = output.intentId - self.localeId = output.localeId - self.multipleValuesSetting = output.multipleValuesSetting - self.obfuscationSetting = output.obfuscationSetting - self.slotId = output.slotId - self.slotName = output.slotName - self.slotTypeId = output.slotTypeId - self.subSlotSetting = output.subSlotSetting - self.valueElicitationSetting = output.valueElicitationSetting +extension LexModelsV2ClientTypes { + /// Provides a list of conditional branches. Branches are evaluated in the order that they are entered in the list. The first branch with a condition that evaluates to true is executed. The last branch in the list is the default branch. The default branch should not have any condition expression. The default branch is executed if no other branch has a matching condition. + public struct ConditionalSpecification: Swift.Equatable { + /// Determines whether a conditional branch is active. When active is false, the conditions are not evaluated. + /// This member is required. + public var active: Swift.Bool? + /// A list of conditional branches. A conditional branch is made up of a condition, a response and a next step. The response and next step are executed when the condition is true. + /// This member is required. + public var conditionalBranches: [LexModelsV2ClientTypes.ConditionalBranch]? + /// The conditional branch that should be followed when the conditions for other branches are not satisfied. A conditional branch is made up of a condition, a response and a next step. + /// This member is required. + public var defaultBranch: LexModelsV2ClientTypes.DefaultConditionalBranch? + + public init( + active: Swift.Bool? = nil, + conditionalBranches: [LexModelsV2ClientTypes.ConditionalBranch]? = nil, + defaultBranch: LexModelsV2ClientTypes.DefaultConditionalBranch? = nil + ) + { + self.active = active + self.conditionalBranches = conditionalBranches + self.defaultBranch = defaultBranch + } + } + +} + +extension ConflictException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ConflictExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message } else { - self.botId = nil - self.botVersion = nil - self.creationDateTime = nil - self.description = nil - self.intentId = nil - self.localeId = nil - self.multipleValuesSetting = nil - self.obfuscationSetting = nil - self.slotId = nil - self.slotName = nil - self.slotTypeId = nil - self.subSlotSetting = nil - self.valueElicitationSetting = nil + self.properties.message = nil } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message } } -public struct CreateSlotOutputResponse: Swift.Equatable { - /// The unique identifier of the bot associated with the slot. - public var botId: Swift.String? - /// The version of the bot associated with the slot. - public var botVersion: Swift.String? - /// The timestamp of the date and time that the slot was created. - public var creationDateTime: ClientRuntime.Date? - /// The description associated with the slot. - public var description: Swift.String? - /// The unique identifier of the intent associated with the slot. - public var intentId: Swift.String? - /// The language and local specified for the slot. - public var localeId: Swift.String? - /// Indicates whether the slot returns multiple values in one response. - public var multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? - /// Indicates whether the slot is configured to obfuscate values in Amazon CloudWatch logs. - public var obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? - /// The unique identifier associated with the slot. Use this to identify the slot when you update or delete it. - public var slotId: Swift.String? - /// The name specified for the slot. - public var slotName: Swift.String? - /// The unique identifier of the slot type associated with this slot. - public var slotTypeId: Swift.String? - /// Specifications for the constituent sub slots and the expression for the composite slot. - public var subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? - /// The value elicitation settings specified for the slot. - public var valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? +/// The action that you tried to perform couldn't be completed because the resource is in a conflicting state. For example, deleting a bot that is in the CREATING state. Try your request again. +public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ConflictException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - intentId: Swift.String? = nil, - localeId: Swift.String? = nil, - multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? = nil, - obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? = nil, - slotId: Swift.String? = nil, - slotName: Swift.String? = nil, - slotTypeId: Swift.String? = nil, - subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? = nil, - valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? = nil + message: Swift.String? = nil ) { - self.botId = botId - self.botVersion = botVersion - self.creationDateTime = creationDateTime - self.description = description - self.intentId = intentId - self.localeId = localeId - self.multipleValuesSetting = multipleValuesSetting - self.obfuscationSetting = obfuscationSetting - self.slotId = slotId - self.slotName = slotName - self.slotTypeId = slotTypeId - self.subSlotSetting = subSlotSetting - self.valueElicitationSetting = valueElicitationSetting + self.properties.message = message } } -struct CreateSlotOutputResponseBody: Swift.Equatable { - let slotId: Swift.String? - let slotName: Swift.String? - let description: Swift.String? - let slotTypeId: Swift.String? - let valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? - let obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let intentId: Swift.String? - let creationDateTime: ClientRuntime.Date? - let multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? - let subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? +struct ConflictExceptionBody: Swift.Equatable { + let message: Swift.String? } -extension CreateSlotOutputResponseBody: Swift.Decodable { +extension ConflictExceptionBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case creationDateTime - case description - case intentId - case localeId - case multipleValuesSetting - case obfuscationSetting - case slotId - case slotName - case slotTypeId - case subSlotSetting - case valueElicitationSetting + case message } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let slotIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotId) - slotId = slotIdDecoded - let slotNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotName) - slotName = slotNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let slotTypeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeId) - slotTypeId = slotTypeIdDecoded - let valueElicitationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueElicitationSetting.self, forKey: .valueElicitationSetting) - valueElicitationSetting = valueElicitationSettingDecoded - let obfuscationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ObfuscationSetting.self, forKey: .obfuscationSetting) - obfuscationSetting = obfuscationSettingDecoded - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) - intentId = intentIdDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let multipleValuesSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.MultipleValuesSetting.self, forKey: .multipleValuesSetting) - multipleValuesSetting = multipleValuesSettingDecoded - let subSlotSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SubSlotSetting.self, forKey: .subSlotSetting) - subSlotSetting = subSlotSettingDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded } } -extension CreateSlotTypeInput: Swift.Encodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case compositeSlotTypeSetting - case description - case externalSourceSetting - case parentSlotTypeSignature - case slotTypeName - case slotTypeValues - case valueSelectionSetting - } +extension LexModelsV2ClientTypes { + public enum ConversationEndState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case dropped + case failure + case success + case sdkUnknown(Swift.String) - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let compositeSlotTypeSetting = self.compositeSlotTypeSetting { - try encodeContainer.encode(compositeSlotTypeSetting, forKey: .compositeSlotTypeSetting) - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let externalSourceSetting = self.externalSourceSetting { - try encodeContainer.encode(externalSourceSetting, forKey: .externalSourceSetting) - } - if let parentSlotTypeSignature = self.parentSlotTypeSignature { - try encodeContainer.encode(parentSlotTypeSignature, forKey: .parentSlotTypeSignature) + public static var allCases: [ConversationEndState] { + return [ + .dropped, + .failure, + .success, + .sdkUnknown("") + ] } - if let slotTypeName = self.slotTypeName { - try encodeContainer.encode(slotTypeName, forKey: .slotTypeName) + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) } - if let slotTypeValues = slotTypeValues { - var slotTypeValuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .slotTypeValues) - for slottypevalue0 in slotTypeValues { - try slotTypeValuesContainer.encode(slottypevalue0) + public var rawValue: Swift.String { + switch self { + case .dropped: return "Dropped" + case .failure: return "Failure" + case .success: return "Success" + case let .sdkUnknown(s): return s } } - if let valueSelectionSetting = self.valueSelectionSetting { - try encodeContainer.encode(valueSelectionSetting, forKey: .valueSelectionSetting) + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = ConversationEndState(rawValue: rawValue) ?? ConversationEndState.sdkUnknown(rawValue) } } } -extension CreateSlotTypeInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil +extension LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case intentName + case matchResult + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let intentName = self.intentName { + try encodeContainer.encode(intentName, forKey: .intentName) } - guard let localeId = localeId else { - return nil + if let matchResult = self.matchResult { + try encodeContainer.encode(matchResult.rawValue, forKey: .matchResult) } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/slottypes" } -} -public struct CreateSlotTypeInput: Swift.Equatable { - /// The identifier of the bot associated with this slot type. - /// This member is required. - public var botId: Swift.String? - /// The identifier of the bot version associated with this slot type. - /// This member is required. - public var botVersion: Swift.String? - /// Specifications for a composite slot type. - public var compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? - /// A description of the slot type. Use the description to help identify the slot type in lists. - public var description: Swift.String? - /// Sets the type of external information used to create the slot type. - public var externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? - /// The identifier of the language and locale that the slot type will be used in. The string must match one of the supported locales. All of the bots, intents, and slots used by the slot type must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? - /// The built-in slot type used as a parent of this slot type. When you define a parent slot type, the new slot type has the configuration of the parent slot type. Only AMAZON.AlphaNumeric is supported. - public var parentSlotTypeSignature: Swift.String? - /// The name for the slot. A slot type name must be unique within the intent. - /// This member is required. - public var slotTypeName: Swift.String? - /// A list of SlotTypeValue objects that defines the values that the slot type can take. Each value can have a list of synonyms, additional values that help train the machine learning model about the values that it resolves for a slot. - public var slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? - /// Determines the strategy that Amazon Lex uses to select a value from the list of possible values. The field can be set to one of the following values: - /// - /// * ORIGINAL_VALUE - Returns the value entered by the user, if the user value is similar to the slot value. - /// - /// * TOP_RESOLUTION - If there is a resolution list for the slot, return the first value in the resolution list. If there is no resolution list, return null. - /// - /// - /// If you don't specify the valueSelectionSetting parameter, the default is ORIGINAL_VALUE. - public var valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? - - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? = nil, - description: Swift.String? = nil, - externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? = nil, - localeId: Swift.String? = nil, - parentSlotTypeSignature: Swift.String? = nil, - slotTypeName: Swift.String? = nil, - slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? = nil, - valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.compositeSlotTypeSetting = compositeSlotTypeSetting - self.description = description - self.externalSourceSetting = externalSourceSetting - self.localeId = localeId - self.parentSlotTypeSignature = parentSlotTypeSignature - self.slotTypeName = slotTypeName - self.slotTypeValues = slotTypeValues - self.valueSelectionSetting = valueSelectionSetting + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) + intentName = intentNameDecoded + let matchResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .matchResult) + matchResult = matchResultDecoded } } -struct CreateSlotTypeInputBody: Swift.Equatable { - let slotTypeName: Swift.String? - let description: Swift.String? - let slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? - let valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? - let parentSlotTypeSignature: Swift.String? - let externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? - let compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? +extension LexModelsV2ClientTypes { + /// The item listing the evaluation of intent level success or failure. + public struct ConversationLevelIntentClassificationResultItem: Swift.Equatable { + /// The intent name used in the evaluation of intent level success or failure. + /// This member is required. + public var intentName: Swift.String? + /// The number of times the specific intent is used in the evaluation of intent level success or failure. + /// This member is required. + public var matchResult: LexModelsV2ClientTypes.TestResultMatchStatus? + + public init( + intentName: Swift.String? = nil, + matchResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil + ) + { + self.intentName = intentName + self.matchResult = matchResult + } + } + } -extension CreateSlotTypeInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.ConversationLevelResultDetail: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case compositeSlotTypeSetting - case description - case externalSourceSetting - case parentSlotTypeSignature - case slotTypeName - case slotTypeValues - case valueSelectionSetting + case endToEndResult + case speechTranscriptionResult + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let endToEndResult = self.endToEndResult { + try encodeContainer.encode(endToEndResult.rawValue, forKey: .endToEndResult) + } + if let speechTranscriptionResult = self.speechTranscriptionResult { + try encodeContainer.encode(speechTranscriptionResult.rawValue, forKey: .speechTranscriptionResult) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let slotTypeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeName) - slotTypeName = slotTypeNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let slotTypeValuesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotTypeValue?].self, forKey: .slotTypeValues) - var slotTypeValuesDecoded0:[LexModelsV2ClientTypes.SlotTypeValue]? = nil - if let slotTypeValuesContainer = slotTypeValuesContainer { - slotTypeValuesDecoded0 = [LexModelsV2ClientTypes.SlotTypeValue]() - for structure0 in slotTypeValuesContainer { - if let structure0 = structure0 { - slotTypeValuesDecoded0?.append(structure0) - } - } - } - slotTypeValues = slotTypeValuesDecoded0 - let valueSelectionSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueSelectionSetting.self, forKey: .valueSelectionSetting) - valueSelectionSetting = valueSelectionSettingDecoded - let parentSlotTypeSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentSlotTypeSignature) - parentSlotTypeSignature = parentSlotTypeSignatureDecoded - let externalSourceSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExternalSourceSetting.self, forKey: .externalSourceSetting) - externalSourceSetting = externalSourceSettingDecoded - let compositeSlotTypeSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CompositeSlotTypeSetting.self, forKey: .compositeSlotTypeSetting) - compositeSlotTypeSetting = compositeSlotTypeSettingDecoded + let endToEndResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .endToEndResult) + endToEndResult = endToEndResultDecoded + let speechTranscriptionResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .speechTranscriptionResult) + speechTranscriptionResult = speechTranscriptionResultDecoded } } -public enum CreateSlotTypeOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) +extension LexModelsV2ClientTypes { + /// The conversation level details of the conversation used in the test set. + public struct ConversationLevelResultDetail: Swift.Equatable { + /// The success or failure of the streaming of the conversation. + /// This member is required. + public var endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? + /// The speech transcription success or failure details of the conversation. + public var speechTranscriptionResult: LexModelsV2ClientTypes.TestResultMatchStatus? + + public init( + endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil, + speechTranscriptionResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil + ) + { + self.endToEndResult = endToEndResult + self.speechTranscriptionResult = speechTranscriptionResult } } + } -extension CreateSlotTypeOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: CreateSlotTypeOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botVersion = output.botVersion - self.compositeSlotTypeSetting = output.compositeSlotTypeSetting - self.creationDateTime = output.creationDateTime - self.description = output.description - self.externalSourceSetting = output.externalSourceSetting - self.localeId = output.localeId - self.parentSlotTypeSignature = output.parentSlotTypeSignature - self.slotTypeId = output.slotTypeId - self.slotTypeName = output.slotTypeName - self.slotTypeValues = output.slotTypeValues - self.valueSelectionSetting = output.valueSelectionSetting - } else { - self.botId = nil - self.botVersion = nil - self.compositeSlotTypeSetting = nil - self.creationDateTime = nil - self.description = nil - self.externalSourceSetting = nil - self.localeId = nil - self.parentSlotTypeSignature = nil - self.slotTypeId = nil - self.slotTypeName = nil - self.slotTypeValues = nil - self.valueSelectionSetting = nil +extension LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case intentName + case matchResult + case slotName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let intentName = self.intentName { + try encodeContainer.encode(intentName, forKey: .intentName) + } + if let matchResult = self.matchResult { + try encodeContainer.encode(matchResult.rawValue, forKey: .matchResult) + } + if let slotName = self.slotName { + try encodeContainer.encode(slotName, forKey: .slotName) } } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) + intentName = intentNameDecoded + let slotNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotName) + slotName = slotNameDecoded + let matchResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .matchResult) + matchResult = matchResultDecoded + } } -public struct CreateSlotTypeOutputResponse: Swift.Equatable { - /// The identifier for the bot associated with the slot type. - public var botId: Swift.String? - /// The version of the bot associated with the slot type. - public var botVersion: Swift.String? - /// Specifications for a composite slot type. - public var compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? - /// A timestamp of the date and time that the slot type was created. - public var creationDateTime: ClientRuntime.Date? - /// The description specified for the slot type. - public var description: Swift.String? - /// The type of external information used to create the slot type. - public var externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? - /// The specified language and local specified for the slot type. - public var localeId: Swift.String? - /// The signature of the base slot type specified for the slot type. - public var parentSlotTypeSignature: Swift.String? - /// The unique identifier assigned to the slot type. Use this to identify the slot type in the UpdateSlotType and DeleteSlotType operations. - public var slotTypeId: Swift.String? - /// The name specified for the slot type. - public var slotTypeName: Swift.String? - /// The list of values that the slot type can assume. - public var slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? - /// The strategy that Amazon Lex uses to select a value from the list of possible values. - public var valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? +extension LexModelsV2ClientTypes { + /// The slots used for the slot resolution in the conversation. + public struct ConversationLevelSlotResolutionResultItem: Swift.Equatable { + /// The intents used in the slots list for the slot resolution details. + /// This member is required. + public var intentName: Swift.String? + /// The number of matching slots used in the slots listings for the slot resolution evaluation. + /// This member is required. + public var matchResult: LexModelsV2ClientTypes.TestResultMatchStatus? + /// The slot name in the slots list for the slot resolution details. + /// This member is required. + public var slotName: Swift.String? - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? = nil, - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? = nil, - localeId: Swift.String? = nil, - parentSlotTypeSignature: Swift.String? = nil, - slotTypeId: Swift.String? = nil, - slotTypeName: Swift.String? = nil, - slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? = nil, - valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.compositeSlotTypeSetting = compositeSlotTypeSetting - self.creationDateTime = creationDateTime - self.description = description - self.externalSourceSetting = externalSourceSetting - self.localeId = localeId - self.parentSlotTypeSignature = parentSlotTypeSignature - self.slotTypeId = slotTypeId - self.slotTypeName = slotTypeName - self.slotTypeValues = slotTypeValues - self.valueSelectionSetting = valueSelectionSetting + public init( + intentName: Swift.String? = nil, + matchResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil, + slotName: Swift.String? = nil + ) + { + self.intentName = intentName + self.matchResult = matchResult + self.slotName = slotName + } } -} -struct CreateSlotTypeOutputResponseBody: Swift.Equatable { - let slotTypeId: Swift.String? - let slotTypeName: Swift.String? - let description: Swift.String? - let slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? - let valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? - let parentSlotTypeSignature: Swift.String? - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let creationDateTime: ClientRuntime.Date? - let externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? - let compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? } -extension CreateSlotTypeOutputResponseBody: Swift.Decodable { +extension LexModelsV2ClientTypes.ConversationLevelTestResultItem: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case compositeSlotTypeSetting - case creationDateTime - case description - case externalSourceSetting - case localeId - case parentSlotTypeSignature - case slotTypeId - case slotTypeName - case slotTypeValues - case valueSelectionSetting + case conversationId + case endToEndResult + case intentClassificationResults + case slotResolutionResults + case speechTranscriptionResult + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let conversationId = self.conversationId { + try encodeContainer.encode(conversationId, forKey: .conversationId) + } + if let endToEndResult = self.endToEndResult { + try encodeContainer.encode(endToEndResult.rawValue, forKey: .endToEndResult) + } + if let intentClassificationResults = intentClassificationResults { + var intentClassificationResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .intentClassificationResults) + for conversationlevelintentclassificationresultitem0 in intentClassificationResults { + try intentClassificationResultsContainer.encode(conversationlevelintentclassificationresultitem0) + } + } + if let slotResolutionResults = slotResolutionResults { + var slotResolutionResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .slotResolutionResults) + for conversationlevelslotresolutionresultitem0 in slotResolutionResults { + try slotResolutionResultsContainer.encode(conversationlevelslotresolutionresultitem0) + } + } + if let speechTranscriptionResult = self.speechTranscriptionResult { + try encodeContainer.encode(speechTranscriptionResult.rawValue, forKey: .speechTranscriptionResult) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let slotTypeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeId) - slotTypeId = slotTypeIdDecoded - let slotTypeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeName) - slotTypeName = slotTypeNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let slotTypeValuesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotTypeValue?].self, forKey: .slotTypeValues) - var slotTypeValuesDecoded0:[LexModelsV2ClientTypes.SlotTypeValue]? = nil - if let slotTypeValuesContainer = slotTypeValuesContainer { - slotTypeValuesDecoded0 = [LexModelsV2ClientTypes.SlotTypeValue]() - for structure0 in slotTypeValuesContainer { + let conversationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .conversationId) + conversationId = conversationIdDecoded + let endToEndResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .endToEndResult) + endToEndResult = endToEndResultDecoded + let speechTranscriptionResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .speechTranscriptionResult) + speechTranscriptionResult = speechTranscriptionResultDecoded + let intentClassificationResultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem?].self, forKey: .intentClassificationResults) + var intentClassificationResultsDecoded0:[LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem]? = nil + if let intentClassificationResultsContainer = intentClassificationResultsContainer { + intentClassificationResultsDecoded0 = [LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem]() + for structure0 in intentClassificationResultsContainer { if let structure0 = structure0 { - slotTypeValuesDecoded0?.append(structure0) + intentClassificationResultsDecoded0?.append(structure0) } } } - slotTypeValues = slotTypeValuesDecoded0 - let valueSelectionSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueSelectionSetting.self, forKey: .valueSelectionSetting) - valueSelectionSetting = valueSelectionSettingDecoded - let parentSlotTypeSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentSlotTypeSignature) - parentSlotTypeSignature = parentSlotTypeSignatureDecoded - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let externalSourceSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExternalSourceSetting.self, forKey: .externalSourceSetting) - externalSourceSetting = externalSourceSettingDecoded - let compositeSlotTypeSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CompositeSlotTypeSetting.self, forKey: .compositeSlotTypeSetting) - compositeSlotTypeSetting = compositeSlotTypeSettingDecoded + intentClassificationResults = intentClassificationResultsDecoded0 + let slotResolutionResultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem?].self, forKey: .slotResolutionResults) + var slotResolutionResultsDecoded0:[LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem]? = nil + if let slotResolutionResultsContainer = slotResolutionResultsContainer { + slotResolutionResultsDecoded0 = [LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem]() + for structure0 in slotResolutionResultsContainer { + if let structure0 = structure0 { + slotResolutionResultsDecoded0?.append(structure0) + } + } + } + slotResolutionResults = slotResolutionResultsDecoded0 } } -extension CreateTestSetDiscrepancyReportInput: Swift.Encodable { +extension LexModelsV2ClientTypes { + /// The test result evaluation item at the conversation level. + public struct ConversationLevelTestResultItem: Swift.Equatable { + /// The conversation Id of the test result evaluation item. + /// This member is required. + public var conversationId: Swift.String? + /// The end-to-end success or failure of the test result evaluation item. + /// This member is required. + public var endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? + /// The intent classification of the test result evaluation item. + /// This member is required. + public var intentClassificationResults: [LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem]? + /// The slot success or failure of the test result evaluation item. + /// This member is required. + public var slotResolutionResults: [LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem]? + /// The speech transcription success or failure of the test result evaluation item. + public var speechTranscriptionResult: LexModelsV2ClientTypes.TestResultMatchStatus? + + public init( + conversationId: Swift.String? = nil, + endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil, + intentClassificationResults: [LexModelsV2ClientTypes.ConversationLevelIntentClassificationResultItem]? = nil, + slotResolutionResults: [LexModelsV2ClientTypes.ConversationLevelSlotResolutionResultItem]? = nil, + speechTranscriptionResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil + ) + { + self.conversationId = conversationId + self.endToEndResult = endToEndResult + self.intentClassificationResults = intentClassificationResults + self.slotResolutionResults = slotResolutionResults + self.speechTranscriptionResult = speechTranscriptionResult + } + } + +} + +extension LexModelsV2ClientTypes.ConversationLevelTestResults: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case target + case items } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let target = self.target { - try encodeContainer.encode(target, forKey: .target) + if let items = items { + var itemsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .items) + for conversationleveltestresultitem0 in items { + try itemsContainer.encode(conversationleveltestresultitem0) + } } } -} -extension CreateTestSetDiscrepancyReportInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let testSetId = testSetId else { - return nil + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let itemsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ConversationLevelTestResultItem?].self, forKey: .items) + var itemsDecoded0:[LexModelsV2ClientTypes.ConversationLevelTestResultItem]? = nil + if let itemsContainer = itemsContainer { + itemsDecoded0 = [LexModelsV2ClientTypes.ConversationLevelTestResultItem]() + for structure0 in itemsContainer { + if let structure0 = structure0 { + itemsDecoded0?.append(structure0) + } + } } - return "/testsets/\(testSetId.urlPercentEncoding())/testsetdiscrepancy" + items = itemsDecoded0 } } -public struct CreateTestSetDiscrepancyReportInput: Swift.Equatable { - /// The target bot for the test set discrepancy report. - /// This member is required. - public var target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? - /// The test set Id for the test set discrepancy report. - /// This member is required. - public var testSetId: Swift.String? +extension LexModelsV2ClientTypes { + /// The test set results data at the conversation level. + public struct ConversationLevelTestResults: Swift.Equatable { + /// The item list in the test set results data at the conversation level. + /// This member is required. + public var items: [LexModelsV2ClientTypes.ConversationLevelTestResultItem]? - public init( - target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? = nil, - testSetId: Swift.String? = nil - ) - { - self.target = target - self.testSetId = testSetId + public init( + items: [LexModelsV2ClientTypes.ConversationLevelTestResultItem]? = nil + ) + { + self.items = items + } } -} -struct CreateTestSetDiscrepancyReportInputBody: Swift.Equatable { - let target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? } -extension CreateTestSetDiscrepancyReportInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.ConversationLevelTestResultsFilterBy: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case target + case endToEndResult } - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let targetDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget.self, forKey: .target) - target = targetDecoded - } -} - -public enum CreateTestSetDiscrepancyReportOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) - } - } -} - -extension CreateTestSetDiscrepancyReportOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: CreateTestSetDiscrepancyReportOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.creationDateTime = output.creationDateTime - self.target = output.target - self.testSetDiscrepancyReportId = output.testSetDiscrepancyReportId - self.testSetId = output.testSetId - } else { - self.creationDateTime = nil - self.target = nil - self.testSetDiscrepancyReportId = nil - self.testSetId = nil - } - } -} - -public struct CreateTestSetDiscrepancyReportOutputResponse: Swift.Equatable { - /// The creation date and time for the test set discrepancy report. - public var creationDateTime: ClientRuntime.Date? - /// The target bot for the test set discrepancy report. - public var target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? - /// The unique identifier of the test set discrepancy report to describe. - public var testSetDiscrepancyReportId: Swift.String? - /// The test set Id for the test set discrepancy report. - public var testSetId: Swift.String? - - public init( - creationDateTime: ClientRuntime.Date? = nil, - target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? = nil, - testSetDiscrepancyReportId: Swift.String? = nil, - testSetId: Swift.String? = nil - ) - { - self.creationDateTime = creationDateTime - self.target = target - self.testSetDiscrepancyReportId = testSetDiscrepancyReportId - self.testSetId = testSetId - } -} - -struct CreateTestSetDiscrepancyReportOutputResponseBody: Swift.Equatable { - let testSetDiscrepancyReportId: Swift.String? - let creationDateTime: ClientRuntime.Date? - let testSetId: Swift.String? - let target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? -} - -extension CreateTestSetDiscrepancyReportOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case creationDateTime - case target - case testSetDiscrepancyReportId - case testSetId + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let endToEndResult = self.endToEndResult { + try encodeContainer.encode(endToEndResult.rawValue, forKey: .endToEndResult) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let testSetDiscrepancyReportIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetDiscrepancyReportId) - testSetDiscrepancyReportId = testSetDiscrepancyReportIdDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let testSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetId) - testSetId = testSetIdDecoded - let targetDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget.self, forKey: .target) - target = targetDecoded - } -} - -extension CreateUploadUrlInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - return "/createuploadurl" - } -} - -public struct CreateUploadUrlInput: Swift.Equatable { - - public init() { } -} - -struct CreateUploadUrlInputBody: Swift.Equatable { -} - -extension CreateUploadUrlInputBody: Swift.Decodable { - - public init(from decoder: Swift.Decoder) throws { + let endToEndResultDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestResultMatchStatus.self, forKey: .endToEndResult) + endToEndResult = endToEndResultDecoded } } -public enum CreateUploadUrlOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) - } - } -} +extension LexModelsV2ClientTypes { + /// The selection to filter the test set results data at the conversation level. + public struct ConversationLevelTestResultsFilterBy: Swift.Equatable { + /// The selection of matched or mismatched end-to-end status to filter test set results data at the conversation level. + public var endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? -extension CreateUploadUrlOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: CreateUploadUrlOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.importId = output.importId - self.uploadUrl = output.uploadUrl - } else { - self.importId = nil - self.uploadUrl = nil + public init( + endToEndResult: LexModelsV2ClientTypes.TestResultMatchStatus? = nil + ) + { + self.endToEndResult = endToEndResult } } -} - -public struct CreateUploadUrlOutputResponse: Swift.Equatable { - /// An identifier for a unique import job. Use it when you call the [StartImport](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_StartImport.html) operation. - public var importId: Swift.String? - /// A pre-signed S3 write URL. Upload the zip archive file that contains the definition of your bot or bot locale. - public var uploadUrl: Swift.String? - - public init( - importId: Swift.String? = nil, - uploadUrl: Swift.String? = nil - ) - { - self.importId = importId - self.uploadUrl = uploadUrl - } -} - -struct CreateUploadUrlOutputResponseBody: Swift.Equatable { - let importId: Swift.String? - let uploadUrl: Swift.String? -} - -extension CreateUploadUrlOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case importId - case uploadUrl - } - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let importIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importId) - importId = importIdDecoded - let uploadUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .uploadUrl) - uploadUrl = uploadUrlDecoded - } } -extension LexModelsV2ClientTypes.CustomPayload: Swift.Codable { +extension LexModelsV2ClientTypes.ConversationLogSettings: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case value + case audioLogSettings + case textLogSettings } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let value = self.value { - try encodeContainer.encode(value, forKey: .value) + if let audioLogSettings = audioLogSettings { + var audioLogSettingsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .audioLogSettings) + for audiologsetting0 in audioLogSettings { + try audioLogSettingsContainer.encode(audiologsetting0) + } + } + if let textLogSettings = textLogSettings { + var textLogSettingsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .textLogSettings) + for textlogsetting0 in textLogSettings { + try textLogSettingsContainer.encode(textlogsetting0) + } } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let valueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .value) - value = valueDecoded + let textLogSettingsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.TextLogSetting?].self, forKey: .textLogSettings) + var textLogSettingsDecoded0:[LexModelsV2ClientTypes.TextLogSetting]? = nil + if let textLogSettingsContainer = textLogSettingsContainer { + textLogSettingsDecoded0 = [LexModelsV2ClientTypes.TextLogSetting]() + for structure0 in textLogSettingsContainer { + if let structure0 = structure0 { + textLogSettingsDecoded0?.append(structure0) + } + } + } + textLogSettings = textLogSettingsDecoded0 + let audioLogSettingsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AudioLogSetting?].self, forKey: .audioLogSettings) + var audioLogSettingsDecoded0:[LexModelsV2ClientTypes.AudioLogSetting]? = nil + if let audioLogSettingsContainer = audioLogSettingsContainer { + audioLogSettingsDecoded0 = [LexModelsV2ClientTypes.AudioLogSetting]() + for structure0 in audioLogSettingsContainer { + if let structure0 = structure0 { + audioLogSettingsDecoded0?.append(structure0) + } + } + } + audioLogSettings = audioLogSettingsDecoded0 } } extension LexModelsV2ClientTypes { - /// A custom response string that Amazon Lex sends to your application. You define the content and structure the string. - public struct CustomPayload: Swift.Equatable { - /// The string that is sent to your application. - /// This member is required. - public var value: Swift.String? + /// Configures conversation logging that saves audio, text, and metadata for the conversations with your users. + public struct ConversationLogSettings: Swift.Equatable { + /// The Amazon S3 settings for logging audio to an S3 bucket. + public var audioLogSettings: [LexModelsV2ClientTypes.AudioLogSetting]? + /// The Amazon CloudWatch Logs settings for logging text and metadata. + public var textLogSettings: [LexModelsV2ClientTypes.TextLogSetting]? public init( - value: Swift.String? = nil + audioLogSettings: [LexModelsV2ClientTypes.AudioLogSetting]? = nil, + textLogSettings: [LexModelsV2ClientTypes.TextLogSetting]? = nil ) { - self.value = value + self.audioLogSettings = audioLogSettings + self.textLogSettings = textLogSettings } } } -extension LexModelsV2ClientTypes.CustomVocabularyEntryId: Swift.Codable { +extension LexModelsV2ClientTypes.ConversationLogsDataSource: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case itemId + case botAliasId + case botId + case filter + case localeId } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let itemId = self.itemId { - try encodeContainer.encode(itemId, forKey: .itemId) - } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let itemIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .itemId) - itemId = itemIdDecoded - } -} - -extension LexModelsV2ClientTypes { - /// The unique entry identifier for the custom vocabulary items. - public struct CustomVocabularyEntryId: Swift.Equatable { - /// The unique item identifier for the custom vocabulary items. - /// This member is required. - public var itemId: Swift.String? - - public init( - itemId: Swift.String? = nil - ) - { - self.itemId = itemId - } - } - -} - -extension LexModelsV2ClientTypes.CustomVocabularyExportSpecification: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case localeId - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botId = self.botId { - try encodeContainer.encode(botId, forKey: .botId) - } - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) - } - if let localeId = self.localeId { - try encodeContainer.encode(localeId, forKey: .localeId) + if let botAliasId = self.botAliasId { + try encodeContainer.encode(botAliasId, forKey: .botAliasId) + } + if let botId = self.botId { + try encodeContainer.encode(botId, forKey: .botId) + } + if let filter = self.filter { + try encodeContainer.encode(filter, forKey: .filter) + } + if let localeId = self.localeId { + try encodeContainer.encode(localeId, forKey: .localeId) } } @@ -7827,181 +7711,115 @@ extension LexModelsV2ClientTypes.CustomVocabularyExportSpecification: Swift.Coda let containerValues = try decoder.container(keyedBy: CodingKeys.self) let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded + let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) + botAliasId = botAliasIdDecoded let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) localeId = localeIdDecoded + let filterDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConversationLogsDataSourceFilterBy.self, forKey: .filter) + filter = filterDecoded } } extension LexModelsV2ClientTypes { - /// Provides the parameters required for exporting a custom vocabulary. - public struct CustomVocabularyExportSpecification: Swift.Equatable { - /// The identifier of the bot that contains the custom vocabulary to export. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot that contains the custom vocabulary to export. - /// This member is required. - public var botVersion: Swift.String? - /// The locale of the bot that contains the custom vocabulary to export. + /// The data source that uses conversation logs. + public struct ConversationLogsDataSource: Swift.Equatable { + /// The bot alias Id from the conversation logs. /// This member is required. - public var localeId: Swift.String? - - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - localeId: Swift.String? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.localeId = localeId - } - } - -} - -extension LexModelsV2ClientTypes.CustomVocabularyImportSpecification: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case localeId - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botId = self.botId { - try encodeContainer.encode(botId, forKey: .botId) - } - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) - } - if let localeId = self.localeId { - try encodeContainer.encode(localeId, forKey: .localeId) - } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - } -} - -extension LexModelsV2ClientTypes { - /// Provides the parameters required for importing a custom vocabulary. - public struct CustomVocabularyImportSpecification: Swift.Equatable { - /// The identifier of the bot to import the custom vocabulary to. + public var botAliasId: Swift.String? + /// The bot Id from the conversation logs. /// This member is required. public var botId: Swift.String? - /// The version of the bot to import the custom vocabulary to. + /// The filter for the data source of the conversation log. /// This member is required. - public var botVersion: Swift.String? - /// The identifier of the local to import the custom vocabulary to. The value must be en_GB. + public var filter: LexModelsV2ClientTypes.ConversationLogsDataSourceFilterBy? + /// The locale Id of the conversation log. /// This member is required. public var localeId: Swift.String? public init( + botAliasId: Swift.String? = nil, botId: Swift.String? = nil, - botVersion: Swift.String? = nil, + filter: LexModelsV2ClientTypes.ConversationLogsDataSourceFilterBy? = nil, localeId: Swift.String? = nil ) { + self.botAliasId = botAliasId self.botId = botId - self.botVersion = botVersion + self.filter = filter self.localeId = localeId } } } -extension LexModelsV2ClientTypes.CustomVocabularyItem: Swift.Codable { +extension LexModelsV2ClientTypes.ConversationLogsDataSourceFilterBy: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case displayAs - case itemId - case phrase - case weight + case endTime + case inputMode + case startTime } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let displayAs = self.displayAs { - try encodeContainer.encode(displayAs, forKey: .displayAs) - } - if let itemId = self.itemId { - try encodeContainer.encode(itemId, forKey: .itemId) + if let endTime = self.endTime { + try encodeContainer.encodeTimestamp(endTime, format: .epochSeconds, forKey: .endTime) } - if let phrase = self.phrase { - try encodeContainer.encode(phrase, forKey: .phrase) + if let inputMode = self.inputMode { + try encodeContainer.encode(inputMode.rawValue, forKey: .inputMode) } - if let weight = self.weight { - try encodeContainer.encode(weight, forKey: .weight) + if let startTime = self.startTime { + try encodeContainer.encodeTimestamp(startTime, format: .epochSeconds, forKey: .startTime) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let itemIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .itemId) - itemId = itemIdDecoded - let phraseDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .phrase) - phrase = phraseDecoded - let weightDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .weight) - weight = weightDecoded - let displayAsDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .displayAs) - displayAs = displayAsDecoded + let startTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startTime) + startTime = startTimeDecoded + let endTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endTime) + endTime = endTimeDecoded + let inputModeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConversationLogsInputModeFilter.self, forKey: .inputMode) + inputMode = inputModeDecoded } } extension LexModelsV2ClientTypes { - /// The unique custom vocabulary item from the custom vocabulary list. - public struct CustomVocabularyItem: Swift.Equatable { - /// The DisplayAs value for the custom vocabulary item from the custom vocabulary list. - public var displayAs: Swift.String? - /// The unique item identifer for the custom vocabulary item from the custom vocabulary list. + /// The selected data source to filter the conversation log. + public struct ConversationLogsDataSourceFilterBy: Swift.Equatable { + /// The end time for the conversation log. /// This member is required. - public var itemId: Swift.String? - /// The unique phrase for the custom vocabulary item from the custom vocabulary list. + public var endTime: ClientRuntime.Date? + /// The selection to filter by input mode for the conversation logs. /// This member is required. - public var phrase: Swift.String? - /// The weight assigned for the custom vocabulary item from the custom vocabulary list. - public var weight: Swift.Int? + public var inputMode: LexModelsV2ClientTypes.ConversationLogsInputModeFilter? + /// The start time for the conversation log. + /// This member is required. + public var startTime: ClientRuntime.Date? public init( - displayAs: Swift.String? = nil, - itemId: Swift.String? = nil, - phrase: Swift.String? = nil, - weight: Swift.Int? = nil + endTime: ClientRuntime.Date? = nil, + inputMode: LexModelsV2ClientTypes.ConversationLogsInputModeFilter? = nil, + startTime: ClientRuntime.Date? = nil ) { - self.displayAs = displayAs - self.itemId = itemId - self.phrase = phrase - self.weight = weight + self.endTime = endTime + self.inputMode = inputMode + self.startTime = startTime } } } extension LexModelsV2ClientTypes { - public enum CustomVocabularyStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case creating - case deleting - case exporting - case importing - case ready + public enum ConversationLogsInputModeFilter: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case speech + case text case sdkUnknown(Swift.String) - public static var allCases: [CustomVocabularyStatus] { + public static var allCases: [ConversationLogsInputModeFilter] { return [ - .creating, - .deleting, - .exporting, - .importing, - .ready, + .speech, + .text, .sdkUnknown("") ] } @@ -8011,277 +7829,173 @@ extension LexModelsV2ClientTypes { } public var rawValue: Swift.String { switch self { - case .creating: return "Creating" - case .deleting: return "Deleting" - case .exporting: return "Exporting" - case .importing: return "Importing" - case .ready: return "Ready" + case .speech: return "Speech" + case .text: return "Text" 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 = CustomVocabularyStatus(rawValue: rawValue) ?? CustomVocabularyStatus.sdkUnknown(rawValue) + self = ConversationLogsInputModeFilter(rawValue: rawValue) ?? ConversationLogsInputModeFilter.sdkUnknown(rawValue) } } } -extension LexModelsV2ClientTypes.DTMFSpecification: Swift.Codable { +extension CreateBotAliasInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case deletionCharacter - case endCharacter - case endTimeoutMs - case maxLength + case botAliasLocaleSettings + case botAliasName + case botVersion + case conversationLogSettings + case description + case sentimentAnalysisSettings + case tags } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let deletionCharacter = self.deletionCharacter { - try encodeContainer.encode(deletionCharacter, forKey: .deletionCharacter) + if let botAliasLocaleSettings = botAliasLocaleSettings { + var botAliasLocaleSettingsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .botAliasLocaleSettings) + for (dictKey0, botAliasLocaleSettingsMap0) in botAliasLocaleSettings { + try botAliasLocaleSettingsContainer.encode(botAliasLocaleSettingsMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } } - if let endCharacter = self.endCharacter { - try encodeContainer.encode(endCharacter, forKey: .endCharacter) + if let botAliasName = self.botAliasName { + try encodeContainer.encode(botAliasName, forKey: .botAliasName) } - if let endTimeoutMs = self.endTimeoutMs { - try encodeContainer.encode(endTimeoutMs, forKey: .endTimeoutMs) + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) } - if let maxLength = self.maxLength { - try encodeContainer.encode(maxLength, forKey: .maxLength) + if let conversationLogSettings = self.conversationLogSettings { + try encodeContainer.encode(conversationLogSettings, forKey: .conversationLogSettings) } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let maxLengthDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxLength) - maxLength = maxLengthDecoded - let endTimeoutMsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .endTimeoutMs) - endTimeoutMs = endTimeoutMsDecoded - let deletionCharacterDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .deletionCharacter) - deletionCharacter = deletionCharacterDecoded - let endCharacterDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .endCharacter) - endCharacter = endCharacterDecoded - } -} - -extension LexModelsV2ClientTypes { - /// Specifies the DTMF input specifications. - public struct DTMFSpecification: Swift.Equatable { - /// The DTMF character that clears the accumulated DTMF digits and immediately ends the input. - /// This member is required. - public var deletionCharacter: Swift.String? - /// The DTMF character that immediately ends input. If the user does not press this character, the input ends after the end timeout. - /// This member is required. - public var endCharacter: Swift.String? - /// How long the bot should wait after the last DTMF character input before assuming that the input has concluded. - /// This member is required. - public var endTimeoutMs: Swift.Int? - /// The maximum number of DTMF digits allowed in an utterance. - /// This member is required. - public var maxLength: Swift.Int? - - public init( - deletionCharacter: Swift.String? = nil, - endCharacter: Swift.String? = nil, - endTimeoutMs: Swift.Int? = nil, - maxLength: Swift.Int? = nil - ) - { - self.deletionCharacter = deletionCharacter - self.endCharacter = endCharacter - self.endTimeoutMs = endTimeoutMs - self.maxLength = maxLength - } - } - -} - -extension LexModelsV2ClientTypes.DataPrivacy: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case childDirected - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if childDirected != false { - try encodeContainer.encode(childDirected, forKey: .childDirected) - } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let childDirectedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .childDirected) ?? false - childDirected = childDirectedDecoded - } -} - -extension LexModelsV2ClientTypes { - /// By default, data stored by Amazon Lex is encrypted. The DataPrivacy structure provides settings that determine how Amazon Lex handles special cases of securing the data for your bot. - public struct DataPrivacy: Swift.Equatable { - /// For each Amazon Lex bot created with the Amazon Lex Model Building Service, you must specify whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to the Children's Online Privacy Protection Act (COPPA) by specifying true or false in the childDirected field. By specifying true in the childDirected field, you confirm that your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. By specifying false in the childDirected field, you confirm that your use of Amazon Lex is not related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. You may not specify a default value for the childDirected field that does not accurately reflect whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. If your use of Amazon Lex relates to a website, program, or other application that is directed in whole or in part, to children under age 13, you must obtain any required verifiable parental consent under COPPA. For information regarding the use of Amazon Lex in connection with websites, programs, or other applications that are directed or targeted, in whole or in part, to children under age 13, see the [Amazon Lex FAQ](http://aws.amazon.com/lex/faqs#data-security). - /// This member is required. - public var childDirected: Swift.Bool - - public init( - childDirected: Swift.Bool = false - ) - { - self.childDirected = childDirected - } - } - -} - -extension LexModelsV2ClientTypes.DateRangeFilter: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case endDateTime - case startDateTime - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let endDateTime = self.endDateTime { - try encodeContainer.encodeTimestamp(endDateTime, format: .epochSeconds, forKey: .endDateTime) - } - if let startDateTime = self.startDateTime { - try encodeContainer.encodeTimestamp(startDateTime, format: .epochSeconds, forKey: .startDateTime) - } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let startDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startDateTime) - startDateTime = startDateTimeDecoded - let endDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endDateTime) - endDateTime = endDateTimeDecoded - } -} - -extension LexModelsV2ClientTypes { - /// The object used for specifying the data range that the customer wants Amazon Lex to read through in the input transcripts. - public struct DateRangeFilter: Swift.Equatable { - /// A timestamp indicating the end date for the date range filter. - /// This member is required. - public var endDateTime: ClientRuntime.Date? - /// A timestamp indicating the start date for the date range filter. - /// This member is required. - public var startDateTime: ClientRuntime.Date? - - public init( - endDateTime: ClientRuntime.Date? = nil, - startDateTime: ClientRuntime.Date? = nil - ) - { - self.endDateTime = endDateTime - self.startDateTime = startDateTime - } - } - -} - -extension LexModelsV2ClientTypes.DefaultConditionalBranch: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case nextStep - case response - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let nextStep = self.nextStep { - try encodeContainer.encode(nextStep, forKey: .nextStep) - } - if let response = self.response { - try encodeContainer.encode(response, forKey: .response) + 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 nextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .nextStep) - nextStep = nextStepDecoded - let responseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .response) - response = responseDecoded - } -} - -extension LexModelsV2ClientTypes { - /// A set of actions that Amazon Lex should run if none of the other conditions are met. - public struct DefaultConditionalBranch: Swift.Equatable { - /// The next step in the conversation. - public var nextStep: LexModelsV2ClientTypes.DialogState? - /// Specifies a list of message groups that Amazon Lex uses to respond the user input. - public var response: LexModelsV2ClientTypes.ResponseSpecification? - - public init( - nextStep: LexModelsV2ClientTypes.DialogState? = nil, - response: LexModelsV2ClientTypes.ResponseSpecification? = nil - ) - { - self.nextStep = nextStep - self.response = response + if let sentimentAnalysisSettings = self.sentimentAnalysisSettings { + try encodeContainer.encode(sentimentAnalysisSettings, forKey: .sentimentAnalysisSettings) } - } - -} - -extension DeleteBotAliasInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let skipResourceInUseCheck = skipResourceInUseCheck { - let skipResourceInUseCheckQueryItem = ClientRuntime.URLQueryItem(name: "skipResourceInUseCheck".urlPercentEncoding(), value: Swift.String(skipResourceInUseCheck).urlPercentEncoding()) - items.append(skipResourceInUseCheckQueryItem) + if let tags = tags { + var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) + for (dictKey0, tagMap0) in tags { + try tagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) } - return items } } } -extension DeleteBotAliasInput: ClientRuntime.URLPathProvider { +extension CreateBotAliasInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil } - guard let botAliasId = botAliasId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botaliases/\(botAliasId.urlPercentEncoding())" + return "/bots/\(botId.urlPercentEncoding())/botaliases" } } -public struct DeleteBotAliasInput: Swift.Equatable { - /// The unique identifier of the bot alias to delete. +public struct CreateBotAliasInput: Swift.Equatable { + /// Maps configuration information to a specific locale. You can use this parameter to specify a specific Lambda function to run different functions in different locales. + public var botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? + /// The alias to create. The name must be unique for the bot. /// This member is required. - public var botAliasId: Swift.String? - /// The unique identifier of the bot associated with the alias to delete. + public var botAliasName: Swift.String? + /// The unique identifier of the bot that the alias applies to. /// This member is required. public var botId: Swift.String? - /// By default, Amazon Lex checks if any other resource, such as a bot network, is using the bot alias before it is deleted and throws a ResourceInUseException exception if the alias is being used by another resource. Set this parameter to true to skip this check and remove the alias even if it is being used by another resource. - public var skipResourceInUseCheck: Swift.Bool? + /// The version of the bot that this alias points to. You can use the [UpdateBotAlias](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_UpdateBotAlias.html) operation to change the bot version associated with the alias. + public var botVersion: Swift.String? + /// Specifies whether Amazon Lex logs text and audio for a conversation with the bot. When you enable conversation logs, text logs store text input, transcripts of audio input, and associated metadata in Amazon CloudWatch Logs. Audio logs store audio input in Amazon S3. + public var conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? + /// A description of the alias. Use this description to help identify the alias. + public var description: Swift.String? + /// Determines whether Amazon Lex will use Amazon Comprehend to detect the sentiment of user utterances. + public var sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? + /// A list of tags to add to the bot alias. You can only add tags when you create an alias, you can't use the UpdateBotAlias operation to update the tags on a bot alias. To update tags, use the TagResource operation. + public var tags: [Swift.String:Swift.String]? public init( - botAliasId: Swift.String? = nil, + botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil, + botAliasName: Swift.String? = nil, botId: Swift.String? = nil, - skipResourceInUseCheck: Swift.Bool? = nil + botVersion: Swift.String? = nil, + conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? = nil, + description: Swift.String? = nil, + sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? = nil, + tags: [Swift.String:Swift.String]? = nil ) { - self.botAliasId = botAliasId + self.botAliasLocaleSettings = botAliasLocaleSettings + self.botAliasName = botAliasName self.botId = botId - self.skipResourceInUseCheck = skipResourceInUseCheck + self.botVersion = botVersion + self.conversationLogSettings = conversationLogSettings + self.description = description + self.sentimentAnalysisSettings = sentimentAnalysisSettings + self.tags = tags } } -struct DeleteBotAliasInputBody: Swift.Equatable { +struct CreateBotAliasInputBody: Swift.Equatable { + let botAliasName: Swift.String? + let description: Swift.String? + let botVersion: Swift.String? + let botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? + let conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? + let sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? + let tags: [Swift.String:Swift.String]? } -extension DeleteBotAliasInputBody: Swift.Decodable { - - public init(from decoder: Swift.Decoder) throws { +extension CreateBotAliasInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botAliasLocaleSettings + case botAliasName + case botVersion + case conversationLogSettings + case description + case sentimentAnalysisSettings + case tags } -} -public enum DeleteBotAliasOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botAliasNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasName) + botAliasName = botAliasNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let botAliasLocaleSettingsContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.BotAliasLocaleSettings?].self, forKey: .botAliasLocaleSettings) + var botAliasLocaleSettingsDecoded0: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil + if let botAliasLocaleSettingsContainer = botAliasLocaleSettingsContainer { + botAliasLocaleSettingsDecoded0 = [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]() + for (key0, botaliaslocalesettings0) in botAliasLocaleSettingsContainer { + if let botaliaslocalesettings0 = botaliaslocalesettings0 { + botAliasLocaleSettingsDecoded0?[key0] = botaliaslocalesettings0 + } + } + } + botAliasLocaleSettings = botAliasLocaleSettingsDecoded0 + let conversationLogSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConversationLogSettings.self, forKey: .conversationLogSettings) + conversationLogSettings = conversationLogSettingsDecoded + let sentimentAnalysisSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SentimentAnalysisSettings.self, forKey: .sentimentAnalysisSettings) + sentimentAnalysisSettings = sentimentAnalysisSettingsDecoded + 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 + } +} + +public enum CreateBotAliasOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { @@ -8296,115 +8010,373 @@ public enum DeleteBotAliasOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DeleteBotAliasOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateBotAliasOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DeleteBotAliasOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: CreateBotAliasOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botAliasId = output.botAliasId + self.botAliasLocaleSettings = output.botAliasLocaleSettings + self.botAliasName = output.botAliasName self.botAliasStatus = output.botAliasStatus self.botId = output.botId + self.botVersion = output.botVersion + self.conversationLogSettings = output.conversationLogSettings + self.creationDateTime = output.creationDateTime + self.description = output.description + self.sentimentAnalysisSettings = output.sentimentAnalysisSettings + self.tags = output.tags } else { self.botAliasId = nil + self.botAliasLocaleSettings = nil + self.botAliasName = nil self.botAliasStatus = nil self.botId = nil + self.botVersion = nil + self.conversationLogSettings = nil + self.creationDateTime = nil + self.description = nil + self.sentimentAnalysisSettings = nil + self.tags = nil } } } -public struct DeleteBotAliasOutputResponse: Swift.Equatable { - /// The unique identifier of the bot alias to delete. +public struct CreateBotAliasOutputResponse: Swift.Equatable { + /// The unique identifier of the bot alias. public var botAliasId: Swift.String? - /// The current status of the alias. The status is Deleting while the alias is in the process of being deleted. Once the alias is deleted, it will no longer appear in the list of aliases returned by the ListBotAliases operation. + /// Configuration information for a specific locale. + public var botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? + /// The name specified for the bot alias. + public var botAliasName: Swift.String? + /// The current status of the alias. The alias is first put into the Creating state. When the alias is ready to be used, it is put into the Available state. You can use the DescribeBotAlias operation to get the current state of an alias. public var botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? - /// The unique identifier of the bot that contains the alias to delete. + /// The unique identifier of the bot that this alias applies to. public var botId: Swift.String? + /// The version of the bot associated with this alias. + public var botVersion: Swift.String? + /// The conversation log settings specified for the alias. + public var conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? + /// A Unix timestamp indicating the date and time that the bot alias was created. + public var creationDateTime: ClientRuntime.Date? + /// The description specified for the bot alias. + public var description: Swift.String? + /// Determines whether Amazon Lex will use Amazon Comprehend to detect the sentiment of user utterances. + public var sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? + /// A list of tags associated with the bot alias. + public var tags: [Swift.String:Swift.String]? public init( botAliasId: Swift.String? = nil, + botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil, + botAliasName: Swift.String? = nil, botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? = nil, - botId: Swift.String? = nil + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? = nil, + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? = nil, + tags: [Swift.String:Swift.String]? = nil ) { self.botAliasId = botAliasId + self.botAliasLocaleSettings = botAliasLocaleSettings + self.botAliasName = botAliasName self.botAliasStatus = botAliasStatus self.botId = botId + self.botVersion = botVersion + self.conversationLogSettings = conversationLogSettings + self.creationDateTime = creationDateTime + self.description = description + self.sentimentAnalysisSettings = sentimentAnalysisSettings + self.tags = tags } } -struct DeleteBotAliasOutputResponseBody: Swift.Equatable { +struct CreateBotAliasOutputResponseBody: Swift.Equatable { let botAliasId: Swift.String? - let botId: Swift.String? + let botAliasName: Swift.String? + let description: Swift.String? + let botVersion: Swift.String? + let botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? + let conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? + let sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? let botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? + let botId: Swift.String? + let creationDateTime: ClientRuntime.Date? + let tags: [Swift.String:Swift.String]? } -extension DeleteBotAliasOutputResponseBody: Swift.Decodable { +extension CreateBotAliasOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botAliasId + case botAliasLocaleSettings + case botAliasName case botAliasStatus case botId + case botVersion + case conversationLogSettings + case creationDateTime + case description + case sentimentAnalysisSettings + case tags } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) botAliasId = botAliasIdDecoded - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded + let botAliasNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasName) + botAliasName = botAliasNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let botAliasLocaleSettingsContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.BotAliasLocaleSettings?].self, forKey: .botAliasLocaleSettings) + var botAliasLocaleSettingsDecoded0: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil + if let botAliasLocaleSettingsContainer = botAliasLocaleSettingsContainer { + botAliasLocaleSettingsDecoded0 = [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]() + for (key0, botaliaslocalesettings0) in botAliasLocaleSettingsContainer { + if let botaliaslocalesettings0 = botaliaslocalesettings0 { + botAliasLocaleSettingsDecoded0?[key0] = botaliaslocalesettings0 + } + } + } + botAliasLocaleSettings = botAliasLocaleSettingsDecoded0 + let conversationLogSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConversationLogSettings.self, forKey: .conversationLogSettings) + conversationLogSettings = conversationLogSettingsDecoded + let sentimentAnalysisSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SentimentAnalysisSettings.self, forKey: .sentimentAnalysisSettings) + sentimentAnalysisSettings = sentimentAnalysisSettingsDecoded let botAliasStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotAliasStatus.self, forKey: .botAliasStatus) botAliasStatus = botAliasStatusDecoded + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + 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 } } -extension DeleteBotInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let skipResourceInUseCheck = skipResourceInUseCheck { - let skipResourceInUseCheckQueryItem = ClientRuntime.URLQueryItem(name: "skipResourceInUseCheck".urlPercentEncoding(), value: Swift.String(skipResourceInUseCheck).urlPercentEncoding()) - items.append(skipResourceInUseCheckQueryItem) +extension CreateBotInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botMembers + case botName + case botTags + case botType + case dataPrivacy + case description + case idleSessionTTLInSeconds + case roleArn + case testBotAliasTags + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botMembers = botMembers { + var botMembersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .botMembers) + for botmember0 in botMembers { + try botMembersContainer.encode(botmember0) + } + } + if let botName = self.botName { + try encodeContainer.encode(botName, forKey: .botName) + } + if let botTags = botTags { + var botTagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .botTags) + for (dictKey0, tagMap0) in botTags { + try botTagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + if let botType = self.botType { + try encodeContainer.encode(botType.rawValue, forKey: .botType) + } + if let dataPrivacy = self.dataPrivacy { + try encodeContainer.encode(dataPrivacy, forKey: .dataPrivacy) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let idleSessionTTLInSeconds = self.idleSessionTTLInSeconds { + try encodeContainer.encode(idleSessionTTLInSeconds, forKey: .idleSessionTTLInSeconds) + } + if let roleArn = self.roleArn { + try encodeContainer.encode(roleArn, forKey: .roleArn) + } + if let testBotAliasTags = testBotAliasTags { + var testBotAliasTagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .testBotAliasTags) + for (dictKey0, tagMap0) in testBotAliasTags { + try testBotAliasTagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) } - return items } } } -extension DeleteBotInput: ClientRuntime.URLPathProvider { +extension CreateBotInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())" + return "/bots" } } -public struct DeleteBotInput: Swift.Equatable { - /// The identifier of the bot to delete. +public struct CreateBotInput: Swift.Equatable { + /// The list of bot members in a network to be created. + public var botMembers: [LexModelsV2ClientTypes.BotMember]? + /// The name of the bot. The bot name must be unique in the account that creates the bot. /// This member is required. - public var botId: Swift.String? - /// By default, Amazon Lex checks if any other resource, such as an alias or bot network, is using the bot version before it is deleted and throws a ResourceInUseException exception if the bot is being used by another resource. Set this parameter to true to skip this check and remove the bot even if it is being used by another resource. - public var skipResourceInUseCheck: Swift.Bool? + public var botName: Swift.String? + /// A list of tags to add to the bot. You can only add tags when you create a bot. You can't use the UpdateBot operation to update tags. To update tags, use the TagResource operation. + public var botTags: [Swift.String:Swift.String]? + /// The type of a bot to create. + public var botType: LexModelsV2ClientTypes.BotType? + /// Provides information on additional privacy protections Amazon Lex should use with the bot's data. + /// This member is required. + public var dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? + /// A description of the bot. It appears in lists to help you identify a particular bot. + public var description: Swift.String? + /// The time, in seconds, that Amazon Lex should keep information about a user's conversation with the bot. A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Lex deletes any data provided before the timeout. You can specify between 60 (1 minute) and 86,400 (24 hours) seconds. + /// This member is required. + public var idleSessionTTLInSeconds: Swift.Int? + /// The Amazon Resource Name (ARN) of an IAM role that has permission to access the bot. + /// This member is required. + public var roleArn: Swift.String? + /// A list of tags to add to the test alias for a bot. You can only add tags when you create a bot. You can't use the UpdateAlias operation to update tags. To update tags on the test alias, use the TagResource operation. + public var testBotAliasTags: [Swift.String:Swift.String]? public init( - botId: Swift.String? = nil, - skipResourceInUseCheck: Swift.Bool? = nil - ) - { - self.botId = botId - self.skipResourceInUseCheck = skipResourceInUseCheck + botMembers: [LexModelsV2ClientTypes.BotMember]? = nil, + botName: Swift.String? = nil, + botTags: [Swift.String:Swift.String]? = nil, + botType: LexModelsV2ClientTypes.BotType? = nil, + dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? = nil, + description: Swift.String? = nil, + idleSessionTTLInSeconds: Swift.Int? = nil, + roleArn: Swift.String? = nil, + testBotAliasTags: [Swift.String:Swift.String]? = nil + ) + { + self.botMembers = botMembers + self.botName = botName + self.botTags = botTags + self.botType = botType + self.dataPrivacy = dataPrivacy + self.description = description + self.idleSessionTTLInSeconds = idleSessionTTLInSeconds + self.roleArn = roleArn + self.testBotAliasTags = testBotAliasTags } } -struct DeleteBotInputBody: Swift.Equatable { +struct CreateBotInputBody: Swift.Equatable { + let botName: Swift.String? + let description: Swift.String? + let roleArn: Swift.String? + let dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? + let idleSessionTTLInSeconds: Swift.Int? + let botTags: [Swift.String:Swift.String]? + let testBotAliasTags: [Swift.String:Swift.String]? + let botType: LexModelsV2ClientTypes.BotType? + let botMembers: [LexModelsV2ClientTypes.BotMember]? } -extension DeleteBotInputBody: Swift.Decodable { +extension CreateBotInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botMembers + case botName + case botTags + case botType + case dataPrivacy + case description + case idleSessionTTLInSeconds + case roleArn + case testBotAliasTags + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) + botName = botNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + let dataPrivacyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DataPrivacy.self, forKey: .dataPrivacy) + dataPrivacy = dataPrivacyDecoded + let idleSessionTTLInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .idleSessionTTLInSeconds) + idleSessionTTLInSeconds = idleSessionTTLInSecondsDecoded + let botTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .botTags) + var botTagsDecoded0: [Swift.String:Swift.String]? = nil + if let botTagsContainer = botTagsContainer { + botTagsDecoded0 = [Swift.String:Swift.String]() + for (key0, tagvalue0) in botTagsContainer { + if let tagvalue0 = tagvalue0 { + botTagsDecoded0?[key0] = tagvalue0 + } + } + } + botTags = botTagsDecoded0 + let testBotAliasTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .testBotAliasTags) + var testBotAliasTagsDecoded0: [Swift.String:Swift.String]? = nil + if let testBotAliasTagsContainer = testBotAliasTagsContainer { + testBotAliasTagsDecoded0 = [Swift.String:Swift.String]() + for (key0, tagvalue0) in testBotAliasTagsContainer { + if let tagvalue0 = tagvalue0 { + testBotAliasTagsDecoded0?[key0] = tagvalue0 + } + } + } + testBotAliasTags = testBotAliasTagsDecoded0 + let botTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotType.self, forKey: .botType) + botType = botTypeDecoded + let botMembersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotMember?].self, forKey: .botMembers) + var botMembersDecoded0:[LexModelsV2ClientTypes.BotMember]? = nil + if let botMembersContainer = botMembersContainer { + botMembersDecoded0 = [LexModelsV2ClientTypes.BotMember]() + for structure0 in botMembersContainer { + if let structure0 = structure0 { + botMembersDecoded0?.append(structure0) + } + } + } + botMembers = botMembersDecoded0 } } -extension DeleteBotLocaleInput: ClientRuntime.URLPathProvider { +extension CreateBotLocaleInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case localeId + case nluIntentConfidenceThreshold + case voiceSettings + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let localeId = self.localeId { + try encodeContainer.encode(localeId, forKey: .localeId) + } + if let nluIntentConfidenceThreshold = self.nluIntentConfidenceThreshold { + try encodeContainer.encode(nluIntentConfidenceThreshold, forKey: .nluIntentConfidenceThreshold) + } + if let voiceSettings = self.voiceSettings { + try encodeContainer.encode(voiceSettings, forKey: .voiceSettings) + } + } +} + +extension CreateBotLocaleInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil @@ -8412,46 +8384,83 @@ extension DeleteBotLocaleInput: ClientRuntime.URLPathProvider { guard let botVersion = botVersion else { return nil } - guard let localeId = localeId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())" + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales" } } -public struct DeleteBotLocaleInput: Swift.Equatable { - /// The unique identifier of the bot that contains the locale. +public struct CreateBotLocaleInput: Swift.Equatable { + /// The identifier of the bot to create the locale for. /// This member is required. public var botId: Swift.String? - /// The version of the bot that contains the locale. + /// The version of the bot to create the locale for. This can only be the draft version of the bot. /// This member is required. public var botVersion: Swift.String? - /// The identifier of the language and locale that will be deleted. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// A description of the bot locale. Use this to help identify the bot locale in lists. + public var description: Swift.String? + /// The identifier of the language and locale that the bot will be used in. The string must match one of the supported locales. All of the intents, slot types, and slots used in the bot must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). /// This member is required. public var localeId: Swift.String? + /// Determines the threshold where Amazon Lex will insert the AMAZON.FallbackIntent, AMAZON.KendraSearchIntent, or both when returning alternative intents. AMAZON.FallbackIntent and AMAZON.KendraSearchIntent are only inserted if they are configured for the bot. For example, suppose a bot is configured with the confidence threshold of 0.80 and the AMAZON.FallbackIntent. Amazon Lex returns three alternative intents with the following confidence scores: IntentA (0.70), IntentB (0.60), IntentC (0.50). The response from the RecognizeText operation would be: + /// + /// * AMAZON.FallbackIntent + /// + /// * IntentA + /// + /// * IntentB + /// + /// * IntentC + /// This member is required. + public var nluIntentConfidenceThreshold: Swift.Double? + /// The Amazon Polly voice ID that Amazon Lex uses for voice interaction with the user. + public var voiceSettings: LexModelsV2ClientTypes.VoiceSettings? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, - localeId: Swift.String? = nil + description: Swift.String? = nil, + localeId: Swift.String? = nil, + nluIntentConfidenceThreshold: Swift.Double? = nil, + voiceSettings: LexModelsV2ClientTypes.VoiceSettings? = nil ) { self.botId = botId self.botVersion = botVersion + self.description = description self.localeId = localeId + self.nluIntentConfidenceThreshold = nluIntentConfidenceThreshold + self.voiceSettings = voiceSettings } } -struct DeleteBotLocaleInputBody: Swift.Equatable { +struct CreateBotLocaleInputBody: Swift.Equatable { + let localeId: Swift.String? + let description: Swift.String? + let nluIntentConfidenceThreshold: Swift.Double? + let voiceSettings: LexModelsV2ClientTypes.VoiceSettings? } -extension DeleteBotLocaleInputBody: Swift.Decodable { +extension CreateBotLocaleInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case localeId + case nluIntentConfidenceThreshold + case voiceSettings + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let nluIntentConfidenceThresholdDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .nluIntentConfidenceThreshold) + nluIntentConfidenceThreshold = nluIntentConfidenceThresholdDecoded + let voiceSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.VoiceSettings.self, forKey: .voiceSettings) + voiceSettings = voiceSettingsDecoded } } -public enum DeleteBotLocaleOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum CreateBotLocaleOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -8467,61 +8476,101 @@ public enum DeleteBotLocaleOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DeleteBotLocaleOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateBotLocaleOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DeleteBotLocaleOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: CreateBotLocaleOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId self.botLocaleStatus = output.botLocaleStatus self.botVersion = output.botVersion + self.creationDateTime = output.creationDateTime + self.description = output.description self.localeId = output.localeId + self.localeName = output.localeName + self.nluIntentConfidenceThreshold = output.nluIntentConfidenceThreshold + self.voiceSettings = output.voiceSettings } else { self.botId = nil self.botLocaleStatus = nil self.botVersion = nil + self.creationDateTime = nil + self.description = nil self.localeId = nil + self.localeName = nil + self.nluIntentConfidenceThreshold = nil + self.voiceSettings = nil } } } -public struct DeleteBotLocaleOutputResponse: Swift.Equatable { - /// The identifier of the bot that contained the deleted locale. +public struct CreateBotLocaleOutputResponse: Swift.Equatable { + /// The specified bot identifier. public var botId: Swift.String? - /// The status of deleting the bot locale. The locale first enters the Deleting status. Once the locale is deleted it no longer appears in the list of locales for the bot. + /// The status of the bot. When the status is Creating the bot locale is being configured. When the status is Building Amazon Lex is building the bot for testing and use. If the status of the bot is ReadyExpressTesting, you can test the bot using the exact utterances specified in the bots' intents. When the bot is ready for full testing or to run, the status is Built. If there was a problem with building the bot, the status is Failed. If the bot was saved but not built, the status is NotBuilt. public var botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? - /// The version of the bot that contained the deleted locale. + /// The specified bot version. public var botVersion: Swift.String? - /// The language and locale of the deleted locale. + /// A timestamp specifying the date and time that the bot locale was created. + public var creationDateTime: ClientRuntime.Date? + /// The specified description of the bot locale. + public var description: Swift.String? + /// The specified locale identifier. public var localeId: Swift.String? + /// The specified locale name. + public var localeName: Swift.String? + /// The specified confidence threshold for inserting the AMAZON.FallbackIntent and AMAZON.KendraSearchIntent intents. + public var nluIntentConfidenceThreshold: Swift.Double? + /// The Amazon Polly voice ID that Amazon Lex uses for voice interaction with the user. + public var voiceSettings: LexModelsV2ClientTypes.VoiceSettings? public init( botId: Swift.String? = nil, botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? = nil, botVersion: Swift.String? = nil, - localeId: Swift.String? = nil + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + localeId: Swift.String? = nil, + localeName: Swift.String? = nil, + nluIntentConfidenceThreshold: Swift.Double? = nil, + voiceSettings: LexModelsV2ClientTypes.VoiceSettings? = nil ) { self.botId = botId self.botLocaleStatus = botLocaleStatus self.botVersion = botVersion + self.creationDateTime = creationDateTime + self.description = description self.localeId = localeId + self.localeName = localeName + self.nluIntentConfidenceThreshold = nluIntentConfidenceThreshold + self.voiceSettings = voiceSettings } } -struct DeleteBotLocaleOutputResponseBody: Swift.Equatable { +struct CreateBotLocaleOutputResponseBody: Swift.Equatable { let botId: Swift.String? let botVersion: Swift.String? + let localeName: Swift.String? let localeId: Swift.String? + let description: Swift.String? + let nluIntentConfidenceThreshold: Swift.Double? + let voiceSettings: LexModelsV2ClientTypes.VoiceSettings? let botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? + let creationDateTime: ClientRuntime.Date? } -extension DeleteBotLocaleOutputResponseBody: Swift.Decodable { +extension CreateBotLocaleOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId case botLocaleStatus case botVersion + case creationDateTime + case description case localeId + case localeName + case nluIntentConfidenceThreshold + case voiceSettings } public init(from decoder: Swift.Decoder) throws { @@ -8530,14 +8579,24 @@ extension DeleteBotLocaleOutputResponseBody: Swift.Decodable { botId = botIdDecoded let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) botVersion = botVersionDecoded + let localeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeName) + localeName = localeNameDecoded let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) localeId = localeIdDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let nluIntentConfidenceThresholdDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .nluIntentConfidenceThreshold) + nluIntentConfidenceThreshold = nluIntentConfidenceThresholdDecoded + let voiceSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.VoiceSettings.self, forKey: .voiceSettings) + voiceSettings = voiceSettingsDecoded let botLocaleStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleStatus.self, forKey: .botLocaleStatus) botLocaleStatus = botLocaleStatusDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded } } -public enum DeleteBotOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum CreateBotOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -8553,113 +8612,264 @@ public enum DeleteBotOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DeleteBotOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateBotOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DeleteBotOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: CreateBotOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId + self.botMembers = output.botMembers + self.botName = output.botName self.botStatus = output.botStatus + self.botTags = output.botTags + self.botType = output.botType + self.creationDateTime = output.creationDateTime + self.dataPrivacy = output.dataPrivacy + self.description = output.description + self.idleSessionTTLInSeconds = output.idleSessionTTLInSeconds + self.roleArn = output.roleArn + self.testBotAliasTags = output.testBotAliasTags } else { self.botId = nil + self.botMembers = nil + self.botName = nil self.botStatus = nil + self.botTags = nil + self.botType = nil + self.creationDateTime = nil + self.dataPrivacy = nil + self.description = nil + self.idleSessionTTLInSeconds = nil + self.roleArn = nil + self.testBotAliasTags = nil } } } -public struct DeleteBotOutputResponse: Swift.Equatable { - /// The unique identifier of the bot that Amazon Lex is deleting. +public struct CreateBotOutputResponse: Swift.Equatable { + /// A unique identifier for a particular bot. You use this to identify the bot when you call other Amazon Lex API operations. public var botId: Swift.String? - /// The current status of the bot. The status is Deleting while the bot and its associated resources are being deleted. + /// The list of bots in a network that was created. + public var botMembers: [LexModelsV2ClientTypes.BotMember]? + /// The name specified for the bot. + public var botName: Swift.String? + /// Shows the current status of the bot. The bot is first in the Creating status. Once the bot is read for use, it changes to the Available status. After the bot is created, you can use the DRAFT version of the bot. public var botStatus: LexModelsV2ClientTypes.BotStatus? + /// A list of tags associated with the bot. + public var botTags: [Swift.String:Swift.String]? + /// The type of a bot that was created. + public var botType: LexModelsV2ClientTypes.BotType? + /// A timestamp indicating the date and time that the bot was created. + public var creationDateTime: ClientRuntime.Date? + /// The data privacy settings specified for the bot. + public var dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? + /// The description specified for the bot. + public var description: Swift.String? + /// The session idle time specified for the bot. + public var idleSessionTTLInSeconds: Swift.Int? + /// The IAM role specified for the bot. + public var roleArn: Swift.String? + /// A list of tags associated with the test alias for the bot. + public var testBotAliasTags: [Swift.String:Swift.String]? public init( botId: Swift.String? = nil, - botStatus: LexModelsV2ClientTypes.BotStatus? = nil + botMembers: [LexModelsV2ClientTypes.BotMember]? = nil, + botName: Swift.String? = nil, + botStatus: LexModelsV2ClientTypes.BotStatus? = nil, + botTags: [Swift.String:Swift.String]? = nil, + botType: LexModelsV2ClientTypes.BotType? = nil, + creationDateTime: ClientRuntime.Date? = nil, + dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? = nil, + description: Swift.String? = nil, + idleSessionTTLInSeconds: Swift.Int? = nil, + roleArn: Swift.String? = nil, + testBotAliasTags: [Swift.String:Swift.String]? = nil ) { self.botId = botId + self.botMembers = botMembers + self.botName = botName self.botStatus = botStatus + self.botTags = botTags + self.botType = botType + self.creationDateTime = creationDateTime + self.dataPrivacy = dataPrivacy + self.description = description + self.idleSessionTTLInSeconds = idleSessionTTLInSeconds + self.roleArn = roleArn + self.testBotAliasTags = testBotAliasTags } } -struct DeleteBotOutputResponseBody: Swift.Equatable { +struct CreateBotOutputResponseBody: Swift.Equatable { let botId: Swift.String? + let botName: Swift.String? + let description: Swift.String? + let roleArn: Swift.String? + let dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? + let idleSessionTTLInSeconds: Swift.Int? let botStatus: LexModelsV2ClientTypes.BotStatus? + let creationDateTime: ClientRuntime.Date? + let botTags: [Swift.String:Swift.String]? + let testBotAliasTags: [Swift.String:Swift.String]? + let botType: LexModelsV2ClientTypes.BotType? + let botMembers: [LexModelsV2ClientTypes.BotMember]? } -extension DeleteBotOutputResponseBody: Swift.Decodable { +extension CreateBotOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId + case botMembers + case botName case botStatus + case botTags + case botType + case creationDateTime + case dataPrivacy + case description + case idleSessionTTLInSeconds + case roleArn + case testBotAliasTags } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) botId = botIdDecoded + let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) + botName = botNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + let dataPrivacyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DataPrivacy.self, forKey: .dataPrivacy) + dataPrivacy = dataPrivacyDecoded + let idleSessionTTLInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .idleSessionTTLInSeconds) + idleSessionTTLInSeconds = idleSessionTTLInSecondsDecoded let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) botStatus = botStatusDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let botTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .botTags) + var botTagsDecoded0: [Swift.String:Swift.String]? = nil + if let botTagsContainer = botTagsContainer { + botTagsDecoded0 = [Swift.String:Swift.String]() + for (key0, tagvalue0) in botTagsContainer { + if let tagvalue0 = tagvalue0 { + botTagsDecoded0?[key0] = tagvalue0 + } + } + } + botTags = botTagsDecoded0 + let testBotAliasTagsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .testBotAliasTags) + var testBotAliasTagsDecoded0: [Swift.String:Swift.String]? = nil + if let testBotAliasTagsContainer = testBotAliasTagsContainer { + testBotAliasTagsDecoded0 = [Swift.String:Swift.String]() + for (key0, tagvalue0) in testBotAliasTagsContainer { + if let tagvalue0 = tagvalue0 { + testBotAliasTagsDecoded0?[key0] = tagvalue0 + } + } + } + testBotAliasTags = testBotAliasTagsDecoded0 + let botTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotType.self, forKey: .botType) + botType = botTypeDecoded + let botMembersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotMember?].self, forKey: .botMembers) + var botMembersDecoded0:[LexModelsV2ClientTypes.BotMember]? = nil + if let botMembersContainer = botMembersContainer { + botMembersDecoded0 = [LexModelsV2ClientTypes.BotMember]() + for structure0 in botMembersContainer { + if let structure0 = structure0 { + botMembersDecoded0?.append(structure0) + } + } + } + botMembers = botMembersDecoded0 } } -extension DeleteBotVersionInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let skipResourceInUseCheck = skipResourceInUseCheck { - let skipResourceInUseCheckQueryItem = ClientRuntime.URLQueryItem(name: "skipResourceInUseCheck".urlPercentEncoding(), value: Swift.String(skipResourceInUseCheck).urlPercentEncoding()) - items.append(skipResourceInUseCheckQueryItem) +extension CreateBotVersionInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botVersionLocaleSpecification + case description + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botVersionLocaleSpecification = botVersionLocaleSpecification { + var botVersionLocaleSpecificationContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .botVersionLocaleSpecification) + for (dictKey0, botVersionLocaleSpecification0) in botVersionLocaleSpecification { + try botVersionLocaleSpecificationContainer.encode(botVersionLocaleSpecification0, forKey: ClientRuntime.Key(stringValue: dictKey0)) } - return items + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) } } } -extension DeleteBotVersionInput: ClientRuntime.URLPathProvider { +extension CreateBotVersionInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil } - guard let botVersion = botVersion else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())" + return "/bots/\(botId.urlPercentEncoding())/botversions" } } -public struct DeleteBotVersionInput: Swift.Equatable { - /// The identifier of the bot that contains the version. +public struct CreateBotVersionInput: Swift.Equatable { + /// The identifier of the bot to create the version for. /// This member is required. public var botId: Swift.String? - /// The version of the bot to delete. + /// Specifies the locales that Amazon Lex adds to this version. You can choose the Draft version or any other previously published version for each locale. When you specify a source version, the locale data is copied from the source version to the new version. /// This member is required. - public var botVersion: Swift.String? - /// By default, Amazon Lex checks if any other resource, such as an alias or bot network, is using the bot version before it is deleted and throws a ResourceInUseException exception if the version is being used by another resource. Set this parameter to true to skip this check and remove the version even if it is being used by another resource. - public var skipResourceInUseCheck: Swift.Bool? + public var botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? + /// A description of the version. Use the description to help identify the version in lists. + public var description: Swift.String? public init( botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - skipResourceInUseCheck: Swift.Bool? = nil + botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? = nil, + description: Swift.String? = nil ) { self.botId = botId - self.botVersion = botVersion - self.skipResourceInUseCheck = skipResourceInUseCheck + self.botVersionLocaleSpecification = botVersionLocaleSpecification + self.description = description } } -struct DeleteBotVersionInputBody: Swift.Equatable { +struct CreateBotVersionInputBody: Swift.Equatable { + let description: Swift.String? + let botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? } -extension DeleteBotVersionInputBody: Swift.Decodable { +extension CreateBotVersionInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botVersionLocaleSpecification + case description + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let botVersionLocaleSpecificationContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.BotVersionLocaleDetails?].self, forKey: .botVersionLocaleSpecification) + var botVersionLocaleSpecificationDecoded0: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? = nil + if let botVersionLocaleSpecificationContainer = botVersionLocaleSpecificationContainer { + botVersionLocaleSpecificationDecoded0 = [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]() + for (key0, botversionlocaledetails0) in botVersionLocaleSpecificationContainer { + if let botversionlocaledetails0 = botversionlocaledetails0 { + botVersionLocaleSpecificationDecoded0?[key0] = botversionlocaledetails0 + } + } + } + botVersionLocaleSpecification = botVersionLocaleSpecificationDecoded0 } } -public enum DeleteBotVersionOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum CreateBotVersionOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -8675,237 +8885,191 @@ public enum DeleteBotVersionOutputError: ClientRuntime.HttpResponseErrorBinding } } -extension DeleteBotVersionOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateBotVersionOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DeleteBotVersionOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: CreateBotVersionOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId self.botStatus = output.botStatus self.botVersion = output.botVersion + self.botVersionLocaleSpecification = output.botVersionLocaleSpecification + self.creationDateTime = output.creationDateTime + self.description = output.description } else { self.botId = nil self.botStatus = nil self.botVersion = nil + self.botVersionLocaleSpecification = nil + self.creationDateTime = nil + self.description = nil } } } -public struct DeleteBotVersionOutputResponse: Swift.Equatable { - /// The identifier of the bot that is being deleted. +public struct CreateBotVersionOutputResponse: Swift.Equatable { + /// The bot identifier specified in the request. public var botId: Swift.String? - /// The current status of the bot. + /// When you send a request to create or update a bot, Amazon Lex sets the status response element to Creating. After Amazon Lex builds the bot, it sets status to Available. If Amazon Lex can't build the bot, it sets status to Failed. public var botStatus: LexModelsV2ClientTypes.BotStatus? - /// The version of the bot that is being deleted. + /// The version number assigned to the version. public var botVersion: Swift.String? + /// The source versions used for each locale in the new version. + public var botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? + /// A timestamp of the date and time that the version was created. + public var creationDateTime: ClientRuntime.Date? + /// The description of the version specified in the request. + public var description: Swift.String? public init( botId: Swift.String? = nil, botStatus: LexModelsV2ClientTypes.BotStatus? = nil, - botVersion: Swift.String? = nil + botVersion: Swift.String? = nil, + botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? = nil, + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil ) { self.botId = botId self.botStatus = botStatus self.botVersion = botVersion + self.botVersionLocaleSpecification = botVersionLocaleSpecification + self.creationDateTime = creationDateTime + self.description = description } } -struct DeleteBotVersionOutputResponseBody: Swift.Equatable { +struct CreateBotVersionOutputResponseBody: Swift.Equatable { let botId: Swift.String? + let description: Swift.String? let botVersion: Swift.String? + let botVersionLocaleSpecification: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? let botStatus: LexModelsV2ClientTypes.BotStatus? + let creationDateTime: ClientRuntime.Date? } -extension DeleteBotVersionOutputResponseBody: Swift.Decodable { +extension CreateBotVersionOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId case botStatus case botVersion - } - + case botVersionLocaleSpecification + case creationDateTime + case description + } + public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) botId = botIdDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) botVersion = botVersionDecoded + let botVersionLocaleSpecificationContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.BotVersionLocaleDetails?].self, forKey: .botVersionLocaleSpecification) + var botVersionLocaleSpecificationDecoded0: [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]? = nil + if let botVersionLocaleSpecificationContainer = botVersionLocaleSpecificationContainer { + botVersionLocaleSpecificationDecoded0 = [Swift.String:LexModelsV2ClientTypes.BotVersionLocaleDetails]() + for (key0, botversionlocaledetails0) in botVersionLocaleSpecificationContainer { + if let botversionlocaledetails0 = botversionlocaledetails0 { + botVersionLocaleSpecificationDecoded0?[key0] = botversionlocaledetails0 + } + } + } + botVersionLocaleSpecification = botVersionLocaleSpecificationDecoded0 let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) botStatus = botStatusDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded } } -extension DeleteCustomVocabularyInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil - } - guard let localeId = localeId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary" - } -} - -public struct DeleteCustomVocabularyInput: Swift.Equatable { - /// The unique identifier of the bot to remove the custom vocabulary from. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot to remove the custom vocabulary from. - /// This member is required. - public var botVersion: Swift.String? - /// The locale identifier for the locale that contains the custom vocabulary to remove. - /// This member is required. - public var localeId: Swift.String? - - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - localeId: Swift.String? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.localeId = localeId - } -} - -struct DeleteCustomVocabularyInputBody: Swift.Equatable { +extension CreateExportInput: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "CreateExportInput(fileFormat: \(Swift.String(describing: fileFormat)), resourceSpecification: \(Swift.String(describing: resourceSpecification)), filePassword: \"CONTENT_REDACTED\")"} } -extension DeleteCustomVocabularyInputBody: Swift.Decodable { - - public init(from decoder: Swift.Decoder) throws { +extension CreateExportInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case fileFormat + case filePassword + case resourceSpecification } -} -public enum DeleteCustomVocabularyOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let fileFormat = self.fileFormat { + try encodeContainer.encode(fileFormat.rawValue, forKey: .fileFormat) } - } -} - -extension DeleteCustomVocabularyOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: DeleteCustomVocabularyOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botVersion = output.botVersion - self.customVocabularyStatus = output.customVocabularyStatus - self.localeId = output.localeId - } else { - self.botId = nil - self.botVersion = nil - self.customVocabularyStatus = nil - self.localeId = nil + if let filePassword = self.filePassword { + try encodeContainer.encode(filePassword, forKey: .filePassword) + } + if let resourceSpecification = self.resourceSpecification { + try encodeContainer.encode(resourceSpecification, forKey: .resourceSpecification) } } } -public struct DeleteCustomVocabularyOutputResponse: Swift.Equatable { - /// The identifier of the bot that the custom vocabulary was removed from. - public var botId: Swift.String? - /// The version of the bot that the custom vocabulary was removed from. - public var botVersion: Swift.String? - /// The status of removing the custom vocabulary. - public var customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? - /// The locale identifier for the locale that the custom vocabulary was removed from. - public var localeId: Swift.String? - - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? = nil, - localeId: Swift.String? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.customVocabularyStatus = customVocabularyStatus - self.localeId = localeId - } -} - -struct DeleteCustomVocabularyOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? -} - -extension DeleteCustomVocabularyOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case customVocabularyStatus - case localeId - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let customVocabularyStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CustomVocabularyStatus.self, forKey: .customVocabularyStatus) - customVocabularyStatus = customVocabularyStatusDecoded - } -} - -extension DeleteExportInput: ClientRuntime.URLPathProvider { +extension CreateExportInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let exportId = exportId else { - return nil - } - return "/exports/\(exportId.urlPercentEncoding())" + return "/exports" } } -public struct DeleteExportInput: Swift.Equatable { - /// The unique identifier of the export to delete. +public struct CreateExportInput: Swift.Equatable { + /// The file format of the bot or bot locale definition files. /// This member is required. - public var exportId: Swift.String? + public var fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? + /// An password to use to encrypt the exported archive. Using a password is optional, but you should encrypt the archive to protect the data in transit between Amazon Lex and your local computer. + public var filePassword: Swift.String? + /// Specifies the type of resource to export, either a bot or a bot locale. You can only specify one type of resource to export. + /// This member is required. + public var resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? public init( - exportId: Swift.String? = nil + fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? = nil, + filePassword: Swift.String? = nil, + resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? = nil ) { - self.exportId = exportId + self.fileFormat = fileFormat + self.filePassword = filePassword + self.resourceSpecification = resourceSpecification } } -struct DeleteExportInputBody: Swift.Equatable { +struct CreateExportInputBody: Swift.Equatable { + let resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? + let fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? + let filePassword: Swift.String? } -extension DeleteExportInputBody: Swift.Decodable { +extension CreateExportInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case fileFormat + case filePassword + case resourceSpecification + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportResourceSpecification.self, forKey: .resourceSpecification) + resourceSpecification = resourceSpecificationDecoded + let fileFormatDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportExportFileFormat.self, forKey: .fileFormat) + fileFormat = fileFormatDecoded + let filePasswordDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .filePassword) + filePassword = filePasswordDecoded } } -public enum DeleteExportOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum CreateExportOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -8914,153 +9078,153 @@ public enum DeleteExportOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DeleteExportOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateExportOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DeleteExportOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: CreateExportOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.creationDateTime = output.creationDateTime self.exportId = output.exportId self.exportStatus = output.exportStatus + self.fileFormat = output.fileFormat + self.resourceSpecification = output.resourceSpecification } else { + self.creationDateTime = nil self.exportId = nil self.exportStatus = nil + self.fileFormat = nil + self.resourceSpecification = nil } } } -public struct DeleteExportOutputResponse: Swift.Equatable { - /// The unique identifier of the deleted export. +public struct CreateExportOutputResponse: Swift.Equatable { + /// The date and time that the request to export a bot was created. + public var creationDateTime: ClientRuntime.Date? + /// An identifier for a specific request to create an export. public var exportId: Swift.String? - /// The current status of the deletion. When the deletion is complete, the export will no longer be returned by the [ListExports](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListExports.html) operation and calls to the [ DescribeExport](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeExport.html) operation with the export identifier will fail. + /// The status of the export. When the status is Completed, you can use the [DescribeExport](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeExport.html) operation to get the pre-signed S3 URL link to your exported bot or bot locale. public var exportStatus: LexModelsV2ClientTypes.ExportStatus? + /// The file format used for the bot or bot locale definition files. + public var fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? + /// A description of the type of resource that was exported, either a bot or a bot locale. + public var resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? public init( + creationDateTime: ClientRuntime.Date? = nil, exportId: Swift.String? = nil, - exportStatus: LexModelsV2ClientTypes.ExportStatus? = nil + exportStatus: LexModelsV2ClientTypes.ExportStatus? = nil, + fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? = nil, + resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? = nil ) { + self.creationDateTime = creationDateTime self.exportId = exportId self.exportStatus = exportStatus + self.fileFormat = fileFormat + self.resourceSpecification = resourceSpecification } } -struct DeleteExportOutputResponseBody: Swift.Equatable { +struct CreateExportOutputResponseBody: Swift.Equatable { let exportId: Swift.String? + let resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? + let fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? let exportStatus: LexModelsV2ClientTypes.ExportStatus? + let creationDateTime: ClientRuntime.Date? } -extension DeleteExportOutputResponseBody: Swift.Decodable { +extension CreateExportOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case creationDateTime case exportId case exportStatus + case fileFormat + case resourceSpecification } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let exportIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .exportId) exportId = exportIdDecoded + let resourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportResourceSpecification.self, forKey: .resourceSpecification) + resourceSpecification = resourceSpecificationDecoded + let fileFormatDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportExportFileFormat.self, forKey: .fileFormat) + fileFormat = fileFormatDecoded let exportStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportStatus.self, forKey: .exportStatus) exportStatus = exportStatusDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded } } -extension DeleteImportInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let importId = importId else { - return nil - } - return "/imports/\(importId.urlPercentEncoding())" - } -} - -public struct DeleteImportInput: Swift.Equatable { - /// The unique identifier of the import to delete. - /// This member is required. - public var importId: Swift.String? - - public init( - importId: Swift.String? = nil - ) - { - self.importId = importId - } -} - -struct DeleteImportInputBody: Swift.Equatable { -} - -extension DeleteImportInputBody: Swift.Decodable { - - public init(from decoder: Swift.Decoder) throws { +extension CreateIntentInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case dialogCodeHook + case fulfillmentCodeHook + case initialResponseSetting + case inputContexts + case intentClosingSetting + case intentConfirmationSetting + case intentName + case kendraConfiguration + case outputContexts + case parentIntentSignature + case sampleUtterances } -} -public enum DeleteImportOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) } - } -} - -extension DeleteImportOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: DeleteImportOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.importId = output.importId - self.importStatus = output.importStatus - } else { - self.importId = nil - self.importStatus = nil + if let dialogCodeHook = self.dialogCodeHook { + try encodeContainer.encode(dialogCodeHook, forKey: .dialogCodeHook) + } + if let fulfillmentCodeHook = self.fulfillmentCodeHook { + try encodeContainer.encode(fulfillmentCodeHook, forKey: .fulfillmentCodeHook) + } + if let initialResponseSetting = self.initialResponseSetting { + try encodeContainer.encode(initialResponseSetting, forKey: .initialResponseSetting) + } + if let inputContexts = inputContexts { + var inputContextsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputContexts) + for inputcontext0 in inputContexts { + try inputContextsContainer.encode(inputcontext0) + } + } + if let intentClosingSetting = self.intentClosingSetting { + try encodeContainer.encode(intentClosingSetting, forKey: .intentClosingSetting) + } + if let intentConfirmationSetting = self.intentConfirmationSetting { + try encodeContainer.encode(intentConfirmationSetting, forKey: .intentConfirmationSetting) + } + if let intentName = self.intentName { + try encodeContainer.encode(intentName, forKey: .intentName) + } + if let kendraConfiguration = self.kendraConfiguration { + try encodeContainer.encode(kendraConfiguration, forKey: .kendraConfiguration) + } + if let outputContexts = outputContexts { + var outputContextsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputContexts) + for outputcontext0 in outputContexts { + try outputContextsContainer.encode(outputcontext0) + } + } + if let parentIntentSignature = self.parentIntentSignature { + try encodeContainer.encode(parentIntentSignature, forKey: .parentIntentSignature) + } + if let sampleUtterances = sampleUtterances { + var sampleUtterancesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sampleUtterances) + for sampleutterance0 in sampleUtterances { + try sampleUtterancesContainer.encode(sampleutterance0) + } } } } -public struct DeleteImportOutputResponse: Swift.Equatable { - /// The unique identifier of the deleted import. - public var importId: Swift.String? - /// The current status of the deletion. When the deletion is complete, the import will no longer be returned by the [ListImports](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListImports.html) operation and calls to the [DescribeImport](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeImport.html) operation with the import identifier will fail. - public var importStatus: LexModelsV2ClientTypes.ImportStatus? - - public init( - importId: Swift.String? = nil, - importStatus: LexModelsV2ClientTypes.ImportStatus? = nil - ) - { - self.importId = importId - self.importStatus = importStatus - } -} - -struct DeleteImportOutputResponseBody: Swift.Equatable { - let importId: Swift.String? - let importStatus: LexModelsV2ClientTypes.ImportStatus? -} - -extension DeleteImportOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case importId - case importStatus - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let importIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importId) - importId = importIdDecoded - let importStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportStatus.self, forKey: .importStatus) - importStatus = importStatusDecoded - } -} - -extension DeleteIntentInput: ClientRuntime.URLPathProvider { +extension CreateIntentInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil @@ -9071,245 +9235,469 @@ extension DeleteIntentInput: ClientRuntime.URLPathProvider { guard let localeId = localeId else { return nil } - guard let intentId = intentId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())" + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents" } } -public struct DeleteIntentInput: Swift.Equatable { - /// The identifier of the bot associated with the intent. +public struct CreateIntentInput: Swift.Equatable { + /// The identifier of the bot associated with this intent. /// This member is required. public var botId: Swift.String? - /// The version of the bot associated with the intent. + /// The version of the bot associated with this intent. /// This member is required. public var botVersion: Swift.String? - /// The unique identifier of the intent to delete. + /// A description of the intent. Use the description to help identify the intent in lists. + public var description: Swift.String? + /// Specifies that Amazon Lex invokes the alias Lambda function for each user input. You can invoke this Lambda function to personalize user interaction. For example, suppose that your bot determines that the user's name is John. You Lambda function might retrieve John's information from a backend database and prepopulate some of the values. For example, if you find that John is gluten intolerant, you might set the corresponding intent slot, glutenIntolerant to true. You might find John's phone number and set the corresponding session attribute. + public var dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? + /// Specifies that Amazon Lex invokes the alias Lambda function when the intent is ready for fulfillment. You can invoke this function to complete the bot's transaction with the user. For example, in a pizza ordering bot, the Lambda function can look up the closest pizza restaurant to the customer's location and then place an order on the customer's behalf. + public var fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? + /// Configuration settings for the response that is sent to the user at the beginning of a conversation, before eliciting slot values. + public var initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? + /// A list of contexts that must be active for this intent to be considered by Amazon Lex. When an intent has an input context list, Amazon Lex only considers using the intent in an interaction with the user when the specified contexts are included in the active context list for the session. If the contexts are not active, then Amazon Lex will not use the intent. A context can be automatically activated using the outputContexts property or it can be set at runtime. For example, if there are two intents with different input contexts that respond to the same utterances, only the intent with the active context will respond. An intent may have up to 5 input contexts. If an intent has multiple input contexts, all of the contexts must be active to consider the intent. + public var inputContexts: [LexModelsV2ClientTypes.InputContext]? + /// Sets the response that Amazon Lex sends to the user when the intent is closed. + public var intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? + /// Provides prompts that Amazon Lex sends to the user to confirm the completion of an intent. If the user answers "no," the settings contain a statement that is sent to the user to end the intent. + public var intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? + /// The name of the intent. Intent names must be unique in the locale that contains the intent and cannot match the name of any built-in intent. /// This member is required. - public var intentId: Swift.String? - /// The identifier of the language and locale where the bot will be deleted. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + public var intentName: Swift.String? + /// Configuration information required to use the AMAZON.KendraSearchIntent intent to connect to an Amazon Kendra index. The AMAZON.KendraSearchIntent intent is called when Amazon Lex can't determine another intent to invoke. + public var kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? + /// The identifier of the language and locale where this intent is used. All of the bots, slot types, and slots used by the intent must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). /// This member is required. public var localeId: Swift.String? + /// A lists of contexts that the intent activates when it is fulfilled. You can use an output context to indicate the intents that Amazon Lex should consider for the next turn of the conversation with a customer. When you use the outputContextsList property, all of the contexts specified in the list are activated when the intent is fulfilled. You can set up to 10 output contexts. You can also set the number of conversation turns that the context should be active, or the length of time that the context should be active. + public var outputContexts: [LexModelsV2ClientTypes.OutputContext]? + /// A unique identifier for the built-in intent to base this intent on. + public var parentIntentSignature: Swift.String? + /// An array of strings that a user might say to signal the intent. For example, "I want a pizza", or "I want a {PizzaSize} pizza". In an utterance, slot names are enclosed in curly braces ("{", "}") to indicate where they should be displayed in the utterance shown to the user.. + public var sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, - intentId: Swift.String? = nil, - localeId: Swift.String? = nil + description: Swift.String? = nil, + dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? = nil, + fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? = nil, + initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? = nil, + inputContexts: [LexModelsV2ClientTypes.InputContext]? = nil, + intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? = nil, + intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? = nil, + intentName: Swift.String? = nil, + kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? = nil, + localeId: Swift.String? = nil, + outputContexts: [LexModelsV2ClientTypes.OutputContext]? = nil, + parentIntentSignature: Swift.String? = nil, + sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? = nil ) { self.botId = botId self.botVersion = botVersion - self.intentId = intentId + self.description = description + self.dialogCodeHook = dialogCodeHook + self.fulfillmentCodeHook = fulfillmentCodeHook + self.initialResponseSetting = initialResponseSetting + self.inputContexts = inputContexts + self.intentClosingSetting = intentClosingSetting + self.intentConfirmationSetting = intentConfirmationSetting + self.intentName = intentName + self.kendraConfiguration = kendraConfiguration self.localeId = localeId + self.outputContexts = outputContexts + self.parentIntentSignature = parentIntentSignature + self.sampleUtterances = sampleUtterances } } -struct DeleteIntentInputBody: Swift.Equatable { +struct CreateIntentInputBody: Swift.Equatable { + let intentName: Swift.String? + let description: Swift.String? + let parentIntentSignature: Swift.String? + let sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? + let dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? + let fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? + let intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? + let intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? + let inputContexts: [LexModelsV2ClientTypes.InputContext]? + let outputContexts: [LexModelsV2ClientTypes.OutputContext]? + let kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? + let initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? } -extension DeleteIntentInputBody: Swift.Decodable { - - public init(from decoder: Swift.Decoder) throws { +extension CreateIntentInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case dialogCodeHook + case fulfillmentCodeHook + case initialResponseSetting + case inputContexts + case intentClosingSetting + case intentConfirmationSetting + case intentName + case kendraConfiguration + case outputContexts + case parentIntentSignature + case sampleUtterances } -} -public enum DeleteIntentOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) + intentName = intentNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let parentIntentSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentIntentSignature) + parentIntentSignature = parentIntentSignatureDecoded + let sampleUtterancesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SampleUtterance?].self, forKey: .sampleUtterances) + var sampleUtterancesDecoded0:[LexModelsV2ClientTypes.SampleUtterance]? = nil + if let sampleUtterancesContainer = sampleUtterancesContainer { + sampleUtterancesDecoded0 = [LexModelsV2ClientTypes.SampleUtterance]() + for structure0 in sampleUtterancesContainer { + if let structure0 = structure0 { + sampleUtterancesDecoded0?.append(structure0) + } + } } - } -} - -extension DeleteIntentOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - } -} - -public struct DeleteIntentOutputResponse: Swift.Equatable { - - public init() { } -} - -extension DeleteResourcePolicyInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let expectedRevisionId = expectedRevisionId { - let expectedRevisionIdQueryItem = ClientRuntime.URLQueryItem(name: "expectedRevisionId".urlPercentEncoding(), value: Swift.String(expectedRevisionId).urlPercentEncoding()) - items.append(expectedRevisionIdQueryItem) + sampleUtterances = sampleUtterancesDecoded0 + let dialogCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogCodeHookSettings.self, forKey: .dialogCodeHook) + dialogCodeHook = dialogCodeHookDecoded + let fulfillmentCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentCodeHookSettings.self, forKey: .fulfillmentCodeHook) + fulfillmentCodeHook = fulfillmentCodeHookDecoded + let intentConfirmationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentConfirmationSetting.self, forKey: .intentConfirmationSetting) + intentConfirmationSetting = intentConfirmationSettingDecoded + let intentClosingSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentClosingSetting.self, forKey: .intentClosingSetting) + intentClosingSetting = intentClosingSettingDecoded + let inputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.InputContext?].self, forKey: .inputContexts) + var inputContextsDecoded0:[LexModelsV2ClientTypes.InputContext]? = nil + if let inputContextsContainer = inputContextsContainer { + inputContextsDecoded0 = [LexModelsV2ClientTypes.InputContext]() + for structure0 in inputContextsContainer { + if let structure0 = structure0 { + inputContextsDecoded0?.append(structure0) + } } - return items } - } -} - -extension DeleteResourcePolicyInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let resourceArn = resourceArn else { - return nil + inputContexts = inputContextsDecoded0 + let outputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.OutputContext?].self, forKey: .outputContexts) + var outputContextsDecoded0:[LexModelsV2ClientTypes.OutputContext]? = nil + if let outputContextsContainer = outputContextsContainer { + outputContextsDecoded0 = [LexModelsV2ClientTypes.OutputContext]() + for structure0 in outputContextsContainer { + if let structure0 = structure0 { + outputContextsDecoded0?.append(structure0) + } + } } - return "/policy/\(resourceArn.urlPercentEncoding())" - } -} - -public struct DeleteResourcePolicyInput: Swift.Equatable { - /// The identifier of the revision to edit. If this ID doesn't match the current revision number, Amazon Lex returns an exception If you don't specify a revision ID, Amazon Lex will delete the current policy. - public var expectedRevisionId: Swift.String? - /// The Amazon Resource Name (ARN) of the bot or bot alias that has the resource policy attached. - /// This member is required. - public var resourceArn: Swift.String? - - public init( - expectedRevisionId: Swift.String? = nil, - resourceArn: Swift.String? = nil - ) - { - self.expectedRevisionId = expectedRevisionId - self.resourceArn = resourceArn - } -} - -struct DeleteResourcePolicyInputBody: Swift.Equatable { -} - -extension DeleteResourcePolicyInputBody: Swift.Decodable { - - public init(from decoder: Swift.Decoder) throws { + outputContexts = outputContextsDecoded0 + let kendraConfigurationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.KendraConfiguration.self, forKey: .kendraConfiguration) + kendraConfiguration = kendraConfigurationDecoded + let initialResponseSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.InitialResponseSetting.self, forKey: .initialResponseSetting) + initialResponseSetting = initialResponseSettingDecoded } } -public enum DeleteResourcePolicyOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum CreateIntentOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } } -extension DeleteResourcePolicyOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateIntentOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DeleteResourcePolicyOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.resourceArn = output.resourceArn - self.revisionId = output.revisionId + let output: CreateIntentOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botVersion = output.botVersion + self.creationDateTime = output.creationDateTime + self.description = output.description + self.dialogCodeHook = output.dialogCodeHook + self.fulfillmentCodeHook = output.fulfillmentCodeHook + self.initialResponseSetting = output.initialResponseSetting + self.inputContexts = output.inputContexts + self.intentClosingSetting = output.intentClosingSetting + self.intentConfirmationSetting = output.intentConfirmationSetting + self.intentId = output.intentId + self.intentName = output.intentName + self.kendraConfiguration = output.kendraConfiguration + self.localeId = output.localeId + self.outputContexts = output.outputContexts + self.parentIntentSignature = output.parentIntentSignature + self.sampleUtterances = output.sampleUtterances } else { - self.resourceArn = nil - self.revisionId = nil + self.botId = nil + self.botVersion = nil + self.creationDateTime = nil + self.description = nil + self.dialogCodeHook = nil + self.fulfillmentCodeHook = nil + self.initialResponseSetting = nil + self.inputContexts = nil + self.intentClosingSetting = nil + self.intentConfirmationSetting = nil + self.intentId = nil + self.intentName = nil + self.kendraConfiguration = nil + self.localeId = nil + self.outputContexts = nil + self.parentIntentSignature = nil + self.sampleUtterances = nil } } } -public struct DeleteResourcePolicyOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy was deleted from. - public var resourceArn: Swift.String? - /// The current revision of the resource policy. Use the revision ID to make sure that you are updating the most current version of a resource policy when you add a policy statement to a resource, delete a resource, or update a resource. - public var revisionId: Swift.String? +public struct CreateIntentOutputResponse: Swift.Equatable { + /// The identifier of the bot associated with the intent. + public var botId: Swift.String? + /// The version of the bot associated with the intent. + public var botVersion: Swift.String? + /// A timestamp of the date and time that the intent was created. + public var creationDateTime: ClientRuntime.Date? + /// The description specified for the intent. + public var description: Swift.String? + /// The dialog Lambda function specified for the intent. + public var dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? + /// The fulfillment Lambda function specified for the intent. + public var fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? + /// Configuration settings for the response that is sent to the user at the beginning of a conversation, before eliciting slot values. + public var initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? + /// The list of input contexts specified for the intent. + public var inputContexts: [LexModelsV2ClientTypes.InputContext]? + /// The closing setting specified for the intent. + public var intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? + /// The confirmation setting specified for the intent. + public var intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? + /// A unique identifier for the intent. + public var intentId: Swift.String? + /// The name specified for the intent. + public var intentName: Swift.String? + /// Configuration for searching a Amazon Kendra index specified for the intent. + public var kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? + /// The locale that the intent is specified to use. + public var localeId: Swift.String? + /// The list of output contexts specified for the intent. + public var outputContexts: [LexModelsV2ClientTypes.OutputContext]? + /// The signature of the parent intent specified for the intent. + public var parentIntentSignature: Swift.String? + /// The sample utterances specified for the intent. + public var sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? public init( - resourceArn: Swift.String? = nil, - revisionId: Swift.String? = nil + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? = nil, + fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? = nil, + initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? = nil, + inputContexts: [LexModelsV2ClientTypes.InputContext]? = nil, + intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? = nil, + intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? = nil, + intentId: Swift.String? = nil, + intentName: Swift.String? = nil, + kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? = nil, + localeId: Swift.String? = nil, + outputContexts: [LexModelsV2ClientTypes.OutputContext]? = nil, + parentIntentSignature: Swift.String? = nil, + sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? = nil ) { - self.resourceArn = resourceArn - self.revisionId = revisionId - } -} - -struct DeleteResourcePolicyOutputResponseBody: Swift.Equatable { - let resourceArn: Swift.String? - let revisionId: Swift.String? -} - -extension DeleteResourcePolicyOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case resourceArn - case revisionId - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) - resourceArn = resourceArnDecoded - let revisionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .revisionId) - revisionId = revisionIdDecoded + self.botId = botId + self.botVersion = botVersion + self.creationDateTime = creationDateTime + self.description = description + self.dialogCodeHook = dialogCodeHook + self.fulfillmentCodeHook = fulfillmentCodeHook + self.initialResponseSetting = initialResponseSetting + self.inputContexts = inputContexts + self.intentClosingSetting = intentClosingSetting + self.intentConfirmationSetting = intentConfirmationSetting + self.intentId = intentId + self.intentName = intentName + self.kendraConfiguration = kendraConfiguration + self.localeId = localeId + self.outputContexts = outputContexts + self.parentIntentSignature = parentIntentSignature + self.sampleUtterances = sampleUtterances } } -extension DeleteResourcePolicyStatementInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let expectedRevisionId = expectedRevisionId { - let expectedRevisionIdQueryItem = ClientRuntime.URLQueryItem(name: "expectedRevisionId".urlPercentEncoding(), value: Swift.String(expectedRevisionId).urlPercentEncoding()) - items.append(expectedRevisionIdQueryItem) +struct CreateIntentOutputResponseBody: Swift.Equatable { + let intentId: Swift.String? + let intentName: Swift.String? + let description: Swift.String? + let parentIntentSignature: Swift.String? + let sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? + let dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? + let fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? + let intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? + let intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? + let inputContexts: [LexModelsV2ClientTypes.InputContext]? + let outputContexts: [LexModelsV2ClientTypes.OutputContext]? + let kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let creationDateTime: ClientRuntime.Date? + let initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? +} + +extension CreateIntentOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botId + case botVersion + case creationDateTime + case description + case dialogCodeHook + case fulfillmentCodeHook + case initialResponseSetting + case inputContexts + case intentClosingSetting + case intentConfirmationSetting + case intentId + case intentName + case kendraConfiguration + case localeId + case outputContexts + case parentIntentSignature + case sampleUtterances + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) + intentId = intentIdDecoded + let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) + intentName = intentNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let parentIntentSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentIntentSignature) + parentIntentSignature = parentIntentSignatureDecoded + let sampleUtterancesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SampleUtterance?].self, forKey: .sampleUtterances) + var sampleUtterancesDecoded0:[LexModelsV2ClientTypes.SampleUtterance]? = nil + if let sampleUtterancesContainer = sampleUtterancesContainer { + sampleUtterancesDecoded0 = [LexModelsV2ClientTypes.SampleUtterance]() + for structure0 in sampleUtterancesContainer { + if let structure0 = structure0 { + sampleUtterancesDecoded0?.append(structure0) + } + } + } + sampleUtterances = sampleUtterancesDecoded0 + let dialogCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogCodeHookSettings.self, forKey: .dialogCodeHook) + dialogCodeHook = dialogCodeHookDecoded + let fulfillmentCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentCodeHookSettings.self, forKey: .fulfillmentCodeHook) + fulfillmentCodeHook = fulfillmentCodeHookDecoded + let intentConfirmationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentConfirmationSetting.self, forKey: .intentConfirmationSetting) + intentConfirmationSetting = intentConfirmationSettingDecoded + let intentClosingSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentClosingSetting.self, forKey: .intentClosingSetting) + intentClosingSetting = intentClosingSettingDecoded + let inputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.InputContext?].self, forKey: .inputContexts) + var inputContextsDecoded0:[LexModelsV2ClientTypes.InputContext]? = nil + if let inputContextsContainer = inputContextsContainer { + inputContextsDecoded0 = [LexModelsV2ClientTypes.InputContext]() + for structure0 in inputContextsContainer { + if let structure0 = structure0 { + inputContextsDecoded0?.append(structure0) + } + } + } + inputContexts = inputContextsDecoded0 + let outputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.OutputContext?].self, forKey: .outputContexts) + var outputContextsDecoded0:[LexModelsV2ClientTypes.OutputContext]? = nil + if let outputContextsContainer = outputContextsContainer { + outputContextsDecoded0 = [LexModelsV2ClientTypes.OutputContext]() + for structure0 in outputContextsContainer { + if let structure0 = structure0 { + outputContextsDecoded0?.append(structure0) + } } - return items } + outputContexts = outputContextsDecoded0 + let kendraConfigurationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.KendraConfiguration.self, forKey: .kendraConfiguration) + kendraConfiguration = kendraConfigurationDecoded + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let initialResponseSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.InitialResponseSetting.self, forKey: .initialResponseSetting) + initialResponseSetting = initialResponseSettingDecoded } } -extension DeleteResourcePolicyStatementInput: ClientRuntime.URLPathProvider { +extension CreateResourcePolicyInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case policy + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let policy = self.policy { + try encodeContainer.encode(policy, forKey: .policy) + } + } +} + +extension CreateResourcePolicyInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let resourceArn = resourceArn else { return nil } - guard let statementId = statementId else { - return nil - } - return "/policy/\(resourceArn.urlPercentEncoding())/statements/\(statementId.urlPercentEncoding())" + return "/policy/\(resourceArn.urlPercentEncoding())" } } -public struct DeleteResourcePolicyStatementInput: Swift.Equatable { - /// The identifier of the revision of the policy to delete the statement from. If this revision ID doesn't match the current revision ID, Amazon Lex throws an exception. If you don't specify a revision, Amazon Lex removes the current contents of the statement. - public var expectedRevisionId: Swift.String? +public struct CreateResourcePolicyInput: Swift.Equatable { + /// A resource policy to add to the resource. The policy is a JSON structure that contains one or more statements that define the policy. The policy must follow the IAM syntax. For more information about the contents of a JSON policy document, see [ IAM JSON policy reference ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html). If the policy isn't valid, Amazon Lex returns a validation exception. + /// This member is required. + public var policy: Swift.String? /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to. /// This member is required. public var resourceArn: Swift.String? - /// The name of the statement (SID) to delete from the policy. - /// This member is required. - public var statementId: Swift.String? public init( - expectedRevisionId: Swift.String? = nil, - resourceArn: Swift.String? = nil, - statementId: Swift.String? = nil + policy: Swift.String? = nil, + resourceArn: Swift.String? = nil ) { - self.expectedRevisionId = expectedRevisionId + self.policy = policy self.resourceArn = resourceArn - self.statementId = statementId } } -struct DeleteResourcePolicyStatementInputBody: Swift.Equatable { +struct CreateResourcePolicyInputBody: Swift.Equatable { + let policy: Swift.String? } -extension DeleteResourcePolicyStatementInputBody: Swift.Decodable { +extension CreateResourcePolicyInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case policy + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let policyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .policy) + policy = policyDecoded } } -public enum DeleteResourcePolicyStatementOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum CreateResourcePolicyOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -9317,17 +9705,19 @@ public enum DeleteResourcePolicyStatementOutputError: ClientRuntime.HttpResponse case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } } -extension DeleteResourcePolicyStatementOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateResourcePolicyOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DeleteResourcePolicyStatementOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: CreateResourcePolicyOutputResponseBody = try responseDecoder.decode(responseBody: data) self.resourceArn = output.resourceArn self.revisionId = output.revisionId } else { @@ -9337,8 +9727,8 @@ extension DeleteResourcePolicyStatementOutputResponse: ClientRuntime.HttpRespons } } -public struct DeleteResourcePolicyStatementOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy statement was removed from. +public struct CreateResourcePolicyOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy was attached to. public var resourceArn: Swift.String? /// The current revision of the resource policy. Use the revision ID to make sure that you are updating the most current version of a resource policy when you add a policy statement to a resource, delete a resource, or update a resource. public var revisionId: Swift.String? @@ -9353,12 +9743,12 @@ public struct DeleteResourcePolicyStatementOutputResponse: Swift.Equatable { } } -struct DeleteResourcePolicyStatementOutputResponseBody: Swift.Equatable { +struct CreateResourcePolicyOutputResponseBody: Swift.Equatable { let resourceArn: Swift.String? let revisionId: Swift.String? } -extension DeleteResourcePolicyStatementOutputResponseBody: Swift.Decodable { +extension CreateResourcePolicyOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case resourceArn case revisionId @@ -9373,70 +9763,177 @@ extension DeleteResourcePolicyStatementOutputResponseBody: Swift.Decodable { } } -extension DeleteSlotInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil +extension CreateResourcePolicyStatementInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case action + case condition + case effect + case principal + case statementId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let action = action { + var actionContainer = encodeContainer.nestedUnkeyedContainer(forKey: .action) + for operation0 in action { + try actionContainer.encode(operation0) + } } - guard let botVersion = botVersion else { - return nil + if let condition = condition { + var conditionContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .condition) + for (dictKey0, conditionMap0) in condition { + var conditionMap0Container = conditionContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key(stringValue: dictKey0)) + for (dictKey1, conditionKeyValueMap1) in conditionMap0 { + try conditionMap0Container.encode(conditionKeyValueMap1, forKey: ClientRuntime.Key(stringValue: dictKey1)) + } + } } - guard let localeId = localeId else { - return nil + if let effect = self.effect { + try encodeContainer.encode(effect.rawValue, forKey: .effect) } - guard let intentId = intentId else { - return nil + if let principal = principal { + var principalContainer = encodeContainer.nestedUnkeyedContainer(forKey: .principal) + for principal0 in principal { + try principalContainer.encode(principal0) + } } - guard let slotId = slotId else { + if let statementId = self.statementId { + try encodeContainer.encode(statementId, forKey: .statementId) + } + } +} + +extension CreateResourcePolicyStatementInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let expectedRevisionId = expectedRevisionId { + let expectedRevisionIdQueryItem = ClientRuntime.URLQueryItem(name: "expectedRevisionId".urlPercentEncoding(), value: Swift.String(expectedRevisionId).urlPercentEncoding()) + items.append(expectedRevisionIdQueryItem) + } + return items + } + } +} + +extension CreateResourcePolicyStatementInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let resourceArn = resourceArn else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())/slots/\(slotId.urlPercentEncoding())" + return "/policy/\(resourceArn.urlPercentEncoding())/statements" } } -public struct DeleteSlotInput: Swift.Equatable { - /// The identifier of the bot associated with the slot to delete. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot associated with the slot to delete. +public struct CreateResourcePolicyStatementInput: Swift.Equatable { + /// The Amazon Lex action that this policy either allows or denies. The action must apply to the resource type of the specified ARN. For more information, see [ Actions, resources, and condition keys for Amazon Lex V2](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlexv2.html). /// This member is required. - public var botVersion: Swift.String? - /// The identifier of the intent associated with the slot. + public var action: [Swift.String]? + /// Specifies a condition when the policy is in effect. If the principal of the policy is a service principal, you must provide two condition blocks, one with a SourceAccount global condition key and one with a SourceArn global condition key. For more information, see [IAM JSON policy elements: Condition ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html). + public var condition: [Swift.String:[Swift.String:Swift.String]]? + /// Determines whether the statement allows or denies access to the resource. /// This member is required. - public var intentId: Swift.String? - /// The identifier of the language and locale that the slot will be deleted from. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + public var effect: LexModelsV2ClientTypes.Effect? + /// The identifier of the revision of the policy to edit. If this revision ID doesn't match the current revision ID, Amazon Lex throws an exception. If you don't specify a revision, Amazon Lex overwrites the contents of the policy with the new values. + public var expectedRevisionId: Swift.String? + /// An IAM principal, such as an IAM user, IAM role, or Amazon Web Services services that is allowed or denied access to a resource. For more information, see [Amazon Web Services JSON policy elements: Principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html). /// This member is required. - public var localeId: Swift.String? - /// The identifier of the slot to delete. + public var principal: [LexModelsV2ClientTypes.Principal]? + /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to. /// This member is required. - public var slotId: Swift.String? + public var resourceArn: Swift.String? + /// The name of the statement. The ID is the same as the Sid IAM property. The statement name must be unique within the policy. For more information, see [IAM JSON policy elements: Sid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html). + /// This member is required. + public var statementId: Swift.String? public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - intentId: Swift.String? = nil, - localeId: Swift.String? = nil, - slotId: Swift.String? = nil + action: [Swift.String]? = nil, + condition: [Swift.String:[Swift.String:Swift.String]]? = nil, + effect: LexModelsV2ClientTypes.Effect? = nil, + expectedRevisionId: Swift.String? = nil, + principal: [LexModelsV2ClientTypes.Principal]? = nil, + resourceArn: Swift.String? = nil, + statementId: Swift.String? = nil ) { - self.botId = botId - self.botVersion = botVersion - self.intentId = intentId - self.localeId = localeId - self.slotId = slotId + self.action = action + self.condition = condition + self.effect = effect + self.expectedRevisionId = expectedRevisionId + self.principal = principal + self.resourceArn = resourceArn + self.statementId = statementId } } -struct DeleteSlotInputBody: Swift.Equatable { +struct CreateResourcePolicyStatementInputBody: Swift.Equatable { + let statementId: Swift.String? + let effect: LexModelsV2ClientTypes.Effect? + let principal: [LexModelsV2ClientTypes.Principal]? + let action: [Swift.String]? + let condition: [Swift.String:[Swift.String:Swift.String]]? } -extension DeleteSlotInputBody: Swift.Decodable { +extension CreateResourcePolicyStatementInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case action + case condition + case effect + case principal + case statementId + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let statementIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .statementId) + statementId = statementIdDecoded + let effectDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.Effect.self, forKey: .effect) + effect = effectDecoded + let principalContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.Principal?].self, forKey: .principal) + var principalDecoded0:[LexModelsV2ClientTypes.Principal]? = nil + if let principalContainer = principalContainer { + principalDecoded0 = [LexModelsV2ClientTypes.Principal]() + for structure0 in principalContainer { + if let structure0 = structure0 { + principalDecoded0?.append(structure0) + } + } + } + principal = principalDecoded0 + let actionContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .action) + var actionDecoded0:[Swift.String]? = nil + if let actionContainer = actionContainer { + actionDecoded0 = [Swift.String]() + for string0 in actionContainer { + if let string0 = string0 { + actionDecoded0?.append(string0) + } + } + } + action = actionDecoded0 + let conditionContainer = try containerValues.decodeIfPresent([Swift.String: [Swift.String: Swift.String?]?].self, forKey: .condition) + var conditionDecoded0: [Swift.String:[Swift.String:Swift.String]]? = nil + if let conditionContainer = conditionContainer { + conditionDecoded0 = [Swift.String:[Swift.String:Swift.String]]() + for (key0, conditionkeyvaluemap0) in conditionContainer { + var conditionkeyvaluemap0Decoded0: [Swift.String: Swift.String]? = nil + if let conditionkeyvaluemap0 = conditionkeyvaluemap0 { + conditionkeyvaluemap0Decoded0 = [Swift.String: Swift.String]() + for (key1, conditionvalue1) in conditionkeyvaluemap0 { + if let conditionvalue1 = conditionvalue1 { + conditionkeyvaluemap0Decoded0?[key1] = conditionvalue1 + } + } + } + conditionDecoded0?[key0] = conditionkeyvaluemap0Decoded0 + } + } + condition = conditionDecoded0 } } -public enum DeleteSlotOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum CreateResourcePolicyStatementOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -9444,6 +9941,7 @@ public enum DeleteSlotOutputError: ClientRuntime.HttpResponseErrorBinding { case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -9452,30 +9950,94 @@ public enum DeleteSlotOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DeleteSlotOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateResourcePolicyStatementOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: CreateResourcePolicyStatementOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.resourceArn = output.resourceArn + self.revisionId = output.revisionId + } else { + self.resourceArn = nil + self.revisionId = nil + } } } -public struct DeleteSlotOutputResponse: Swift.Equatable { +public struct CreateResourcePolicyStatementOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to. + public var resourceArn: Swift.String? + /// The current revision of the resource policy. Use the revision ID to make sure that you are updating the most current version of a resource policy when you add a policy statement to a resource, delete a resource, or update a resource. + public var revisionId: Swift.String? - public init() { } + public init( + resourceArn: Swift.String? = nil, + revisionId: Swift.String? = nil + ) + { + self.resourceArn = resourceArn + self.revisionId = revisionId + } } -extension DeleteSlotTypeInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let skipResourceInUseCheck = skipResourceInUseCheck { - let skipResourceInUseCheckQueryItem = ClientRuntime.URLQueryItem(name: "skipResourceInUseCheck".urlPercentEncoding(), value: Swift.String(skipResourceInUseCheck).urlPercentEncoding()) - items.append(skipResourceInUseCheckQueryItem) - } - return items +struct CreateResourcePolicyStatementOutputResponseBody: Swift.Equatable { + let resourceArn: Swift.String? + let revisionId: Swift.String? +} + +extension CreateResourcePolicyStatementOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case resourceArn + case revisionId + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) + resourceArn = resourceArnDecoded + let revisionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .revisionId) + revisionId = revisionIdDecoded + } +} + +extension CreateSlotInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case multipleValuesSetting + case obfuscationSetting + case slotName + case slotTypeId + case subSlotSetting + case valueElicitationSetting + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let multipleValuesSetting = self.multipleValuesSetting { + try encodeContainer.encode(multipleValuesSetting, forKey: .multipleValuesSetting) + } + if let obfuscationSetting = self.obfuscationSetting { + try encodeContainer.encode(obfuscationSetting, forKey: .obfuscationSetting) + } + if let slotName = self.slotName { + try encodeContainer.encode(slotName, forKey: .slotName) + } + if let slotTypeId = self.slotTypeId { + try encodeContainer.encode(slotTypeId, forKey: .slotTypeId) + } + if let subSlotSetting = self.subSlotSetting { + try encodeContainer.encode(subSlotSetting, forKey: .subSlotSetting) + } + if let valueElicitationSetting = self.valueElicitationSetting { + try encodeContainer.encode(valueElicitationSetting, forKey: .valueElicitationSetting) } } } -extension DeleteSlotTypeInput: ClientRuntime.URLPathProvider { +extension CreateSlotInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil @@ -9486,112 +10048,112 @@ extension DeleteSlotTypeInput: ClientRuntime.URLPathProvider { guard let localeId = localeId else { return nil } - guard let slotTypeId = slotTypeId else { + guard let intentId = intentId else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/slottypes/\(slotTypeId.urlPercentEncoding())" + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())/slots" } } -public struct DeleteSlotTypeInput: Swift.Equatable { - /// The identifier of the bot associated with the slot type. +public struct CreateSlotInput: Swift.Equatable { + /// The identifier of the bot associated with the slot. /// This member is required. public var botId: Swift.String? - /// The version of the bot associated with the slot type. + /// The version of the bot associated with the slot. /// This member is required. public var botVersion: Swift.String? - /// The identifier of the language and locale that the slot type will be deleted from. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// A description of the slot. Use this to help identify the slot in lists. + public var description: Swift.String? + /// The identifier of the intent that contains the slot. + /// This member is required. + public var intentId: Swift.String? + /// The identifier of the language and locale that the slot will be used in. The string must match one of the supported locales. All of the bots, intents, slot types used by the slot must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). /// This member is required. public var localeId: Swift.String? - /// By default, the DeleteSlotType operations throws a ResourceInUseException exception if you try to delete a slot type used by a slot. Set the skipResourceInUseCheck parameter to true to skip this check and remove the slot type even if a slot uses it. - public var skipResourceInUseCheck: Swift.Bool? - /// The identifier of the slot type to delete. + /// Indicates whether the slot returns multiple values in one response. Multi-value slots are only available in the en-US locale. If you set this value to true in any other locale, Amazon Lex throws a ValidationException. If the multipleValuesSetting is not set, the default value is false. + public var multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? + /// Determines how slot values are used in Amazon CloudWatch logs. If the value of the obfuscationSetting parameter is DefaultObfuscation, slot values are obfuscated in the log output. If the value is None, the actual value is present in the log output. The default is to obfuscate values in the CloudWatch logs. + public var obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? + /// The name of the slot. Slot names must be unique within the bot that contains the slot. /// This member is required. + public var slotName: Swift.String? + /// The unique identifier for the slot type associated with this slot. The slot type determines the values that can be entered into the slot. public var slotTypeId: Swift.String? + /// Specifications for the constituent sub slots and the expression for the composite slot. + public var subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? + /// Specifies prompts that Amazon Lex sends to the user to elicit a response that provides the value for the slot. + /// This member is required. + public var valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, + description: Swift.String? = nil, + intentId: Swift.String? = nil, localeId: Swift.String? = nil, - skipResourceInUseCheck: Swift.Bool? = nil, - slotTypeId: Swift.String? = nil + multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? = nil, + obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? = nil, + slotName: Swift.String? = nil, + slotTypeId: Swift.String? = nil, + subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? = nil, + valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? = nil ) { self.botId = botId self.botVersion = botVersion + self.description = description + self.intentId = intentId self.localeId = localeId - self.skipResourceInUseCheck = skipResourceInUseCheck + self.multipleValuesSetting = multipleValuesSetting + self.obfuscationSetting = obfuscationSetting + self.slotName = slotName self.slotTypeId = slotTypeId + self.subSlotSetting = subSlotSetting + self.valueElicitationSetting = valueElicitationSetting } } -struct DeleteSlotTypeInputBody: Swift.Equatable { -} - -extension DeleteSlotTypeInputBody: Swift.Decodable { - - public init(from decoder: Swift.Decoder) throws { - } +struct CreateSlotInputBody: Swift.Equatable { + let slotName: Swift.String? + let description: Swift.String? + let slotTypeId: Swift.String? + let valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? + let obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? + let multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? + let subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? } -public enum DeleteSlotTypeOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) - } - } -} - -extension DeleteSlotTypeOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - } -} - -public struct DeleteSlotTypeOutputResponse: Swift.Equatable { - - public init() { } -} - -extension DeleteTestSetInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let testSetId = testSetId else { - return nil - } - return "/testsets/\(testSetId.urlPercentEncoding())" - } -} - -public struct DeleteTestSetInput: Swift.Equatable { - /// The test set Id of the test set to be deleted. - /// This member is required. - public var testSetId: Swift.String? - - public init( - testSetId: Swift.String? = nil - ) - { - self.testSetId = testSetId +extension CreateSlotInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case multipleValuesSetting + case obfuscationSetting + case slotName + case slotTypeId + case subSlotSetting + case valueElicitationSetting } -} - -struct DeleteTestSetInputBody: Swift.Equatable { -} - -extension DeleteTestSetInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let slotNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotName) + slotName = slotNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let slotTypeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeId) + slotTypeId = slotTypeIdDecoded + let valueElicitationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueElicitationSetting.self, forKey: .valueElicitationSetting) + valueElicitationSetting = valueElicitationSettingDecoded + let obfuscationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ObfuscationSetting.self, forKey: .obfuscationSetting) + obfuscationSetting = obfuscationSettingDecoded + let multipleValuesSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.MultipleValuesSetting.self, forKey: .multipleValuesSetting) + multipleValuesSetting = multipleValuesSettingDecoded + let subSlotSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SubSlotSetting.self, forKey: .subSlotSetting) + subSlotSetting = subSlotSettingDecoded } } -public enum DeleteTestSetOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum CreateSlotOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -9607,141 +10169,337 @@ public enum DeleteTestSetOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DeleteTestSetOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateSlotOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - } -} - -public struct DeleteTestSetOutputResponse: Swift.Equatable { - - public init() { } -} - -extension DeleteUtterancesInput: ClientRuntime.QueryItemProvider { - public var queryItems: [ClientRuntime.URLQueryItem] { - get throws { - var items = [ClientRuntime.URLQueryItem]() - if let sessionId = sessionId { - let sessionIdQueryItem = ClientRuntime.URLQueryItem(name: "sessionId".urlPercentEncoding(), value: Swift.String(sessionId).urlPercentEncoding()) - items.append(sessionIdQueryItem) - } - if let localeId = localeId { - let localeIdQueryItem = ClientRuntime.URLQueryItem(name: "localeId".urlPercentEncoding(), value: Swift.String(localeId).urlPercentEncoding()) - items.append(localeIdQueryItem) - } - return items - } - } -} - -extension DeleteUtterancesInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: CreateSlotOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botVersion = output.botVersion + self.creationDateTime = output.creationDateTime + self.description = output.description + self.intentId = output.intentId + self.localeId = output.localeId + self.multipleValuesSetting = output.multipleValuesSetting + self.obfuscationSetting = output.obfuscationSetting + self.slotId = output.slotId + self.slotName = output.slotName + self.slotTypeId = output.slotTypeId + self.subSlotSetting = output.subSlotSetting + self.valueElicitationSetting = output.valueElicitationSetting + } else { + self.botId = nil + self.botVersion = nil + self.creationDateTime = nil + self.description = nil + self.intentId = nil + self.localeId = nil + self.multipleValuesSetting = nil + self.obfuscationSetting = nil + self.slotId = nil + self.slotName = nil + self.slotTypeId = nil + self.subSlotSetting = nil + self.valueElicitationSetting = nil } - return "/bots/\(botId.urlPercentEncoding())/utterances" } } -public struct DeleteUtterancesInput: Swift.Equatable { - /// The unique identifier of the bot that contains the utterances. - /// This member is required. +public struct CreateSlotOutputResponse: Swift.Equatable { + /// The unique identifier of the bot associated with the slot. public var botId: Swift.String? - /// The identifier of the language and locale where the utterances were collected. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// The version of the bot associated with the slot. + public var botVersion: Swift.String? + /// The timestamp of the date and time that the slot was created. + public var creationDateTime: ClientRuntime.Date? + /// The description associated with the slot. + public var description: Swift.String? + /// The unique identifier of the intent associated with the slot. + public var intentId: Swift.String? + /// The language and local specified for the slot. public var localeId: Swift.String? - /// The unique identifier of the session with the user. The ID is returned in the response from the [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) and [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) operations. - public var sessionId: Swift.String? + /// Indicates whether the slot returns multiple values in one response. + public var multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? + /// Indicates whether the slot is configured to obfuscate values in Amazon CloudWatch logs. + public var obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? + /// The unique identifier associated with the slot. Use this to identify the slot when you update or delete it. + public var slotId: Swift.String? + /// The name specified for the slot. + public var slotName: Swift.String? + /// The unique identifier of the slot type associated with this slot. + public var slotTypeId: Swift.String? + /// Specifications for the constituent sub slots and the expression for the composite slot. + public var subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? + /// The value elicitation settings specified for the slot. + public var valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? public init( botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + intentId: Swift.String? = nil, localeId: Swift.String? = nil, - sessionId: Swift.String? = nil + multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? = nil, + obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? = nil, + slotId: Swift.String? = nil, + slotName: Swift.String? = nil, + slotTypeId: Swift.String? = nil, + subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? = nil, + valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? = nil ) { self.botId = botId + self.botVersion = botVersion + self.creationDateTime = creationDateTime + self.description = description + self.intentId = intentId self.localeId = localeId - self.sessionId = sessionId + self.multipleValuesSetting = multipleValuesSetting + self.obfuscationSetting = obfuscationSetting + self.slotId = slotId + self.slotName = slotName + self.slotTypeId = slotTypeId + self.subSlotSetting = subSlotSetting + self.valueElicitationSetting = valueElicitationSetting } } -struct DeleteUtterancesInputBody: Swift.Equatable { +struct CreateSlotOutputResponseBody: Swift.Equatable { + let slotId: Swift.String? + let slotName: Swift.String? + let description: Swift.String? + let slotTypeId: Swift.String? + let valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? + let obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let intentId: Swift.String? + let creationDateTime: ClientRuntime.Date? + let multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? + let subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? } -extension DeleteUtterancesInputBody: Swift.Decodable { +extension CreateSlotOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botId + case botVersion + case creationDateTime + case description + case intentId + case localeId + case multipleValuesSetting + case obfuscationSetting + case slotId + case slotName + case slotTypeId + case subSlotSetting + case valueElicitationSetting + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let slotIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotId) + slotId = slotIdDecoded + let slotNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotName) + slotName = slotNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let slotTypeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeId) + slotTypeId = slotTypeIdDecoded + let valueElicitationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueElicitationSetting.self, forKey: .valueElicitationSetting) + valueElicitationSetting = valueElicitationSettingDecoded + let obfuscationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ObfuscationSetting.self, forKey: .obfuscationSetting) + obfuscationSetting = obfuscationSettingDecoded + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) + intentId = intentIdDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let multipleValuesSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.MultipleValuesSetting.self, forKey: .multipleValuesSetting) + multipleValuesSetting = multipleValuesSettingDecoded + let subSlotSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SubSlotSetting.self, forKey: .subSlotSetting) + subSlotSetting = subSlotSettingDecoded } } -public enum DeleteUtterancesOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) - } +extension CreateSlotTypeInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case compositeSlotTypeSetting + case description + case externalSourceSetting + case parentSlotTypeSignature + case slotTypeName + case slotTypeValues + case valueSelectionSetting } -} -extension DeleteUtterancesOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let compositeSlotTypeSetting = self.compositeSlotTypeSetting { + try encodeContainer.encode(compositeSlotTypeSetting, forKey: .compositeSlotTypeSetting) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let externalSourceSetting = self.externalSourceSetting { + try encodeContainer.encode(externalSourceSetting, forKey: .externalSourceSetting) + } + if let parentSlotTypeSignature = self.parentSlotTypeSignature { + try encodeContainer.encode(parentSlotTypeSignature, forKey: .parentSlotTypeSignature) + } + if let slotTypeName = self.slotTypeName { + try encodeContainer.encode(slotTypeName, forKey: .slotTypeName) + } + if let slotTypeValues = slotTypeValues { + var slotTypeValuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .slotTypeValues) + for slottypevalue0 in slotTypeValues { + try slotTypeValuesContainer.encode(slottypevalue0) + } + } + if let valueSelectionSetting = self.valueSelectionSetting { + try encodeContainer.encode(valueSelectionSetting, forKey: .valueSelectionSetting) + } } } -public struct DeleteUtterancesOutputResponse: Swift.Equatable { - - public init() { } -} - -extension DescribeBotAliasInput: ClientRuntime.URLPathProvider { +extension CreateSlotTypeInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil } - guard let botAliasId = botAliasId else { + guard let botVersion = botVersion else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botaliases/\(botAliasId.urlPercentEncoding())" + guard let localeId = localeId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/slottypes" } } -public struct DescribeBotAliasInput: Swift.Equatable { - /// The identifier of the bot alias to describe. - /// This member is required. - public var botAliasId: Swift.String? - /// The identifier of the bot associated with the bot alias to describe. +public struct CreateSlotTypeInput: Swift.Equatable { + /// The identifier of the bot associated with this slot type. /// This member is required. public var botId: Swift.String? + /// The identifier of the bot version associated with this slot type. + /// This member is required. + public var botVersion: Swift.String? + /// Specifications for a composite slot type. + public var compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? + /// A description of the slot type. Use the description to help identify the slot type in lists. + public var description: Swift.String? + /// Sets the type of external information used to create the slot type. + public var externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? + /// The identifier of the language and locale that the slot type will be used in. The string must match one of the supported locales. All of the bots, intents, and slots used by the slot type must have the same locale. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? + /// The built-in slot type used as a parent of this slot type. When you define a parent slot type, the new slot type has the configuration of the parent slot type. Only AMAZON.AlphaNumeric is supported. + public var parentSlotTypeSignature: Swift.String? + /// The name for the slot. A slot type name must be unique within the intent. + /// This member is required. + public var slotTypeName: Swift.String? + /// A list of SlotTypeValue objects that defines the values that the slot type can take. Each value can have a list of synonyms, additional values that help train the machine learning model about the values that it resolves for a slot. + public var slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? + /// Determines the strategy that Amazon Lex uses to select a value from the list of possible values. The field can be set to one of the following values: + /// + /// * ORIGINAL_VALUE - Returns the value entered by the user, if the user value is similar to the slot value. + /// + /// * TOP_RESOLUTION - If there is a resolution list for the slot, return the first value in the resolution list. If there is no resolution list, return null. + /// + /// + /// If you don't specify the valueSelectionSetting parameter, the default is ORIGINAL_VALUE. + public var valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? public init( - botAliasId: Swift.String? = nil, - botId: Swift.String? = nil + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? = nil, + description: Swift.String? = nil, + externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? = nil, + localeId: Swift.String? = nil, + parentSlotTypeSignature: Swift.String? = nil, + slotTypeName: Swift.String? = nil, + slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? = nil, + valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? = nil ) { - self.botAliasId = botAliasId self.botId = botId + self.botVersion = botVersion + self.compositeSlotTypeSetting = compositeSlotTypeSetting + self.description = description + self.externalSourceSetting = externalSourceSetting + self.localeId = localeId + self.parentSlotTypeSignature = parentSlotTypeSignature + self.slotTypeName = slotTypeName + self.slotTypeValues = slotTypeValues + self.valueSelectionSetting = valueSelectionSetting } } -struct DescribeBotAliasInputBody: Swift.Equatable { +struct CreateSlotTypeInputBody: Swift.Equatable { + let slotTypeName: Swift.String? + let description: Swift.String? + let slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? + let valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? + let parentSlotTypeSignature: Swift.String? + let externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? + let compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? } -extension DescribeBotAliasInputBody: Swift.Decodable { +extension CreateSlotTypeInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case compositeSlotTypeSetting + case description + case externalSourceSetting + case parentSlotTypeSignature + case slotTypeName + case slotTypeValues + case valueSelectionSetting + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let slotTypeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeName) + slotTypeName = slotTypeNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let slotTypeValuesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotTypeValue?].self, forKey: .slotTypeValues) + var slotTypeValuesDecoded0:[LexModelsV2ClientTypes.SlotTypeValue]? = nil + if let slotTypeValuesContainer = slotTypeValuesContainer { + slotTypeValuesDecoded0 = [LexModelsV2ClientTypes.SlotTypeValue]() + for structure0 in slotTypeValuesContainer { + if let structure0 = structure0 { + slotTypeValuesDecoded0?.append(structure0) + } + } + } + slotTypeValues = slotTypeValuesDecoded0 + let valueSelectionSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueSelectionSetting.self, forKey: .valueSelectionSetting) + valueSelectionSetting = valueSelectionSettingDecoded + let parentSlotTypeSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentSlotTypeSignature) + parentSlotTypeSignature = parentSlotTypeSignatureDecoded + let externalSourceSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExternalSourceSetting.self, forKey: .externalSourceSetting) + externalSourceSetting = externalSourceSettingDecoded + let compositeSlotTypeSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CompositeSlotTypeSetting.self, forKey: .compositeSlotTypeSetting) + compositeSlotTypeSetting = compositeSlotTypeSettingDecoded } } -public enum DescribeBotAliasOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum CreateSlotTypeOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -9750,276 +10508,227 @@ public enum DescribeBotAliasOutputError: ClientRuntime.HttpResponseErrorBinding } } -extension DescribeBotAliasOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateSlotTypeOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DescribeBotAliasOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botAliasHistoryEvents = output.botAliasHistoryEvents - self.botAliasId = output.botAliasId - self.botAliasLocaleSettings = output.botAliasLocaleSettings - self.botAliasName = output.botAliasName - self.botAliasStatus = output.botAliasStatus + let output: CreateSlotTypeOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId self.botVersion = output.botVersion - self.conversationLogSettings = output.conversationLogSettings + self.compositeSlotTypeSetting = output.compositeSlotTypeSetting self.creationDateTime = output.creationDateTime self.description = output.description - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.parentBotNetworks = output.parentBotNetworks - self.sentimentAnalysisSettings = output.sentimentAnalysisSettings + self.externalSourceSetting = output.externalSourceSetting + self.localeId = output.localeId + self.parentSlotTypeSignature = output.parentSlotTypeSignature + self.slotTypeId = output.slotTypeId + self.slotTypeName = output.slotTypeName + self.slotTypeValues = output.slotTypeValues + self.valueSelectionSetting = output.valueSelectionSetting } else { - self.botAliasHistoryEvents = nil - self.botAliasId = nil - self.botAliasLocaleSettings = nil - self.botAliasName = nil - self.botAliasStatus = nil self.botId = nil self.botVersion = nil - self.conversationLogSettings = nil + self.compositeSlotTypeSetting = nil self.creationDateTime = nil self.description = nil - self.lastUpdatedDateTime = nil - self.parentBotNetworks = nil - self.sentimentAnalysisSettings = nil + self.externalSourceSetting = nil + self.localeId = nil + self.parentSlotTypeSignature = nil + self.slotTypeId = nil + self.slotTypeName = nil + self.slotTypeValues = nil + self.valueSelectionSetting = nil } } } -public struct DescribeBotAliasOutputResponse: Swift.Equatable { - /// A list of events that affect a bot alias. For example, an event is recorded when the version that the alias points to changes. - public var botAliasHistoryEvents: [LexModelsV2ClientTypes.BotAliasHistoryEvent]? - /// The identifier of the bot alias. - public var botAliasId: Swift.String? - /// The locale settings that are unique to the alias. - public var botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? - /// The name of the bot alias. - public var botAliasName: Swift.String? - /// The current status of the alias. When the alias is Available, the alias is ready for use with your bot. - public var botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? - /// The identifier of the bot associated with the bot alias. +public struct CreateSlotTypeOutputResponse: Swift.Equatable { + /// The identifier for the bot associated with the slot type. public var botId: Swift.String? - /// The version of the bot associated with the bot alias. + /// The version of the bot associated with the slot type. public var botVersion: Swift.String? - /// Specifics of how Amazon Lex logs text and audio conversations with the bot associated with the alias. - public var conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? - /// A timestamp of the date and time that the alias was created. + /// Specifications for a composite slot type. + public var compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? + /// A timestamp of the date and time that the slot type was created. public var creationDateTime: ClientRuntime.Date? - /// The description of the bot alias. + /// The description specified for the slot type. public var description: Swift.String? - /// A timestamp of the date and time that the alias was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// A list of the networks to which the bot alias you described belongs. - public var parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? - /// Determines whether Amazon Lex will use Amazon Comprehend to detect the sentiment of user utterances. - public var sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? + /// The type of external information used to create the slot type. + public var externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? + /// The specified language and local specified for the slot type. + public var localeId: Swift.String? + /// The signature of the base slot type specified for the slot type. + public var parentSlotTypeSignature: Swift.String? + /// The unique identifier assigned to the slot type. Use this to identify the slot type in the UpdateSlotType and DeleteSlotType operations. + public var slotTypeId: Swift.String? + /// The name specified for the slot type. + public var slotTypeName: Swift.String? + /// The list of values that the slot type can assume. + public var slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? + /// The strategy that Amazon Lex uses to select a value from the list of possible values. + public var valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? public init( - botAliasHistoryEvents: [LexModelsV2ClientTypes.BotAliasHistoryEvent]? = nil, - botAliasId: Swift.String? = nil, - botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil, - botAliasName: Swift.String? = nil, - botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? = nil, botId: Swift.String? = nil, botVersion: Swift.String? = nil, - conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? = nil, + compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? = nil, creationDateTime: ClientRuntime.Date? = nil, description: Swift.String? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? = nil, - sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? = nil + externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? = nil, + localeId: Swift.String? = nil, + parentSlotTypeSignature: Swift.String? = nil, + slotTypeId: Swift.String? = nil, + slotTypeName: Swift.String? = nil, + slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? = nil, + valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? = nil ) { - self.botAliasHistoryEvents = botAliasHistoryEvents - self.botAliasId = botAliasId - self.botAliasLocaleSettings = botAliasLocaleSettings - self.botAliasName = botAliasName - self.botAliasStatus = botAliasStatus self.botId = botId self.botVersion = botVersion - self.conversationLogSettings = conversationLogSettings + self.compositeSlotTypeSetting = compositeSlotTypeSetting self.creationDateTime = creationDateTime self.description = description - self.lastUpdatedDateTime = lastUpdatedDateTime - self.parentBotNetworks = parentBotNetworks - self.sentimentAnalysisSettings = sentimentAnalysisSettings + self.externalSourceSetting = externalSourceSetting + self.localeId = localeId + self.parentSlotTypeSignature = parentSlotTypeSignature + self.slotTypeId = slotTypeId + self.slotTypeName = slotTypeName + self.slotTypeValues = slotTypeValues + self.valueSelectionSetting = valueSelectionSetting } } -struct DescribeBotAliasOutputResponseBody: Swift.Equatable { - let botAliasId: Swift.String? - let botAliasName: Swift.String? +struct CreateSlotTypeOutputResponseBody: Swift.Equatable { + let slotTypeId: Swift.String? + let slotTypeName: Swift.String? let description: Swift.String? - let botVersion: Swift.String? - let botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? - let conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? - let sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? - let botAliasHistoryEvents: [LexModelsV2ClientTypes.BotAliasHistoryEvent]? - let botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? + let slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? + let valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? + let parentSlotTypeSignature: Swift.String? let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? - let parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? + let externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? + let compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? } -extension DescribeBotAliasOutputResponseBody: Swift.Decodable { +extension CreateSlotTypeOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botAliasHistoryEvents - case botAliasId - case botAliasLocaleSettings - case botAliasName - case botAliasStatus case botId case botVersion - case conversationLogSettings + case compositeSlotTypeSetting case creationDateTime case description - case lastUpdatedDateTime - case parentBotNetworks - case sentimentAnalysisSettings + case externalSourceSetting + case localeId + case parentSlotTypeSignature + case slotTypeId + case slotTypeName + case slotTypeValues + case valueSelectionSetting } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) - botAliasId = botAliasIdDecoded - let botAliasNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasName) - botAliasName = botAliasNameDecoded + let slotTypeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeId) + slotTypeId = slotTypeIdDecoded + let slotTypeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeName) + slotTypeName = slotTypeNameDecoded let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) description = descriptionDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let botAliasLocaleSettingsContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.BotAliasLocaleSettings?].self, forKey: .botAliasLocaleSettings) - var botAliasLocaleSettingsDecoded0: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil - if let botAliasLocaleSettingsContainer = botAliasLocaleSettingsContainer { - botAliasLocaleSettingsDecoded0 = [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]() - for (key0, botaliaslocalesettings0) in botAliasLocaleSettingsContainer { - if let botaliaslocalesettings0 = botaliaslocalesettings0 { - botAliasLocaleSettingsDecoded0?[key0] = botaliaslocalesettings0 - } - } - } - botAliasLocaleSettings = botAliasLocaleSettingsDecoded0 - let conversationLogSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConversationLogSettings.self, forKey: .conversationLogSettings) - conversationLogSettings = conversationLogSettingsDecoded - let sentimentAnalysisSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SentimentAnalysisSettings.self, forKey: .sentimentAnalysisSettings) - sentimentAnalysisSettings = sentimentAnalysisSettingsDecoded - let botAliasHistoryEventsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotAliasHistoryEvent?].self, forKey: .botAliasHistoryEvents) - var botAliasHistoryEventsDecoded0:[LexModelsV2ClientTypes.BotAliasHistoryEvent]? = nil - if let botAliasHistoryEventsContainer = botAliasHistoryEventsContainer { - botAliasHistoryEventsDecoded0 = [LexModelsV2ClientTypes.BotAliasHistoryEvent]() - for structure0 in botAliasHistoryEventsContainer { + let slotTypeValuesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotTypeValue?].self, forKey: .slotTypeValues) + var slotTypeValuesDecoded0:[LexModelsV2ClientTypes.SlotTypeValue]? = nil + if let slotTypeValuesContainer = slotTypeValuesContainer { + slotTypeValuesDecoded0 = [LexModelsV2ClientTypes.SlotTypeValue]() + for structure0 in slotTypeValuesContainer { if let structure0 = structure0 { - botAliasHistoryEventsDecoded0?.append(structure0) + slotTypeValuesDecoded0?.append(structure0) } } } - botAliasHistoryEvents = botAliasHistoryEventsDecoded0 - let botAliasStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotAliasStatus.self, forKey: .botAliasStatus) - botAliasStatus = botAliasStatusDecoded + slotTypeValues = slotTypeValuesDecoded0 + let valueSelectionSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueSelectionSetting.self, forKey: .valueSelectionSetting) + valueSelectionSetting = valueSelectionSettingDecoded + let parentSlotTypeSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentSlotTypeSignature) + parentSlotTypeSignature = parentSlotTypeSignatureDecoded let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded - let parentBotNetworksContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ParentBotNetwork?].self, forKey: .parentBotNetworks) - var parentBotNetworksDecoded0:[LexModelsV2ClientTypes.ParentBotNetwork]? = nil - if let parentBotNetworksContainer = parentBotNetworksContainer { - parentBotNetworksDecoded0 = [LexModelsV2ClientTypes.ParentBotNetwork]() - for structure0 in parentBotNetworksContainer { - if let structure0 = structure0 { - parentBotNetworksDecoded0?.append(structure0) - } - } - } - parentBotNetworks = parentBotNetworksDecoded0 - } -} - -extension DescribeBotInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())" + let externalSourceSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExternalSourceSetting.self, forKey: .externalSourceSetting) + externalSourceSetting = externalSourceSettingDecoded + let compositeSlotTypeSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CompositeSlotTypeSetting.self, forKey: .compositeSlotTypeSetting) + compositeSlotTypeSetting = compositeSlotTypeSettingDecoded } } -public struct DescribeBotInput: Swift.Equatable { - /// The unique identifier of the bot to describe. - /// This member is required. - public var botId: Swift.String? - - public init( - botId: Swift.String? = nil - ) - { - self.botId = botId +extension CreateTestSetDiscrepancyReportInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case target } -} - -struct DescribeBotInputBody: Swift.Equatable { -} - -extension DescribeBotInputBody: 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 target = self.target { + try encodeContainer.encode(target, forKey: .target) + } } } -extension DescribeBotLocaleInput: ClientRuntime.URLPathProvider { +extension CreateTestSetDiscrepancyReportInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil - } - guard let localeId = localeId else { + guard let testSetId = testSetId else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())" + return "/testsets/\(testSetId.urlPercentEncoding())/testsetdiscrepancy" } } -public struct DescribeBotLocaleInput: Swift.Equatable { - /// The identifier of the bot associated with the locale. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot associated with the locale. +public struct CreateTestSetDiscrepancyReportInput: Swift.Equatable { + /// The target bot for the test set discrepancy report. /// This member is required. - public var botVersion: Swift.String? - /// The unique identifier of the locale to describe. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + public var target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? + /// The test set Id for the test set discrepancy report. /// This member is required. - public var localeId: Swift.String? + public var testSetId: Swift.String? public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - localeId: Swift.String? = nil + target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? = nil, + testSetId: Swift.String? = nil ) { - self.botId = botId - self.botVersion = botVersion - self.localeId = localeId + self.target = target + self.testSetId = testSetId } } -struct DescribeBotLocaleInputBody: Swift.Equatable { +struct CreateTestSetDiscrepancyReportInputBody: Swift.Equatable { + let target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? } -extension DescribeBotLocaleInputBody: Swift.Decodable { +extension CreateTestSetDiscrepancyReportInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case target + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let targetDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget.self, forKey: .target) + target = targetDecoded } } -public enum DescribeBotLocaleOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum CreateTestSetDiscrepancyReportOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -10030,231 +10739,104 @@ public enum DescribeBotLocaleOutputError: ClientRuntime.HttpResponseErrorBinding } } -extension DescribeBotLocaleOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateTestSetDiscrepancyReportOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DescribeBotLocaleOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botLocaleHistoryEvents = output.botLocaleHistoryEvents - self.botLocaleStatus = output.botLocaleStatus - self.botVersion = output.botVersion + let output: CreateTestSetDiscrepancyReportOutputResponseBody = try responseDecoder.decode(responseBody: data) self.creationDateTime = output.creationDateTime - self.description = output.description - self.failureReasons = output.failureReasons - self.intentsCount = output.intentsCount - self.lastBuildSubmittedDateTime = output.lastBuildSubmittedDateTime - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.localeId = output.localeId - self.localeName = output.localeName - self.nluIntentConfidenceThreshold = output.nluIntentConfidenceThreshold - self.recommendedActions = output.recommendedActions - self.slotTypesCount = output.slotTypesCount - self.voiceSettings = output.voiceSettings + self.target = output.target + self.testSetDiscrepancyReportId = output.testSetDiscrepancyReportId + self.testSetId = output.testSetId } else { - self.botId = nil - self.botLocaleHistoryEvents = nil - self.botLocaleStatus = nil - self.botVersion = nil self.creationDateTime = nil - self.description = nil - self.failureReasons = nil - self.intentsCount = nil - self.lastBuildSubmittedDateTime = nil - self.lastUpdatedDateTime = nil - self.localeId = nil - self.localeName = nil - self.nluIntentConfidenceThreshold = nil - self.recommendedActions = nil - self.slotTypesCount = nil - self.voiceSettings = nil + self.target = nil + self.testSetDiscrepancyReportId = nil + self.testSetId = nil } } } -public struct DescribeBotLocaleOutputResponse: Swift.Equatable { - /// The identifier of the bot associated with the locale. - public var botId: Swift.String? - /// History of changes, such as when a locale is used in an alias, that have taken place for the locale. - public var botLocaleHistoryEvents: [LexModelsV2ClientTypes.BotLocaleHistoryEvent]? - /// The status of the bot. If the status is Failed, the reasons for the failure are listed in the failureReasons field. - public var botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? - /// The version of the bot associated with the locale. - public var botVersion: Swift.String? - /// The date and time that the locale was created. +public struct CreateTestSetDiscrepancyReportOutputResponse: Swift.Equatable { + /// The creation date and time for the test set discrepancy report. public var creationDateTime: ClientRuntime.Date? - /// The description of the locale. - public var description: Swift.String? - /// if botLocaleStatus is Failed, Amazon Lex explains why it failed to build the bot. - public var failureReasons: [Swift.String]? - /// The number of intents defined for the locale. - public var intentsCount: Swift.Int? - /// The date and time that the locale was last submitted for building. - public var lastBuildSubmittedDateTime: ClientRuntime.Date? - /// The date and time that the locale was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The unique identifier of the described locale. - public var localeId: Swift.String? - /// The name of the locale. - public var localeName: Swift.String? - /// The confidence threshold where Amazon Lex inserts the AMAZON.FallbackIntent and AMAZON.KendraSearchIntent intents in the list of possible intents for an utterance. - public var nluIntentConfidenceThreshold: Swift.Double? - /// Recommended actions to take to resolve an error in the failureReasons field. - public var recommendedActions: [Swift.String]? - /// The number of slot types defined for the locale. - public var slotTypesCount: Swift.Int? - /// The Amazon Polly voice Amazon Lex uses for voice interaction with the user. - public var voiceSettings: LexModelsV2ClientTypes.VoiceSettings? + /// The target bot for the test set discrepancy report. + public var target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? + /// The unique identifier of the test set discrepancy report to describe. + public var testSetDiscrepancyReportId: Swift.String? + /// The test set Id for the test set discrepancy report. + public var testSetId: Swift.String? public init( - botId: Swift.String? = nil, - botLocaleHistoryEvents: [LexModelsV2ClientTypes.BotLocaleHistoryEvent]? = nil, - botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? = nil, - botVersion: Swift.String? = nil, creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - failureReasons: [Swift.String]? = nil, - intentsCount: Swift.Int? = nil, - lastBuildSubmittedDateTime: ClientRuntime.Date? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - localeId: Swift.String? = nil, - localeName: Swift.String? = nil, - nluIntentConfidenceThreshold: Swift.Double? = nil, - recommendedActions: [Swift.String]? = nil, - slotTypesCount: Swift.Int? = nil, - voiceSettings: LexModelsV2ClientTypes.VoiceSettings? = nil + target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? = nil, + testSetDiscrepancyReportId: Swift.String? = nil, + testSetId: Swift.String? = nil ) { - self.botId = botId - self.botLocaleHistoryEvents = botLocaleHistoryEvents - self.botLocaleStatus = botLocaleStatus - self.botVersion = botVersion self.creationDateTime = creationDateTime - self.description = description - self.failureReasons = failureReasons - self.intentsCount = intentsCount - self.lastBuildSubmittedDateTime = lastBuildSubmittedDateTime - self.lastUpdatedDateTime = lastUpdatedDateTime - self.localeId = localeId - self.localeName = localeName - self.nluIntentConfidenceThreshold = nluIntentConfidenceThreshold - self.recommendedActions = recommendedActions - self.slotTypesCount = slotTypesCount - self.voiceSettings = voiceSettings + self.target = target + self.testSetDiscrepancyReportId = testSetDiscrepancyReportId + self.testSetId = testSetId } } -struct DescribeBotLocaleOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let localeName: Swift.String? - let description: Swift.String? - let nluIntentConfidenceThreshold: Swift.Double? - let voiceSettings: LexModelsV2ClientTypes.VoiceSettings? - let intentsCount: Swift.Int? - let slotTypesCount: Swift.Int? - let botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? - let failureReasons: [Swift.String]? +struct CreateTestSetDiscrepancyReportOutputResponseBody: Swift.Equatable { + let testSetDiscrepancyReportId: Swift.String? let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? - let lastBuildSubmittedDateTime: ClientRuntime.Date? - let botLocaleHistoryEvents: [LexModelsV2ClientTypes.BotLocaleHistoryEvent]? - let recommendedActions: [Swift.String]? + let testSetId: Swift.String? + let target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? } -extension DescribeBotLocaleOutputResponseBody: Swift.Decodable { +extension CreateTestSetDiscrepancyReportOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botLocaleHistoryEvents - case botLocaleStatus - case botVersion case creationDateTime - case description - case failureReasons - case intentsCount - case lastBuildSubmittedDateTime - case lastUpdatedDateTime - case localeId - case localeName - case nluIntentConfidenceThreshold - case recommendedActions - case slotTypesCount - case voiceSettings + case target + case testSetDiscrepancyReportId + case testSetId } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let localeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeName) - localeName = localeNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let nluIntentConfidenceThresholdDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .nluIntentConfidenceThreshold) - nluIntentConfidenceThreshold = nluIntentConfidenceThresholdDecoded - let voiceSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.VoiceSettings.self, forKey: .voiceSettings) - voiceSettings = voiceSettingsDecoded - let intentsCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .intentsCount) - intentsCount = intentsCountDecoded - let slotTypesCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .slotTypesCount) - slotTypesCount = slotTypesCountDecoded - let botLocaleStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleStatus.self, forKey: .botLocaleStatus) - botLocaleStatus = botLocaleStatusDecoded - let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) - var failureReasonsDecoded0:[Swift.String]? = nil - if let failureReasonsContainer = failureReasonsContainer { - failureReasonsDecoded0 = [Swift.String]() - for string0 in failureReasonsContainer { - if let string0 = string0 { - failureReasonsDecoded0?.append(string0) - } - } - } - failureReasons = failureReasonsDecoded0 + let testSetDiscrepancyReportIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetDiscrepancyReportId) + testSetDiscrepancyReportId = testSetDiscrepancyReportIdDecoded let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded - let lastBuildSubmittedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastBuildSubmittedDateTime) - lastBuildSubmittedDateTime = lastBuildSubmittedDateTimeDecoded - let botLocaleHistoryEventsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotLocaleHistoryEvent?].self, forKey: .botLocaleHistoryEvents) - var botLocaleHistoryEventsDecoded0:[LexModelsV2ClientTypes.BotLocaleHistoryEvent]? = nil - if let botLocaleHistoryEventsContainer = botLocaleHistoryEventsContainer { - botLocaleHistoryEventsDecoded0 = [LexModelsV2ClientTypes.BotLocaleHistoryEvent]() - for structure0 in botLocaleHistoryEventsContainer { - if let structure0 = structure0 { - botLocaleHistoryEventsDecoded0?.append(structure0) - } - } - } - botLocaleHistoryEvents = botLocaleHistoryEventsDecoded0 - let recommendedActionsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .recommendedActions) - var recommendedActionsDecoded0:[Swift.String]? = nil - if let recommendedActionsContainer = recommendedActionsContainer { - recommendedActionsDecoded0 = [Swift.String]() - for string0 in recommendedActionsContainer { - if let string0 = string0 { - recommendedActionsDecoded0?.append(string0) - } - } - } - recommendedActions = recommendedActionsDecoded0 + let testSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetId) + testSetId = testSetIdDecoded + let targetDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget.self, forKey: .target) + target = targetDecoded } } -public enum DescribeBotOutputError: ClientRuntime.HttpResponseErrorBinding { +extension CreateUploadUrlInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/createuploadurl" + } +} + +public struct CreateUploadUrlInput: Swift.Equatable { + + public init() { } +} + +struct CreateUploadUrlInputBody: Swift.Equatable { +} + +extension CreateUploadUrlInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum CreateUploadUrlOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -10262,354 +10844,204 @@ public enum DescribeBotOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DescribeBotOutputResponse: ClientRuntime.HttpResponseBinding { +extension CreateUploadUrlOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DescribeBotOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botMembers = output.botMembers - self.botName = output.botName - self.botStatus = output.botStatus - self.botType = output.botType - self.creationDateTime = output.creationDateTime - self.dataPrivacy = output.dataPrivacy - self.description = output.description - self.failureReasons = output.failureReasons - self.idleSessionTTLInSeconds = output.idleSessionTTLInSeconds - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.roleArn = output.roleArn + let output: CreateUploadUrlOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.importId = output.importId + self.uploadUrl = output.uploadUrl } else { - self.botId = nil - self.botMembers = nil - self.botName = nil - self.botStatus = nil - self.botType = nil - self.creationDateTime = nil - self.dataPrivacy = nil - self.description = nil - self.failureReasons = nil - self.idleSessionTTLInSeconds = nil - self.lastUpdatedDateTime = nil - self.roleArn = nil + self.importId = nil + self.uploadUrl = nil } } } -public struct DescribeBotOutputResponse: Swift.Equatable { - /// The unique identifier of the bot. - public var botId: Swift.String? - /// The list of bots in the network that was described. - public var botMembers: [LexModelsV2ClientTypes.BotMember]? - /// The name of the bot. - public var botName: Swift.String? - /// The current status of the bot. When the status is Available the bot is ready to be used in conversations with users. - public var botStatus: LexModelsV2ClientTypes.BotStatus? - /// The type of the bot that was described. - public var botType: LexModelsV2ClientTypes.BotType? - /// A timestamp of the date and time that the bot was created. - public var creationDateTime: ClientRuntime.Date? - /// Settings for managing data privacy of the bot and its conversations with users. - public var dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? - /// The description of the bot. - public var description: Swift.String? - /// If the botStatus is Failed, this contains a list of reasons that the bot couldn't be built. - public var failureReasons: [Swift.String]? - /// The maximum time in seconds that Amazon Lex retains the data gathered in a conversation. - public var idleSessionTTLInSeconds: Swift.Int? - /// A timestamp of the date and time that the bot was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The Amazon Resource Name (ARN) of an IAM role that has permission to access the bot. - public var roleArn: Swift.String? +public struct CreateUploadUrlOutputResponse: Swift.Equatable { + /// An identifier for a unique import job. Use it when you call the [StartImport](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_StartImport.html) operation. + public var importId: Swift.String? + /// A pre-signed S3 write URL. Upload the zip archive file that contains the definition of your bot or bot locale. + public var uploadUrl: Swift.String? public init( - botId: Swift.String? = nil, - botMembers: [LexModelsV2ClientTypes.BotMember]? = nil, - botName: Swift.String? = nil, - botStatus: LexModelsV2ClientTypes.BotStatus? = nil, - botType: LexModelsV2ClientTypes.BotType? = nil, - creationDateTime: ClientRuntime.Date? = nil, - dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? = nil, - description: Swift.String? = nil, - failureReasons: [Swift.String]? = nil, - idleSessionTTLInSeconds: Swift.Int? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - roleArn: Swift.String? = nil + importId: Swift.String? = nil, + uploadUrl: Swift.String? = nil ) { - self.botId = botId - self.botMembers = botMembers - self.botName = botName - self.botStatus = botStatus - self.botType = botType - self.creationDateTime = creationDateTime - self.dataPrivacy = dataPrivacy - self.description = description - self.failureReasons = failureReasons - self.idleSessionTTLInSeconds = idleSessionTTLInSeconds - self.lastUpdatedDateTime = lastUpdatedDateTime - self.roleArn = roleArn + self.importId = importId + self.uploadUrl = uploadUrl } } -struct DescribeBotOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botName: Swift.String? - let description: Swift.String? - let roleArn: Swift.String? - let dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? - let idleSessionTTLInSeconds: Swift.Int? - let botStatus: LexModelsV2ClientTypes.BotStatus? - let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? - let botType: LexModelsV2ClientTypes.BotType? - let botMembers: [LexModelsV2ClientTypes.BotMember]? - let failureReasons: [Swift.String]? +struct CreateUploadUrlOutputResponseBody: Swift.Equatable { + let importId: Swift.String? + let uploadUrl: Swift.String? } -extension DescribeBotOutputResponseBody: Swift.Decodable { +extension CreateUploadUrlOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botMembers - case botName - case botStatus - case botType - case creationDateTime - case dataPrivacy - case description - case failureReasons - case idleSessionTTLInSeconds - case lastUpdatedDateTime - case roleArn + case importId + case uploadUrl } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) - botName = botNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) - roleArn = roleArnDecoded - let dataPrivacyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DataPrivacy.self, forKey: .dataPrivacy) - dataPrivacy = dataPrivacyDecoded - let idleSessionTTLInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .idleSessionTTLInSeconds) - idleSessionTTLInSeconds = idleSessionTTLInSecondsDecoded - let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) - botStatus = botStatusDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded - let botTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotType.self, forKey: .botType) - botType = botTypeDecoded - let botMembersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotMember?].self, forKey: .botMembers) - var botMembersDecoded0:[LexModelsV2ClientTypes.BotMember]? = nil - if let botMembersContainer = botMembersContainer { - botMembersDecoded0 = [LexModelsV2ClientTypes.BotMember]() - for structure0 in botMembersContainer { - if let structure0 = structure0 { - botMembersDecoded0?.append(structure0) - } - } - } - botMembers = botMembersDecoded0 - let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) - var failureReasonsDecoded0:[Swift.String]? = nil - if let failureReasonsContainer = failureReasonsContainer { - failureReasonsDecoded0 = [Swift.String]() - for string0 in failureReasonsContainer { - if let string0 = string0 { - failureReasonsDecoded0?.append(string0) - } - } - } - failureReasons = failureReasonsDecoded0 + let importIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importId) + importId = importIdDecoded + let uploadUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .uploadUrl) + uploadUrl = uploadUrlDecoded } } -extension DescribeBotRecommendationInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil - } - guard let localeId = localeId else { - return nil - } - guard let botRecommendationId = botRecommendationId else { - return nil +extension LexModelsV2ClientTypes.CustomPayload: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case value + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/botrecommendations/\(botRecommendationId.urlPercentEncoding())" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let valueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .value) + value = valueDecoded } } -public struct DescribeBotRecommendationInput: Swift.Equatable { - /// The unique identifier of the bot associated with the bot recommendation. - /// This member is required. - public var botId: Swift.String? - /// The identifier of the bot recommendation to describe. - /// This member is required. - public var botRecommendationId: Swift.String? - /// The version of the bot associated with the bot recommendation. - /// This member is required. - public var botVersion: Swift.String? - /// The identifier of the language and locale of the bot recommendation to describe. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? +extension LexModelsV2ClientTypes { + /// A custom response string that Amazon Lex sends to your application. You define the content and structure the string. + public struct CustomPayload: Swift.Equatable { + /// The string that is sent to your application. + /// This member is required. + public var value: Swift.String? - public init( - botId: Swift.String? = nil, - botRecommendationId: Swift.String? = nil, - botVersion: Swift.String? = nil, - localeId: Swift.String? = nil - ) - { - self.botId = botId - self.botRecommendationId = botRecommendationId - self.botVersion = botVersion - self.localeId = localeId + public init( + value: Swift.String? = nil + ) + { + self.value = value + } } -} -struct DescribeBotRecommendationInputBody: Swift.Equatable { } -extension DescribeBotRecommendationInputBody: Swift.Decodable { +extension LexModelsV2ClientTypes.CustomVocabularyEntryId: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case itemId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let itemId = self.itemId { + try encodeContainer.encode(itemId, forKey: .itemId) + } + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let itemIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .itemId) + itemId = itemIdDecoded } } -public enum DescribeBotRecommendationOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) +extension LexModelsV2ClientTypes { + /// The unique entry identifier for the custom vocabulary items. + public struct CustomVocabularyEntryId: Swift.Equatable { + /// The unique item identifier for the custom vocabulary items. + /// This member is required. + public var itemId: Swift.String? + + public init( + itemId: Swift.String? = nil + ) + { + self.itemId = itemId } } + } -extension DescribeBotRecommendationOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: DescribeBotRecommendationOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botRecommendationId = output.botRecommendationId - self.botRecommendationResults = output.botRecommendationResults - self.botRecommendationStatus = output.botRecommendationStatus - self.botVersion = output.botVersion - self.creationDateTime = output.creationDateTime - self.encryptionSetting = output.encryptionSetting - self.failureReasons = output.failureReasons - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.localeId = output.localeId - self.transcriptSourceSetting = output.transcriptSourceSetting - } else { - self.botId = nil - self.botRecommendationId = nil - self.botRecommendationResults = nil - self.botRecommendationStatus = nil - self.botVersion = nil - self.creationDateTime = nil - self.encryptionSetting = nil - self.failureReasons = nil - self.lastUpdatedDateTime = nil - self.localeId = nil - self.transcriptSourceSetting = nil - } +extension LexModelsV2ClientTypes.CustomVocabularyExportSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botId + case botVersion + case localeId } -} -public struct DescribeBotRecommendationOutputResponse: Swift.Equatable { - /// The identifier of the bot associated with the bot recommendation. - public var botId: Swift.String? - /// The identifier of the bot recommendation being described. - public var botRecommendationId: Swift.String? - /// The object representing the URL of the bot definition, the URL of the associated transcript and a statistical summary of the bot recommendation results. - public var botRecommendationResults: LexModelsV2ClientTypes.BotRecommendationResults? - /// The status of the bot recommendation. If the status is Failed, then the reasons for the failure are listed in the failureReasons field. - public var botRecommendationStatus: LexModelsV2ClientTypes.BotRecommendationStatus? - /// The version of the bot associated with the bot recommendation. - public var botVersion: Swift.String? - /// The date and time that the bot recommendation was created. - public var creationDateTime: ClientRuntime.Date? - /// The object representing the passwords that were used to encrypt the data related to the bot recommendation results, as well as the KMS key ARN used to encrypt the associated metadata. - public var encryptionSetting: LexModelsV2ClientTypes.EncryptionSetting? - /// If botRecommendationStatus is Failed, Amazon Lex explains why. - public var failureReasons: [Swift.String]? - /// The date and time that the bot recommendation was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The identifier of the language and locale of the bot recommendation to describe. - public var localeId: Swift.String? - /// The object representing the Amazon S3 bucket containing the transcript, as well as the associated metadata. - public var transcriptSourceSetting: LexModelsV2ClientTypes.TranscriptSourceSetting? + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botId = self.botId { + try encodeContainer.encode(botId, forKey: .botId) + } + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) + } + if let localeId = self.localeId { + try encodeContainer.encode(localeId, forKey: .localeId) + } + } - public init( - botId: Swift.String? = nil, - botRecommendationId: Swift.String? = nil, - botRecommendationResults: LexModelsV2ClientTypes.BotRecommendationResults? = nil, - botRecommendationStatus: LexModelsV2ClientTypes.BotRecommendationStatus? = nil, - botVersion: Swift.String? = nil, - creationDateTime: ClientRuntime.Date? = nil, - encryptionSetting: LexModelsV2ClientTypes.EncryptionSetting? = nil, - failureReasons: [Swift.String]? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - localeId: Swift.String? = nil, - transcriptSourceSetting: LexModelsV2ClientTypes.TranscriptSourceSetting? = nil - ) - { - self.botId = botId - self.botRecommendationId = botRecommendationId - self.botRecommendationResults = botRecommendationResults - self.botRecommendationStatus = botRecommendationStatus - self.botVersion = botVersion - self.creationDateTime = creationDateTime - self.encryptionSetting = encryptionSetting - self.failureReasons = failureReasons - self.lastUpdatedDateTime = lastUpdatedDateTime - self.localeId = localeId - self.transcriptSourceSetting = transcriptSourceSetting + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded } } -struct DescribeBotRecommendationOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let botRecommendationStatus: LexModelsV2ClientTypes.BotRecommendationStatus? - let botRecommendationId: Swift.String? - let failureReasons: [Swift.String]? - let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? - let transcriptSourceSetting: LexModelsV2ClientTypes.TranscriptSourceSetting? - let encryptionSetting: LexModelsV2ClientTypes.EncryptionSetting? - let botRecommendationResults: LexModelsV2ClientTypes.BotRecommendationResults? +extension LexModelsV2ClientTypes { + /// Provides the parameters required for exporting a custom vocabulary. + public struct CustomVocabularyExportSpecification: Swift.Equatable { + /// The identifier of the bot that contains the custom vocabulary to export. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot that contains the custom vocabulary to export. + /// This member is required. + public var botVersion: Swift.String? + /// The locale of the bot that contains the custom vocabulary to export. + /// This member is required. + public var localeId: Swift.String? + + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId + } + } + } -extension DescribeBotRecommendationOutputResponseBody: Swift.Decodable { +extension LexModelsV2ClientTypes.CustomVocabularyImportSpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId - case botRecommendationId - case botRecommendationResults - case botRecommendationStatus case botVersion - case creationDateTime - case encryptionSetting - case failureReasons - case lastUpdatedDateTime case localeId - case transcriptSourceSetting + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botId = self.botId { + try encodeContainer.encode(botId, forKey: .botId) + } + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) + } + if let localeId = self.localeId { + try encodeContainer.encode(localeId, forKey: .localeId) + } } public init(from decoder: Swift.Decoder) throws { @@ -10620,329 +11052,405 @@ extension DescribeBotRecommendationOutputResponseBody: Swift.Decodable { botVersion = botVersionDecoded let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) localeId = localeIdDecoded - let botRecommendationStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotRecommendationStatus.self, forKey: .botRecommendationStatus) - botRecommendationStatus = botRecommendationStatusDecoded - let botRecommendationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botRecommendationId) - botRecommendationId = botRecommendationIdDecoded - let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) - var failureReasonsDecoded0:[Swift.String]? = nil - if let failureReasonsContainer = failureReasonsContainer { - failureReasonsDecoded0 = [Swift.String]() - for string0 in failureReasonsContainer { - if let string0 = string0 { - failureReasonsDecoded0?.append(string0) - } - } - } - failureReasons = failureReasonsDecoded0 - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded - let transcriptSourceSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TranscriptSourceSetting.self, forKey: .transcriptSourceSetting) - transcriptSourceSetting = transcriptSourceSettingDecoded - let encryptionSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.EncryptionSetting.self, forKey: .encryptionSetting) - encryptionSetting = encryptionSettingDecoded - let botRecommendationResultsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotRecommendationResults.self, forKey: .botRecommendationResults) - botRecommendationResults = botRecommendationResultsDecoded - } -} - -extension DescribeBotVersionInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())" } } -public struct DescribeBotVersionInput: Swift.Equatable { - /// The identifier of the bot containing the version to return metadata for. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot to return metadata for. - /// This member is required. - public var botVersion: Swift.String? +extension LexModelsV2ClientTypes { + /// Provides the parameters required for importing a custom vocabulary. + public struct CustomVocabularyImportSpecification: Swift.Equatable { + /// The identifier of the bot to import the custom vocabulary to. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot to import the custom vocabulary to. + /// This member is required. + public var botVersion: Swift.String? + /// The identifier of the local to import the custom vocabulary to. The value must be en_GB. + /// This member is required. + public var localeId: Swift.String? - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil - ) - { - self.botId = botId - self.botVersion = botVersion + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId + } } -} -struct DescribeBotVersionInputBody: Swift.Equatable { } -extension DescribeBotVersionInputBody: Swift.Decodable { - - public init(from decoder: Swift.Decoder) throws { +extension LexModelsV2ClientTypes.CustomVocabularyItem: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case displayAs + case itemId + case phrase + case weight } -} -public enum DescribeBotVersionOutputError: ClientRuntime.HttpResponseErrorBinding { - public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { - let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) - let requestID = httpResponse.requestId - switch restJSONError.errorType { - case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let displayAs = self.displayAs { + try encodeContainer.encode(displayAs, forKey: .displayAs) + } + if let itemId = self.itemId { + try encodeContainer.encode(itemId, forKey: .itemId) + } + if let phrase = self.phrase { + try encodeContainer.encode(phrase, forKey: .phrase) + } + if let weight = self.weight { + try encodeContainer.encode(weight, forKey: .weight) } } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let itemIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .itemId) + itemId = itemIdDecoded + let phraseDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .phrase) + phrase = phraseDecoded + let weightDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .weight) + weight = weightDecoded + let displayAsDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .displayAs) + displayAs = displayAsDecoded + } } -extension DescribeBotVersionOutputResponse: ClientRuntime.HttpResponseBinding { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: DescribeBotVersionOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botMembers = output.botMembers - self.botName = output.botName - self.botStatus = output.botStatus - self.botType = output.botType - self.botVersion = output.botVersion - self.creationDateTime = output.creationDateTime - self.dataPrivacy = output.dataPrivacy - self.description = output.description - self.failureReasons = output.failureReasons - self.idleSessionTTLInSeconds = output.idleSessionTTLInSeconds - self.parentBotNetworks = output.parentBotNetworks - self.roleArn = output.roleArn - } else { - self.botId = nil - self.botMembers = nil - self.botName = nil - self.botStatus = nil - self.botType = nil - self.botVersion = nil - self.creationDateTime = nil - self.dataPrivacy = nil - self.description = nil - self.failureReasons = nil - self.idleSessionTTLInSeconds = nil - self.parentBotNetworks = nil - self.roleArn = nil - } - } -} - -public struct DescribeBotVersionOutputResponse: Swift.Equatable { - /// The identifier of the bot that contains the version. - public var botId: Swift.String? - /// The members of bot network in the version that was described. - public var botMembers: [LexModelsV2ClientTypes.BotMember]? - /// The name of the bot that contains the version. - public var botName: Swift.String? - /// The current status of the bot. When the status is Available, the bot version is ready for use. - public var botStatus: LexModelsV2ClientTypes.BotStatus? - /// The type of the bot in the version that was described. - public var botType: LexModelsV2ClientTypes.BotType? - /// The version of the bot that was described. - public var botVersion: Swift.String? - /// A timestamp of the date and time that the bot version was created. - public var creationDateTime: ClientRuntime.Date? - /// Data privacy settings for the bot version. - public var dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? - /// The description specified for the bot. - public var description: Swift.String? - /// If the botStatus is Failed, this contains a list of reasons that the version couldn't be built. - public var failureReasons: [Swift.String]? - /// The number of seconds that a session with the bot remains active before it is discarded by Amazon Lex. - public var idleSessionTTLInSeconds: Swift.Int? - /// A list of the networks to which the bot version you described belongs. - public var parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? - /// The Amazon Resource Name (ARN) of an IAM role that has permission to access the bot version. - public var roleArn: Swift.String? +extension LexModelsV2ClientTypes { + /// The unique custom vocabulary item from the custom vocabulary list. + public struct CustomVocabularyItem: Swift.Equatable { + /// The DisplayAs value for the custom vocabulary item from the custom vocabulary list. + public var displayAs: Swift.String? + /// The unique item identifer for the custom vocabulary item from the custom vocabulary list. + /// This member is required. + public var itemId: Swift.String? + /// The unique phrase for the custom vocabulary item from the custom vocabulary list. + /// This member is required. + public var phrase: Swift.String? + /// The weight assigned for the custom vocabulary item from the custom vocabulary list. + public var weight: Swift.Int? - public init( - botId: Swift.String? = nil, - botMembers: [LexModelsV2ClientTypes.BotMember]? = nil, - botName: Swift.String? = nil, - botStatus: LexModelsV2ClientTypes.BotStatus? = nil, - botType: LexModelsV2ClientTypes.BotType? = nil, - botVersion: Swift.String? = nil, - creationDateTime: ClientRuntime.Date? = nil, - dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? = nil, - description: Swift.String? = nil, - failureReasons: [Swift.String]? = nil, - idleSessionTTLInSeconds: Swift.Int? = nil, - parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? = nil, - roleArn: Swift.String? = nil - ) - { - self.botId = botId - self.botMembers = botMembers - self.botName = botName - self.botStatus = botStatus - self.botType = botType - self.botVersion = botVersion - self.creationDateTime = creationDateTime - self.dataPrivacy = dataPrivacy - self.description = description - self.failureReasons = failureReasons - self.idleSessionTTLInSeconds = idleSessionTTLInSeconds - self.parentBotNetworks = parentBotNetworks - self.roleArn = roleArn + public init( + displayAs: Swift.String? = nil, + itemId: Swift.String? = nil, + phrase: Swift.String? = nil, + weight: Swift.Int? = nil + ) + { + self.displayAs = displayAs + self.itemId = itemId + self.phrase = phrase + self.weight = weight + } } -} -struct DescribeBotVersionOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botName: Swift.String? - let botVersion: Swift.String? - let description: Swift.String? - let roleArn: Swift.String? - let dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? - let idleSessionTTLInSeconds: Swift.Int? - let botStatus: LexModelsV2ClientTypes.BotStatus? - let failureReasons: [Swift.String]? - let creationDateTime: ClientRuntime.Date? - let parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? - let botType: LexModelsV2ClientTypes.BotType? - let botMembers: [LexModelsV2ClientTypes.BotMember]? } -extension DescribeBotVersionOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botMembers - case botName - case botStatus - case botType - case botVersion - case creationDateTime - case dataPrivacy - case description - case failureReasons - case idleSessionTTLInSeconds - case parentBotNetworks - case roleArn - } +extension LexModelsV2ClientTypes { + public enum CustomVocabularyStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case creating + case deleting + case exporting + case importing + case ready + case sdkUnknown(Swift.String) - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) - botName = botNameDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) - roleArn = roleArnDecoded - let dataPrivacyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DataPrivacy.self, forKey: .dataPrivacy) - dataPrivacy = dataPrivacyDecoded - let idleSessionTTLInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .idleSessionTTLInSeconds) - idleSessionTTLInSeconds = idleSessionTTLInSecondsDecoded - let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) - botStatus = botStatusDecoded - let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) - var failureReasonsDecoded0:[Swift.String]? = nil - if let failureReasonsContainer = failureReasonsContainer { - failureReasonsDecoded0 = [Swift.String]() - for string0 in failureReasonsContainer { - if let string0 = string0 { - failureReasonsDecoded0?.append(string0) - } - } + public static var allCases: [CustomVocabularyStatus] { + return [ + .creating, + .deleting, + .exporting, + .importing, + .ready, + .sdkUnknown("") + ] } - failureReasons = failureReasonsDecoded0 - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let parentBotNetworksContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ParentBotNetwork?].self, forKey: .parentBotNetworks) - var parentBotNetworksDecoded0:[LexModelsV2ClientTypes.ParentBotNetwork]? = nil - if let parentBotNetworksContainer = parentBotNetworksContainer { - parentBotNetworksDecoded0 = [LexModelsV2ClientTypes.ParentBotNetwork]() - for structure0 in parentBotNetworksContainer { - if let structure0 = structure0 { - parentBotNetworksDecoded0?.append(structure0) - } - } + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) } - parentBotNetworks = parentBotNetworksDecoded0 - let botTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotType.self, forKey: .botType) - botType = botTypeDecoded - let botMembersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotMember?].self, forKey: .botMembers) - var botMembersDecoded0:[LexModelsV2ClientTypes.BotMember]? = nil - if let botMembersContainer = botMembersContainer { - botMembersDecoded0 = [LexModelsV2ClientTypes.BotMember]() - for structure0 in botMembersContainer { - if let structure0 = structure0 { - botMembersDecoded0?.append(structure0) - } + public var rawValue: Swift.String { + switch self { + case .creating: return "Creating" + case .deleting: return "Deleting" + case .exporting: return "Exporting" + case .importing: return "Importing" + case .ready: return "Ready" + case let .sdkUnknown(s): return s } } - botMembers = botMembersDecoded0 + public init(from decoder: Swift.Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(RawValue.self) + self = CustomVocabularyStatus(rawValue: rawValue) ?? CustomVocabularyStatus.sdkUnknown(rawValue) + } } } -extension DescribeCustomVocabularyMetadataInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let botId = botId else { - return nil +extension LexModelsV2ClientTypes.DTMFSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case deletionCharacter + case endCharacter + case endTimeoutMs + case maxLength + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let deletionCharacter = self.deletionCharacter { + try encodeContainer.encode(deletionCharacter, forKey: .deletionCharacter) } - guard let botVersion = botVersion else { - return nil + if let endCharacter = self.endCharacter { + try encodeContainer.encode(endCharacter, forKey: .endCharacter) } - guard let localeId = localeId else { - return nil + if let endTimeoutMs = self.endTimeoutMs { + try encodeContainer.encode(endTimeoutMs, forKey: .endTimeoutMs) + } + if let maxLength = self.maxLength { + try encodeContainer.encode(maxLength, forKey: .maxLength) } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary/DEFAULT/metadata" } -} -public struct DescribeCustomVocabularyMetadataInput: Swift.Equatable { - /// The unique identifier of the bot that contains the custom vocabulary. - /// This member is required. - public var botId: Swift.String? - /// The bot version of the bot to return metadata for. + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let maxLengthDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxLength) + maxLength = maxLengthDecoded + let endTimeoutMsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .endTimeoutMs) + endTimeoutMs = endTimeoutMsDecoded + let deletionCharacterDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .deletionCharacter) + deletionCharacter = deletionCharacterDecoded + let endCharacterDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .endCharacter) + endCharacter = endCharacterDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Specifies the DTMF input specifications. + public struct DTMFSpecification: Swift.Equatable { + /// The DTMF character that clears the accumulated DTMF digits and immediately ends the input. + /// This member is required. + public var deletionCharacter: Swift.String? + /// The DTMF character that immediately ends input. If the user does not press this character, the input ends after the end timeout. + /// This member is required. + public var endCharacter: Swift.String? + /// How long the bot should wait after the last DTMF character input before assuming that the input has concluded. + /// This member is required. + public var endTimeoutMs: Swift.Int? + /// The maximum number of DTMF digits allowed in an utterance. + /// This member is required. + public var maxLength: Swift.Int? + + public init( + deletionCharacter: Swift.String? = nil, + endCharacter: Swift.String? = nil, + endTimeoutMs: Swift.Int? = nil, + maxLength: Swift.Int? = nil + ) + { + self.deletionCharacter = deletionCharacter + self.endCharacter = endCharacter + self.endTimeoutMs = endTimeoutMs + self.maxLength = maxLength + } + } + +} + +extension LexModelsV2ClientTypes.DataPrivacy: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case childDirected + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if childDirected != false { + try encodeContainer.encode(childDirected, forKey: .childDirected) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let childDirectedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .childDirected) ?? false + childDirected = childDirectedDecoded + } +} + +extension LexModelsV2ClientTypes { + /// By default, data stored by Amazon Lex is encrypted. The DataPrivacy structure provides settings that determine how Amazon Lex handles special cases of securing the data for your bot. + public struct DataPrivacy: Swift.Equatable { + /// For each Amazon Lex bot created with the Amazon Lex Model Building Service, you must specify whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to the Children's Online Privacy Protection Act (COPPA) by specifying true or false in the childDirected field. By specifying true in the childDirected field, you confirm that your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. By specifying false in the childDirected field, you confirm that your use of Amazon Lex is not related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. You may not specify a default value for the childDirected field that does not accurately reflect whether your use of Amazon Lex is related to a website, program, or other application that is directed or targeted, in whole or in part, to children under age 13 and subject to COPPA. If your use of Amazon Lex relates to a website, program, or other application that is directed in whole or in part, to children under age 13, you must obtain any required verifiable parental consent under COPPA. For information regarding the use of Amazon Lex in connection with websites, programs, or other applications that are directed or targeted, in whole or in part, to children under age 13, see the [Amazon Lex FAQ](http://aws.amazon.com/lex/faqs#data-security). + /// This member is required. + public var childDirected: Swift.Bool + + public init( + childDirected: Swift.Bool = false + ) + { + self.childDirected = childDirected + } + } + +} + +extension LexModelsV2ClientTypes.DateRangeFilter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case endDateTime + case startDateTime + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let endDateTime = self.endDateTime { + try encodeContainer.encodeTimestamp(endDateTime, format: .epochSeconds, forKey: .endDateTime) + } + if let startDateTime = self.startDateTime { + try encodeContainer.encodeTimestamp(startDateTime, format: .epochSeconds, forKey: .startDateTime) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let startDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startDateTime) + startDateTime = startDateTimeDecoded + let endDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endDateTime) + endDateTime = endDateTimeDecoded + } +} + +extension LexModelsV2ClientTypes { + /// The object used for specifying the data range that the customer wants Amazon Lex to read through in the input transcripts. + public struct DateRangeFilter: Swift.Equatable { + /// A timestamp indicating the end date for the date range filter. + /// This member is required. + public var endDateTime: ClientRuntime.Date? + /// A timestamp indicating the start date for the date range filter. + /// This member is required. + public var startDateTime: ClientRuntime.Date? + + public init( + endDateTime: ClientRuntime.Date? = nil, + startDateTime: ClientRuntime.Date? = nil + ) + { + self.endDateTime = endDateTime + self.startDateTime = startDateTime + } + } + +} + +extension LexModelsV2ClientTypes.DefaultConditionalBranch: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextStep + case response + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let nextStep = self.nextStep { + try encodeContainer.encode(nextStep, forKey: .nextStep) + } + if let response = self.response { + try encodeContainer.encode(response, forKey: .response) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .nextStep) + nextStep = nextStepDecoded + let responseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .response) + response = responseDecoded + } +} + +extension LexModelsV2ClientTypes { + /// A set of actions that Amazon Lex should run if none of the other conditions are met. + public struct DefaultConditionalBranch: Swift.Equatable { + /// The next step in the conversation. + public var nextStep: LexModelsV2ClientTypes.DialogState? + /// Specifies a list of message groups that Amazon Lex uses to respond the user input. + public var response: LexModelsV2ClientTypes.ResponseSpecification? + + public init( + nextStep: LexModelsV2ClientTypes.DialogState? = nil, + response: LexModelsV2ClientTypes.ResponseSpecification? = nil + ) + { + self.nextStep = nextStep + self.response = response + } + } + +} + +extension DeleteBotAliasInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let skipResourceInUseCheck = skipResourceInUseCheck { + let skipResourceInUseCheckQueryItem = ClientRuntime.URLQueryItem(name: "skipResourceInUseCheck".urlPercentEncoding(), value: Swift.String(skipResourceInUseCheck).urlPercentEncoding()) + items.append(skipResourceInUseCheckQueryItem) + } + return items + } + } +} + +extension DeleteBotAliasInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil + } + guard let botAliasId = botAliasId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botaliases/\(botAliasId.urlPercentEncoding())" + } +} + +public struct DeleteBotAliasInput: Swift.Equatable { + /// The unique identifier of the bot alias to delete. /// This member is required. - public var botVersion: Swift.String? - /// The locale to return the custom vocabulary information for. The locale must be en_GB. + public var botAliasId: Swift.String? + /// The unique identifier of the bot associated with the alias to delete. /// This member is required. - public var localeId: Swift.String? + public var botId: Swift.String? + /// By default, Amazon Lex checks if any other resource, such as a bot network, is using the bot alias before it is deleted and throws a ResourceInUseException exception if the alias is being used by another resource. Set this parameter to true to skip this check and remove the alias even if it is being used by another resource. + public var skipResourceInUseCheck: Swift.Bool? public init( + botAliasId: Swift.String? = nil, botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - localeId: Swift.String? = nil + skipResourceInUseCheck: Swift.Bool? = nil ) { + self.botAliasId = botAliasId self.botId = botId - self.botVersion = botVersion - self.localeId = localeId + self.skipResourceInUseCheck = skipResourceInUseCheck } } -struct DescribeCustomVocabularyMetadataInputBody: Swift.Equatable { +struct DeleteBotAliasInputBody: Swift.Equatable { } -extension DescribeCustomVocabularyMetadataInputBody: Swift.Decodable { +extension DeleteBotAliasInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DescribeCustomVocabularyMetadataOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DeleteBotAliasOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -10951,134 +11459,170 @@ public enum DescribeCustomVocabularyMetadataOutputError: ClientRuntime.HttpRespo } } -extension DescribeCustomVocabularyMetadataOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteBotAliasOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DescribeCustomVocabularyMetadataOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: DeleteBotAliasOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botAliasId = output.botAliasId + self.botAliasStatus = output.botAliasStatus self.botId = output.botId - self.botVersion = output.botVersion - self.creationDateTime = output.creationDateTime - self.customVocabularyStatus = output.customVocabularyStatus - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.localeId = output.localeId } else { + self.botAliasId = nil + self.botAliasStatus = nil self.botId = nil - self.botVersion = nil - self.creationDateTime = nil - self.customVocabularyStatus = nil - self.lastUpdatedDateTime = nil - self.localeId = nil } } } -public struct DescribeCustomVocabularyMetadataOutputResponse: Swift.Equatable { - /// The identifier of the bot that contains the custom vocabulary. +public struct DeleteBotAliasOutputResponse: Swift.Equatable { + /// The unique identifier of the bot alias to delete. + public var botAliasId: Swift.String? + /// The current status of the alias. The status is Deleting while the alias is in the process of being deleted. Once the alias is deleted, it will no longer appear in the list of aliases returned by the ListBotAliases operation. + public var botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? + /// The unique identifier of the bot that contains the alias to delete. public var botId: Swift.String? - /// The version of the bot that contains the custom vocabulary to describe. - public var botVersion: Swift.String? - /// The date and time that the custom vocabulary was created. - public var creationDateTime: ClientRuntime.Date? - /// The status of the custom vocabulary. If the status is Ready the custom vocabulary is ready to use. - public var customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? - /// The date and time that the custom vocabulary was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The locale that contains the custom vocabulary to describe. - public var localeId: Swift.String? public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - creationDateTime: ClientRuntime.Date? = nil, - customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - localeId: Swift.String? = nil + botAliasId: Swift.String? = nil, + botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? = nil, + botId: Swift.String? = nil ) { + self.botAliasId = botAliasId + self.botAliasStatus = botAliasStatus self.botId = botId - self.botVersion = botVersion - self.creationDateTime = creationDateTime - self.customVocabularyStatus = customVocabularyStatus - self.lastUpdatedDateTime = lastUpdatedDateTime - self.localeId = localeId } } -struct DescribeCustomVocabularyMetadataOutputResponseBody: Swift.Equatable { +struct DeleteBotAliasOutputResponseBody: Swift.Equatable { + let botAliasId: Swift.String? let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? - let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? + let botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? } -extension DescribeCustomVocabularyMetadataOutputResponseBody: Swift.Decodable { +extension DeleteBotAliasOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case botAliasId + case botAliasStatus case botId - case botVersion - case creationDateTime - case customVocabularyStatus - case lastUpdatedDateTime - case localeId } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) + botAliasId = botAliasIdDecoded let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let customVocabularyStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CustomVocabularyStatus.self, forKey: .customVocabularyStatus) - customVocabularyStatus = customVocabularyStatusDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let botAliasStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotAliasStatus.self, forKey: .botAliasStatus) + botAliasStatus = botAliasStatusDecoded } } -extension DescribeExportInput: ClientRuntime.URLPathProvider { +extension DeleteBotInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let skipResourceInUseCheck = skipResourceInUseCheck { + let skipResourceInUseCheckQueryItem = ClientRuntime.URLQueryItem(name: "skipResourceInUseCheck".urlPercentEncoding(), value: Swift.String(skipResourceInUseCheck).urlPercentEncoding()) + items.append(skipResourceInUseCheckQueryItem) + } + return items + } + } +} + +extension DeleteBotInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let exportId = exportId else { + guard let botId = botId else { return nil } - return "/exports/\(exportId.urlPercentEncoding())" + return "/bots/\(botId.urlPercentEncoding())" } } -public struct DescribeExportInput: Swift.Equatable { - /// The unique identifier of the export to describe. +public struct DeleteBotInput: Swift.Equatable { + /// The identifier of the bot to delete. /// This member is required. - public var exportId: Swift.String? + public var botId: Swift.String? + /// By default, Amazon Lex checks if any other resource, such as an alias or bot network, is using the bot version before it is deleted and throws a ResourceInUseException exception if the bot is being used by another resource. Set this parameter to true to skip this check and remove the bot even if it is being used by another resource. + public var skipResourceInUseCheck: Swift.Bool? public init( - exportId: Swift.String? = nil + botId: Swift.String? = nil, + skipResourceInUseCheck: Swift.Bool? = nil ) { - self.exportId = exportId + self.botId = botId + self.skipResourceInUseCheck = skipResourceInUseCheck } } -struct DescribeExportInputBody: Swift.Equatable { +struct DeleteBotInputBody: Swift.Equatable { } -extension DescribeExportInputBody: Swift.Decodable { +extension DeleteBotInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DescribeExportOutputError: ClientRuntime.HttpResponseErrorBinding { +extension DeleteBotLocaleInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil + } + guard let botVersion = botVersion else { + return nil + } + guard let localeId = localeId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())" + } +} + +public struct DeleteBotLocaleInput: Swift.Equatable { + /// The unique identifier of the bot that contains the locale. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot that contains the locale. + /// This member is required. + public var botVersion: Swift.String? + /// The identifier of the language and locale that will be deleted. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? + + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId + } +} + +struct DeleteBotLocaleInputBody: Swift.Equatable { +} + +extension DeleteBotLocaleInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteBotLocaleOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -11086,163 +11630,85 @@ public enum DescribeExportOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DescribeExportOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteBotLocaleOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DescribeExportOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.creationDateTime = output.creationDateTime - self.downloadUrl = output.downloadUrl - self.exportId = output.exportId - self.exportStatus = output.exportStatus - self.failureReasons = output.failureReasons - self.fileFormat = output.fileFormat - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.resourceSpecification = output.resourceSpecification + let output: DeleteBotLocaleOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botLocaleStatus = output.botLocaleStatus + self.botVersion = output.botVersion + self.localeId = output.localeId } else { - self.creationDateTime = nil - self.downloadUrl = nil - self.exportId = nil - self.exportStatus = nil - self.failureReasons = nil - self.fileFormat = nil - self.lastUpdatedDateTime = nil - self.resourceSpecification = nil + self.botId = nil + self.botLocaleStatus = nil + self.botVersion = nil + self.localeId = nil } } } -public struct DescribeExportOutputResponse: Swift.Equatable { - /// The date and time that the export was created. - public var creationDateTime: ClientRuntime.Date? - /// A pre-signed S3 URL that points to the bot or bot locale archive. The URL is only available for 5 minutes after calling the DescribeExport operation. - public var downloadUrl: Swift.String? - /// The unique identifier of the described export. - public var exportId: Swift.String? - /// The status of the export. When the status is Complete the export archive file is available for download. - public var exportStatus: LexModelsV2ClientTypes.ExportStatus? - /// If the exportStatus is failed, contains one or more reasons why the export could not be completed. - public var failureReasons: [Swift.String]? - /// The file format used in the files that describe the resource. - public var fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? - /// The last date and time that the export was updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The bot, bot ID, and optional locale ID of the exported bot or bot locale. - public var resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? +public struct DeleteBotLocaleOutputResponse: Swift.Equatable { + /// The identifier of the bot that contained the deleted locale. + public var botId: Swift.String? + /// The status of deleting the bot locale. The locale first enters the Deleting status. Once the locale is deleted it no longer appears in the list of locales for the bot. + public var botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? + /// The version of the bot that contained the deleted locale. + public var botVersion: Swift.String? + /// The language and locale of the deleted locale. + public var localeId: Swift.String? public init( - creationDateTime: ClientRuntime.Date? = nil, - downloadUrl: Swift.String? = nil, - exportId: Swift.String? = nil, - exportStatus: LexModelsV2ClientTypes.ExportStatus? = nil, - failureReasons: [Swift.String]? = nil, - fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? = nil + botId: Swift.String? = nil, + botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil ) { - self.creationDateTime = creationDateTime - self.downloadUrl = downloadUrl - self.exportId = exportId - self.exportStatus = exportStatus - self.failureReasons = failureReasons - self.fileFormat = fileFormat - self.lastUpdatedDateTime = lastUpdatedDateTime - self.resourceSpecification = resourceSpecification + self.botId = botId + self.botLocaleStatus = botLocaleStatus + self.botVersion = botVersion + self.localeId = localeId } } -struct DescribeExportOutputResponseBody: Swift.Equatable { - let exportId: Swift.String? - let resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? - let fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? - let exportStatus: LexModelsV2ClientTypes.ExportStatus? - let failureReasons: [Swift.String]? - let downloadUrl: Swift.String? - let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? +struct DeleteBotLocaleOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? } -extension DescribeExportOutputResponseBody: Swift.Decodable { +extension DeleteBotLocaleOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case creationDateTime - case downloadUrl - case exportId - case exportStatus - case failureReasons - case fileFormat - case lastUpdatedDateTime - case resourceSpecification + case botId + case botLocaleStatus + case botVersion + case localeId } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let exportIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .exportId) - exportId = exportIdDecoded - let resourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportResourceSpecification.self, forKey: .resourceSpecification) - resourceSpecification = resourceSpecificationDecoded - let fileFormatDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportExportFileFormat.self, forKey: .fileFormat) - fileFormat = fileFormatDecoded - let exportStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportStatus.self, forKey: .exportStatus) - exportStatus = exportStatusDecoded - let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) - var failureReasonsDecoded0:[Swift.String]? = nil - if let failureReasonsContainer = failureReasonsContainer { - failureReasonsDecoded0 = [Swift.String]() - for string0 in failureReasonsContainer { - if let string0 = string0 { - failureReasonsDecoded0?.append(string0) - } - } - } - failureReasons = failureReasonsDecoded0 - let downloadUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .downloadUrl) - downloadUrl = downloadUrlDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded - } -} - -extension DescribeImportInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let importId = importId else { - return nil - } - return "/imports/\(importId.urlPercentEncoding())" - } -} - -public struct DescribeImportInput: Swift.Equatable { - /// The unique identifier of the import to describe. - /// This member is required. - public var importId: Swift.String? - - public init( - importId: Swift.String? = nil - ) - { - self.importId = importId - } -} - -struct DescribeImportInputBody: Swift.Equatable { -} - -extension DescribeImportInputBody: Swift.Decodable { - - public init(from decoder: Swift.Decoder) throws { + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let botLocaleStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleStatus.self, forKey: .botLocaleStatus) + botLocaleStatus = botLocaleStatusDecoded } } -public enum DescribeImportOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DeleteBotOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -11250,136 +11716,70 @@ public enum DescribeImportOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DescribeImportOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteBotOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DescribeImportOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.creationDateTime = output.creationDateTime - self.failureReasons = output.failureReasons - self.importId = output.importId - self.importStatus = output.importStatus - self.importedResourceId = output.importedResourceId - self.importedResourceName = output.importedResourceName - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.mergeStrategy = output.mergeStrategy - self.resourceSpecification = output.resourceSpecification + let output: DeleteBotOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botStatus = output.botStatus } else { - self.creationDateTime = nil - self.failureReasons = nil - self.importId = nil - self.importStatus = nil - self.importedResourceId = nil - self.importedResourceName = nil - self.lastUpdatedDateTime = nil - self.mergeStrategy = nil - self.resourceSpecification = nil + self.botId = nil + self.botStatus = nil } } } -public struct DescribeImportOutputResponse: Swift.Equatable { - /// The date and time that the import was created. - public var creationDateTime: ClientRuntime.Date? - /// If the importStatus field is Failed, this provides one or more reasons for the failure. - public var failureReasons: [Swift.String]? - /// The unique identifier of the described import. - public var importId: Swift.String? - /// The status of the import process. When the status is Completed the resource is imported and ready for use. - public var importStatus: LexModelsV2ClientTypes.ImportStatus? - /// The unique identifier that Amazon Lex assigned to the resource created by the import. - public var importedResourceId: Swift.String? - /// The name of the imported resource. - public var importedResourceName: Swift.String? - /// The date and time that the import was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The strategy used when there was a name conflict between the imported resource and an existing resource. When the merge strategy is FailOnConflict existing resources are not overwritten and the import fails. - public var mergeStrategy: LexModelsV2ClientTypes.MergeStrategy? - /// The specifications of the imported bot, bot locale, or custom vocabulary. - public var resourceSpecification: LexModelsV2ClientTypes.ImportResourceSpecification? +public struct DeleteBotOutputResponse: Swift.Equatable { + /// The unique identifier of the bot that Amazon Lex is deleting. + public var botId: Swift.String? + /// The current status of the bot. The status is Deleting while the bot and its associated resources are being deleted. + public var botStatus: LexModelsV2ClientTypes.BotStatus? public init( - creationDateTime: ClientRuntime.Date? = nil, - failureReasons: [Swift.String]? = nil, - importId: Swift.String? = nil, - importStatus: LexModelsV2ClientTypes.ImportStatus? = nil, - importedResourceId: Swift.String? = nil, - importedResourceName: Swift.String? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - mergeStrategy: LexModelsV2ClientTypes.MergeStrategy? = nil, - resourceSpecification: LexModelsV2ClientTypes.ImportResourceSpecification? = nil + botId: Swift.String? = nil, + botStatus: LexModelsV2ClientTypes.BotStatus? = nil ) { - self.creationDateTime = creationDateTime - self.failureReasons = failureReasons - self.importId = importId - self.importStatus = importStatus - self.importedResourceId = importedResourceId - self.importedResourceName = importedResourceName - self.lastUpdatedDateTime = lastUpdatedDateTime - self.mergeStrategy = mergeStrategy - self.resourceSpecification = resourceSpecification + self.botId = botId + self.botStatus = botStatus } } -struct DescribeImportOutputResponseBody: Swift.Equatable { - let importId: Swift.String? - let resourceSpecification: LexModelsV2ClientTypes.ImportResourceSpecification? - let importedResourceId: Swift.String? - let importedResourceName: Swift.String? - let mergeStrategy: LexModelsV2ClientTypes.MergeStrategy? - let importStatus: LexModelsV2ClientTypes.ImportStatus? - let failureReasons: [Swift.String]? - let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? +struct DeleteBotOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botStatus: LexModelsV2ClientTypes.BotStatus? } -extension DescribeImportOutputResponseBody: Swift.Decodable { +extension DeleteBotOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case creationDateTime - case failureReasons - case importId - case importStatus - case importedResourceId - case importedResourceName - case lastUpdatedDateTime - case mergeStrategy - case resourceSpecification + case botId + case botStatus } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let importIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importId) - importId = importIdDecoded - let resourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportResourceSpecification.self, forKey: .resourceSpecification) - resourceSpecification = resourceSpecificationDecoded - let importedResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importedResourceId) - importedResourceId = importedResourceIdDecoded - let importedResourceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importedResourceName) - importedResourceName = importedResourceNameDecoded - let mergeStrategyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.MergeStrategy.self, forKey: .mergeStrategy) - mergeStrategy = mergeStrategyDecoded - let importStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportStatus.self, forKey: .importStatus) - importStatus = importStatusDecoded - let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) - var failureReasonsDecoded0:[Swift.String]? = nil - if let failureReasonsContainer = failureReasonsContainer { - failureReasonsDecoded0 = [Swift.String]() - for string0 in failureReasonsContainer { - if let string0 = string0 { - failureReasonsDecoded0?.append(string0) - } + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) + botStatus = botStatusDecoded + } +} + +extension DeleteBotVersionInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let skipResourceInUseCheck = skipResourceInUseCheck { + let skipResourceInUseCheckQueryItem = ClientRuntime.URLQueryItem(name: "skipResourceInUseCheck".urlPercentEncoding(), value: Swift.String(skipResourceInUseCheck).urlPercentEncoding()) + items.append(skipResourceInUseCheckQueryItem) } + return items } - failureReasons = failureReasonsDecoded0 - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded } } -extension DescribeIntentInput: ClientRuntime.URLPathProvider { +extension DeleteBotVersionInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil @@ -11387,60 +11787,49 @@ extension DescribeIntentInput: ClientRuntime.URLPathProvider { guard let botVersion = botVersion else { return nil } - guard let localeId = localeId else { - return nil - } - guard let intentId = intentId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())" + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())" } } -public struct DescribeIntentInput: Swift.Equatable { - /// The identifier of the bot associated with the intent. +public struct DeleteBotVersionInput: Swift.Equatable { + /// The identifier of the bot that contains the version. /// This member is required. public var botId: Swift.String? - /// The version of the bot associated with the intent. + /// The version of the bot to delete. /// This member is required. public var botVersion: Swift.String? - /// The identifier of the intent to describe. - /// This member is required. - public var intentId: Swift.String? - /// The identifier of the language and locale of the intent to describe. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? + /// By default, Amazon Lex checks if any other resource, such as an alias or bot network, is using the bot version before it is deleted and throws a ResourceInUseException exception if the version is being used by another resource. Set this parameter to true to skip this check and remove the version even if it is being used by another resource. + public var skipResourceInUseCheck: Swift.Bool? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, - intentId: Swift.String? = nil, - localeId: Swift.String? = nil + skipResourceInUseCheck: Swift.Bool? = nil ) { self.botId = botId self.botVersion = botVersion - self.intentId = intentId - self.localeId = localeId + self.skipResourceInUseCheck = skipResourceInUseCheck } } -struct DescribeIntentInputBody: Swift.Equatable { +struct DeleteBotVersionInputBody: Swift.Equatable { } -extension DescribeIntentInputBody: Swift.Decodable { +extension DeleteBotVersionInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DescribeIntentOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DeleteBotVersionOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -11449,436 +11838,237 @@ public enum DescribeIntentOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DescribeIntentOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteBotVersionOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DescribeIntentOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: DeleteBotVersionOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId + self.botStatus = output.botStatus self.botVersion = output.botVersion - self.creationDateTime = output.creationDateTime - self.description = output.description - self.dialogCodeHook = output.dialogCodeHook - self.fulfillmentCodeHook = output.fulfillmentCodeHook - self.initialResponseSetting = output.initialResponseSetting - self.inputContexts = output.inputContexts - self.intentClosingSetting = output.intentClosingSetting - self.intentConfirmationSetting = output.intentConfirmationSetting - self.intentId = output.intentId - self.intentName = output.intentName - self.kendraConfiguration = output.kendraConfiguration - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.localeId = output.localeId - self.outputContexts = output.outputContexts - self.parentIntentSignature = output.parentIntentSignature - self.sampleUtterances = output.sampleUtterances - self.slotPriorities = output.slotPriorities } else { self.botId = nil + self.botStatus = nil self.botVersion = nil - self.creationDateTime = nil - self.description = nil - self.dialogCodeHook = nil - self.fulfillmentCodeHook = nil - self.initialResponseSetting = nil - self.inputContexts = nil - self.intentClosingSetting = nil - self.intentConfirmationSetting = nil - self.intentId = nil - self.intentName = nil - self.kendraConfiguration = nil - self.lastUpdatedDateTime = nil - self.localeId = nil - self.outputContexts = nil - self.parentIntentSignature = nil - self.sampleUtterances = nil - self.slotPriorities = nil } } } -public struct DescribeIntentOutputResponse: Swift.Equatable { - /// The identifier of the bot associated with the intent. +public struct DeleteBotVersionOutputResponse: Swift.Equatable { + /// The identifier of the bot that is being deleted. public var botId: Swift.String? - /// The version of the bot associated with the intent. + /// The current status of the bot. + public var botStatus: LexModelsV2ClientTypes.BotStatus? + /// The version of the bot that is being deleted. public var botVersion: Swift.String? - /// A timestamp of the date and time that the intent was created. - public var creationDateTime: ClientRuntime.Date? - /// The description of the intent. - public var description: Swift.String? - /// The Lambda function called during each turn of a conversation with the intent. - public var dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? - /// The Lambda function called when the intent is complete and ready for fulfillment. - public var fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? - /// Configuration setting for a response sent to the user before Amazon Lex starts eliciting slots. - public var initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? - /// A list of contexts that must be active for the intent to be considered for sending to the user. - public var inputContexts: [LexModelsV2ClientTypes.InputContext]? - /// The response that Amazon Lex sends to when the intent is closed. - public var intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? - /// Prompts that Amazon Lex sends to the user to confirm completion of an intent. - public var intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? - /// The unique identifier assigned to the intent when it was created. - public var intentId: Swift.String? - /// The name specified for the intent. - public var intentName: Swift.String? - /// Configuration information required to use the AMAZON.KendraSearchIntent intent. - public var kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? - /// A timestamp of the date and time that the intent was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The language and locale specified for the intent. - public var localeId: Swift.String? - /// A list of contexts that are activated when the intent is fulfilled. - public var outputContexts: [LexModelsV2ClientTypes.OutputContext]? - /// The identifier of the built-in intent that this intent is derived from, if any. - public var parentIntentSignature: Swift.String? - /// User utterances that trigger this intent. - public var sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? - /// The list that determines the priority that slots should be elicited from the user. - public var slotPriorities: [LexModelsV2ClientTypes.SlotPriority]? public init( botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? = nil, - fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? = nil, - initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? = nil, - inputContexts: [LexModelsV2ClientTypes.InputContext]? = nil, - intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? = nil, - intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? = nil, - intentId: Swift.String? = nil, - intentName: Swift.String? = nil, - kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - localeId: Swift.String? = nil, - outputContexts: [LexModelsV2ClientTypes.OutputContext]? = nil, - parentIntentSignature: Swift.String? = nil, - sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? = nil, - slotPriorities: [LexModelsV2ClientTypes.SlotPriority]? = nil + botStatus: LexModelsV2ClientTypes.BotStatus? = nil, + botVersion: Swift.String? = nil ) { self.botId = botId + self.botStatus = botStatus self.botVersion = botVersion - self.creationDateTime = creationDateTime - self.description = description - self.dialogCodeHook = dialogCodeHook - self.fulfillmentCodeHook = fulfillmentCodeHook - self.initialResponseSetting = initialResponseSetting - self.inputContexts = inputContexts - self.intentClosingSetting = intentClosingSetting - self.intentConfirmationSetting = intentConfirmationSetting - self.intentId = intentId - self.intentName = intentName - self.kendraConfiguration = kendraConfiguration - self.lastUpdatedDateTime = lastUpdatedDateTime - self.localeId = localeId - self.outputContexts = outputContexts - self.parentIntentSignature = parentIntentSignature - self.sampleUtterances = sampleUtterances - self.slotPriorities = slotPriorities } } -struct DescribeIntentOutputResponseBody: Swift.Equatable { - let intentId: Swift.String? - let intentName: Swift.String? - let description: Swift.String? - let parentIntentSignature: Swift.String? - let sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? - let dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? - let fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? - let slotPriorities: [LexModelsV2ClientTypes.SlotPriority]? - let intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? - let intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? - let inputContexts: [LexModelsV2ClientTypes.InputContext]? - let outputContexts: [LexModelsV2ClientTypes.OutputContext]? - let kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? +struct DeleteBotVersionOutputResponseBody: Swift.Equatable { let botId: Swift.String? let botVersion: Swift.String? - let localeId: Swift.String? - let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? - let initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? + let botStatus: LexModelsV2ClientTypes.BotStatus? } -extension DescribeIntentOutputResponseBody: Swift.Decodable { +extension DeleteBotVersionOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId + case botStatus case botVersion - case creationDateTime - case description - case dialogCodeHook - case fulfillmentCodeHook - case initialResponseSetting - case inputContexts - case intentClosingSetting - case intentConfirmationSetting - case intentId - case intentName - case kendraConfiguration - case lastUpdatedDateTime - case localeId - case outputContexts - case parentIntentSignature - case sampleUtterances - case slotPriorities } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) - intentId = intentIdDecoded - let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) - intentName = intentNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let parentIntentSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentIntentSignature) - parentIntentSignature = parentIntentSignatureDecoded - let sampleUtterancesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SampleUtterance?].self, forKey: .sampleUtterances) - var sampleUtterancesDecoded0:[LexModelsV2ClientTypes.SampleUtterance]? = nil - if let sampleUtterancesContainer = sampleUtterancesContainer { - sampleUtterancesDecoded0 = [LexModelsV2ClientTypes.SampleUtterance]() - for structure0 in sampleUtterancesContainer { - if let structure0 = structure0 { - sampleUtterancesDecoded0?.append(structure0) - } - } - } - sampleUtterances = sampleUtterancesDecoded0 - let dialogCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogCodeHookSettings.self, forKey: .dialogCodeHook) - dialogCodeHook = dialogCodeHookDecoded - let fulfillmentCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentCodeHookSettings.self, forKey: .fulfillmentCodeHook) - fulfillmentCodeHook = fulfillmentCodeHookDecoded - let slotPrioritiesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotPriority?].self, forKey: .slotPriorities) - var slotPrioritiesDecoded0:[LexModelsV2ClientTypes.SlotPriority]? = nil - if let slotPrioritiesContainer = slotPrioritiesContainer { - slotPrioritiesDecoded0 = [LexModelsV2ClientTypes.SlotPriority]() - for structure0 in slotPrioritiesContainer { - if let structure0 = structure0 { - slotPrioritiesDecoded0?.append(structure0) - } - } - } - slotPriorities = slotPrioritiesDecoded0 - let intentConfirmationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentConfirmationSetting.self, forKey: .intentConfirmationSetting) - intentConfirmationSetting = intentConfirmationSettingDecoded - let intentClosingSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentClosingSetting.self, forKey: .intentClosingSetting) - intentClosingSetting = intentClosingSettingDecoded - let inputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.InputContext?].self, forKey: .inputContexts) - var inputContextsDecoded0:[LexModelsV2ClientTypes.InputContext]? = nil - if let inputContextsContainer = inputContextsContainer { - inputContextsDecoded0 = [LexModelsV2ClientTypes.InputContext]() - for structure0 in inputContextsContainer { - if let structure0 = structure0 { - inputContextsDecoded0?.append(structure0) - } - } - } - inputContexts = inputContextsDecoded0 - let outputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.OutputContext?].self, forKey: .outputContexts) - var outputContextsDecoded0:[LexModelsV2ClientTypes.OutputContext]? = nil - if let outputContextsContainer = outputContextsContainer { - outputContextsDecoded0 = [LexModelsV2ClientTypes.OutputContext]() - for structure0 in outputContextsContainer { - if let structure0 = structure0 { - outputContextsDecoded0?.append(structure0) - } - } - } - outputContexts = outputContextsDecoded0 - let kendraConfigurationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.KendraConfiguration.self, forKey: .kendraConfiguration) - kendraConfiguration = kendraConfigurationDecoded let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) botId = botIdDecoded let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded - let initialResponseSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.InitialResponseSetting.self, forKey: .initialResponseSetting) - initialResponseSetting = initialResponseSettingDecoded + let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) + botStatus = botStatusDecoded } } -extension DescribeResourcePolicyInput: ClientRuntime.URLPathProvider { +extension DeleteCustomVocabularyInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let resourceArn = resourceArn else { + guard let botId = botId else { return nil } - return "/policy/\(resourceArn.urlPercentEncoding())" + guard let botVersion = botVersion else { + return nil + } + guard let localeId = localeId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary" } } -public struct DescribeResourcePolicyInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to. +public struct DeleteCustomVocabularyInput: Swift.Equatable { + /// The unique identifier of the bot to remove the custom vocabulary from. /// This member is required. - public var resourceArn: Swift.String? + public var botId: Swift.String? + /// The version of the bot to remove the custom vocabulary from. + /// This member is required. + public var botVersion: Swift.String? + /// The locale identifier for the locale that contains the custom vocabulary to remove. + /// This member is required. + public var localeId: Swift.String? public init( - resourceArn: Swift.String? = nil + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil ) { - self.resourceArn = resourceArn + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId } } -struct DescribeResourcePolicyInputBody: Swift.Equatable { +struct DeleteCustomVocabularyInputBody: Swift.Equatable { } -extension DescribeResourcePolicyInputBody: Swift.Decodable { +extension DeleteCustomVocabularyInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DescribeResourcePolicyOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DeleteCustomVocabularyOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } } -extension DescribeResourcePolicyOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteCustomVocabularyOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DescribeResourcePolicyOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.policy = output.policy - self.resourceArn = output.resourceArn - self.revisionId = output.revisionId + let output: DeleteCustomVocabularyOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botVersion = output.botVersion + self.customVocabularyStatus = output.customVocabularyStatus + self.localeId = output.localeId } else { - self.policy = nil - self.resourceArn = nil - self.revisionId = nil + self.botId = nil + self.botVersion = nil + self.customVocabularyStatus = nil + self.localeId = nil } } } -public struct DescribeResourcePolicyOutputResponse: Swift.Equatable { - /// The JSON structure that contains the resource policy. For more information about the contents of a JSON policy document, see [ IAM JSON policy reference ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html). - public var policy: Swift.String? - /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to. - public var resourceArn: Swift.String? - /// The current revision of the resource policy. Use the revision ID to make sure that you are updating the most current version of a resource policy when you add a policy statement to a resource, delete a resource, or update a resource. - public var revisionId: Swift.String? +public struct DeleteCustomVocabularyOutputResponse: Swift.Equatable { + /// The identifier of the bot that the custom vocabulary was removed from. + public var botId: Swift.String? + /// The version of the bot that the custom vocabulary was removed from. + public var botVersion: Swift.String? + /// The status of removing the custom vocabulary. + public var customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? + /// The locale identifier for the locale that the custom vocabulary was removed from. + public var localeId: Swift.String? public init( - policy: Swift.String? = nil, - resourceArn: Swift.String? = nil, - revisionId: Swift.String? = nil + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? = nil, + localeId: Swift.String? = nil ) { - self.policy = policy - self.resourceArn = resourceArn - self.revisionId = revisionId + self.botId = botId + self.botVersion = botVersion + self.customVocabularyStatus = customVocabularyStatus + self.localeId = localeId } } -struct DescribeResourcePolicyOutputResponseBody: Swift.Equatable { - let resourceArn: Swift.String? - let policy: Swift.String? - let revisionId: Swift.String? +struct DeleteCustomVocabularyOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? } -extension DescribeResourcePolicyOutputResponseBody: Swift.Decodable { +extension DeleteCustomVocabularyOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case policy - case resourceArn - case revisionId + case botId + case botVersion + case customVocabularyStatus + case localeId } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) - resourceArn = resourceArnDecoded - let policyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .policy) - policy = policyDecoded - let revisionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .revisionId) - revisionId = revisionIdDecoded + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let customVocabularyStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CustomVocabularyStatus.self, forKey: .customVocabularyStatus) + customVocabularyStatus = customVocabularyStatusDecoded } } -extension DescribeSlotInput: ClientRuntime.URLPathProvider { +extension DeleteExportInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil - } - guard let localeId = localeId else { - return nil - } - guard let intentId = intentId else { - return nil - } - guard let slotId = slotId else { + guard let exportId = exportId else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())/slots/\(slotId.urlPercentEncoding())" + return "/exports/\(exportId.urlPercentEncoding())" } } -public struct DescribeSlotInput: Swift.Equatable { - /// The identifier of the bot associated with the slot. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot associated with the slot. - /// This member is required. - public var botVersion: Swift.String? - /// The identifier of the intent that contains the slot. - /// This member is required. - public var intentId: Swift.String? - /// The identifier of the language and locale of the slot to describe. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? - /// The unique identifier for the slot. +public struct DeleteExportInput: Swift.Equatable { + /// The unique identifier of the export to delete. /// This member is required. - public var slotId: Swift.String? + public var exportId: Swift.String? public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - intentId: Swift.String? = nil, - localeId: Swift.String? = nil, - slotId: Swift.String? = nil + exportId: Swift.String? = nil ) { - self.botId = botId - self.botVersion = botVersion - self.intentId = intentId - self.localeId = localeId - self.slotId = slotId + self.exportId = exportId } } -struct DescribeSlotInputBody: Swift.Equatable { +struct DeleteExportInputBody: Swift.Equatable { } -extension DescribeSlotInputBody: Swift.Decodable { +extension DeleteExportInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DescribeSlotOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DeleteExportOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -11887,177 +12077,153 @@ public enum DescribeSlotOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DescribeSlotOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteExportOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DescribeSlotOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botVersion = output.botVersion - self.creationDateTime = output.creationDateTime - self.description = output.description - self.intentId = output.intentId - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.localeId = output.localeId - self.multipleValuesSetting = output.multipleValuesSetting - self.obfuscationSetting = output.obfuscationSetting - self.slotId = output.slotId - self.slotName = output.slotName - self.slotTypeId = output.slotTypeId - self.subSlotSetting = output.subSlotSetting - self.valueElicitationSetting = output.valueElicitationSetting + let output: DeleteExportOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.exportId = output.exportId + self.exportStatus = output.exportStatus } else { - self.botId = nil - self.botVersion = nil - self.creationDateTime = nil - self.description = nil - self.intentId = nil - self.lastUpdatedDateTime = nil - self.localeId = nil - self.multipleValuesSetting = nil - self.obfuscationSetting = nil - self.slotId = nil - self.slotName = nil - self.slotTypeId = nil - self.subSlotSetting = nil - self.valueElicitationSetting = nil + self.exportId = nil + self.exportStatus = nil } } } -public struct DescribeSlotOutputResponse: Swift.Equatable { - /// The identifier of the bot associated with the slot. - public var botId: Swift.String? - /// The version of the bot associated with the slot. - public var botVersion: Swift.String? - /// A timestamp of the date and time that the slot was created. - public var creationDateTime: ClientRuntime.Date? - /// The description specified for the slot. - public var description: Swift.String? - /// The identifier of the intent associated with the slot. - public var intentId: Swift.String? - /// A timestamp of the date and time that the slot was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The language and locale specified for the slot. - public var localeId: Swift.String? - /// Indicates whether the slot accepts multiple values in a single utterance. If the multipleValuesSetting is not set, the default value is false. - public var multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? - /// Whether slot values are shown in Amazon CloudWatch logs. If the value is None, the actual value of the slot is shown in logs. - public var obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? - /// The unique identifier generated for the slot. - public var slotId: Swift.String? - /// The name specified for the slot. - public var slotName: Swift.String? - /// The identifier of the slot type that determines the values entered into the slot. - public var slotTypeId: Swift.String? - /// Specifications for the constituent sub slots and the expression for the composite slot. - public var subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? - /// Prompts that Amazon Lex uses to elicit a value for the slot. - public var valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? +public struct DeleteExportOutputResponse: Swift.Equatable { + /// The unique identifier of the deleted export. + public var exportId: Swift.String? + /// The current status of the deletion. When the deletion is complete, the export will no longer be returned by the [ListExports](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListExports.html) operation and calls to the [ DescribeExport](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeExport.html) operation with the export identifier will fail. + public var exportStatus: LexModelsV2ClientTypes.ExportStatus? public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - intentId: Swift.String? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - localeId: Swift.String? = nil, - multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? = nil, - obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? = nil, - slotId: Swift.String? = nil, - slotName: Swift.String? = nil, - slotTypeId: Swift.String? = nil, - subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? = nil, - valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? = nil + exportId: Swift.String? = nil, + exportStatus: LexModelsV2ClientTypes.ExportStatus? = nil ) { - self.botId = botId - self.botVersion = botVersion - self.creationDateTime = creationDateTime - self.description = description - self.intentId = intentId - self.lastUpdatedDateTime = lastUpdatedDateTime - self.localeId = localeId - self.multipleValuesSetting = multipleValuesSetting - self.obfuscationSetting = obfuscationSetting - self.slotId = slotId - self.slotName = slotName - self.slotTypeId = slotTypeId - self.subSlotSetting = subSlotSetting - self.valueElicitationSetting = valueElicitationSetting + self.exportId = exportId + self.exportStatus = exportStatus } } -struct DescribeSlotOutputResponseBody: Swift.Equatable { - let slotId: Swift.String? - let slotName: Swift.String? - let description: Swift.String? - let slotTypeId: Swift.String? - let valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? - let obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let intentId: Swift.String? - let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? - let multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? - let subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? +struct DeleteExportOutputResponseBody: Swift.Equatable { + let exportId: Swift.String? + let exportStatus: LexModelsV2ClientTypes.ExportStatus? } -extension DescribeSlotOutputResponseBody: Swift.Decodable { +extension DeleteExportOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case creationDateTime - case description - case intentId - case lastUpdatedDateTime - case localeId - case multipleValuesSetting - case obfuscationSetting - case slotId - case slotName - case slotTypeId - case subSlotSetting - case valueElicitationSetting + case exportId + case exportStatus } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let slotIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotId) - slotId = slotIdDecoded - let slotNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotName) - slotName = slotNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let slotTypeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeId) - slotTypeId = slotTypeIdDecoded - let valueElicitationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueElicitationSetting.self, forKey: .valueElicitationSetting) - valueElicitationSetting = valueElicitationSettingDecoded - let obfuscationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ObfuscationSetting.self, forKey: .obfuscationSetting) - obfuscationSetting = obfuscationSettingDecoded - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) - intentId = intentIdDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded - let multipleValuesSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.MultipleValuesSetting.self, forKey: .multipleValuesSetting) - multipleValuesSetting = multipleValuesSettingDecoded - let subSlotSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SubSlotSetting.self, forKey: .subSlotSetting) - subSlotSetting = subSlotSettingDecoded + let exportIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .exportId) + exportId = exportIdDecoded + let exportStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportStatus.self, forKey: .exportStatus) + exportStatus = exportStatusDecoded } } -extension DescribeSlotTypeInput: ClientRuntime.URLPathProvider { +extension DeleteImportInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let importId = importId else { + return nil + } + return "/imports/\(importId.urlPercentEncoding())" + } +} + +public struct DeleteImportInput: Swift.Equatable { + /// The unique identifier of the import to delete. + /// This member is required. + public var importId: Swift.String? + + public init( + importId: Swift.String? = nil + ) + { + self.importId = importId + } +} + +struct DeleteImportInputBody: Swift.Equatable { +} + +extension DeleteImportInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteImportOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteImportOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DeleteImportOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.importId = output.importId + self.importStatus = output.importStatus + } else { + self.importId = nil + self.importStatus = nil + } + } +} + +public struct DeleteImportOutputResponse: Swift.Equatable { + /// The unique identifier of the deleted import. + public var importId: Swift.String? + /// The current status of the deletion. When the deletion is complete, the import will no longer be returned by the [ListImports](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListImports.html) operation and calls to the [DescribeImport](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_DescribeImport.html) operation with the import identifier will fail. + public var importStatus: LexModelsV2ClientTypes.ImportStatus? + + public init( + importId: Swift.String? = nil, + importStatus: LexModelsV2ClientTypes.ImportStatus? = nil + ) + { + self.importId = importId + self.importStatus = importStatus + } +} + +struct DeleteImportOutputResponseBody: Swift.Equatable { + let importId: Swift.String? + let importStatus: LexModelsV2ClientTypes.ImportStatus? +} + +extension DeleteImportOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case importId + case importStatus + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let importIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importId) + importId = importIdDecoded + let importStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportStatus.self, forKey: .importStatus) + importStatus = importStatusDecoded + } +} + +extension DeleteIntentInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil @@ -12068,57 +12234,58 @@ extension DescribeSlotTypeInput: ClientRuntime.URLPathProvider { guard let localeId = localeId else { return nil } - guard let slotTypeId = slotTypeId else { + guard let intentId = intentId else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/slottypes/\(slotTypeId.urlPercentEncoding())" + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())" } } -public struct DescribeSlotTypeInput: Swift.Equatable { - /// The identifier of the bot associated with the slot type. +public struct DeleteIntentInput: Swift.Equatable { + /// The identifier of the bot associated with the intent. /// This member is required. public var botId: Swift.String? - /// The version of the bot associated with the slot type. + /// The version of the bot associated with the intent. /// This member is required. public var botVersion: Swift.String? - /// The identifier of the language and locale of the slot type to describe. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// The unique identifier of the intent to delete. /// This member is required. - public var localeId: Swift.String? - /// The identifier of the slot type. + public var intentId: Swift.String? + /// The identifier of the language and locale where the bot will be deleted. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). /// This member is required. - public var slotTypeId: Swift.String? + public var localeId: Swift.String? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, - localeId: Swift.String? = nil, - slotTypeId: Swift.String? = nil + intentId: Swift.String? = nil, + localeId: Swift.String? = nil ) { self.botId = botId self.botVersion = botVersion + self.intentId = intentId self.localeId = localeId - self.slotTypeId = slotTypeId } } -struct DescribeSlotTypeInputBody: Swift.Equatable { +struct DeleteIntentInputBody: Swift.Equatable { } -extension DescribeSlotTypeInputBody: Swift.Decodable { +extension DeleteIntentInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DescribeSlotTypeOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DeleteIntentOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -12127,573 +12294,319 @@ public enum DescribeSlotTypeOutputError: ClientRuntime.HttpResponseErrorBinding } } -extension DescribeSlotTypeOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteIntentOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: DescribeSlotTypeOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botVersion = output.botVersion - self.compositeSlotTypeSetting = output.compositeSlotTypeSetting - self.creationDateTime = output.creationDateTime - self.description = output.description - self.externalSourceSetting = output.externalSourceSetting - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.localeId = output.localeId - self.parentSlotTypeSignature = output.parentSlotTypeSignature - self.slotTypeId = output.slotTypeId - self.slotTypeName = output.slotTypeName - self.slotTypeValues = output.slotTypeValues - self.valueSelectionSetting = output.valueSelectionSetting - } else { - self.botId = nil - self.botVersion = nil - self.compositeSlotTypeSetting = nil - self.creationDateTime = nil - self.description = nil - self.externalSourceSetting = nil - self.lastUpdatedDateTime = nil - self.localeId = nil - self.parentSlotTypeSignature = nil - self.slotTypeId = nil - self.slotTypeName = nil - self.slotTypeValues = nil - self.valueSelectionSetting = nil - } } } -public struct DescribeSlotTypeOutputResponse: Swift.Equatable { - /// The identifier of the bot associated with the slot type. - public var botId: Swift.String? - /// The version of the bot associated with the slot type. - public var botVersion: Swift.String? - /// Specifications for a composite slot type. - public var compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? - /// A timestamp of the date and time that the slot type was created. - public var creationDateTime: ClientRuntime.Date? - /// The description specified for the slot type. - public var description: Swift.String? - /// Provides information about the external source of the slot type's definition. - public var externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? - /// A timestamp of the date and time that the slot type was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The language and locale specified for the slot type. - public var localeId: Swift.String? - /// The built in slot type used as a parent to this slot type. - public var parentSlotTypeSignature: Swift.String? - /// The unique identifier for the slot type. - public var slotTypeId: Swift.String? - /// The name specified for the slot type. - public var slotTypeName: Swift.String? - /// The values that the slot type can take. Includes any synonyms for the slot type values. - public var slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? - /// The strategy that Amazon Lex uses to choose a value from a list of possible values. - public var valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? +public struct DeleteIntentOutputResponse: Swift.Equatable { - public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? = nil, - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - localeId: Swift.String? = nil, - parentSlotTypeSignature: Swift.String? = nil, - slotTypeId: Swift.String? = nil, - slotTypeName: Swift.String? = nil, - slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? = nil, - valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? = nil - ) - { - self.botId = botId - self.botVersion = botVersion - self.compositeSlotTypeSetting = compositeSlotTypeSetting - self.creationDateTime = creationDateTime - self.description = description - self.externalSourceSetting = externalSourceSetting - self.lastUpdatedDateTime = lastUpdatedDateTime - self.localeId = localeId - self.parentSlotTypeSignature = parentSlotTypeSignature - self.slotTypeId = slotTypeId - self.slotTypeName = slotTypeName - self.slotTypeValues = slotTypeValues - self.valueSelectionSetting = valueSelectionSetting - } -} - -struct DescribeSlotTypeOutputResponseBody: Swift.Equatable { - let slotTypeId: Swift.String? - let slotTypeName: Swift.String? - let description: Swift.String? - let slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? - let valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? - let parentSlotTypeSignature: Swift.String? - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? - let externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? - let compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? + public init() { } } -extension DescribeSlotTypeOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case compositeSlotTypeSetting - case creationDateTime - case description - case externalSourceSetting - case lastUpdatedDateTime - case localeId - case parentSlotTypeSignature - case slotTypeId - case slotTypeName - case slotTypeValues - case valueSelectionSetting - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let slotTypeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeId) - slotTypeId = slotTypeIdDecoded - let slotTypeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeName) - slotTypeName = slotTypeNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let slotTypeValuesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotTypeValue?].self, forKey: .slotTypeValues) - var slotTypeValuesDecoded0:[LexModelsV2ClientTypes.SlotTypeValue]? = nil - if let slotTypeValuesContainer = slotTypeValuesContainer { - slotTypeValuesDecoded0 = [LexModelsV2ClientTypes.SlotTypeValue]() - for structure0 in slotTypeValuesContainer { - if let structure0 = structure0 { - slotTypeValuesDecoded0?.append(structure0) - } +extension DeleteResourcePolicyInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let expectedRevisionId = expectedRevisionId { + let expectedRevisionIdQueryItem = ClientRuntime.URLQueryItem(name: "expectedRevisionId".urlPercentEncoding(), value: Swift.String(expectedRevisionId).urlPercentEncoding()) + items.append(expectedRevisionIdQueryItem) } + return items } - slotTypeValues = slotTypeValuesDecoded0 - let valueSelectionSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueSelectionSetting.self, forKey: .valueSelectionSetting) - valueSelectionSetting = valueSelectionSettingDecoded - let parentSlotTypeSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentSlotTypeSignature) - parentSlotTypeSignature = parentSlotTypeSignatureDecoded - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded - let externalSourceSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExternalSourceSetting.self, forKey: .externalSourceSetting) - externalSourceSetting = externalSourceSettingDecoded - let compositeSlotTypeSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CompositeSlotTypeSetting.self, forKey: .compositeSlotTypeSetting) - compositeSlotTypeSetting = compositeSlotTypeSettingDecoded } } -extension DescribeTestExecutionInput: ClientRuntime.URLPathProvider { +extension DeleteResourcePolicyInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let testExecutionId = testExecutionId else { + guard let resourceArn = resourceArn else { return nil } - return "/testexecutions/\(testExecutionId.urlPercentEncoding())" + return "/policy/\(resourceArn.urlPercentEncoding())" } } -public struct DescribeTestExecutionInput: Swift.Equatable { - /// The execution Id of the test set execution. +public struct DeleteResourcePolicyInput: Swift.Equatable { + /// The identifier of the revision to edit. If this ID doesn't match the current revision number, Amazon Lex returns an exception If you don't specify a revision ID, Amazon Lex will delete the current policy. + public var expectedRevisionId: Swift.String? + /// The Amazon Resource Name (ARN) of the bot or bot alias that has the resource policy attached. /// This member is required. - public var testExecutionId: Swift.String? + public var resourceArn: Swift.String? public init( - testExecutionId: Swift.String? = nil + expectedRevisionId: Swift.String? = nil, + resourceArn: Swift.String? = nil ) { - self.testExecutionId = testExecutionId + self.expectedRevisionId = expectedRevisionId + self.resourceArn = resourceArn } } -struct DescribeTestExecutionInputBody: Swift.Equatable { +struct DeleteResourcePolicyInputBody: Swift.Equatable { } -extension DescribeTestExecutionInputBody: Swift.Decodable { +extension DeleteResourcePolicyInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DescribeTestExecutionOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DeleteResourcePolicyOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } } -extension DescribeTestExecutionOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteResourcePolicyOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DescribeTestExecutionOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.apiMode = output.apiMode - self.creationDateTime = output.creationDateTime - self.failureReasons = output.failureReasons - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.target = output.target - self.testExecutionId = output.testExecutionId - self.testExecutionModality = output.testExecutionModality - self.testExecutionStatus = output.testExecutionStatus - self.testSetId = output.testSetId - self.testSetName = output.testSetName + let output: DeleteResourcePolicyOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.resourceArn = output.resourceArn + self.revisionId = output.revisionId } else { - self.apiMode = nil - self.creationDateTime = nil - self.failureReasons = nil - self.lastUpdatedDateTime = nil - self.target = nil - self.testExecutionId = nil - self.testExecutionModality = nil - self.testExecutionStatus = nil - self.testSetId = nil - self.testSetName = nil + self.resourceArn = nil + self.revisionId = nil } } } -public struct DescribeTestExecutionOutputResponse: Swift.Equatable { - /// Indicates whether we use streaming or non-streaming APIs are used for the test set execution. For streaming, StartConversation Amazon Lex Runtime API is used. Whereas for non-streaming, RecognizeUtterance and RecognizeText Amazon Lex Runtime API is used. - public var apiMode: LexModelsV2ClientTypes.TestExecutionApiMode? - /// The execution creation date and time for the test set execution. - public var creationDateTime: ClientRuntime.Date? - /// Reasons for the failure of the test set execution. - public var failureReasons: [Swift.String]? - /// The date and time of the last update for the execution. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The target bot for the test set execution details. - public var target: LexModelsV2ClientTypes.TestExecutionTarget? - /// The execution Id for the test set execution. - public var testExecutionId: Swift.String? - /// Indicates whether test set is audio or text. - public var testExecutionModality: LexModelsV2ClientTypes.TestExecutionModality? - /// The test execution status for the test execution. - public var testExecutionStatus: LexModelsV2ClientTypes.TestExecutionStatus? - /// The test set Id for the test set execution. - public var testSetId: Swift.String? - /// The test set name of the test set execution. - public var testSetName: Swift.String? +public struct DeleteResourcePolicyOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy was deleted from. + public var resourceArn: Swift.String? + /// The current revision of the resource policy. Use the revision ID to make sure that you are updating the most current version of a resource policy when you add a policy statement to a resource, delete a resource, or update a resource. + public var revisionId: Swift.String? public init( - apiMode: LexModelsV2ClientTypes.TestExecutionApiMode? = nil, - creationDateTime: ClientRuntime.Date? = nil, - failureReasons: [Swift.String]? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - target: LexModelsV2ClientTypes.TestExecutionTarget? = nil, - testExecutionId: Swift.String? = nil, - testExecutionModality: LexModelsV2ClientTypes.TestExecutionModality? = nil, - testExecutionStatus: LexModelsV2ClientTypes.TestExecutionStatus? = nil, - testSetId: Swift.String? = nil, - testSetName: Swift.String? = nil + resourceArn: Swift.String? = nil, + revisionId: Swift.String? = nil ) { - self.apiMode = apiMode - self.creationDateTime = creationDateTime - self.failureReasons = failureReasons - self.lastUpdatedDateTime = lastUpdatedDateTime - self.target = target - self.testExecutionId = testExecutionId - self.testExecutionModality = testExecutionModality - self.testExecutionStatus = testExecutionStatus - self.testSetId = testSetId - self.testSetName = testSetName + self.resourceArn = resourceArn + self.revisionId = revisionId } } -struct DescribeTestExecutionOutputResponseBody: Swift.Equatable { - let testExecutionId: Swift.String? - let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? - let testExecutionStatus: LexModelsV2ClientTypes.TestExecutionStatus? - let testSetId: Swift.String? - let testSetName: Swift.String? - let target: LexModelsV2ClientTypes.TestExecutionTarget? - let apiMode: LexModelsV2ClientTypes.TestExecutionApiMode? - let testExecutionModality: LexModelsV2ClientTypes.TestExecutionModality? - let failureReasons: [Swift.String]? +struct DeleteResourcePolicyOutputResponseBody: Swift.Equatable { + let resourceArn: Swift.String? + let revisionId: Swift.String? } -extension DescribeTestExecutionOutputResponseBody: Swift.Decodable { +extension DeleteResourcePolicyOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case apiMode - case creationDateTime - case failureReasons - case lastUpdatedDateTime - case target - case testExecutionId - case testExecutionModality - case testExecutionStatus - case testSetId - case testSetName + case resourceArn + case revisionId } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let testExecutionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testExecutionId) - testExecutionId = testExecutionIdDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded - let testExecutionStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionStatus.self, forKey: .testExecutionStatus) - testExecutionStatus = testExecutionStatusDecoded - let testSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetId) - testSetId = testSetIdDecoded - let testSetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetName) - testSetName = testSetNameDecoded - let targetDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionTarget.self, forKey: .target) - target = targetDecoded - let apiModeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionApiMode.self, forKey: .apiMode) - apiMode = apiModeDecoded - let testExecutionModalityDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionModality.self, forKey: .testExecutionModality) - testExecutionModality = testExecutionModalityDecoded - let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) - var failureReasonsDecoded0:[Swift.String]? = nil - if let failureReasonsContainer = failureReasonsContainer { - failureReasonsDecoded0 = [Swift.String]() - for string0 in failureReasonsContainer { - if let string0 = string0 { - failureReasonsDecoded0?.append(string0) - } + let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) + resourceArn = resourceArnDecoded + let revisionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .revisionId) + revisionId = revisionIdDecoded + } +} + +extension DeleteResourcePolicyStatementInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let expectedRevisionId = expectedRevisionId { + let expectedRevisionIdQueryItem = ClientRuntime.URLQueryItem(name: "expectedRevisionId".urlPercentEncoding(), value: Swift.String(expectedRevisionId).urlPercentEncoding()) + items.append(expectedRevisionIdQueryItem) } + return items } - failureReasons = failureReasonsDecoded0 } } -extension DescribeTestSetDiscrepancyReportInput: ClientRuntime.URLPathProvider { +extension DeleteResourcePolicyStatementInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let testSetDiscrepancyReportId = testSetDiscrepancyReportId else { + guard let resourceArn = resourceArn else { return nil } - return "/testsetdiscrepancy/\(testSetDiscrepancyReportId.urlPercentEncoding())" + guard let statementId = statementId else { + return nil + } + return "/policy/\(resourceArn.urlPercentEncoding())/statements/\(statementId.urlPercentEncoding())" } } -public struct DescribeTestSetDiscrepancyReportInput: Swift.Equatable { - /// The unique identifier of the test set discrepancy report. +public struct DeleteResourcePolicyStatementInput: Swift.Equatable { + /// The identifier of the revision of the policy to delete the statement from. If this revision ID doesn't match the current revision ID, Amazon Lex throws an exception. If you don't specify a revision, Amazon Lex removes the current contents of the statement. + public var expectedRevisionId: Swift.String? + /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to. /// This member is required. - public var testSetDiscrepancyReportId: Swift.String? + public var resourceArn: Swift.String? + /// The name of the statement (SID) to delete from the policy. + /// This member is required. + public var statementId: Swift.String? public init( - testSetDiscrepancyReportId: Swift.String? = nil + expectedRevisionId: Swift.String? = nil, + resourceArn: Swift.String? = nil, + statementId: Swift.String? = nil ) { - self.testSetDiscrepancyReportId = testSetDiscrepancyReportId + self.expectedRevisionId = expectedRevisionId + self.resourceArn = resourceArn + self.statementId = statementId } } -struct DescribeTestSetDiscrepancyReportInputBody: Swift.Equatable { +struct DeleteResourcePolicyStatementInputBody: Swift.Equatable { } -extension DescribeTestSetDiscrepancyReportInputBody: Swift.Decodable { +extension DeleteResourcePolicyStatementInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DescribeTestSetDiscrepancyReportOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DeleteResourcePolicyStatementOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } } -extension DescribeTestSetDiscrepancyReportOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteResourcePolicyStatementOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: DescribeTestSetDiscrepancyReportOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.creationDateTime = output.creationDateTime - self.failureReasons = output.failureReasons - self.lastUpdatedDataTime = output.lastUpdatedDataTime - self.target = output.target - self.testSetDiscrepancyRawOutputUrl = output.testSetDiscrepancyRawOutputUrl - self.testSetDiscrepancyReportId = output.testSetDiscrepancyReportId - self.testSetDiscrepancyReportStatus = output.testSetDiscrepancyReportStatus - self.testSetDiscrepancyTopErrors = output.testSetDiscrepancyTopErrors - self.testSetId = output.testSetId + let output: DeleteResourcePolicyStatementOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.resourceArn = output.resourceArn + self.revisionId = output.revisionId } else { - self.creationDateTime = nil - self.failureReasons = nil - self.lastUpdatedDataTime = nil - self.target = nil - self.testSetDiscrepancyRawOutputUrl = nil - self.testSetDiscrepancyReportId = nil - self.testSetDiscrepancyReportStatus = nil - self.testSetDiscrepancyTopErrors = nil - self.testSetId = nil + self.resourceArn = nil + self.revisionId = nil } } } -public struct DescribeTestSetDiscrepancyReportOutputResponse: Swift.Equatable { - /// The time and date of creation for the test set discrepancy report. - public var creationDateTime: ClientRuntime.Date? - /// The failure report for the test set discrepancy report generation action. - public var failureReasons: [Swift.String]? - /// The date and time of the last update for the test set discrepancy report. - public var lastUpdatedDataTime: ClientRuntime.Date? - /// The target bot location for the test set discrepancy report. - public var target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? - /// Pre-signed Amazon S3 URL to download the test set discrepancy report. - public var testSetDiscrepancyRawOutputUrl: Swift.String? - /// The unique identifier of the test set discrepancy report to describe. - public var testSetDiscrepancyReportId: Swift.String? - /// The status for the test set discrepancy report. - public var testSetDiscrepancyReportStatus: LexModelsV2ClientTypes.TestSetDiscrepancyReportStatus? - /// The top 200 error results from the test set discrepancy report. - public var testSetDiscrepancyTopErrors: LexModelsV2ClientTypes.TestSetDiscrepancyErrors? - /// The test set Id for the test set discrepancy report. - public var testSetId: Swift.String? +public struct DeleteResourcePolicyStatementOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy statement was removed from. + public var resourceArn: Swift.String? + /// The current revision of the resource policy. Use the revision ID to make sure that you are updating the most current version of a resource policy when you add a policy statement to a resource, delete a resource, or update a resource. + public var revisionId: Swift.String? public init( - creationDateTime: ClientRuntime.Date? = nil, - failureReasons: [Swift.String]? = nil, - lastUpdatedDataTime: ClientRuntime.Date? = nil, - target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? = nil, - testSetDiscrepancyRawOutputUrl: Swift.String? = nil, - testSetDiscrepancyReportId: Swift.String? = nil, - testSetDiscrepancyReportStatus: LexModelsV2ClientTypes.TestSetDiscrepancyReportStatus? = nil, - testSetDiscrepancyTopErrors: LexModelsV2ClientTypes.TestSetDiscrepancyErrors? = nil, - testSetId: Swift.String? = nil + resourceArn: Swift.String? = nil, + revisionId: Swift.String? = nil ) { - self.creationDateTime = creationDateTime - self.failureReasons = failureReasons - self.lastUpdatedDataTime = lastUpdatedDataTime - self.target = target - self.testSetDiscrepancyRawOutputUrl = testSetDiscrepancyRawOutputUrl - self.testSetDiscrepancyReportId = testSetDiscrepancyReportId - self.testSetDiscrepancyReportStatus = testSetDiscrepancyReportStatus - self.testSetDiscrepancyTopErrors = testSetDiscrepancyTopErrors - self.testSetId = testSetId + self.resourceArn = resourceArn + self.revisionId = revisionId } } -struct DescribeTestSetDiscrepancyReportOutputResponseBody: Swift.Equatable { - let testSetDiscrepancyReportId: Swift.String? - let testSetId: Swift.String? - let creationDateTime: ClientRuntime.Date? - let target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? - let testSetDiscrepancyReportStatus: LexModelsV2ClientTypes.TestSetDiscrepancyReportStatus? - let lastUpdatedDataTime: ClientRuntime.Date? - let testSetDiscrepancyTopErrors: LexModelsV2ClientTypes.TestSetDiscrepancyErrors? - let testSetDiscrepancyRawOutputUrl: Swift.String? - let failureReasons: [Swift.String]? +struct DeleteResourcePolicyStatementOutputResponseBody: Swift.Equatable { + let resourceArn: Swift.String? + let revisionId: Swift.String? } -extension DescribeTestSetDiscrepancyReportOutputResponseBody: Swift.Decodable { +extension DeleteResourcePolicyStatementOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case creationDateTime - case failureReasons - case lastUpdatedDataTime - case target - case testSetDiscrepancyRawOutputUrl - case testSetDiscrepancyReportId - case testSetDiscrepancyReportStatus - case testSetDiscrepancyTopErrors - case testSetId + case resourceArn + case revisionId } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let testSetDiscrepancyReportIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetDiscrepancyReportId) - testSetDiscrepancyReportId = testSetDiscrepancyReportIdDecoded - let testSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetId) - testSetId = testSetIdDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let targetDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget.self, forKey: .target) - target = targetDecoded - let testSetDiscrepancyReportStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetDiscrepancyReportStatus.self, forKey: .testSetDiscrepancyReportStatus) - testSetDiscrepancyReportStatus = testSetDiscrepancyReportStatusDecoded - let lastUpdatedDataTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDataTime) - lastUpdatedDataTime = lastUpdatedDataTimeDecoded - let testSetDiscrepancyTopErrorsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetDiscrepancyErrors.self, forKey: .testSetDiscrepancyTopErrors) - testSetDiscrepancyTopErrors = testSetDiscrepancyTopErrorsDecoded - let testSetDiscrepancyRawOutputUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetDiscrepancyRawOutputUrl) - testSetDiscrepancyRawOutputUrl = testSetDiscrepancyRawOutputUrlDecoded - let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) - var failureReasonsDecoded0:[Swift.String]? = nil - if let failureReasonsContainer = failureReasonsContainer { - failureReasonsDecoded0 = [Swift.String]() - for string0 in failureReasonsContainer { - if let string0 = string0 { - failureReasonsDecoded0?.append(string0) - } - } - } - failureReasons = failureReasonsDecoded0 + let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) + resourceArn = resourceArnDecoded + let revisionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .revisionId) + revisionId = revisionIdDecoded } } -extension DescribeTestSetGenerationInput: ClientRuntime.URLPathProvider { +extension DeleteSlotInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let testSetGenerationId = testSetGenerationId else { + guard let botId = botId else { return nil } - return "/testsetgenerations/\(testSetGenerationId.urlPercentEncoding())" + guard let botVersion = botVersion else { + return nil + } + guard let localeId = localeId else { + return nil + } + guard let intentId = intentId else { + return nil + } + guard let slotId = slotId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())/slots/\(slotId.urlPercentEncoding())" } } -public struct DescribeTestSetGenerationInput: Swift.Equatable { - /// The unique identifier of the test set generation. +public struct DeleteSlotInput: Swift.Equatable { + /// The identifier of the bot associated with the slot to delete. /// This member is required. - public var testSetGenerationId: Swift.String? + public var botId: Swift.String? + /// The version of the bot associated with the slot to delete. + /// This member is required. + public var botVersion: Swift.String? + /// The identifier of the intent associated with the slot. + /// This member is required. + public var intentId: Swift.String? + /// The identifier of the language and locale that the slot will be deleted from. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? + /// The identifier of the slot to delete. + /// This member is required. + public var slotId: Swift.String? public init( - testSetGenerationId: Swift.String? = nil + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + intentId: Swift.String? = nil, + localeId: Swift.String? = nil, + slotId: Swift.String? = nil ) { - self.testSetGenerationId = testSetGenerationId + self.botId = botId + self.botVersion = botVersion + self.intentId = intentId + self.localeId = localeId + self.slotId = slotId } } -struct DescribeTestSetGenerationInputBody: Swift.Equatable { +struct DeleteSlotInputBody: Swift.Equatable { } -extension DescribeTestSetGenerationInputBody: Swift.Decodable { +extension DeleteSlotInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DescribeTestSetGenerationOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DeleteSlotOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -12702,156 +12615,115 @@ public enum DescribeTestSetGenerationOutputError: ClientRuntime.HttpResponseErro } } -extension DescribeTestSetGenerationOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteSlotOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: DescribeTestSetGenerationOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.creationDateTime = output.creationDateTime - self.description = output.description - self.failureReasons = output.failureReasons - self.generationDataSource = output.generationDataSource - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.roleArn = output.roleArn - self.storageLocation = output.storageLocation - self.testSetGenerationId = output.testSetGenerationId - self.testSetGenerationStatus = output.testSetGenerationStatus - self.testSetId = output.testSetId - self.testSetName = output.testSetName - } else { - self.creationDateTime = nil - self.description = nil - self.failureReasons = nil - self.generationDataSource = nil - self.lastUpdatedDateTime = nil - self.roleArn = nil - self.storageLocation = nil - self.testSetGenerationId = nil - self.testSetGenerationStatus = nil - self.testSetId = nil - self.testSetName = nil + } +} + +public struct DeleteSlotOutputResponse: Swift.Equatable { + + public init() { } +} + +extension DeleteSlotTypeInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let skipResourceInUseCheck = skipResourceInUseCheck { + let skipResourceInUseCheckQueryItem = ClientRuntime.URLQueryItem(name: "skipResourceInUseCheck".urlPercentEncoding(), value: Swift.String(skipResourceInUseCheck).urlPercentEncoding()) + items.append(skipResourceInUseCheckQueryItem) + } + return items } } } -public struct DescribeTestSetGenerationOutputResponse: Swift.Equatable { - /// The creation date and time for the test set generation. - public var creationDateTime: ClientRuntime.Date? - /// The test set description for the test set generation. - public var description: Swift.String? - /// The reasons the test set generation failed. - public var failureReasons: [Swift.String]? - /// The data source of the test set used for the test set generation. - public var generationDataSource: LexModelsV2ClientTypes.TestSetGenerationDataSource? - /// The date and time of the last update for the test set generation. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The roleARN of the test set used for the test set generation. - public var roleArn: Swift.String? - /// The Amazon S3 storage location for the test set generation. - public var storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? - /// The unique identifier of the test set generation. - public var testSetGenerationId: Swift.String? - /// The status for the test set generation. - public var testSetGenerationStatus: LexModelsV2ClientTypes.TestSetGenerationStatus? - /// The unique identifier for the test set created for the generated test set. - public var testSetId: Swift.String? - /// The test set name for the generated test set. - public var testSetName: Swift.String? +extension DeleteSlotTypeInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil + } + guard let botVersion = botVersion else { + return nil + } + guard let localeId = localeId else { + return nil + } + guard let slotTypeId = slotTypeId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/slottypes/\(slotTypeId.urlPercentEncoding())" + } +} + +public struct DeleteSlotTypeInput: Swift.Equatable { + /// The identifier of the bot associated with the slot type. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot associated with the slot type. + /// This member is required. + public var botVersion: Swift.String? + /// The identifier of the language and locale that the slot type will be deleted from. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? + /// By default, the DeleteSlotType operations throws a ResourceInUseException exception if you try to delete a slot type used by a slot. Set the skipResourceInUseCheck parameter to true to skip this check and remove the slot type even if a slot uses it. + public var skipResourceInUseCheck: Swift.Bool? + /// The identifier of the slot type to delete. + /// This member is required. + public var slotTypeId: Swift.String? public init( - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - failureReasons: [Swift.String]? = nil, - generationDataSource: LexModelsV2ClientTypes.TestSetGenerationDataSource? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - roleArn: Swift.String? = nil, - storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? = nil, - testSetGenerationId: Swift.String? = nil, - testSetGenerationStatus: LexModelsV2ClientTypes.TestSetGenerationStatus? = nil, - testSetId: Swift.String? = nil, - testSetName: Swift.String? = nil + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil, + skipResourceInUseCheck: Swift.Bool? = nil, + slotTypeId: Swift.String? = nil ) { - self.creationDateTime = creationDateTime - self.description = description - self.failureReasons = failureReasons - self.generationDataSource = generationDataSource - self.lastUpdatedDateTime = lastUpdatedDateTime - self.roleArn = roleArn - self.storageLocation = storageLocation - self.testSetGenerationId = testSetGenerationId - self.testSetGenerationStatus = testSetGenerationStatus - self.testSetId = testSetId - self.testSetName = testSetName + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId + self.skipResourceInUseCheck = skipResourceInUseCheck + self.slotTypeId = slotTypeId } } -struct DescribeTestSetGenerationOutputResponseBody: Swift.Equatable { - let testSetGenerationId: Swift.String? - let testSetGenerationStatus: LexModelsV2ClientTypes.TestSetGenerationStatus? - let failureReasons: [Swift.String]? - let testSetId: Swift.String? - let testSetName: Swift.String? - let description: Swift.String? - let storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? - let generationDataSource: LexModelsV2ClientTypes.TestSetGenerationDataSource? - let roleArn: Swift.String? - let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? +struct DeleteSlotTypeInputBody: Swift.Equatable { } -extension DescribeTestSetGenerationOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case creationDateTime - case description - case failureReasons - case generationDataSource - case lastUpdatedDateTime - case roleArn - case storageLocation - case testSetGenerationId - case testSetGenerationStatus - case testSetId - case testSetName - } +extension DeleteSlotTypeInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let testSetGenerationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetGenerationId) - testSetGenerationId = testSetGenerationIdDecoded - let testSetGenerationStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetGenerationStatus.self, forKey: .testSetGenerationStatus) - testSetGenerationStatus = testSetGenerationStatusDecoded - let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) - var failureReasonsDecoded0:[Swift.String]? = nil - if let failureReasonsContainer = failureReasonsContainer { - failureReasonsDecoded0 = [Swift.String]() - for string0 in failureReasonsContainer { - if let string0 = string0 { - failureReasonsDecoded0?.append(string0) - } - } + } +} + +public enum DeleteSlotTypeOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } - failureReasons = failureReasonsDecoded0 - let testSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetId) - testSetId = testSetIdDecoded - let testSetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetName) - testSetName = testSetNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let storageLocationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetStorageLocation.self, forKey: .storageLocation) - storageLocation = storageLocationDecoded - let generationDataSourceDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetGenerationDataSource.self, forKey: .generationDataSource) - generationDataSource = generationDataSourceDecoded - let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) - roleArn = roleArnDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded } } -extension DescribeTestSetInput: ClientRuntime.URLPathProvider { +extension DeleteSlotTypeOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct DeleteSlotTypeOutputResponse: Swift.Equatable { + + public init() { } +} + +extension DeleteTestSetInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let testSetId = testSetId else { return nil @@ -12860,8 +12732,8 @@ extension DescribeTestSetInput: ClientRuntime.URLPathProvider { } } -public struct DescribeTestSetInput: Swift.Equatable { - /// The test set Id for the test set request. +public struct DeleteTestSetInput: Swift.Equatable { + /// The test set Id of the test set to be deleted. /// This member is required. public var testSetId: Swift.String? @@ -12873,22 +12745,23 @@ public struct DescribeTestSetInput: Swift.Equatable { } } -struct DescribeTestSetInputBody: Swift.Equatable { +struct DeleteTestSetInputBody: Swift.Equatable { } -extension DescribeTestSetInputBody: Swift.Decodable { +extension DeleteTestSetInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum DescribeTestSetOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DeleteTestSetOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -12897,1426 +12770,1336 @@ public enum DescribeTestSetOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension DescribeTestSetOutputResponse: ClientRuntime.HttpResponseBinding { +extension DeleteTestSetOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { - if let data = try await httpResponse.body.readData(), - let responseDecoder = decoder { - let output: DescribeTestSetOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.creationDateTime = output.creationDateTime - self.description = output.description - self.lastUpdatedDateTime = output.lastUpdatedDateTime - self.modality = output.modality - self.numTurns = output.numTurns - self.roleArn = output.roleArn - self.status = output.status - self.storageLocation = output.storageLocation - self.testSetId = output.testSetId - self.testSetName = output.testSetName - } else { - self.creationDateTime = nil - self.description = nil - self.lastUpdatedDateTime = nil - self.modality = nil - self.numTurns = nil - self.roleArn = nil - self.status = nil - self.storageLocation = nil - self.testSetId = nil - self.testSetName = nil - } } } -public struct DescribeTestSetOutputResponse: Swift.Equatable { - /// The creation date and time for the test set data. - public var creationDateTime: ClientRuntime.Date? - /// The description of the test set. - public var description: Swift.String? - /// The date and time for the last update of the test set data. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// Indicates whether the test set is audio or text data. - public var modality: LexModelsV2ClientTypes.TestSetModality? - /// The total number of agent and user turn in the test set. - public var numTurns: Swift.Int? - /// The roleARN used for any operation in the test set to access resources in the Amazon Web Services account. - public var roleArn: Swift.String? - /// The status of the test set. - public var status: LexModelsV2ClientTypes.TestSetStatus? - /// The Amazon S3 storage location for the test set data. - public var storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? - /// The test set Id for the test set response. - public var testSetId: Swift.String? - /// The test set name of the test set. - public var testSetName: Swift.String? +public struct DeleteTestSetOutputResponse: Swift.Equatable { + + public init() { } +} + +extension DeleteUtterancesInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let sessionId = sessionId { + let sessionIdQueryItem = ClientRuntime.URLQueryItem(name: "sessionId".urlPercentEncoding(), value: Swift.String(sessionId).urlPercentEncoding()) + items.append(sessionIdQueryItem) + } + if let localeId = localeId { + let localeIdQueryItem = ClientRuntime.URLQueryItem(name: "localeId".urlPercentEncoding(), value: Swift.String(localeId).urlPercentEncoding()) + items.append(localeIdQueryItem) + } + return items + } + } +} + +extension DeleteUtterancesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/utterances" + } +} + +public struct DeleteUtterancesInput: Swift.Equatable { + /// The unique identifier of the bot that contains the utterances. + /// This member is required. + public var botId: Swift.String? + /// The identifier of the language and locale where the utterances were collected. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + public var localeId: Swift.String? + /// The unique identifier of the session with the user. The ID is returned in the response from the [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) and [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) operations. + public var sessionId: Swift.String? public init( - creationDateTime: ClientRuntime.Date? = nil, - description: Swift.String? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - modality: LexModelsV2ClientTypes.TestSetModality? = nil, - numTurns: Swift.Int? = nil, - roleArn: Swift.String? = nil, - status: LexModelsV2ClientTypes.TestSetStatus? = nil, - storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? = nil, - testSetId: Swift.String? = nil, - testSetName: Swift.String? = nil + botId: Swift.String? = nil, + localeId: Swift.String? = nil, + sessionId: Swift.String? = nil ) { - self.creationDateTime = creationDateTime - self.description = description - self.lastUpdatedDateTime = lastUpdatedDateTime - self.modality = modality - self.numTurns = numTurns - self.roleArn = roleArn - self.status = status - self.storageLocation = storageLocation - self.testSetId = testSetId - self.testSetName = testSetName + self.botId = botId + self.localeId = localeId + self.sessionId = sessionId } } -struct DescribeTestSetOutputResponseBody: Swift.Equatable { - let testSetId: Swift.String? - let testSetName: Swift.String? - let description: Swift.String? - let modality: LexModelsV2ClientTypes.TestSetModality? - let status: LexModelsV2ClientTypes.TestSetStatus? - let roleArn: Swift.String? - let numTurns: Swift.Int? - let storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? - let creationDateTime: ClientRuntime.Date? - let lastUpdatedDateTime: ClientRuntime.Date? +struct DeleteUtterancesInputBody: Swift.Equatable { } -extension DescribeTestSetOutputResponseBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case creationDateTime - case description - case lastUpdatedDateTime - case modality - case numTurns - case roleArn - case status - case storageLocation - case testSetId - case testSetName - } +extension DeleteUtterancesInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let testSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetId) - testSetId = testSetIdDecoded - let testSetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetName) - testSetName = testSetNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let modalityDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetModality.self, forKey: .modality) - modality = modalityDecoded - let statusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetStatus.self, forKey: .status) - status = statusDecoded - let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) - roleArn = roleArnDecoded - let numTurnsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .numTurns) - numTurns = numTurnsDecoded - let storageLocationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetStorageLocation.self, forKey: .storageLocation) - storageLocation = storageLocationDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded } } -extension LexModelsV2ClientTypes.DialogAction: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case slotToElicit - case suppressNextMessage - case type - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let slotToElicit = self.slotToElicit { - try encodeContainer.encode(slotToElicit, forKey: .slotToElicit) - } - if let suppressNextMessage = self.suppressNextMessage { - try encodeContainer.encode(suppressNextMessage, forKey: .suppressNextMessage) - } - if let type = self.type { - try encodeContainer.encode(type.rawValue, forKey: .type) +public enum DeleteUtterancesOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let typeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogActionType.self, forKey: .type) - type = typeDecoded - let slotToElicitDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotToElicit) - slotToElicit = slotToElicitDecoded - let suppressNextMessageDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .suppressNextMessage) - suppressNextMessage = suppressNextMessageDecoded +extension DeleteUtterancesOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { } } -extension LexModelsV2ClientTypes { - /// Defines the action that the bot executes at runtime when the conversation reaches this step. - public struct DialogAction: Swift.Equatable { - /// If the dialog action is ElicitSlot, defines the slot to elicit from the user. - public var slotToElicit: Swift.String? - /// When true the next message for the intent is not used. - public var suppressNextMessage: Swift.Bool? - /// The action that the bot should execute. - /// This member is required. - public var type: LexModelsV2ClientTypes.DialogActionType? - - public init( - slotToElicit: Swift.String? = nil, - suppressNextMessage: Swift.Bool? = nil, - type: LexModelsV2ClientTypes.DialogActionType? = nil - ) - { - self.slotToElicit = slotToElicit - self.suppressNextMessage = suppressNextMessage - self.type = type - } - } +public struct DeleteUtterancesOutputResponse: Swift.Equatable { + public init() { } } -extension LexModelsV2ClientTypes { - public enum DialogActionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case closeintent - case confirmintent - case elicitintent - case elicitslot - case endconversation - case evaluateconditional - case fulfillintent - case invokedialogcodehook - case startintent - case sdkUnknown(Swift.String) - - public static var allCases: [DialogActionType] { - return [ - .closeintent, - .confirmintent, - .elicitintent, - .elicitslot, - .endconversation, - .evaluateconditional, - .fulfillintent, - .invokedialogcodehook, - .startintent, - .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 .closeintent: return "CloseIntent" - case .confirmintent: return "ConfirmIntent" - case .elicitintent: return "ElicitIntent" - case .elicitslot: return "ElicitSlot" - case .endconversation: return "EndConversation" - case .evaluateconditional: return "EvaluateConditional" - case .fulfillintent: return "FulfillIntent" - case .invokedialogcodehook: return "InvokeDialogCodeHook" - case .startintent: return "StartIntent" - case let .sdkUnknown(s): return s - } +extension DescribeBotAliasInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = DialogActionType(rawValue: rawValue) ?? DialogActionType.sdkUnknown(rawValue) + guard let botAliasId = botAliasId else { + return nil } + return "/bots/\(botId.urlPercentEncoding())/botaliases/\(botAliasId.urlPercentEncoding())" } } -extension LexModelsV2ClientTypes.DialogCodeHookInvocationSetting: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case active - case enableCodeHookInvocation - case invocationLabel - case postCodeHookSpecification - } +public struct DescribeBotAliasInput: Swift.Equatable { + /// The identifier of the bot alias to describe. + /// This member is required. + public var botAliasId: Swift.String? + /// The identifier of the bot associated with the bot alias to describe. + /// This member is required. + public var botId: Swift.String? - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let active = self.active { - try encodeContainer.encode(active, forKey: .active) - } - if let enableCodeHookInvocation = self.enableCodeHookInvocation { - try encodeContainer.encode(enableCodeHookInvocation, forKey: .enableCodeHookInvocation) - } - if let invocationLabel = self.invocationLabel { - try encodeContainer.encode(invocationLabel, forKey: .invocationLabel) - } - if let postCodeHookSpecification = self.postCodeHookSpecification { - try encodeContainer.encode(postCodeHookSpecification, forKey: .postCodeHookSpecification) - } + public init( + botAliasId: Swift.String? = nil, + botId: Swift.String? = nil + ) + { + self.botAliasId = botAliasId + self.botId = botId } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let enableCodeHookInvocationDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enableCodeHookInvocation) - enableCodeHookInvocation = enableCodeHookInvocationDecoded - let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) - active = activeDecoded - let invocationLabelDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .invocationLabel) - invocationLabel = invocationLabelDecoded - let postCodeHookSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.PostDialogCodeHookInvocationSpecification.self, forKey: .postCodeHookSpecification) - postCodeHookSpecification = postCodeHookSpecificationDecoded - } +struct DescribeBotAliasInputBody: Swift.Equatable { } -extension LexModelsV2ClientTypes { - /// Settings that specify the dialog code hook that is called by Amazon Lex at a step of the conversation. - public struct DialogCodeHookInvocationSetting: Swift.Equatable { - /// Determines whether a dialog code hook is used when the intent is activated. - /// This member is required. - public var active: Swift.Bool? - /// Indicates whether a Lambda function should be invoked for the dialog. - /// This member is required. - public var enableCodeHookInvocation: Swift.Bool? - /// A label that indicates the dialog step from which the dialog code hook is happening. - public var invocationLabel: Swift.String? - /// Contains the responses and actions that Amazon Lex takes after the Lambda function is complete. - /// This member is required. - public var postCodeHookSpecification: LexModelsV2ClientTypes.PostDialogCodeHookInvocationSpecification? +extension DescribeBotAliasInputBody: Swift.Decodable { - public init( - active: Swift.Bool? = nil, - enableCodeHookInvocation: Swift.Bool? = nil, - invocationLabel: Swift.String? = nil, - postCodeHookSpecification: LexModelsV2ClientTypes.PostDialogCodeHookInvocationSpecification? = nil - ) - { - self.active = active - self.enableCodeHookInvocation = enableCodeHookInvocation - self.invocationLabel = invocationLabel - self.postCodeHookSpecification = postCodeHookSpecification - } + public init(from decoder: Swift.Decoder) throws { } - } -extension LexModelsV2ClientTypes.DialogCodeHookSettings: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case enabled - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if enabled != false { - try encodeContainer.encode(enabled, forKey: .enabled) +public enum DescribeBotAliasOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) ?? false - enabled = enabledDecoded +extension DescribeBotAliasOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeBotAliasOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botAliasHistoryEvents = output.botAliasHistoryEvents + self.botAliasId = output.botAliasId + self.botAliasLocaleSettings = output.botAliasLocaleSettings + self.botAliasName = output.botAliasName + self.botAliasStatus = output.botAliasStatus + self.botId = output.botId + self.botVersion = output.botVersion + self.conversationLogSettings = output.conversationLogSettings + self.creationDateTime = output.creationDateTime + self.description = output.description + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.parentBotNetworks = output.parentBotNetworks + self.sentimentAnalysisSettings = output.sentimentAnalysisSettings + } else { + self.botAliasHistoryEvents = nil + self.botAliasId = nil + self.botAliasLocaleSettings = nil + self.botAliasName = nil + self.botAliasStatus = nil + self.botId = nil + self.botVersion = nil + self.conversationLogSettings = nil + self.creationDateTime = nil + self.description = nil + self.lastUpdatedDateTime = nil + self.parentBotNetworks = nil + self.sentimentAnalysisSettings = nil + } } } -extension LexModelsV2ClientTypes { - /// Settings that determine the Lambda function that Amazon Lex uses for processing user responses. - public struct DialogCodeHookSettings: Swift.Equatable { - /// Enables the dialog code hook so that it processes user requests. - /// This member is required. - public var enabled: Swift.Bool +public struct DescribeBotAliasOutputResponse: Swift.Equatable { + /// A list of events that affect a bot alias. For example, an event is recorded when the version that the alias points to changes. + public var botAliasHistoryEvents: [LexModelsV2ClientTypes.BotAliasHistoryEvent]? + /// The identifier of the bot alias. + public var botAliasId: Swift.String? + /// The locale settings that are unique to the alias. + public var botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? + /// The name of the bot alias. + public var botAliasName: Swift.String? + /// The current status of the alias. When the alias is Available, the alias is ready for use with your bot. + public var botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? + /// The identifier of the bot associated with the bot alias. + public var botId: Swift.String? + /// The version of the bot associated with the bot alias. + public var botVersion: Swift.String? + /// Specifics of how Amazon Lex logs text and audio conversations with the bot associated with the alias. + public var conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? + /// A timestamp of the date and time that the alias was created. + public var creationDateTime: ClientRuntime.Date? + /// The description of the bot alias. + public var description: Swift.String? + /// A timestamp of the date and time that the alias was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// A list of the networks to which the bot alias you described belongs. + public var parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? + /// Determines whether Amazon Lex will use Amazon Comprehend to detect the sentiment of user utterances. + public var sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? - public init( - enabled: Swift.Bool = false - ) - { - self.enabled = enabled - } + public init( + botAliasHistoryEvents: [LexModelsV2ClientTypes.BotAliasHistoryEvent]? = nil, + botAliasId: Swift.String? = nil, + botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil, + botAliasName: Swift.String? = nil, + botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? = nil, + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? = nil, + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? = nil, + sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? = nil + ) + { + self.botAliasHistoryEvents = botAliasHistoryEvents + self.botAliasId = botAliasId + self.botAliasLocaleSettings = botAliasLocaleSettings + self.botAliasName = botAliasName + self.botAliasStatus = botAliasStatus + self.botId = botId + self.botVersion = botVersion + self.conversationLogSettings = conversationLogSettings + self.creationDateTime = creationDateTime + self.description = description + self.lastUpdatedDateTime = lastUpdatedDateTime + self.parentBotNetworks = parentBotNetworks + self.sentimentAnalysisSettings = sentimentAnalysisSettings } +} +struct DescribeBotAliasOutputResponseBody: Swift.Equatable { + let botAliasId: Swift.String? + let botAliasName: Swift.String? + let description: Swift.String? + let botVersion: Swift.String? + let botAliasLocaleSettings: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? + let conversationLogSettings: LexModelsV2ClientTypes.ConversationLogSettings? + let sentimentAnalysisSettings: LexModelsV2ClientTypes.SentimentAnalysisSettings? + let botAliasHistoryEvents: [LexModelsV2ClientTypes.BotAliasHistoryEvent]? + let botAliasStatus: LexModelsV2ClientTypes.BotAliasStatus? + let botId: Swift.String? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? + let parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? } -extension LexModelsV2ClientTypes.DialogState: Swift.Codable { +extension DescribeBotAliasOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case dialogAction - case intent - case sessionAttributes - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let dialogAction = self.dialogAction { - try encodeContainer.encode(dialogAction, forKey: .dialogAction) - } - if let intent = self.intent { - try encodeContainer.encode(intent, forKey: .intent) - } - if let sessionAttributes = sessionAttributes { - var sessionAttributesContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .sessionAttributes) - for (dictKey0, stringMap0) in sessionAttributes { - try sessionAttributesContainer.encode(stringMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } - } + case botAliasHistoryEvents + case botAliasId + case botAliasLocaleSettings + case botAliasName + case botAliasStatus + case botId + case botVersion + case conversationLogSettings + case creationDateTime + case description + case lastUpdatedDateTime + case parentBotNetworks + case sentimentAnalysisSettings } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let dialogActionDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogAction.self, forKey: .dialogAction) - dialogAction = dialogActionDecoded - let intentDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentOverride.self, forKey: .intent) - intent = intentDecoded - let sessionAttributesContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .sessionAttributes) - var sessionAttributesDecoded0: [Swift.String:Swift.String]? = nil - if let sessionAttributesContainer = sessionAttributesContainer { - sessionAttributesDecoded0 = [Swift.String:Swift.String]() - for (key0, string0) in sessionAttributesContainer { - if let string0 = string0 { - sessionAttributesDecoded0?[key0] = string0 - } - } - } - sessionAttributes = sessionAttributesDecoded0 - } -} - -extension LexModelsV2ClientTypes { - /// The current state of the conversation with the user. - public struct DialogState: Swift.Equatable { - /// Defines the action that the bot executes at runtime when the conversation reaches this step. - public var dialogAction: LexModelsV2ClientTypes.DialogAction? - /// Override settings to configure the intent state. - public var intent: LexModelsV2ClientTypes.IntentOverride? - /// Map of key/value pairs representing session-specific context information. It contains application information passed between Amazon Lex and a client application. - public var sessionAttributes: [Swift.String:Swift.String]? - - public init( - dialogAction: LexModelsV2ClientTypes.DialogAction? = nil, - intent: LexModelsV2ClientTypes.IntentOverride? = nil, - sessionAttributes: [Swift.String:Swift.String]? = nil - ) - { - self.dialogAction = dialogAction - self.intent = intent - self.sessionAttributes = sessionAttributes - } - } - -} - -extension LexModelsV2ClientTypes { - public enum Effect: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case allow - case deny - case sdkUnknown(Swift.String) - - public static var allCases: [Effect] { - return [ - .allow, - .deny, - .sdkUnknown("") - ] - } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) + botAliasId = botAliasIdDecoded + let botAliasNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasName) + botAliasName = botAliasNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let botAliasLocaleSettingsContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.BotAliasLocaleSettings?].self, forKey: .botAliasLocaleSettings) + var botAliasLocaleSettingsDecoded0: [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]? = nil + if let botAliasLocaleSettingsContainer = botAliasLocaleSettingsContainer { + botAliasLocaleSettingsDecoded0 = [Swift.String:LexModelsV2ClientTypes.BotAliasLocaleSettings]() + for (key0, botaliaslocalesettings0) in botAliasLocaleSettingsContainer { + if let botaliaslocalesettings0 = botaliaslocalesettings0 { + botAliasLocaleSettingsDecoded0?[key0] = botaliaslocalesettings0 + } + } } - public var rawValue: Swift.String { - switch self { - case .allow: return "Allow" - case .deny: return "Deny" - case let .sdkUnknown(s): return s + botAliasLocaleSettings = botAliasLocaleSettingsDecoded0 + let conversationLogSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConversationLogSettings.self, forKey: .conversationLogSettings) + conversationLogSettings = conversationLogSettingsDecoded + let sentimentAnalysisSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SentimentAnalysisSettings.self, forKey: .sentimentAnalysisSettings) + sentimentAnalysisSettings = sentimentAnalysisSettingsDecoded + let botAliasHistoryEventsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotAliasHistoryEvent?].self, forKey: .botAliasHistoryEvents) + var botAliasHistoryEventsDecoded0:[LexModelsV2ClientTypes.BotAliasHistoryEvent]? = nil + if let botAliasHistoryEventsContainer = botAliasHistoryEventsContainer { + botAliasHistoryEventsDecoded0 = [LexModelsV2ClientTypes.BotAliasHistoryEvent]() + for structure0 in botAliasHistoryEventsContainer { + if let structure0 = structure0 { + botAliasHistoryEventsDecoded0?.append(structure0) + } } } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = Effect(rawValue: rawValue) ?? Effect.sdkUnknown(rawValue) + botAliasHistoryEvents = botAliasHistoryEventsDecoded0 + let botAliasStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotAliasStatus.self, forKey: .botAliasStatus) + botAliasStatus = botAliasStatusDecoded + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let parentBotNetworksContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ParentBotNetwork?].self, forKey: .parentBotNetworks) + var parentBotNetworksDecoded0:[LexModelsV2ClientTypes.ParentBotNetwork]? = nil + if let parentBotNetworksContainer = parentBotNetworksContainer { + parentBotNetworksDecoded0 = [LexModelsV2ClientTypes.ParentBotNetwork]() + for structure0 in parentBotNetworksContainer { + if let structure0 = structure0 { + parentBotNetworksDecoded0?.append(structure0) + } + } } + parentBotNetworks = parentBotNetworksDecoded0 } } -extension LexModelsV2ClientTypes.ElicitationCodeHookInvocationSetting: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case enableCodeHookInvocation - case invocationLabel - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let enableCodeHookInvocation = self.enableCodeHookInvocation { - try encodeContainer.encode(enableCodeHookInvocation, forKey: .enableCodeHookInvocation) - } - if let invocationLabel = self.invocationLabel { - try encodeContainer.encode(invocationLabel, forKey: .invocationLabel) +extension DescribeBotInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let enableCodeHookInvocationDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enableCodeHookInvocation) - enableCodeHookInvocation = enableCodeHookInvocationDecoded - let invocationLabelDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .invocationLabel) - invocationLabel = invocationLabelDecoded + return "/bots/\(botId.urlPercentEncoding())" } } -extension LexModelsV2ClientTypes { - /// Settings that specify the dialog code hook that is called by Amazon Lex between eliciting slot values. - public struct ElicitationCodeHookInvocationSetting: Swift.Equatable { - /// Indicates whether a Lambda function should be invoked for the dialog. - /// This member is required. - public var enableCodeHookInvocation: Swift.Bool? - /// A label that indicates the dialog step from which the dialog code hook is happening. - public var invocationLabel: Swift.String? +public struct DescribeBotInput: Swift.Equatable { + /// The unique identifier of the bot to describe. + /// This member is required. + public var botId: Swift.String? - public init( - enableCodeHookInvocation: Swift.Bool? = nil, - invocationLabel: Swift.String? = nil - ) - { - self.enableCodeHookInvocation = enableCodeHookInvocation - self.invocationLabel = invocationLabel - } + public init( + botId: Swift.String? = nil + ) + { + self.botId = botId } +} +struct DescribeBotInputBody: Swift.Equatable { } -extension LexModelsV2ClientTypes.EncryptionSetting: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case associatedTranscriptsPassword - case botLocaleExportPassword - case kmsKeyArn +extension DescribeBotInputBody: 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 associatedTranscriptsPassword = self.associatedTranscriptsPassword { - try encodeContainer.encode(associatedTranscriptsPassword, forKey: .associatedTranscriptsPassword) +extension DescribeBotLocaleInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - if let botLocaleExportPassword = self.botLocaleExportPassword { - try encodeContainer.encode(botLocaleExportPassword, forKey: .botLocaleExportPassword) + guard let botVersion = botVersion else { + return nil } - if let kmsKeyArn = self.kmsKeyArn { - try encodeContainer.encode(kmsKeyArn, forKey: .kmsKeyArn) + guard let localeId = localeId else { + return nil } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())" } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let kmsKeyArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kmsKeyArn) - kmsKeyArn = kmsKeyArnDecoded - let botLocaleExportPasswordDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botLocaleExportPassword) - botLocaleExportPassword = botLocaleExportPasswordDecoded - let associatedTranscriptsPasswordDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .associatedTranscriptsPassword) - associatedTranscriptsPassword = associatedTranscriptsPasswordDecoded +public struct DescribeBotLocaleInput: Swift.Equatable { + /// The identifier of the bot associated with the locale. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot associated with the locale. + /// This member is required. + public var botVersion: Swift.String? + /// The unique identifier of the locale to describe. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? + + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId } } -extension LexModelsV2ClientTypes.EncryptionSetting: Swift.CustomDebugStringConvertible { - public var debugDescription: Swift.String { - "EncryptionSetting(kmsKeyArn: \(Swift.String(describing: kmsKeyArn)), associatedTranscriptsPassword: \"CONTENT_REDACTED\", botLocaleExportPassword: \"CONTENT_REDACTED\")"} +struct DescribeBotLocaleInputBody: Swift.Equatable { } -extension LexModelsV2ClientTypes { - /// The object representing the passwords that were used to encrypt the data related to the bot recommendation, as well as the KMS key ARN used to encrypt the associated metadata. - public struct EncryptionSetting: Swift.Equatable { - /// The password used to encrypt the associated transcript file. - public var associatedTranscriptsPassword: Swift.String? - /// The password used to encrypt the recommended bot recommendation file. - public var botLocaleExportPassword: Swift.String? - /// The KMS key ARN used to encrypt the metadata associated with the bot recommendation. - public var kmsKeyArn: Swift.String? +extension DescribeBotLocaleInputBody: Swift.Decodable { - public init( - associatedTranscriptsPassword: Swift.String? = nil, - botLocaleExportPassword: Swift.String? = nil, - kmsKeyArn: Swift.String? = nil - ) - { - self.associatedTranscriptsPassword = associatedTranscriptsPassword - self.botLocaleExportPassword = botLocaleExportPassword - self.kmsKeyArn = kmsKeyArn - } + public init(from decoder: Swift.Decoder) throws { } - } -extension LexModelsV2ClientTypes { - public enum ErrorCode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case duplicateInput - case internalServerFailure - case resourceAlreadyExists - case resourceDoesNotExist - case sdkUnknown(Swift.String) - - public static var allCases: [ErrorCode] { - return [ - .duplicateInput, - .internalServerFailure, - .resourceAlreadyExists, - .resourceDoesNotExist, - .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 .duplicateInput: return "DUPLICATE_INPUT" - case .internalServerFailure: return "INTERNAL_SERVER_FAILURE" - case .resourceAlreadyExists: return "RESOURCE_ALREADY_EXISTS" - case .resourceDoesNotExist: return "RESOURCE_DOES_NOT_EXIST" - 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 = ErrorCode(rawValue: rawValue) ?? ErrorCode.sdkUnknown(rawValue) +public enum DescribeBotLocaleOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } } -extension LexModelsV2ClientTypes.ExecutionErrorDetails: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case errorCode - case errorMessage - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let errorCode = self.errorCode { - try encodeContainer.encode(errorCode, forKey: .errorCode) - } - if let errorMessage = self.errorMessage { - try encodeContainer.encode(errorMessage, forKey: .errorMessage) +extension DescribeBotLocaleOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeBotLocaleOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botLocaleHistoryEvents = output.botLocaleHistoryEvents + self.botLocaleStatus = output.botLocaleStatus + self.botVersion = output.botVersion + self.creationDateTime = output.creationDateTime + self.description = output.description + self.failureReasons = output.failureReasons + self.intentsCount = output.intentsCount + self.lastBuildSubmittedDateTime = output.lastBuildSubmittedDateTime + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.localeId = output.localeId + self.localeName = output.localeName + self.nluIntentConfidenceThreshold = output.nluIntentConfidenceThreshold + self.recommendedActions = output.recommendedActions + self.slotTypesCount = output.slotTypesCount + self.voiceSettings = output.voiceSettings + } else { + self.botId = nil + self.botLocaleHistoryEvents = nil + self.botLocaleStatus = nil + self.botVersion = nil + self.creationDateTime = nil + self.description = nil + self.failureReasons = nil + self.intentsCount = nil + self.lastBuildSubmittedDateTime = nil + self.lastUpdatedDateTime = nil + self.localeId = nil + self.localeName = nil + self.nluIntentConfidenceThreshold = nil + self.recommendedActions = nil + self.slotTypesCount = nil + self.voiceSettings = nil } } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let errorCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorCode) - errorCode = errorCodeDecoded - let errorMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorMessage) - errorMessage = errorMessageDecoded - } } -extension LexModelsV2ClientTypes { - /// Details about an error in an execution of a test set. - public struct ExecutionErrorDetails: Swift.Equatable { - /// The error code for the error. - /// This member is required. - public var errorCode: Swift.String? - /// The message describing the error. - /// This member is required. - public var errorMessage: Swift.String? +public struct DescribeBotLocaleOutputResponse: Swift.Equatable { + /// The identifier of the bot associated with the locale. + public var botId: Swift.String? + /// History of changes, such as when a locale is used in an alias, that have taken place for the locale. + public var botLocaleHistoryEvents: [LexModelsV2ClientTypes.BotLocaleHistoryEvent]? + /// The status of the bot. If the status is Failed, the reasons for the failure are listed in the failureReasons field. + public var botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? + /// The version of the bot associated with the locale. + public var botVersion: Swift.String? + /// The date and time that the locale was created. + public var creationDateTime: ClientRuntime.Date? + /// The description of the locale. + public var description: Swift.String? + /// if botLocaleStatus is Failed, Amazon Lex explains why it failed to build the bot. + public var failureReasons: [Swift.String]? + /// The number of intents defined for the locale. + public var intentsCount: Swift.Int? + /// The date and time that the locale was last submitted for building. + public var lastBuildSubmittedDateTime: ClientRuntime.Date? + /// The date and time that the locale was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The unique identifier of the described locale. + public var localeId: Swift.String? + /// The name of the locale. + public var localeName: Swift.String? + /// The confidence threshold where Amazon Lex inserts the AMAZON.FallbackIntent and AMAZON.KendraSearchIntent intents in the list of possible intents for an utterance. + public var nluIntentConfidenceThreshold: Swift.Double? + /// Recommended actions to take to resolve an error in the failureReasons field. + public var recommendedActions: [Swift.String]? + /// The number of slot types defined for the locale. + public var slotTypesCount: Swift.Int? + /// The Amazon Polly voice Amazon Lex uses for voice interaction with the user. + public var voiceSettings: LexModelsV2ClientTypes.VoiceSettings? - public init( - errorCode: Swift.String? = nil, - errorMessage: Swift.String? = nil - ) - { - self.errorCode = errorCode - self.errorMessage = errorMessage - } + public init( + botId: Swift.String? = nil, + botLocaleHistoryEvents: [LexModelsV2ClientTypes.BotLocaleHistoryEvent]? = nil, + botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? = nil, + botVersion: Swift.String? = nil, + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + failureReasons: [Swift.String]? = nil, + intentsCount: Swift.Int? = nil, + lastBuildSubmittedDateTime: ClientRuntime.Date? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + localeId: Swift.String? = nil, + localeName: Swift.String? = nil, + nluIntentConfidenceThreshold: Swift.Double? = nil, + recommendedActions: [Swift.String]? = nil, + slotTypesCount: Swift.Int? = nil, + voiceSettings: LexModelsV2ClientTypes.VoiceSettings? = nil + ) + { + self.botId = botId + self.botLocaleHistoryEvents = botLocaleHistoryEvents + self.botLocaleStatus = botLocaleStatus + self.botVersion = botVersion + self.creationDateTime = creationDateTime + self.description = description + self.failureReasons = failureReasons + self.intentsCount = intentsCount + self.lastBuildSubmittedDateTime = lastBuildSubmittedDateTime + self.lastUpdatedDateTime = lastUpdatedDateTime + self.localeId = localeId + self.localeName = localeName + self.nluIntentConfidenceThreshold = nluIntentConfidenceThreshold + self.recommendedActions = recommendedActions + self.slotTypesCount = slotTypesCount + self.voiceSettings = voiceSettings } +} +struct DescribeBotLocaleOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let localeName: Swift.String? + let description: Swift.String? + let nluIntentConfidenceThreshold: Swift.Double? + let voiceSettings: LexModelsV2ClientTypes.VoiceSettings? + let intentsCount: Swift.Int? + let slotTypesCount: Swift.Int? + let botLocaleStatus: LexModelsV2ClientTypes.BotLocaleStatus? + let failureReasons: [Swift.String]? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? + let lastBuildSubmittedDateTime: ClientRuntime.Date? + let botLocaleHistoryEvents: [LexModelsV2ClientTypes.BotLocaleHistoryEvent]? + let recommendedActions: [Swift.String]? } -extension LexModelsV2ClientTypes.ExportFilter: Swift.Codable { +extension DescribeBotLocaleOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case name - case `operator` = "operator" - case values - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let name = self.name { - try encodeContainer.encode(name.rawValue, forKey: .name) - } - if let `operator` = self.`operator` { - try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) - } - if let values = values { - var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) - for filtervalue0 in values { - try valuesContainer.encode(filtervalue0) - } - } + case botId + case botLocaleHistoryEvents + case botLocaleStatus + case botVersion + case creationDateTime + case description + case failureReasons + case intentsCount + case lastBuildSubmittedDateTime + case lastUpdatedDateTime + case localeId + case localeName + case nluIntentConfidenceThreshold + case recommendedActions + case slotTypesCount + case voiceSettings } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportFilterName.self, forKey: .name) - name = nameDecoded - let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) - var valuesDecoded0:[Swift.String]? = nil - if let valuesContainer = valuesContainer { - valuesDecoded0 = [Swift.String]() - for string0 in valuesContainer { + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let localeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeName) + localeName = localeNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let nluIntentConfidenceThresholdDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .nluIntentConfidenceThreshold) + nluIntentConfidenceThreshold = nluIntentConfidenceThresholdDecoded + let voiceSettingsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.VoiceSettings.self, forKey: .voiceSettings) + voiceSettings = voiceSettingsDecoded + let intentsCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .intentsCount) + intentsCount = intentsCountDecoded + let slotTypesCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .slotTypesCount) + slotTypesCount = slotTypesCountDecoded + let botLocaleStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleStatus.self, forKey: .botLocaleStatus) + botLocaleStatus = botLocaleStatusDecoded + let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) + var failureReasonsDecoded0:[Swift.String]? = nil + if let failureReasonsContainer = failureReasonsContainer { + failureReasonsDecoded0 = [Swift.String]() + for string0 in failureReasonsContainer { if let string0 = string0 { - valuesDecoded0?.append(string0) + failureReasonsDecoded0?.append(string0) } } } - values = valuesDecoded0 - let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportFilterOperator.self, forKey: .operator) - `operator` = operatorDecoded - } -} - -extension LexModelsV2ClientTypes { - /// Filters the response form the [ListExports](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListExports.html) operation - public struct ExportFilter: Swift.Equatable { - /// The name of the field to use for filtering. - /// This member is required. - public var name: LexModelsV2ClientTypes.ExportFilterName? - /// The operator to use for the filter. Specify EQ when the ListExports operation should return only resource types that equal the specified value. Specify CO when the ListExports operation should return resource types that contain the specified value. - /// This member is required. - public var `operator`: LexModelsV2ClientTypes.ExportFilterOperator? - /// The values to use to filter the response. The values must be Bot, BotLocale, or CustomVocabulary. - /// This member is required. - public var values: [Swift.String]? - - public init( - name: LexModelsV2ClientTypes.ExportFilterName? = nil, - `operator`: LexModelsV2ClientTypes.ExportFilterOperator? = nil, - values: [Swift.String]? = nil - ) - { - self.name = name - self.`operator` = `operator` - self.values = values - } - } - -} - -extension LexModelsV2ClientTypes { - public enum ExportFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case exportresourcetype - case sdkUnknown(Swift.String) - - public static var allCases: [ExportFilterName] { - return [ - .exportresourcetype, - .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 .exportresourcetype: return "ExportResourceType" - case let .sdkUnknown(s): return s + failureReasons = failureReasonsDecoded0 + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let lastBuildSubmittedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastBuildSubmittedDateTime) + lastBuildSubmittedDateTime = lastBuildSubmittedDateTimeDecoded + let botLocaleHistoryEventsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotLocaleHistoryEvent?].self, forKey: .botLocaleHistoryEvents) + var botLocaleHistoryEventsDecoded0:[LexModelsV2ClientTypes.BotLocaleHistoryEvent]? = nil + if let botLocaleHistoryEventsContainer = botLocaleHistoryEventsContainer { + botLocaleHistoryEventsDecoded0 = [LexModelsV2ClientTypes.BotLocaleHistoryEvent]() + for structure0 in botLocaleHistoryEventsContainer { + if let structure0 = structure0 { + botLocaleHistoryEventsDecoded0?.append(structure0) + } } } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = ExportFilterName(rawValue: rawValue) ?? ExportFilterName.sdkUnknown(rawValue) + botLocaleHistoryEvents = botLocaleHistoryEventsDecoded0 + let recommendedActionsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .recommendedActions) + var recommendedActionsDecoded0:[Swift.String]? = nil + if let recommendedActionsContainer = recommendedActionsContainer { + recommendedActionsDecoded0 = [Swift.String]() + for string0 in recommendedActionsContainer { + if let string0 = string0 { + recommendedActionsDecoded0?.append(string0) + } + } } + recommendedActions = recommendedActionsDecoded0 } } -extension LexModelsV2ClientTypes { - public enum ExportFilterOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case contains - case equals - case sdkUnknown(Swift.String) - - public static var allCases: [ExportFilterOperator] { - return [ - .contains, - .equals, - .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 .contains: return "CO" - case .equals: return "EQ" - 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 = ExportFilterOperator(rawValue: rawValue) ?? ExportFilterOperator.sdkUnknown(rawValue) +public enum DescribeBotOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } } -extension LexModelsV2ClientTypes.ExportResourceSpecification: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botExportSpecification - case botLocaleExportSpecification - case customVocabularyExportSpecification - case testSetExportSpecification - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botExportSpecification = self.botExportSpecification { - try encodeContainer.encode(botExportSpecification, forKey: .botExportSpecification) - } - if let botLocaleExportSpecification = self.botLocaleExportSpecification { - try encodeContainer.encode(botLocaleExportSpecification, forKey: .botLocaleExportSpecification) - } - if let customVocabularyExportSpecification = self.customVocabularyExportSpecification { - try encodeContainer.encode(customVocabularyExportSpecification, forKey: .customVocabularyExportSpecification) - } - if let testSetExportSpecification = self.testSetExportSpecification { - try encodeContainer.encode(testSetExportSpecification, forKey: .testSetExportSpecification) +extension DescribeBotOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeBotOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botMembers = output.botMembers + self.botName = output.botName + self.botStatus = output.botStatus + self.botType = output.botType + self.creationDateTime = output.creationDateTime + self.dataPrivacy = output.dataPrivacy + self.description = output.description + self.failureReasons = output.failureReasons + self.idleSessionTTLInSeconds = output.idleSessionTTLInSeconds + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.roleArn = output.roleArn + } else { + self.botId = nil + self.botMembers = nil + self.botName = nil + self.botStatus = nil + self.botType = nil + self.creationDateTime = nil + self.dataPrivacy = nil + self.description = nil + self.failureReasons = nil + self.idleSessionTTLInSeconds = nil + self.lastUpdatedDateTime = nil + self.roleArn = nil } } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botExportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotExportSpecification.self, forKey: .botExportSpecification) - botExportSpecification = botExportSpecificationDecoded - let botLocaleExportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleExportSpecification.self, forKey: .botLocaleExportSpecification) - botLocaleExportSpecification = botLocaleExportSpecificationDecoded - let customVocabularyExportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CustomVocabularyExportSpecification.self, forKey: .customVocabularyExportSpecification) - customVocabularyExportSpecification = customVocabularyExportSpecificationDecoded - let testSetExportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetExportSpecification.self, forKey: .testSetExportSpecification) - testSetExportSpecification = testSetExportSpecificationDecoded - } } -extension LexModelsV2ClientTypes { - /// Provides information about the bot or bot locale that you want to export. You can specify the botExportSpecification or the botLocaleExportSpecification, but not both. - public struct ExportResourceSpecification: Swift.Equatable { - /// Parameters for exporting a bot. - public var botExportSpecification: LexModelsV2ClientTypes.BotExportSpecification? - /// Parameters for exporting a bot locale. - public var botLocaleExportSpecification: LexModelsV2ClientTypes.BotLocaleExportSpecification? - /// The parameters required to export a custom vocabulary. - public var customVocabularyExportSpecification: LexModelsV2ClientTypes.CustomVocabularyExportSpecification? - /// Specifications for the test set that is exported as a resource. - public var testSetExportSpecification: LexModelsV2ClientTypes.TestSetExportSpecification? +public struct DescribeBotOutputResponse: Swift.Equatable { + /// The unique identifier of the bot. + public var botId: Swift.String? + /// The list of bots in the network that was described. + public var botMembers: [LexModelsV2ClientTypes.BotMember]? + /// The name of the bot. + public var botName: Swift.String? + /// The current status of the bot. When the status is Available the bot is ready to be used in conversations with users. + public var botStatus: LexModelsV2ClientTypes.BotStatus? + /// The type of the bot that was described. + public var botType: LexModelsV2ClientTypes.BotType? + /// A timestamp of the date and time that the bot was created. + public var creationDateTime: ClientRuntime.Date? + /// Settings for managing data privacy of the bot and its conversations with users. + public var dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? + /// The description of the bot. + public var description: Swift.String? + /// If the botStatus is Failed, this contains a list of reasons that the bot couldn't be built. + public var failureReasons: [Swift.String]? + /// The maximum time in seconds that Amazon Lex retains the data gathered in a conversation. + public var idleSessionTTLInSeconds: Swift.Int? + /// A timestamp of the date and time that the bot was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The Amazon Resource Name (ARN) of an IAM role that has permission to access the bot. + public var roleArn: Swift.String? - public init( - botExportSpecification: LexModelsV2ClientTypes.BotExportSpecification? = nil, - botLocaleExportSpecification: LexModelsV2ClientTypes.BotLocaleExportSpecification? = nil, - customVocabularyExportSpecification: LexModelsV2ClientTypes.CustomVocabularyExportSpecification? = nil, - testSetExportSpecification: LexModelsV2ClientTypes.TestSetExportSpecification? = nil - ) - { - self.botExportSpecification = botExportSpecification - self.botLocaleExportSpecification = botLocaleExportSpecification - self.customVocabularyExportSpecification = customVocabularyExportSpecification - self.testSetExportSpecification = testSetExportSpecification - } + public init( + botId: Swift.String? = nil, + botMembers: [LexModelsV2ClientTypes.BotMember]? = nil, + botName: Swift.String? = nil, + botStatus: LexModelsV2ClientTypes.BotStatus? = nil, + botType: LexModelsV2ClientTypes.BotType? = nil, + creationDateTime: ClientRuntime.Date? = nil, + dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? = nil, + description: Swift.String? = nil, + failureReasons: [Swift.String]? = nil, + idleSessionTTLInSeconds: Swift.Int? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + roleArn: Swift.String? = nil + ) + { + self.botId = botId + self.botMembers = botMembers + self.botName = botName + self.botStatus = botStatus + self.botType = botType + self.creationDateTime = creationDateTime + self.dataPrivacy = dataPrivacy + self.description = description + self.failureReasons = failureReasons + self.idleSessionTTLInSeconds = idleSessionTTLInSeconds + self.lastUpdatedDateTime = lastUpdatedDateTime + self.roleArn = roleArn } - } -extension LexModelsV2ClientTypes { - public enum ExportSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case lastupdateddatetime - case sdkUnknown(Swift.String) - - public static var allCases: [ExportSortAttribute] { - return [ - .lastupdateddatetime, - .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 .lastupdateddatetime: return "LastUpdatedDateTime" - 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 = ExportSortAttribute(rawValue: rawValue) ?? ExportSortAttribute.sdkUnknown(rawValue) - } - } +struct DescribeBotOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botName: Swift.String? + let description: Swift.String? + let roleArn: Swift.String? + let dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? + let idleSessionTTLInSeconds: Swift.Int? + let botStatus: LexModelsV2ClientTypes.BotStatus? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? + let botType: LexModelsV2ClientTypes.BotType? + let botMembers: [LexModelsV2ClientTypes.BotMember]? + let failureReasons: [Swift.String]? } -extension LexModelsV2ClientTypes.ExportSortBy: Swift.Codable { +extension DescribeBotOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case attribute - case order - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let attribute = self.attribute { - try encodeContainer.encode(attribute.rawValue, forKey: .attribute) - } - if let order = self.order { - try encodeContainer.encode(order.rawValue, forKey: .order) - } + case botId + case botMembers + case botName + case botStatus + case botType + case creationDateTime + case dataPrivacy + case description + case failureReasons + case idleSessionTTLInSeconds + case lastUpdatedDateTime + case roleArn } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportSortAttribute.self, forKey: .attribute) - attribute = attributeDecoded - let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) - order = orderDecoded - } -} - -extension LexModelsV2ClientTypes { - /// Provides information about sorting a list of exports. - public struct ExportSortBy: Swift.Equatable { - /// The export field to use for sorting. - /// This member is required. - public var attribute: LexModelsV2ClientTypes.ExportSortAttribute? - /// The order to sort the list. - /// This member is required. - public var order: LexModelsV2ClientTypes.SortOrder? - - public init( - attribute: LexModelsV2ClientTypes.ExportSortAttribute? = nil, - order: LexModelsV2ClientTypes.SortOrder? = nil - ) - { - self.attribute = attribute - self.order = order + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) + botName = botNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + let dataPrivacyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DataPrivacy.self, forKey: .dataPrivacy) + dataPrivacy = dataPrivacyDecoded + let idleSessionTTLInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .idleSessionTTLInSeconds) + idleSessionTTLInSeconds = idleSessionTTLInSecondsDecoded + let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) + botStatus = botStatusDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let botTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotType.self, forKey: .botType) + botType = botTypeDecoded + let botMembersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotMember?].self, forKey: .botMembers) + var botMembersDecoded0:[LexModelsV2ClientTypes.BotMember]? = nil + if let botMembersContainer = botMembersContainer { + botMembersDecoded0 = [LexModelsV2ClientTypes.BotMember]() + for structure0 in botMembersContainer { + if let structure0 = structure0 { + botMembersDecoded0?.append(structure0) + } + } + } + botMembers = botMembersDecoded0 + let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) + var failureReasonsDecoded0:[Swift.String]? = nil + if let failureReasonsContainer = failureReasonsContainer { + failureReasonsDecoded0 = [Swift.String]() + for string0 in failureReasonsContainer { + if let string0 = string0 { + failureReasonsDecoded0?.append(string0) + } + } } + failureReasons = failureReasonsDecoded0 } - } -extension LexModelsV2ClientTypes { - public enum ExportStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case completed - case deleting - case failed - case inprogress - case sdkUnknown(Swift.String) - - public static var allCases: [ExportStatus] { - return [ - .completed, - .deleting, - .failed, - .inprogress, - .sdkUnknown("") - ] +extension DescribeBotRecommendationInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + guard let botVersion = botVersion else { + return nil } - public var rawValue: Swift.String { - switch self { - case .completed: return "Completed" - case .deleting: return "Deleting" - case .failed: return "Failed" - case .inprogress: return "InProgress" - case let .sdkUnknown(s): return s - } + guard let localeId = localeId else { + return nil } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = ExportStatus(rawValue: rawValue) ?? ExportStatus.sdkUnknown(rawValue) + guard let botRecommendationId = botRecommendationId else { + return nil } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/botrecommendations/\(botRecommendationId.urlPercentEncoding())" } } -extension LexModelsV2ClientTypes.ExportSummary: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case creationDateTime - case exportId - case exportStatus - case fileFormat - case lastUpdatedDateTime - case resourceSpecification - } +public struct DescribeBotRecommendationInput: Swift.Equatable { + /// The unique identifier of the bot associated with the bot recommendation. + /// This member is required. + public var botId: Swift.String? + /// The identifier of the bot recommendation to describe. + /// This member is required. + public var botRecommendationId: Swift.String? + /// The version of the bot associated with the bot recommendation. + /// This member is required. + public var botVersion: Swift.String? + /// The identifier of the language and locale of the bot recommendation to describe. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let creationDateTime = self.creationDateTime { - try encodeContainer.encodeTimestamp(creationDateTime, format: .epochSeconds, forKey: .creationDateTime) - } - if let exportId = self.exportId { - try encodeContainer.encode(exportId, forKey: .exportId) - } - if let exportStatus = self.exportStatus { - try encodeContainer.encode(exportStatus.rawValue, forKey: .exportStatus) - } - if let fileFormat = self.fileFormat { - try encodeContainer.encode(fileFormat.rawValue, forKey: .fileFormat) - } - if let lastUpdatedDateTime = self.lastUpdatedDateTime { - try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) - } - if let resourceSpecification = self.resourceSpecification { - try encodeContainer.encode(resourceSpecification, forKey: .resourceSpecification) - } + public init( + botId: Swift.String? = nil, + botRecommendationId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil + ) + { + self.botId = botId + self.botRecommendationId = botRecommendationId + self.botVersion = botVersion + self.localeId = localeId } +} + +struct DescribeBotRecommendationInputBody: Swift.Equatable { +} + +extension DescribeBotRecommendationInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let exportIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .exportId) - exportId = exportIdDecoded - let resourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportResourceSpecification.self, forKey: .resourceSpecification) - resourceSpecification = resourceSpecificationDecoded - let fileFormatDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportExportFileFormat.self, forKey: .fileFormat) - fileFormat = fileFormatDecoded - let exportStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportStatus.self, forKey: .exportStatus) - exportStatus = exportStatusDecoded - let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) - creationDateTime = creationDateTimeDecoded - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded } } -extension LexModelsV2ClientTypes { - /// Provides summary information about an export in an export list. - public struct ExportSummary: Swift.Equatable { - /// The date and time that the export was created. - public var creationDateTime: ClientRuntime.Date? - /// The unique identifier that Amazon Lex assigned to the export. - public var exportId: Swift.String? - /// The status of the export. When the status is Completed the export is ready to download. - public var exportStatus: LexModelsV2ClientTypes.ExportStatus? - /// The file format used in the export files. - public var fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? - /// The date and time that the export was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// Information about the bot or bot locale that was exported. - public var resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? - - public init( - creationDateTime: ClientRuntime.Date? = nil, - exportId: Swift.String? = nil, - exportStatus: LexModelsV2ClientTypes.ExportStatus? = nil, - fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? = nil - ) - { - self.creationDateTime = creationDateTime - self.exportId = exportId - self.exportStatus = exportStatus - self.fileFormat = fileFormat - self.lastUpdatedDateTime = lastUpdatedDateTime - self.resourceSpecification = resourceSpecification +public enum DescribeBotRecommendationOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } - } -extension LexModelsV2ClientTypes.ExternalSourceSetting: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case grammarSlotTypeSetting - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let grammarSlotTypeSetting = self.grammarSlotTypeSetting { - try encodeContainer.encode(grammarSlotTypeSetting, forKey: .grammarSlotTypeSetting) +extension DescribeBotRecommendationOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeBotRecommendationOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botRecommendationId = output.botRecommendationId + self.botRecommendationResults = output.botRecommendationResults + self.botRecommendationStatus = output.botRecommendationStatus + self.botVersion = output.botVersion + self.creationDateTime = output.creationDateTime + self.encryptionSetting = output.encryptionSetting + self.failureReasons = output.failureReasons + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.localeId = output.localeId + self.transcriptSourceSetting = output.transcriptSourceSetting + } else { + self.botId = nil + self.botRecommendationId = nil + self.botRecommendationResults = nil + self.botRecommendationStatus = nil + self.botVersion = nil + self.creationDateTime = nil + self.encryptionSetting = nil + self.failureReasons = nil + self.lastUpdatedDateTime = nil + self.localeId = nil + self.transcriptSourceSetting = nil } } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let grammarSlotTypeSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.GrammarSlotTypeSetting.self, forKey: .grammarSlotTypeSetting) - grammarSlotTypeSetting = grammarSlotTypeSettingDecoded - } } -extension LexModelsV2ClientTypes { - /// Provides information about the external source of the slot type's definition. - public struct ExternalSourceSetting: Swift.Equatable { - /// Settings required for a slot type based on a grammar that you provide. - public var grammarSlotTypeSetting: LexModelsV2ClientTypes.GrammarSlotTypeSetting? +public struct DescribeBotRecommendationOutputResponse: Swift.Equatable { + /// The identifier of the bot associated with the bot recommendation. + public var botId: Swift.String? + /// The identifier of the bot recommendation being described. + public var botRecommendationId: Swift.String? + /// The object representing the URL of the bot definition, the URL of the associated transcript and a statistical summary of the bot recommendation results. + public var botRecommendationResults: LexModelsV2ClientTypes.BotRecommendationResults? + /// The status of the bot recommendation. If the status is Failed, then the reasons for the failure are listed in the failureReasons field. + public var botRecommendationStatus: LexModelsV2ClientTypes.BotRecommendationStatus? + /// The version of the bot associated with the bot recommendation. + public var botVersion: Swift.String? + /// The date and time that the bot recommendation was created. + public var creationDateTime: ClientRuntime.Date? + /// The object representing the passwords that were used to encrypt the data related to the bot recommendation results, as well as the KMS key ARN used to encrypt the associated metadata. + public var encryptionSetting: LexModelsV2ClientTypes.EncryptionSetting? + /// If botRecommendationStatus is Failed, Amazon Lex explains why. + public var failureReasons: [Swift.String]? + /// The date and time that the bot recommendation was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The identifier of the language and locale of the bot recommendation to describe. + public var localeId: Swift.String? + /// The object representing the Amazon S3 bucket containing the transcript, as well as the associated metadata. + public var transcriptSourceSetting: LexModelsV2ClientTypes.TranscriptSourceSetting? - public init( - grammarSlotTypeSetting: LexModelsV2ClientTypes.GrammarSlotTypeSetting? = nil - ) - { - self.grammarSlotTypeSetting = grammarSlotTypeSetting - } + public init( + botId: Swift.String? = nil, + botRecommendationId: Swift.String? = nil, + botRecommendationResults: LexModelsV2ClientTypes.BotRecommendationResults? = nil, + botRecommendationStatus: LexModelsV2ClientTypes.BotRecommendationStatus? = nil, + botVersion: Swift.String? = nil, + creationDateTime: ClientRuntime.Date? = nil, + encryptionSetting: LexModelsV2ClientTypes.EncryptionSetting? = nil, + failureReasons: [Swift.String]? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + localeId: Swift.String? = nil, + transcriptSourceSetting: LexModelsV2ClientTypes.TranscriptSourceSetting? = nil + ) + { + self.botId = botId + self.botRecommendationId = botRecommendationId + self.botRecommendationResults = botRecommendationResults + self.botRecommendationStatus = botRecommendationStatus + self.botVersion = botVersion + self.creationDateTime = creationDateTime + self.encryptionSetting = encryptionSetting + self.failureReasons = failureReasons + self.lastUpdatedDateTime = lastUpdatedDateTime + self.localeId = localeId + self.transcriptSourceSetting = transcriptSourceSetting } +} +struct DescribeBotRecommendationOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let botRecommendationStatus: LexModelsV2ClientTypes.BotRecommendationStatus? + let botRecommendationId: Swift.String? + let failureReasons: [Swift.String]? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? + let transcriptSourceSetting: LexModelsV2ClientTypes.TranscriptSourceSetting? + let encryptionSetting: LexModelsV2ClientTypes.EncryptionSetting? + let botRecommendationResults: LexModelsV2ClientTypes.BotRecommendationResults? } -extension LexModelsV2ClientTypes.FailedCustomVocabularyItem: Swift.Codable { +extension DescribeBotRecommendationOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case errorCode - case errorMessage - case itemId + case botId + case botRecommendationId + case botRecommendationResults + case botRecommendationStatus + case botVersion + case creationDateTime + case encryptionSetting + case failureReasons + case lastUpdatedDateTime + case localeId + case transcriptSourceSetting } - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let errorCode = self.errorCode { - try encodeContainer.encode(errorCode.rawValue, forKey: .errorCode) - } - if let errorMessage = self.errorMessage { - try encodeContainer.encode(errorMessage, forKey: .errorMessage) - } - if let itemId = self.itemId { - try encodeContainer.encode(itemId, forKey: .itemId) + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let botRecommendationStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotRecommendationStatus.self, forKey: .botRecommendationStatus) + botRecommendationStatus = botRecommendationStatusDecoded + let botRecommendationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botRecommendationId) + botRecommendationId = botRecommendationIdDecoded + let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) + var failureReasonsDecoded0:[Swift.String]? = nil + if let failureReasonsContainer = failureReasonsContainer { + failureReasonsDecoded0 = [Swift.String]() + for string0 in failureReasonsContainer { + if let string0 = string0 { + failureReasonsDecoded0?.append(string0) + } + } } + failureReasons = failureReasonsDecoded0 + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let transcriptSourceSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TranscriptSourceSetting.self, forKey: .transcriptSourceSetting) + transcriptSourceSetting = transcriptSourceSettingDecoded + let encryptionSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.EncryptionSetting.self, forKey: .encryptionSetting) + encryptionSetting = encryptionSettingDecoded + let botRecommendationResultsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotRecommendationResults.self, forKey: .botRecommendationResults) + botRecommendationResults = botRecommendationResultsDecoded } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let itemIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .itemId) - itemId = itemIdDecoded - let errorMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorMessage) - errorMessage = errorMessageDecoded - let errorCodeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ErrorCode.self, forKey: .errorCode) - errorCode = errorCodeDecoded +extension DescribeBotVersionInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil + } + guard let botVersion = botVersion else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())" } } -extension LexModelsV2ClientTypes { - /// The unique failed custom vocabulary item from the custom vocabulary list. - public struct FailedCustomVocabularyItem: Swift.Equatable { - /// The unique error code for the failed custom vocabulary item from the custom vocabulary list. - public var errorCode: LexModelsV2ClientTypes.ErrorCode? - /// The error message for the failed custom vocabulary item from the custom vocabulary list. - public var errorMessage: Swift.String? - /// The unique item identifer for the failed custom vocabulary item from the custom vocabulary list. - public var itemId: Swift.String? +public struct DescribeBotVersionInput: Swift.Equatable { + /// The identifier of the bot containing the version to return metadata for. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot to return metadata for. + /// This member is required. + public var botVersion: Swift.String? - public init( - errorCode: LexModelsV2ClientTypes.ErrorCode? = nil, - errorMessage: Swift.String? = nil, - itemId: Swift.String? = nil - ) - { - self.errorCode = errorCode - self.errorMessage = errorMessage - self.itemId = itemId - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion } +} +struct DescribeBotVersionInputBody: Swift.Equatable { } -extension LexModelsV2ClientTypes.FulfillmentCodeHookSettings: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case active - case enabled - case fulfillmentUpdatesSpecification - case postFulfillmentStatusSpecification +extension DescribeBotVersionInputBody: 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 active = self.active { - try encodeContainer.encode(active, forKey: .active) - } - if enabled != false { - try encodeContainer.encode(enabled, forKey: .enabled) - } - if let fulfillmentUpdatesSpecification = self.fulfillmentUpdatesSpecification { - try encodeContainer.encode(fulfillmentUpdatesSpecification, forKey: .fulfillmentUpdatesSpecification) - } - if let postFulfillmentStatusSpecification = self.postFulfillmentStatusSpecification { - try encodeContainer.encode(postFulfillmentStatusSpecification, forKey: .postFulfillmentStatusSpecification) +public enum DescribeBotVersionOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) ?? false - enabled = enabledDecoded - let postFulfillmentStatusSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.PostFulfillmentStatusSpecification.self, forKey: .postFulfillmentStatusSpecification) - postFulfillmentStatusSpecification = postFulfillmentStatusSpecificationDecoded - let fulfillmentUpdatesSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentUpdatesSpecification.self, forKey: .fulfillmentUpdatesSpecification) - fulfillmentUpdatesSpecification = fulfillmentUpdatesSpecificationDecoded - let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) - active = activeDecoded +extension DescribeBotVersionOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeBotVersionOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botMembers = output.botMembers + self.botName = output.botName + self.botStatus = output.botStatus + self.botType = output.botType + self.botVersion = output.botVersion + self.creationDateTime = output.creationDateTime + self.dataPrivacy = output.dataPrivacy + self.description = output.description + self.failureReasons = output.failureReasons + self.idleSessionTTLInSeconds = output.idleSessionTTLInSeconds + self.parentBotNetworks = output.parentBotNetworks + self.roleArn = output.roleArn + } else { + self.botId = nil + self.botMembers = nil + self.botName = nil + self.botStatus = nil + self.botType = nil + self.botVersion = nil + self.creationDateTime = nil + self.dataPrivacy = nil + self.description = nil + self.failureReasons = nil + self.idleSessionTTLInSeconds = nil + self.parentBotNetworks = nil + self.roleArn = nil + } } } -extension LexModelsV2ClientTypes { - /// Determines if a Lambda function should be invoked for a specific intent. - public struct FulfillmentCodeHookSettings: Swift.Equatable { - /// Determines whether the fulfillment code hook is used. When active is false, the code hook doesn't run. - public var active: Swift.Bool? - /// Indicates whether a Lambda function should be invoked to fulfill a specific intent. - /// This member is required. - public var enabled: Swift.Bool - /// Provides settings for update messages sent to the user for long-running Lambda fulfillment functions. Fulfillment updates can be used only with streaming conversations. - public var fulfillmentUpdatesSpecification: LexModelsV2ClientTypes.FulfillmentUpdatesSpecification? - /// Provides settings for messages sent to the user for after the Lambda fulfillment function completes. Post-fulfillment messages can be sent for both streaming and non-streaming conversations. - public var postFulfillmentStatusSpecification: LexModelsV2ClientTypes.PostFulfillmentStatusSpecification? +public struct DescribeBotVersionOutputResponse: Swift.Equatable { + /// The identifier of the bot that contains the version. + public var botId: Swift.String? + /// The members of bot network in the version that was described. + public var botMembers: [LexModelsV2ClientTypes.BotMember]? + /// The name of the bot that contains the version. + public var botName: Swift.String? + /// The current status of the bot. When the status is Available, the bot version is ready for use. + public var botStatus: LexModelsV2ClientTypes.BotStatus? + /// The type of the bot in the version that was described. + public var botType: LexModelsV2ClientTypes.BotType? + /// The version of the bot that was described. + public var botVersion: Swift.String? + /// A timestamp of the date and time that the bot version was created. + public var creationDateTime: ClientRuntime.Date? + /// Data privacy settings for the bot version. + public var dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? + /// The description specified for the bot. + public var description: Swift.String? + /// If the botStatus is Failed, this contains a list of reasons that the version couldn't be built. + public var failureReasons: [Swift.String]? + /// The number of seconds that a session with the bot remains active before it is discarded by Amazon Lex. + public var idleSessionTTLInSeconds: Swift.Int? + /// A list of the networks to which the bot version you described belongs. + public var parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? + /// The Amazon Resource Name (ARN) of an IAM role that has permission to access the bot version. + public var roleArn: Swift.String? - public init( - active: Swift.Bool? = nil, - enabled: Swift.Bool = false, - fulfillmentUpdatesSpecification: LexModelsV2ClientTypes.FulfillmentUpdatesSpecification? = nil, - postFulfillmentStatusSpecification: LexModelsV2ClientTypes.PostFulfillmentStatusSpecification? = nil - ) - { - self.active = active - self.enabled = enabled - self.fulfillmentUpdatesSpecification = fulfillmentUpdatesSpecification - self.postFulfillmentStatusSpecification = postFulfillmentStatusSpecification - } + public init( + botId: Swift.String? = nil, + botMembers: [LexModelsV2ClientTypes.BotMember]? = nil, + botName: Swift.String? = nil, + botStatus: LexModelsV2ClientTypes.BotStatus? = nil, + botType: LexModelsV2ClientTypes.BotType? = nil, + botVersion: Swift.String? = nil, + creationDateTime: ClientRuntime.Date? = nil, + dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? = nil, + description: Swift.String? = nil, + failureReasons: [Swift.String]? = nil, + idleSessionTTLInSeconds: Swift.Int? = nil, + parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? = nil, + roleArn: Swift.String? = nil + ) + { + self.botId = botId + self.botMembers = botMembers + self.botName = botName + self.botStatus = botStatus + self.botType = botType + self.botVersion = botVersion + self.creationDateTime = creationDateTime + self.dataPrivacy = dataPrivacy + self.description = description + self.failureReasons = failureReasons + self.idleSessionTTLInSeconds = idleSessionTTLInSeconds + self.parentBotNetworks = parentBotNetworks + self.roleArn = roleArn } +} +struct DescribeBotVersionOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botName: Swift.String? + let botVersion: Swift.String? + let description: Swift.String? + let roleArn: Swift.String? + let dataPrivacy: LexModelsV2ClientTypes.DataPrivacy? + let idleSessionTTLInSeconds: Swift.Int? + let botStatus: LexModelsV2ClientTypes.BotStatus? + let failureReasons: [Swift.String]? + let creationDateTime: ClientRuntime.Date? + let parentBotNetworks: [LexModelsV2ClientTypes.ParentBotNetwork]? + let botType: LexModelsV2ClientTypes.BotType? + let botMembers: [LexModelsV2ClientTypes.BotMember]? } -extension LexModelsV2ClientTypes.FulfillmentStartResponseSpecification: Swift.Codable { +extension DescribeBotVersionOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case allowInterrupt - case delayInSeconds - case messageGroups - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let allowInterrupt = self.allowInterrupt { - try encodeContainer.encode(allowInterrupt, forKey: .allowInterrupt) - } - if let delayInSeconds = self.delayInSeconds { - try encodeContainer.encode(delayInSeconds, forKey: .delayInSeconds) - } - if let messageGroups = messageGroups { - var messageGroupsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .messageGroups) - for messagegroup0 in messageGroups { - try messageGroupsContainer.encode(messagegroup0) - } - } + case botId + case botMembers + case botName + case botStatus + case botType + case botVersion + case creationDateTime + case dataPrivacy + case description + case failureReasons + case idleSessionTTLInSeconds + case parentBotNetworks + case roleArn } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let delayInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .delayInSeconds) - delayInSeconds = delayInSecondsDecoded - let messageGroupsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.MessageGroup?].self, forKey: .messageGroups) - var messageGroupsDecoded0:[LexModelsV2ClientTypes.MessageGroup]? = nil - if let messageGroupsContainer = messageGroupsContainer { - messageGroupsDecoded0 = [LexModelsV2ClientTypes.MessageGroup]() - for structure0 in messageGroupsContainer { + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botName) + botName = botNameDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + let dataPrivacyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DataPrivacy.self, forKey: .dataPrivacy) + dataPrivacy = dataPrivacyDecoded + let idleSessionTTLInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .idleSessionTTLInSeconds) + idleSessionTTLInSeconds = idleSessionTTLInSecondsDecoded + let botStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotStatus.self, forKey: .botStatus) + botStatus = botStatusDecoded + let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) + var failureReasonsDecoded0:[Swift.String]? = nil + if let failureReasonsContainer = failureReasonsContainer { + failureReasonsDecoded0 = [Swift.String]() + for string0 in failureReasonsContainer { + if let string0 = string0 { + failureReasonsDecoded0?.append(string0) + } + } + } + failureReasons = failureReasonsDecoded0 + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let parentBotNetworksContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ParentBotNetwork?].self, forKey: .parentBotNetworks) + var parentBotNetworksDecoded0:[LexModelsV2ClientTypes.ParentBotNetwork]? = nil + if let parentBotNetworksContainer = parentBotNetworksContainer { + parentBotNetworksDecoded0 = [LexModelsV2ClientTypes.ParentBotNetwork]() + for structure0 in parentBotNetworksContainer { if let structure0 = structure0 { - messageGroupsDecoded0?.append(structure0) + parentBotNetworksDecoded0?.append(structure0) } } } - messageGroups = messageGroupsDecoded0 - let allowInterruptDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .allowInterrupt) - allowInterrupt = allowInterruptDecoded - } -} - -extension LexModelsV2ClientTypes { - /// Provides settings for a message that is sent to the user when a fulfillment Lambda function starts running. - public struct FulfillmentStartResponseSpecification: Swift.Equatable { - /// Determines whether the user can interrupt the start message while it is playing. - public var allowInterrupt: Swift.Bool? - /// The delay between when the Lambda fulfillment function starts running and the start message is played. If the Lambda function returns before the delay is over, the start message isn't played. - /// This member is required. - public var delayInSeconds: Swift.Int? - /// 1 - 5 message groups that contain start messages. Amazon Lex chooses one of the messages to play to the user. - /// This member is required. - public var messageGroups: [LexModelsV2ClientTypes.MessageGroup]? - - public init( - allowInterrupt: Swift.Bool? = nil, - delayInSeconds: Swift.Int? = nil, - messageGroups: [LexModelsV2ClientTypes.MessageGroup]? = nil - ) - { - self.allowInterrupt = allowInterrupt - self.delayInSeconds = delayInSeconds - self.messageGroups = messageGroups - } - } - -} - -extension LexModelsV2ClientTypes.FulfillmentUpdateResponseSpecification: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case allowInterrupt - case frequencyInSeconds - case messageGroups - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let allowInterrupt = self.allowInterrupt { - try encodeContainer.encode(allowInterrupt, forKey: .allowInterrupt) - } - if let frequencyInSeconds = self.frequencyInSeconds { - try encodeContainer.encode(frequencyInSeconds, forKey: .frequencyInSeconds) - } - if let messageGroups = messageGroups { - var messageGroupsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .messageGroups) - for messagegroup0 in messageGroups { - try messageGroupsContainer.encode(messagegroup0) - } - } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let frequencyInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .frequencyInSeconds) - frequencyInSeconds = frequencyInSecondsDecoded - let messageGroupsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.MessageGroup?].self, forKey: .messageGroups) - var messageGroupsDecoded0:[LexModelsV2ClientTypes.MessageGroup]? = nil - if let messageGroupsContainer = messageGroupsContainer { - messageGroupsDecoded0 = [LexModelsV2ClientTypes.MessageGroup]() - for structure0 in messageGroupsContainer { + parentBotNetworks = parentBotNetworksDecoded0 + let botTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotType.self, forKey: .botType) + botType = botTypeDecoded + let botMembersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotMember?].self, forKey: .botMembers) + var botMembersDecoded0:[LexModelsV2ClientTypes.BotMember]? = nil + if let botMembersContainer = botMembersContainer { + botMembersDecoded0 = [LexModelsV2ClientTypes.BotMember]() + for structure0 in botMembersContainer { if let structure0 = structure0 { - messageGroupsDecoded0?.append(structure0) + botMembersDecoded0?.append(structure0) } } } - messageGroups = messageGroupsDecoded0 - let allowInterruptDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .allowInterrupt) - allowInterrupt = allowInterruptDecoded - } -} - -extension LexModelsV2ClientTypes { - /// Provides settings for a message that is sent periodically to the user while a fulfillment Lambda function is running. - public struct FulfillmentUpdateResponseSpecification: Swift.Equatable { - /// Determines whether the user can interrupt an update message while it is playing. - public var allowInterrupt: Swift.Bool? - /// The frequency that a message is sent to the user. When the period ends, Amazon Lex chooses a message from the message groups and plays it to the user. If the fulfillment Lambda returns before the first period ends, an update message is not played to the user. - /// This member is required. - public var frequencyInSeconds: Swift.Int? - /// 1 - 5 message groups that contain update messages. Amazon Lex chooses one of the messages to play to the user. - /// This member is required. - public var messageGroups: [LexModelsV2ClientTypes.MessageGroup]? - - public init( - allowInterrupt: Swift.Bool? = nil, - frequencyInSeconds: Swift.Int? = nil, - messageGroups: [LexModelsV2ClientTypes.MessageGroup]? = nil - ) - { - self.allowInterrupt = allowInterrupt - self.frequencyInSeconds = frequencyInSeconds - self.messageGroups = messageGroups - } + botMembers = botMembersDecoded0 } - } -extension LexModelsV2ClientTypes.FulfillmentUpdatesSpecification: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case active - case startResponse - case timeoutInSeconds - case updateResponse - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let active = self.active { - try encodeContainer.encode(active, forKey: .active) - } - if let startResponse = self.startResponse { - try encodeContainer.encode(startResponse, forKey: .startResponse) - } - if let timeoutInSeconds = self.timeoutInSeconds { - try encodeContainer.encode(timeoutInSeconds, forKey: .timeoutInSeconds) - } - if let updateResponse = self.updateResponse { - try encodeContainer.encode(updateResponse, forKey: .updateResponse) +extension DescribeCustomVocabularyMetadataInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) - active = activeDecoded - let startResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentStartResponseSpecification.self, forKey: .startResponse) - startResponse = startResponseDecoded - let updateResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentUpdateResponseSpecification.self, forKey: .updateResponse) - updateResponse = updateResponseDecoded - let timeoutInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .timeoutInSeconds) - timeoutInSeconds = timeoutInSecondsDecoded - } -} - -extension LexModelsV2ClientTypes { - /// Provides information for updating the user on the progress of fulfilling an intent. - public struct FulfillmentUpdatesSpecification: Swift.Equatable { - /// Determines whether fulfillment updates are sent to the user. When this field is true, updates are sent. If the active field is set to true, the startResponse, updateResponse, and timeoutInSeconds fields are required. - /// This member is required. - public var active: Swift.Bool? - /// Provides configuration information for the message sent to users when the fulfillment Lambda functions starts running. - public var startResponse: LexModelsV2ClientTypes.FulfillmentStartResponseSpecification? - /// The length of time that the fulfillment Lambda function should run before it times out. - public var timeoutInSeconds: Swift.Int? - /// Provides configuration information for messages sent periodically to the user while the fulfillment Lambda function is running. - public var updateResponse: LexModelsV2ClientTypes.FulfillmentUpdateResponseSpecification? - - public init( - active: Swift.Bool? = nil, - startResponse: LexModelsV2ClientTypes.FulfillmentStartResponseSpecification? = nil, - timeoutInSeconds: Swift.Int? = nil, - updateResponse: LexModelsV2ClientTypes.FulfillmentUpdateResponseSpecification? = nil - ) - { - self.active = active - self.startResponse = startResponse - self.timeoutInSeconds = timeoutInSeconds - self.updateResponse = updateResponse + guard let botVersion = botVersion else { + return nil } - } - -} - -extension GetTestExecutionArtifactsUrlInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let testExecutionId = testExecutionId else { + guard let localeId = localeId else { return nil } - return "/testexecutions/\(testExecutionId.urlPercentEncoding())/artifacturl" + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary/DEFAULT/metadata" } } -public struct GetTestExecutionArtifactsUrlInput: Swift.Equatable { - /// The unique identifier of the completed test execution. +public struct DescribeCustomVocabularyMetadataInput: Swift.Equatable { + /// The unique identifier of the bot that contains the custom vocabulary. /// This member is required. - public var testExecutionId: Swift.String? + public var botId: Swift.String? + /// The bot version of the bot to return metadata for. + /// This member is required. + public var botVersion: Swift.String? + /// The locale to return the custom vocabulary information for. The locale must be en_GB. + /// This member is required. + public var localeId: Swift.String? public init( - testExecutionId: Swift.String? = nil + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil ) { - self.testExecutionId = testExecutionId + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId } } -struct GetTestExecutionArtifactsUrlInputBody: Swift.Equatable { +struct DescribeCustomVocabularyMetadataInputBody: Swift.Equatable { } -extension GetTestExecutionArtifactsUrlInputBody: Swift.Decodable { +extension DescribeCustomVocabularyMetadataInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { } } -public enum GetTestExecutionArtifactsUrlOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum DescribeCustomVocabularyMetadataOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -14331,2041 +14114,6677 @@ public enum GetTestExecutionArtifactsUrlOutputError: ClientRuntime.HttpResponseE } } -extension GetTestExecutionArtifactsUrlOutputResponse: ClientRuntime.HttpResponseBinding { +extension DescribeCustomVocabularyMetadataOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: GetTestExecutionArtifactsUrlOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.downloadArtifactsUrl = output.downloadArtifactsUrl - self.testExecutionId = output.testExecutionId + let output: DescribeCustomVocabularyMetadataOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botVersion = output.botVersion + self.creationDateTime = output.creationDateTime + self.customVocabularyStatus = output.customVocabularyStatus + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.localeId = output.localeId } else { - self.downloadArtifactsUrl = nil - self.testExecutionId = nil + self.botId = nil + self.botVersion = nil + self.creationDateTime = nil + self.customVocabularyStatus = nil + self.lastUpdatedDateTime = nil + self.localeId = nil } } } -public struct GetTestExecutionArtifactsUrlOutputResponse: Swift.Equatable { - /// The pre-signed Amazon S3 URL to download completed test execution. - public var downloadArtifactsUrl: Swift.String? - /// The unique identifier of the completed test execution. - public var testExecutionId: Swift.String? +public struct DescribeCustomVocabularyMetadataOutputResponse: Swift.Equatable { + /// The identifier of the bot that contains the custom vocabulary. + public var botId: Swift.String? + /// The version of the bot that contains the custom vocabulary to describe. + public var botVersion: Swift.String? + /// The date and time that the custom vocabulary was created. + public var creationDateTime: ClientRuntime.Date? + /// The status of the custom vocabulary. If the status is Ready the custom vocabulary is ready to use. + public var customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? + /// The date and time that the custom vocabulary was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The locale that contains the custom vocabulary to describe. + public var localeId: Swift.String? public init( - downloadArtifactsUrl: Swift.String? = nil, - testExecutionId: Swift.String? = nil + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + creationDateTime: ClientRuntime.Date? = nil, + customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + localeId: Swift.String? = nil ) { - self.downloadArtifactsUrl = downloadArtifactsUrl - self.testExecutionId = testExecutionId + self.botId = botId + self.botVersion = botVersion + self.creationDateTime = creationDateTime + self.customVocabularyStatus = customVocabularyStatus + self.lastUpdatedDateTime = lastUpdatedDateTime + self.localeId = localeId } } -struct GetTestExecutionArtifactsUrlOutputResponseBody: Swift.Equatable { - let testExecutionId: Swift.String? - let downloadArtifactsUrl: Swift.String? -} +struct DescribeCustomVocabularyMetadataOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let customVocabularyStatus: LexModelsV2ClientTypes.CustomVocabularyStatus? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? +} -extension GetTestExecutionArtifactsUrlOutputResponseBody: Swift.Decodable { +extension DescribeCustomVocabularyMetadataOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case downloadArtifactsUrl - case testExecutionId + case botId + case botVersion + case creationDateTime + case customVocabularyStatus + case lastUpdatedDateTime + case localeId } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let testExecutionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testExecutionId) - testExecutionId = testExecutionIdDecoded - let downloadArtifactsUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .downloadArtifactsUrl) - downloadArtifactsUrl = downloadArtifactsUrlDecoded + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let customVocabularyStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CustomVocabularyStatus.self, forKey: .customVocabularyStatus) + customVocabularyStatus = customVocabularyStatusDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded } } -extension LexModelsV2ClientTypes.GrammarSlotTypeSetting: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case source - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let source = self.source { - try encodeContainer.encode(source, forKey: .source) +extension DescribeExportInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let exportId = exportId else { + return nil } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sourceDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.GrammarSlotTypeSource.self, forKey: .source) - source = sourceDecoded + return "/exports/\(exportId.urlPercentEncoding())" } } -extension LexModelsV2ClientTypes { - /// Settings requried for a slot type based on a grammar that you provide. - public struct GrammarSlotTypeSetting: Swift.Equatable { - /// The source of the grammar used to create the slot type. - public var source: LexModelsV2ClientTypes.GrammarSlotTypeSource? +public struct DescribeExportInput: Swift.Equatable { + /// The unique identifier of the export to describe. + /// This member is required. + public var exportId: Swift.String? - public init( - source: LexModelsV2ClientTypes.GrammarSlotTypeSource? = nil - ) - { - self.source = source - } + public init( + exportId: Swift.String? = nil + ) + { + self.exportId = exportId } +} +struct DescribeExportInputBody: Swift.Equatable { } -extension LexModelsV2ClientTypes.GrammarSlotTypeSource: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case kmsKeyArn - case s3BucketName - case s3ObjectKey +extension DescribeExportInputBody: 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 kmsKeyArn = self.kmsKeyArn { - try encodeContainer.encode(kmsKeyArn, forKey: .kmsKeyArn) - } - if let s3BucketName = self.s3BucketName { - try encodeContainer.encode(s3BucketName, forKey: .s3BucketName) - } - if let s3ObjectKey = self.s3ObjectKey { - try encodeContainer.encode(s3ObjectKey, forKey: .s3ObjectKey) +public enum DescribeExportOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let s3BucketNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .s3BucketName) - s3BucketName = s3BucketNameDecoded - let s3ObjectKeyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .s3ObjectKey) - s3ObjectKey = s3ObjectKeyDecoded - let kmsKeyArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kmsKeyArn) - kmsKeyArn = kmsKeyArnDecoded +extension DescribeExportOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeExportOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.creationDateTime = output.creationDateTime + self.downloadUrl = output.downloadUrl + self.exportId = output.exportId + self.exportStatus = output.exportStatus + self.failureReasons = output.failureReasons + self.fileFormat = output.fileFormat + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.resourceSpecification = output.resourceSpecification + } else { + self.creationDateTime = nil + self.downloadUrl = nil + self.exportId = nil + self.exportStatus = nil + self.failureReasons = nil + self.fileFormat = nil + self.lastUpdatedDateTime = nil + self.resourceSpecification = nil + } } } -extension LexModelsV2ClientTypes { - /// Describes the Amazon S3 bucket name and location for the grammar that is the source for the slot type. - public struct GrammarSlotTypeSource: Swift.Equatable { - /// The KMS key required to decrypt the contents of the grammar, if any. - public var kmsKeyArn: Swift.String? - /// The name of the Amazon S3 bucket that contains the grammar source. - /// This member is required. - public var s3BucketName: Swift.String? - /// The path to the grammar in the Amazon S3 bucket. - /// This member is required. - public var s3ObjectKey: Swift.String? +public struct DescribeExportOutputResponse: Swift.Equatable { + /// The date and time that the export was created. + public var creationDateTime: ClientRuntime.Date? + /// A pre-signed S3 URL that points to the bot or bot locale archive. The URL is only available for 5 minutes after calling the DescribeExport operation. + public var downloadUrl: Swift.String? + /// The unique identifier of the described export. + public var exportId: Swift.String? + /// The status of the export. When the status is Complete the export archive file is available for download. + public var exportStatus: LexModelsV2ClientTypes.ExportStatus? + /// If the exportStatus is failed, contains one or more reasons why the export could not be completed. + public var failureReasons: [Swift.String]? + /// The file format used in the files that describe the resource. + public var fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? + /// The last date and time that the export was updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The bot, bot ID, and optional locale ID of the exported bot or bot locale. + public var resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? - public init( - kmsKeyArn: Swift.String? = nil, - s3BucketName: Swift.String? = nil, - s3ObjectKey: Swift.String? = nil - ) - { - self.kmsKeyArn = kmsKeyArn - self.s3BucketName = s3BucketName - self.s3ObjectKey = s3ObjectKey - } + public init( + creationDateTime: ClientRuntime.Date? = nil, + downloadUrl: Swift.String? = nil, + exportId: Swift.String? = nil, + exportStatus: LexModelsV2ClientTypes.ExportStatus? = nil, + failureReasons: [Swift.String]? = nil, + fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? = nil + ) + { + self.creationDateTime = creationDateTime + self.downloadUrl = downloadUrl + self.exportId = exportId + self.exportStatus = exportStatus + self.failureReasons = failureReasons + self.fileFormat = fileFormat + self.lastUpdatedDateTime = lastUpdatedDateTime + self.resourceSpecification = resourceSpecification } +} +struct DescribeExportOutputResponseBody: Swift.Equatable { + let exportId: Swift.String? + let resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? + let fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? + let exportStatus: LexModelsV2ClientTypes.ExportStatus? + let failureReasons: [Swift.String]? + let downloadUrl: Swift.String? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? } -extension LexModelsV2ClientTypes.ImageResponseCard: Swift.Codable { +extension DescribeExportOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case buttons - case imageUrl - case subtitle - case title - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let buttons = buttons { - var buttonsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .buttons) - for button0 in buttons { - try buttonsContainer.encode(button0) - } - } - if let imageUrl = self.imageUrl { - try encodeContainer.encode(imageUrl, forKey: .imageUrl) - } - if let subtitle = self.subtitle { - try encodeContainer.encode(subtitle, forKey: .subtitle) - } - if let title = self.title { - try encodeContainer.encode(title, forKey: .title) - } + case creationDateTime + case downloadUrl + case exportId + case exportStatus + case failureReasons + case fileFormat + case lastUpdatedDateTime + case resourceSpecification } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let titleDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .title) - title = titleDecoded - let subtitleDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .subtitle) - subtitle = subtitleDecoded - let imageUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageUrl) - imageUrl = imageUrlDecoded - let buttonsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.Button?].self, forKey: .buttons) - var buttonsDecoded0:[LexModelsV2ClientTypes.Button]? = nil - if let buttonsContainer = buttonsContainer { - buttonsDecoded0 = [LexModelsV2ClientTypes.Button]() - for structure0 in buttonsContainer { - if let structure0 = structure0 { - buttonsDecoded0?.append(structure0) - } - } - } - buttons = buttonsDecoded0 - } -} - -extension LexModelsV2ClientTypes { - /// A card that is shown to the user by a messaging platform. You define the contents of the card, the card is displayed by the platform. When you use a response card, the response from the user is constrained to the text associated with a button on the card. - public struct ImageResponseCard: Swift.Equatable { - /// A list of buttons that should be displayed on the response card. The arrangement of the buttons is determined by the platform that displays the button. - public var buttons: [LexModelsV2ClientTypes.Button]? - /// The URL of an image to display on the response card. The image URL must be publicly available so that the platform displaying the response card has access to the image. - public var imageUrl: Swift.String? - /// The subtitle to display on the response card. The format of the subtitle is determined by the platform displaying the response card. - public var subtitle: Swift.String? - /// The title to display on the response card. The format of the title is determined by the platform displaying the response card. - /// This member is required. - public var title: Swift.String? - - public init( - buttons: [LexModelsV2ClientTypes.Button]? = nil, - imageUrl: Swift.String? = nil, - subtitle: Swift.String? = nil, - title: Swift.String? = nil - ) - { - self.buttons = buttons - self.imageUrl = imageUrl - self.subtitle = subtitle - self.title = title + let exportIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .exportId) + exportId = exportIdDecoded + let resourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportResourceSpecification.self, forKey: .resourceSpecification) + resourceSpecification = resourceSpecificationDecoded + let fileFormatDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportExportFileFormat.self, forKey: .fileFormat) + fileFormat = fileFormatDecoded + let exportStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportStatus.self, forKey: .exportStatus) + exportStatus = exportStatusDecoded + let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) + var failureReasonsDecoded0:[Swift.String]? = nil + if let failureReasonsContainer = failureReasonsContainer { + failureReasonsDecoded0 = [Swift.String]() + for string0 in failureReasonsContainer { + if let string0 = string0 { + failureReasonsDecoded0?.append(string0) + } + } } + failureReasons = failureReasonsDecoded0 + let downloadUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .downloadUrl) + downloadUrl = downloadUrlDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded } - } -extension LexModelsV2ClientTypes { - public enum ImportExportFileFormat: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case csv - case lexjson - case tsv - case sdkUnknown(Swift.String) - - public static var allCases: [ImportExportFileFormat] { - return [ - .csv, - .lexjson, - .tsv, - .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 .csv: return "CSV" - case .lexjson: return "LexJson" - case .tsv: return "TSV" - 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 = ImportExportFileFormat(rawValue: rawValue) ?? ImportExportFileFormat.sdkUnknown(rawValue) +extension DescribeImportInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let importId = importId else { + return nil } + return "/imports/\(importId.urlPercentEncoding())" } } -extension LexModelsV2ClientTypes.ImportFilter: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case name - case `operator` = "operator" - case values - } +public struct DescribeImportInput: Swift.Equatable { + /// The unique identifier of the import to describe. + /// This member is required. + public var importId: Swift.String? - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let name = self.name { - try encodeContainer.encode(name.rawValue, forKey: .name) - } - if let `operator` = self.`operator` { - try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) - } - if let values = values { - var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) - for filtervalue0 in values { - try valuesContainer.encode(filtervalue0) - } - } + public init( + importId: Swift.String? = nil + ) + { + self.importId = importId } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportFilterName.self, forKey: .name) - name = nameDecoded - let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) - var valuesDecoded0:[Swift.String]? = nil - if let valuesContainer = valuesContainer { - valuesDecoded0 = [Swift.String]() - for string0 in valuesContainer { - if let string0 = string0 { - valuesDecoded0?.append(string0) - } - } - } - values = valuesDecoded0 - let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportFilterOperator.self, forKey: .operator) - `operator` = operatorDecoded - } +struct DescribeImportInputBody: Swift.Equatable { } -extension LexModelsV2ClientTypes { - /// Filters the response from the [ListImports](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListImports.html) operation. - public struct ImportFilter: Swift.Equatable { - /// The name of the field to use for filtering. - /// This member is required. - public var name: LexModelsV2ClientTypes.ImportFilterName? - /// The operator to use for the filter. Specify EQ when the ListImports operation should return only resource types that equal the specified value. Specify CO when the ListImports operation should return resource types that contain the specified value. - /// This member is required. - public var `operator`: LexModelsV2ClientTypes.ImportFilterOperator? - /// The values to use to filter the response. The values must be Bot, BotLocale, or CustomVocabulary. - /// This member is required. - public var values: [Swift.String]? +extension DescribeImportInputBody: Swift.Decodable { - public init( - name: LexModelsV2ClientTypes.ImportFilterName? = nil, - `operator`: LexModelsV2ClientTypes.ImportFilterOperator? = nil, - values: [Swift.String]? = nil - ) - { - self.name = name - self.`operator` = `operator` - self.values = values - } + public init(from decoder: Swift.Decoder) throws { } - } -extension LexModelsV2ClientTypes { - public enum ImportFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case importresourcetype - case sdkUnknown(Swift.String) - - public static var allCases: [ImportFilterName] { - return [ - .importresourcetype, - .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 .importresourcetype: return "ImportResourceType" - 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 = ImportFilterName(rawValue: rawValue) ?? ImportFilterName.sdkUnknown(rawValue) +public enum DescribeImportOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } } -extension LexModelsV2ClientTypes { - public enum ImportFilterOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case contains - case equals - case sdkUnknown(Swift.String) - - public static var allCases: [ImportFilterOperator] { - return [ - .contains, - .equals, - .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 .contains: return "CO" - case .equals: return "EQ" - 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 = ImportFilterOperator(rawValue: rawValue) ?? ImportFilterOperator.sdkUnknown(rawValue) +extension DescribeImportOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeImportOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.creationDateTime = output.creationDateTime + self.failureReasons = output.failureReasons + self.importId = output.importId + self.importStatus = output.importStatus + self.importedResourceId = output.importedResourceId + self.importedResourceName = output.importedResourceName + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.mergeStrategy = output.mergeStrategy + self.resourceSpecification = output.resourceSpecification + } else { + self.creationDateTime = nil + self.failureReasons = nil + self.importId = nil + self.importStatus = nil + self.importedResourceId = nil + self.importedResourceName = nil + self.lastUpdatedDateTime = nil + self.mergeStrategy = nil + self.resourceSpecification = nil } } } -extension LexModelsV2ClientTypes.ImportResourceSpecification: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botImportSpecification - case botLocaleImportSpecification - case customVocabularyImportSpecification - case testSetImportResourceSpecification - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botImportSpecification = self.botImportSpecification { - try encodeContainer.encode(botImportSpecification, forKey: .botImportSpecification) - } - if let botLocaleImportSpecification = self.botLocaleImportSpecification { - try encodeContainer.encode(botLocaleImportSpecification, forKey: .botLocaleImportSpecification) - } - if let customVocabularyImportSpecification = self.customVocabularyImportSpecification { - try encodeContainer.encode(customVocabularyImportSpecification, forKey: .customVocabularyImportSpecification) - } - if let testSetImportResourceSpecification = self.testSetImportResourceSpecification { - try encodeContainer.encode(testSetImportResourceSpecification, forKey: .testSetImportResourceSpecification) - } - } +public struct DescribeImportOutputResponse: Swift.Equatable { + /// The date and time that the import was created. + public var creationDateTime: ClientRuntime.Date? + /// If the importStatus field is Failed, this provides one or more reasons for the failure. + public var failureReasons: [Swift.String]? + /// The unique identifier of the described import. + public var importId: Swift.String? + /// The status of the import process. When the status is Completed the resource is imported and ready for use. + public var importStatus: LexModelsV2ClientTypes.ImportStatus? + /// The unique identifier that Amazon Lex assigned to the resource created by the import. + public var importedResourceId: Swift.String? + /// The name of the imported resource. + public var importedResourceName: Swift.String? + /// The date and time that the import was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The strategy used when there was a name conflict between the imported resource and an existing resource. When the merge strategy is FailOnConflict existing resources are not overwritten and the import fails. + public var mergeStrategy: LexModelsV2ClientTypes.MergeStrategy? + /// The specifications of the imported bot, bot locale, or custom vocabulary. + public var resourceSpecification: LexModelsV2ClientTypes.ImportResourceSpecification? - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botImportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotImportSpecification.self, forKey: .botImportSpecification) - botImportSpecification = botImportSpecificationDecoded - let botLocaleImportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleImportSpecification.self, forKey: .botLocaleImportSpecification) - botLocaleImportSpecification = botLocaleImportSpecificationDecoded - let customVocabularyImportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CustomVocabularyImportSpecification.self, forKey: .customVocabularyImportSpecification) - customVocabularyImportSpecification = customVocabularyImportSpecificationDecoded - let testSetImportResourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetImportResourceSpecification.self, forKey: .testSetImportResourceSpecification) - testSetImportResourceSpecification = testSetImportResourceSpecificationDecoded + public init( + creationDateTime: ClientRuntime.Date? = nil, + failureReasons: [Swift.String]? = nil, + importId: Swift.String? = nil, + importStatus: LexModelsV2ClientTypes.ImportStatus? = nil, + importedResourceId: Swift.String? = nil, + importedResourceName: Swift.String? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + mergeStrategy: LexModelsV2ClientTypes.MergeStrategy? = nil, + resourceSpecification: LexModelsV2ClientTypes.ImportResourceSpecification? = nil + ) + { + self.creationDateTime = creationDateTime + self.failureReasons = failureReasons + self.importId = importId + self.importStatus = importStatus + self.importedResourceId = importedResourceId + self.importedResourceName = importedResourceName + self.lastUpdatedDateTime = lastUpdatedDateTime + self.mergeStrategy = mergeStrategy + self.resourceSpecification = resourceSpecification } } -extension LexModelsV2ClientTypes { - /// Provides information about the bot or bot locale that you want to import. You can specify the botImportSpecification or the botLocaleImportSpecification, but not both. - public struct ImportResourceSpecification: Swift.Equatable { - /// Parameters for importing a bot. - public var botImportSpecification: LexModelsV2ClientTypes.BotImportSpecification? - /// Parameters for importing a bot locale. - public var botLocaleImportSpecification: LexModelsV2ClientTypes.BotLocaleImportSpecification? - /// Provides the parameters required for importing a custom vocabulary. - public var customVocabularyImportSpecification: LexModelsV2ClientTypes.CustomVocabularyImportSpecification? - /// Specifications for the test set that is imported. - public var testSetImportResourceSpecification: LexModelsV2ClientTypes.TestSetImportResourceSpecification? - - public init( - botImportSpecification: LexModelsV2ClientTypes.BotImportSpecification? = nil, - botLocaleImportSpecification: LexModelsV2ClientTypes.BotLocaleImportSpecification? = nil, - customVocabularyImportSpecification: LexModelsV2ClientTypes.CustomVocabularyImportSpecification? = nil, - testSetImportResourceSpecification: LexModelsV2ClientTypes.TestSetImportResourceSpecification? = nil - ) - { - self.botImportSpecification = botImportSpecification - self.botLocaleImportSpecification = botLocaleImportSpecification - self.customVocabularyImportSpecification = customVocabularyImportSpecification - self.testSetImportResourceSpecification = testSetImportResourceSpecification - } - } - +struct DescribeImportOutputResponseBody: Swift.Equatable { + let importId: Swift.String? + let resourceSpecification: LexModelsV2ClientTypes.ImportResourceSpecification? + let importedResourceId: Swift.String? + let importedResourceName: Swift.String? + let mergeStrategy: LexModelsV2ClientTypes.MergeStrategy? + let importStatus: LexModelsV2ClientTypes.ImportStatus? + let failureReasons: [Swift.String]? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? } -extension LexModelsV2ClientTypes { - public enum ImportResourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case bot - case botlocale - case customvocabulary - case testset - case sdkUnknown(Swift.String) +extension DescribeImportOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationDateTime + case failureReasons + case importId + case importStatus + case importedResourceId + case importedResourceName + case lastUpdatedDateTime + case mergeStrategy + case resourceSpecification + } - public static var allCases: [ImportResourceType] { - return [ - .bot, - .botlocale, - .customvocabulary, - .testset, - .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 .bot: return "Bot" - case .botlocale: return "BotLocale" - case .customvocabulary: return "CustomVocabulary" - case .testset: return "TestSet" - case let .sdkUnknown(s): return s + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let importIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importId) + importId = importIdDecoded + let resourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportResourceSpecification.self, forKey: .resourceSpecification) + resourceSpecification = resourceSpecificationDecoded + let importedResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importedResourceId) + importedResourceId = importedResourceIdDecoded + let importedResourceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importedResourceName) + importedResourceName = importedResourceNameDecoded + let mergeStrategyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.MergeStrategy.self, forKey: .mergeStrategy) + mergeStrategy = mergeStrategyDecoded + let importStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportStatus.self, forKey: .importStatus) + importStatus = importStatusDecoded + let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) + var failureReasonsDecoded0:[Swift.String]? = nil + if let failureReasonsContainer = failureReasonsContainer { + failureReasonsDecoded0 = [Swift.String]() + for string0 in failureReasonsContainer { + if let string0 = string0 { + failureReasonsDecoded0?.append(string0) + } } } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = ImportResourceType(rawValue: rawValue) ?? ImportResourceType.sdkUnknown(rawValue) - } + failureReasons = failureReasonsDecoded0 + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded } } -extension LexModelsV2ClientTypes { - public enum ImportSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case lastupdateddatetime - case sdkUnknown(Swift.String) - - public static var allCases: [ImportSortAttribute] { - return [ - .lastupdateddatetime, - .sdkUnknown("") - ] +extension DescribeIntentInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + guard let botVersion = botVersion else { + return nil } - public var rawValue: Swift.String { - switch self { - case .lastupdateddatetime: return "LastUpdatedDateTime" - case let .sdkUnknown(s): return s - } + guard let localeId = localeId else { + return nil } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = ImportSortAttribute(rawValue: rawValue) ?? ImportSortAttribute.sdkUnknown(rawValue) + guard let intentId = intentId else { + return nil } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())" } } -extension LexModelsV2ClientTypes.ImportSortBy: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case attribute - case order - } +public struct DescribeIntentInput: Swift.Equatable { + /// The identifier of the bot associated with the intent. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot associated with the intent. + /// This member is required. + public var botVersion: Swift.String? + /// The identifier of the intent to describe. + /// This member is required. + public var intentId: Swift.String? + /// The identifier of the language and locale of the intent to describe. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let attribute = self.attribute { - try encodeContainer.encode(attribute.rawValue, forKey: .attribute) - } - if let order = self.order { - try encodeContainer.encode(order.rawValue, forKey: .order) - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + intentId: Swift.String? = nil, + localeId: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.intentId = intentId + self.localeId = localeId } +} + +struct DescribeIntentInputBody: Swift.Equatable { +} + +extension DescribeIntentInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportSortAttribute.self, forKey: .attribute) - attribute = attributeDecoded - let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) - order = orderDecoded } } -extension LexModelsV2ClientTypes { - /// Provides information for sorting a list of imports. - public struct ImportSortBy: Swift.Equatable { - /// The export field to use for sorting. - /// This member is required. - public var attribute: LexModelsV2ClientTypes.ImportSortAttribute? - /// The order to sort the list. - /// This member is required. - public var order: LexModelsV2ClientTypes.SortOrder? - - public init( - attribute: LexModelsV2ClientTypes.ImportSortAttribute? = nil, - order: LexModelsV2ClientTypes.SortOrder? = nil - ) - { - self.attribute = attribute - self.order = order +public enum DescribeIntentOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } +} +extension DescribeIntentOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeIntentOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botVersion = output.botVersion + self.creationDateTime = output.creationDateTime + self.description = output.description + self.dialogCodeHook = output.dialogCodeHook + self.fulfillmentCodeHook = output.fulfillmentCodeHook + self.initialResponseSetting = output.initialResponseSetting + self.inputContexts = output.inputContexts + self.intentClosingSetting = output.intentClosingSetting + self.intentConfirmationSetting = output.intentConfirmationSetting + self.intentId = output.intentId + self.intentName = output.intentName + self.kendraConfiguration = output.kendraConfiguration + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.localeId = output.localeId + self.outputContexts = output.outputContexts + self.parentIntentSignature = output.parentIntentSignature + self.sampleUtterances = output.sampleUtterances + self.slotPriorities = output.slotPriorities + } else { + self.botId = nil + self.botVersion = nil + self.creationDateTime = nil + self.description = nil + self.dialogCodeHook = nil + self.fulfillmentCodeHook = nil + self.initialResponseSetting = nil + self.inputContexts = nil + self.intentClosingSetting = nil + self.intentConfirmationSetting = nil + self.intentId = nil + self.intentName = nil + self.kendraConfiguration = nil + self.lastUpdatedDateTime = nil + self.localeId = nil + self.outputContexts = nil + self.parentIntentSignature = nil + self.sampleUtterances = nil + self.slotPriorities = nil + } + } } -extension LexModelsV2ClientTypes { - public enum ImportStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case completed - case deleting - case failed - case inprogress - case sdkUnknown(Swift.String) +public struct DescribeIntentOutputResponse: Swift.Equatable { + /// The identifier of the bot associated with the intent. + public var botId: Swift.String? + /// The version of the bot associated with the intent. + public var botVersion: Swift.String? + /// A timestamp of the date and time that the intent was created. + public var creationDateTime: ClientRuntime.Date? + /// The description of the intent. + public var description: Swift.String? + /// The Lambda function called during each turn of a conversation with the intent. + public var dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? + /// The Lambda function called when the intent is complete and ready for fulfillment. + public var fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? + /// Configuration setting for a response sent to the user before Amazon Lex starts eliciting slots. + public var initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? + /// A list of contexts that must be active for the intent to be considered for sending to the user. + public var inputContexts: [LexModelsV2ClientTypes.InputContext]? + /// The response that Amazon Lex sends to when the intent is closed. + public var intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? + /// Prompts that Amazon Lex sends to the user to confirm completion of an intent. + public var intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? + /// The unique identifier assigned to the intent when it was created. + public var intentId: Swift.String? + /// The name specified for the intent. + public var intentName: Swift.String? + /// Configuration information required to use the AMAZON.KendraSearchIntent intent. + public var kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? + /// A timestamp of the date and time that the intent was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The language and locale specified for the intent. + public var localeId: Swift.String? + /// A list of contexts that are activated when the intent is fulfilled. + public var outputContexts: [LexModelsV2ClientTypes.OutputContext]? + /// The identifier of the built-in intent that this intent is derived from, if any. + public var parentIntentSignature: Swift.String? + /// User utterances that trigger this intent. + public var sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? + /// The list that determines the priority that slots should be elicited from the user. + public var slotPriorities: [LexModelsV2ClientTypes.SlotPriority]? - public static var allCases: [ImportStatus] { - return [ - .completed, - .deleting, - .failed, - .inprogress, - .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 .completed: return "Completed" - case .deleting: return "Deleting" - case .failed: return "Failed" - case .inprogress: return "InProgress" - 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 = ImportStatus(rawValue: rawValue) ?? ImportStatus.sdkUnknown(rawValue) - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? = nil, + fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? = nil, + initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? = nil, + inputContexts: [LexModelsV2ClientTypes.InputContext]? = nil, + intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? = nil, + intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? = nil, + intentId: Swift.String? = nil, + intentName: Swift.String? = nil, + kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + localeId: Swift.String? = nil, + outputContexts: [LexModelsV2ClientTypes.OutputContext]? = nil, + parentIntentSignature: Swift.String? = nil, + sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? = nil, + slotPriorities: [LexModelsV2ClientTypes.SlotPriority]? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.creationDateTime = creationDateTime + self.description = description + self.dialogCodeHook = dialogCodeHook + self.fulfillmentCodeHook = fulfillmentCodeHook + self.initialResponseSetting = initialResponseSetting + self.inputContexts = inputContexts + self.intentClosingSetting = intentClosingSetting + self.intentConfirmationSetting = intentConfirmationSetting + self.intentId = intentId + self.intentName = intentName + self.kendraConfiguration = kendraConfiguration + self.lastUpdatedDateTime = lastUpdatedDateTime + self.localeId = localeId + self.outputContexts = outputContexts + self.parentIntentSignature = parentIntentSignature + self.sampleUtterances = sampleUtterances + self.slotPriorities = slotPriorities } } -extension LexModelsV2ClientTypes.ImportSummary: Swift.Codable { +struct DescribeIntentOutputResponseBody: Swift.Equatable { + let intentId: Swift.String? + let intentName: Swift.String? + let description: Swift.String? + let parentIntentSignature: Swift.String? + let sampleUtterances: [LexModelsV2ClientTypes.SampleUtterance]? + let dialogCodeHook: LexModelsV2ClientTypes.DialogCodeHookSettings? + let fulfillmentCodeHook: LexModelsV2ClientTypes.FulfillmentCodeHookSettings? + let slotPriorities: [LexModelsV2ClientTypes.SlotPriority]? + let intentConfirmationSetting: LexModelsV2ClientTypes.IntentConfirmationSetting? + let intentClosingSetting: LexModelsV2ClientTypes.IntentClosingSetting? + let inputContexts: [LexModelsV2ClientTypes.InputContext]? + let outputContexts: [LexModelsV2ClientTypes.OutputContext]? + let kendraConfiguration: LexModelsV2ClientTypes.KendraConfiguration? + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? + let initialResponseSetting: LexModelsV2ClientTypes.InitialResponseSetting? +} + +extension DescribeIntentOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case botId + case botVersion case creationDateTime - case importId - case importStatus - case importedResourceId - case importedResourceName - case importedResourceType + case description + case dialogCodeHook + case fulfillmentCodeHook + case initialResponseSetting + case inputContexts + case intentClosingSetting + case intentConfirmationSetting + case intentId + case intentName + case kendraConfiguration case lastUpdatedDateTime - case mergeStrategy + case localeId + case outputContexts + case parentIntentSignature + case sampleUtterances + case slotPriorities } - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let creationDateTime = self.creationDateTime { - try encodeContainer.encodeTimestamp(creationDateTime, format: .epochSeconds, forKey: .creationDateTime) + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) + intentId = intentIdDecoded + let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) + intentName = intentNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let parentIntentSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentIntentSignature) + parentIntentSignature = parentIntentSignatureDecoded + let sampleUtterancesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SampleUtterance?].self, forKey: .sampleUtterances) + var sampleUtterancesDecoded0:[LexModelsV2ClientTypes.SampleUtterance]? = nil + if let sampleUtterancesContainer = sampleUtterancesContainer { + sampleUtterancesDecoded0 = [LexModelsV2ClientTypes.SampleUtterance]() + for structure0 in sampleUtterancesContainer { + if let structure0 = structure0 { + sampleUtterancesDecoded0?.append(structure0) + } + } } - if let importId = self.importId { - try encodeContainer.encode(importId, forKey: .importId) - } - if let importStatus = self.importStatus { - try encodeContainer.encode(importStatus.rawValue, forKey: .importStatus) - } - if let importedResourceId = self.importedResourceId { - try encodeContainer.encode(importedResourceId, forKey: .importedResourceId) - } - if let importedResourceName = self.importedResourceName { - try encodeContainer.encode(importedResourceName, forKey: .importedResourceName) - } - if let importedResourceType = self.importedResourceType { - try encodeContainer.encode(importedResourceType.rawValue, forKey: .importedResourceType) + sampleUtterances = sampleUtterancesDecoded0 + let dialogCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogCodeHookSettings.self, forKey: .dialogCodeHook) + dialogCodeHook = dialogCodeHookDecoded + let fulfillmentCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentCodeHookSettings.self, forKey: .fulfillmentCodeHook) + fulfillmentCodeHook = fulfillmentCodeHookDecoded + let slotPrioritiesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotPriority?].self, forKey: .slotPriorities) + var slotPrioritiesDecoded0:[LexModelsV2ClientTypes.SlotPriority]? = nil + if let slotPrioritiesContainer = slotPrioritiesContainer { + slotPrioritiesDecoded0 = [LexModelsV2ClientTypes.SlotPriority]() + for structure0 in slotPrioritiesContainer { + if let structure0 = structure0 { + slotPrioritiesDecoded0?.append(structure0) + } + } } - if let lastUpdatedDateTime = self.lastUpdatedDateTime { - try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) + slotPriorities = slotPrioritiesDecoded0 + let intentConfirmationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentConfirmationSetting.self, forKey: .intentConfirmationSetting) + intentConfirmationSetting = intentConfirmationSettingDecoded + let intentClosingSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentClosingSetting.self, forKey: .intentClosingSetting) + intentClosingSetting = intentClosingSettingDecoded + let inputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.InputContext?].self, forKey: .inputContexts) + var inputContextsDecoded0:[LexModelsV2ClientTypes.InputContext]? = nil + if let inputContextsContainer = inputContextsContainer { + inputContextsDecoded0 = [LexModelsV2ClientTypes.InputContext]() + for structure0 in inputContextsContainer { + if let structure0 = structure0 { + inputContextsDecoded0?.append(structure0) + } + } } - if let mergeStrategy = self.mergeStrategy { - try encodeContainer.encode(mergeStrategy.rawValue, forKey: .mergeStrategy) + inputContexts = inputContextsDecoded0 + let outputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.OutputContext?].self, forKey: .outputContexts) + var outputContextsDecoded0:[LexModelsV2ClientTypes.OutputContext]? = nil + if let outputContextsContainer = outputContextsContainer { + outputContextsDecoded0 = [LexModelsV2ClientTypes.OutputContext]() + for structure0 in outputContextsContainer { + if let structure0 = structure0 { + outputContextsDecoded0?.append(structure0) + } + } } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let importIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importId) - importId = importIdDecoded - let importedResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importedResourceId) - importedResourceId = importedResourceIdDecoded - let importedResourceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importedResourceName) - importedResourceName = importedResourceNameDecoded - let importStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportStatus.self, forKey: .importStatus) - importStatus = importStatusDecoded - let mergeStrategyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.MergeStrategy.self, forKey: .mergeStrategy) - mergeStrategy = mergeStrategyDecoded + outputContexts = outputContextsDecoded0 + let kendraConfigurationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.KendraConfiguration.self, forKey: .kendraConfiguration) + kendraConfiguration = kendraConfigurationDecoded + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) creationDateTime = creationDateTimeDecoded let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) lastUpdatedDateTime = lastUpdatedDateTimeDecoded - let importedResourceTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportResourceType.self, forKey: .importedResourceType) - importedResourceType = importedResourceTypeDecoded + let initialResponseSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.InitialResponseSetting.self, forKey: .initialResponseSetting) + initialResponseSetting = initialResponseSettingDecoded } } -extension LexModelsV2ClientTypes { - /// Provides summary information about an import in an import list. - public struct ImportSummary: Swift.Equatable { - /// The date and time that the import was created. - public var creationDateTime: ClientRuntime.Date? - /// The unique identifier that Amazon Lex assigned to the import. - public var importId: Swift.String? - /// The status of the resource. When the status is Completed the resource is ready to build. - public var importStatus: LexModelsV2ClientTypes.ImportStatus? - /// The unique identifier that Amazon Lex assigned to the imported resource. - public var importedResourceId: Swift.String? - /// The name that you gave the imported resource. - public var importedResourceName: Swift.String? - /// The type of resource that was imported. - public var importedResourceType: LexModelsV2ClientTypes.ImportResourceType? - /// The date and time that the import was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The strategy used to merge existing bot or bot locale definitions with the imported definition. - public var mergeStrategy: LexModelsV2ClientTypes.MergeStrategy? - - public init( - creationDateTime: ClientRuntime.Date? = nil, - importId: Swift.String? = nil, - importStatus: LexModelsV2ClientTypes.ImportStatus? = nil, - importedResourceId: Swift.String? = nil, - importedResourceName: Swift.String? = nil, - importedResourceType: LexModelsV2ClientTypes.ImportResourceType? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - mergeStrategy: LexModelsV2ClientTypes.MergeStrategy? = nil - ) - { - self.creationDateTime = creationDateTime - self.importId = importId - self.importStatus = importStatus - self.importedResourceId = importedResourceId - self.importedResourceName = importedResourceName - self.importedResourceType = importedResourceType - self.lastUpdatedDateTime = lastUpdatedDateTime - self.mergeStrategy = mergeStrategy +extension DescribeResourcePolicyInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let resourceArn = resourceArn else { + return nil } + return "/policy/\(resourceArn.urlPercentEncoding())" + } +} + +public struct DescribeResourcePolicyInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to. + /// This member is required. + public var resourceArn: Swift.String? + + public init( + resourceArn: Swift.String? = nil + ) + { + self.resourceArn = resourceArn } +} +struct DescribeResourcePolicyInputBody: Swift.Equatable { } -extension LexModelsV2ClientTypes.InitialResponseSetting: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case codeHook - case conditional - case initialResponse - case nextStep +extension DescribeResourcePolicyInputBody: 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 codeHook = self.codeHook { - try encodeContainer.encode(codeHook, forKey: .codeHook) - } - if let conditional = self.conditional { - try encodeContainer.encode(conditional, forKey: .conditional) - } - if let initialResponse = self.initialResponse { - try encodeContainer.encode(initialResponse, forKey: .initialResponse) - } - if let nextStep = self.nextStep { - try encodeContainer.encode(nextStep, forKey: .nextStep) +public enum DescribeResourcePolicyOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let initialResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .initialResponse) - initialResponse = initialResponseDecoded - let nextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .nextStep) - nextStep = nextStepDecoded - let conditionalDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConditionalSpecification.self, forKey: .conditional) - conditional = conditionalDecoded - let codeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogCodeHookInvocationSetting.self, forKey: .codeHook) - codeHook = codeHookDecoded +extension DescribeResourcePolicyOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeResourcePolicyOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.policy = output.policy + self.resourceArn = output.resourceArn + self.revisionId = output.revisionId + } else { + self.policy = nil + self.resourceArn = nil + self.revisionId = nil + } } } -extension LexModelsV2ClientTypes { - /// Configuration setting for a response sent to the user before Amazon Lex starts eliciting slots. - public struct InitialResponseSetting: Swift.Equatable { - /// Settings that specify the dialog code hook that is called by Amazon Lex at a step of the conversation. - public var codeHook: LexModelsV2ClientTypes.DialogCodeHookInvocationSetting? - /// Provides a list of conditional branches. Branches are evaluated in the order that they are entered in the list. The first branch with a condition that evaluates to true is executed. The last branch in the list is the default branch. The default branch should not have any condition expression. The default branch is executed if no other branch has a matching condition. - public var conditional: LexModelsV2ClientTypes.ConditionalSpecification? - /// Specifies a list of message groups that Amazon Lex uses to respond the user input. - public var initialResponse: LexModelsV2ClientTypes.ResponseSpecification? - /// The next step in the conversation. - public var nextStep: LexModelsV2ClientTypes.DialogState? +public struct DescribeResourcePolicyOutputResponse: Swift.Equatable { + /// The JSON structure that contains the resource policy. For more information about the contents of a JSON policy document, see [ IAM JSON policy reference ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html). + public var policy: Swift.String? + /// The Amazon Resource Name (ARN) of the bot or bot alias that the resource policy is attached to. + public var resourceArn: Swift.String? + /// The current revision of the resource policy. Use the revision ID to make sure that you are updating the most current version of a resource policy when you add a policy statement to a resource, delete a resource, or update a resource. + public var revisionId: Swift.String? - public init( - codeHook: LexModelsV2ClientTypes.DialogCodeHookInvocationSetting? = nil, - conditional: LexModelsV2ClientTypes.ConditionalSpecification? = nil, - initialResponse: LexModelsV2ClientTypes.ResponseSpecification? = nil, - nextStep: LexModelsV2ClientTypes.DialogState? = nil - ) - { - self.codeHook = codeHook - self.conditional = conditional - self.initialResponse = initialResponse - self.nextStep = nextStep - } + public init( + policy: Swift.String? = nil, + resourceArn: Swift.String? = nil, + revisionId: Swift.String? = nil + ) + { + self.policy = policy + self.resourceArn = resourceArn + self.revisionId = revisionId } +} +struct DescribeResourcePolicyOutputResponseBody: Swift.Equatable { + let resourceArn: Swift.String? + let policy: Swift.String? + let revisionId: Swift.String? } -extension LexModelsV2ClientTypes.InputContext: Swift.Codable { +extension DescribeResourcePolicyOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case 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) - } + case policy + case resourceArn + case revisionId } 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 LexModelsV2ClientTypes { - /// A context that must be active for an intent to be selected by Amazon Lex. - public struct InputContext: Swift.Equatable { - /// The name of the context. - /// This member is required. - public var name: Swift.String? - - public init( - name: Swift.String? = nil - ) - { - self.name = name - } + let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) + resourceArn = resourceArnDecoded + let policyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .policy) + policy = policyDecoded + let revisionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .revisionId) + revisionId = revisionIdDecoded } - } -extension LexModelsV2ClientTypes.InputSessionStateSpecification: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case activeContexts - case runtimeHints - case sessionAttributes - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let activeContexts = activeContexts { - var activeContextsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .activeContexts) - for activecontext0 in activeContexts { - try activeContextsContainer.encode(activecontext0) - } +extension DescribeSlotInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - if let runtimeHints = self.runtimeHints { - try encodeContainer.encode(runtimeHints, forKey: .runtimeHints) + guard let botVersion = botVersion else { + return nil } - if let sessionAttributes = sessionAttributes { - var sessionAttributesContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .sessionAttributes) - for (dictKey0, stringMap0) in sessionAttributes { - try sessionAttributesContainer.encode(stringMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } + guard let localeId = localeId else { + return nil } - } - - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sessionAttributesContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .sessionAttributes) - var sessionAttributesDecoded0: [Swift.String:Swift.String]? = nil - if let sessionAttributesContainer = sessionAttributesContainer { - sessionAttributesDecoded0 = [Swift.String:Swift.String]() - for (key0, string0) in sessionAttributesContainer { - if let string0 = string0 { - sessionAttributesDecoded0?[key0] = string0 - } - } + guard let intentId = intentId else { + return nil } - sessionAttributes = sessionAttributesDecoded0 - let activeContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ActiveContext?].self, forKey: .activeContexts) - var activeContextsDecoded0:[LexModelsV2ClientTypes.ActiveContext]? = nil - if let activeContextsContainer = activeContextsContainer { - activeContextsDecoded0 = [LexModelsV2ClientTypes.ActiveContext]() - for structure0 in activeContextsContainer { - if let structure0 = structure0 { - activeContextsDecoded0?.append(structure0) - } - } + guard let slotId = slotId else { + return nil } - activeContexts = activeContextsDecoded0 - let runtimeHintsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.RuntimeHints.self, forKey: .runtimeHints) - runtimeHints = runtimeHintsDecoded + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())/slots/\(slotId.urlPercentEncoding())" } } -extension LexModelsV2ClientTypes { - /// Specifications for the current state of the dialog between the user and the bot in the test set. - public struct InputSessionStateSpecification: Swift.Equatable { - /// Active contexts for the session state. - public var activeContexts: [LexModelsV2ClientTypes.ActiveContext]? - /// Runtime hints for the session state. - public var runtimeHints: LexModelsV2ClientTypes.RuntimeHints? - /// Session attributes for the session state. - public var sessionAttributes: [Swift.String:Swift.String]? +public struct DescribeSlotInput: Swift.Equatable { + /// The identifier of the bot associated with the slot. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot associated with the slot. + /// This member is required. + public var botVersion: Swift.String? + /// The identifier of the intent that contains the slot. + /// This member is required. + public var intentId: Swift.String? + /// The identifier of the language and locale of the slot to describe. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? + /// The unique identifier for the slot. + /// This member is required. + public var slotId: Swift.String? - public init( - activeContexts: [LexModelsV2ClientTypes.ActiveContext]? = nil, - runtimeHints: LexModelsV2ClientTypes.RuntimeHints? = nil, - sessionAttributes: [Swift.String:Swift.String]? = nil - ) - { - self.activeContexts = activeContexts - self.runtimeHints = runtimeHints - self.sessionAttributes = sessionAttributes - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + intentId: Swift.String? = nil, + localeId: Swift.String? = nil, + slotId: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.intentId = intentId + self.localeId = localeId + self.slotId = slotId } - } -extension LexModelsV2ClientTypes.IntentClassificationTestResultItem: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case intentName - case multiTurnConversation - case resultCounts - } +struct DescribeSlotInputBody: Swift.Equatable { +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let intentName = self.intentName { - try encodeContainer.encode(intentName, forKey: .intentName) - } - if multiTurnConversation != false { - try encodeContainer.encode(multiTurnConversation, forKey: .multiTurnConversation) - } - if let resultCounts = self.resultCounts { - try encodeContainer.encode(resultCounts, forKey: .resultCounts) - } - } +extension DescribeSlotInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) - intentName = intentNameDecoded - let multiTurnConversationDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .multiTurnConversation) ?? false - multiTurnConversation = multiTurnConversationDecoded - let resultCountsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentClassificationTestResultItemCounts.self, forKey: .resultCounts) - resultCounts = resultCountsDecoded } } -extension LexModelsV2ClientTypes { - /// Information for an intent that is classified by the test workbench. - public struct IntentClassificationTestResultItem: Swift.Equatable { - /// The name of the intent. - /// This member is required. - public var intentName: Swift.String? - /// Indicates whether the conversation involves multiple turns or not. - /// This member is required. - public var multiTurnConversation: Swift.Bool - /// The result of the intent classification test. - /// This member is required. - public var resultCounts: LexModelsV2ClientTypes.IntentClassificationTestResultItemCounts? - - public init( - intentName: Swift.String? = nil, - multiTurnConversation: Swift.Bool = false, - resultCounts: LexModelsV2ClientTypes.IntentClassificationTestResultItemCounts? = nil - ) - { - self.intentName = intentName - self.multiTurnConversation = multiTurnConversation - self.resultCounts = resultCounts +public enum DescribeSlotOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } - } -extension LexModelsV2ClientTypes.IntentClassificationTestResultItemCounts: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case intentMatchResultCounts - case speechTranscriptionResultCounts - case totalResultCount - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let intentMatchResultCounts = intentMatchResultCounts { - var intentMatchResultCountsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .intentMatchResultCounts) - for (dictKey0, testResultMatchStatusCountMap0) in intentMatchResultCounts { - try intentMatchResultCountsContainer.encode(testResultMatchStatusCountMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } - } - if let speechTranscriptionResultCounts = speechTranscriptionResultCounts { - var speechTranscriptionResultCountsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .speechTranscriptionResultCounts) - for (dictKey0, testResultMatchStatusCountMap0) in speechTranscriptionResultCounts { - try speechTranscriptionResultCountsContainer.encode(testResultMatchStatusCountMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } - } - if let totalResultCount = self.totalResultCount { - try encodeContainer.encode(totalResultCount, forKey: .totalResultCount) +extension DescribeSlotOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeSlotOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botVersion = output.botVersion + self.creationDateTime = output.creationDateTime + self.description = output.description + self.intentId = output.intentId + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.localeId = output.localeId + self.multipleValuesSetting = output.multipleValuesSetting + self.obfuscationSetting = output.obfuscationSetting + self.slotId = output.slotId + self.slotName = output.slotName + self.slotTypeId = output.slotTypeId + self.subSlotSetting = output.subSlotSetting + self.valueElicitationSetting = output.valueElicitationSetting + } else { + self.botId = nil + self.botVersion = nil + self.creationDateTime = nil + self.description = nil + self.intentId = nil + self.lastUpdatedDateTime = nil + self.localeId = nil + self.multipleValuesSetting = nil + self.obfuscationSetting = nil + self.slotId = nil + self.slotName = nil + self.slotTypeId = nil + self.subSlotSetting = nil + self.valueElicitationSetting = nil } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let totalResultCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .totalResultCount) - totalResultCount = totalResultCountDecoded - let speechTranscriptionResultCountsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.Int?].self, forKey: .speechTranscriptionResultCounts) - var speechTranscriptionResultCountsDecoded0: [Swift.String:Swift.Int]? = nil - if let speechTranscriptionResultCountsContainer = speechTranscriptionResultCountsContainer { - speechTranscriptionResultCountsDecoded0 = [Swift.String:Swift.Int]() - for (key0, count0) in speechTranscriptionResultCountsContainer { - if let count0 = count0 { - speechTranscriptionResultCountsDecoded0?[key0] = count0 - } - } - } - speechTranscriptionResultCounts = speechTranscriptionResultCountsDecoded0 - let intentMatchResultCountsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.Int?].self, forKey: .intentMatchResultCounts) - var intentMatchResultCountsDecoded0: [Swift.String:Swift.Int]? = nil - if let intentMatchResultCountsContainer = intentMatchResultCountsContainer { - intentMatchResultCountsDecoded0 = [Swift.String:Swift.Int]() - for (key0, count0) in intentMatchResultCountsContainer { - if let count0 = count0 { - intentMatchResultCountsDecoded0?[key0] = count0 - } - } - } - intentMatchResultCounts = intentMatchResultCountsDecoded0 - } -} - -extension LexModelsV2ClientTypes { - /// The number of items in the intent classification test. - public struct IntentClassificationTestResultItemCounts: Swift.Equatable { - /// The number of matched and mismatched results for intent recognition for the intent. - /// This member is required. - public var intentMatchResultCounts: [Swift.String:Swift.Int]? - /// The number of matched, mismatched, and execution error results for speech transcription for the intent. - public var speechTranscriptionResultCounts: [Swift.String:Swift.Int]? - /// The total number of results in the intent classification test. - /// This member is required. - public var totalResultCount: Swift.Int? +public struct DescribeSlotOutputResponse: Swift.Equatable { + /// The identifier of the bot associated with the slot. + public var botId: Swift.String? + /// The version of the bot associated with the slot. + public var botVersion: Swift.String? + /// A timestamp of the date and time that the slot was created. + public var creationDateTime: ClientRuntime.Date? + /// The description specified for the slot. + public var description: Swift.String? + /// The identifier of the intent associated with the slot. + public var intentId: Swift.String? + /// A timestamp of the date and time that the slot was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The language and locale specified for the slot. + public var localeId: Swift.String? + /// Indicates whether the slot accepts multiple values in a single utterance. If the multipleValuesSetting is not set, the default value is false. + public var multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? + /// Whether slot values are shown in Amazon CloudWatch logs. If the value is None, the actual value of the slot is shown in logs. + public var obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? + /// The unique identifier generated for the slot. + public var slotId: Swift.String? + /// The name specified for the slot. + public var slotName: Swift.String? + /// The identifier of the slot type that determines the values entered into the slot. + public var slotTypeId: Swift.String? + /// Specifications for the constituent sub slots and the expression for the composite slot. + public var subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? + /// Prompts that Amazon Lex uses to elicit a value for the slot. + public var valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? - public init( - intentMatchResultCounts: [Swift.String:Swift.Int]? = nil, - speechTranscriptionResultCounts: [Swift.String:Swift.Int]? = nil, - totalResultCount: Swift.Int? = nil - ) - { - self.intentMatchResultCounts = intentMatchResultCounts - self.speechTranscriptionResultCounts = speechTranscriptionResultCounts - self.totalResultCount = totalResultCount - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + intentId: Swift.String? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + localeId: Swift.String? = nil, + multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? = nil, + obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? = nil, + slotId: Swift.String? = nil, + slotName: Swift.String? = nil, + slotTypeId: Swift.String? = nil, + subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? = nil, + valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.creationDateTime = creationDateTime + self.description = description + self.intentId = intentId + self.lastUpdatedDateTime = lastUpdatedDateTime + self.localeId = localeId + self.multipleValuesSetting = multipleValuesSetting + self.obfuscationSetting = obfuscationSetting + self.slotId = slotId + self.slotName = slotName + self.slotTypeId = slotTypeId + self.subSlotSetting = subSlotSetting + self.valueElicitationSetting = valueElicitationSetting } +} +struct DescribeSlotOutputResponseBody: Swift.Equatable { + let slotId: Swift.String? + let slotName: Swift.String? + let description: Swift.String? + let slotTypeId: Swift.String? + let valueElicitationSetting: LexModelsV2ClientTypes.SlotValueElicitationSetting? + let obfuscationSetting: LexModelsV2ClientTypes.ObfuscationSetting? + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let intentId: Swift.String? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? + let multipleValuesSetting: LexModelsV2ClientTypes.MultipleValuesSetting? + let subSlotSetting: LexModelsV2ClientTypes.SubSlotSetting? } -extension LexModelsV2ClientTypes.IntentClassificationTestResults: Swift.Codable { +extension DescribeSlotOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case items - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let items = items { - var itemsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .items) - for intentclassificationtestresultitem0 in items { - try itemsContainer.encode(intentclassificationtestresultitem0) - } - } + case botId + case botVersion + case creationDateTime + case description + case intentId + case lastUpdatedDateTime + case localeId + case multipleValuesSetting + case obfuscationSetting + case slotId + case slotName + case slotTypeId + case subSlotSetting + case valueElicitationSetting } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let itemsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.IntentClassificationTestResultItem?].self, forKey: .items) - var itemsDecoded0:[LexModelsV2ClientTypes.IntentClassificationTestResultItem]? = nil - if let itemsContainer = itemsContainer { - itemsDecoded0 = [LexModelsV2ClientTypes.IntentClassificationTestResultItem]() - for structure0 in itemsContainer { - if let structure0 = structure0 { - itemsDecoded0?.append(structure0) - } - } + let slotIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotId) + slotId = slotIdDecoded + let slotNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotName) + slotName = slotNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let slotTypeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeId) + slotTypeId = slotTypeIdDecoded + let valueElicitationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueElicitationSetting.self, forKey: .valueElicitationSetting) + valueElicitationSetting = valueElicitationSettingDecoded + let obfuscationSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ObfuscationSetting.self, forKey: .obfuscationSetting) + obfuscationSetting = obfuscationSettingDecoded + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) + intentId = intentIdDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let multipleValuesSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.MultipleValuesSetting.self, forKey: .multipleValuesSetting) + multipleValuesSetting = multipleValuesSettingDecoded + let subSlotSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SubSlotSetting.self, forKey: .subSlotSetting) + subSlotSetting = subSlotSettingDecoded + } +} + +extension DescribeSlotTypeInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - items = itemsDecoded0 + guard let botVersion = botVersion else { + return nil + } + guard let localeId = localeId else { + return nil + } + guard let slotTypeId = slotTypeId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/slottypes/\(slotTypeId.urlPercentEncoding())" } } -extension LexModelsV2ClientTypes { - /// Information for the results of the intent classification test. - public struct IntentClassificationTestResults: Swift.Equatable { - /// A list of the results for the intent classification test. - /// This member is required. - public var items: [LexModelsV2ClientTypes.IntentClassificationTestResultItem]? +public struct DescribeSlotTypeInput: Swift.Equatable { + /// The identifier of the bot associated with the slot type. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot associated with the slot type. + /// This member is required. + public var botVersion: Swift.String? + /// The identifier of the language and locale of the slot type to describe. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? + /// The identifier of the slot type. + /// This member is required. + public var slotTypeId: Swift.String? - public init( - items: [LexModelsV2ClientTypes.IntentClassificationTestResultItem]? = nil - ) - { - self.items = items - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil, + slotTypeId: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId + self.slotTypeId = slotTypeId } +} +struct DescribeSlotTypeInputBody: Swift.Equatable { } -extension LexModelsV2ClientTypes.IntentClosingSetting: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case active - case closingResponse - case conditional - case nextStep +extension DescribeSlotTypeInputBody: 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 active = self.active { - try encodeContainer.encode(active, forKey: .active) - } - if let closingResponse = self.closingResponse { - try encodeContainer.encode(closingResponse, forKey: .closingResponse) - } - if let conditional = self.conditional { - try encodeContainer.encode(conditional, forKey: .conditional) - } - if let nextStep = self.nextStep { - try encodeContainer.encode(nextStep, forKey: .nextStep) +public enum DescribeSlotTypeOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let closingResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .closingResponse) - closingResponse = closingResponseDecoded - let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) - active = activeDecoded - let nextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .nextStep) - nextStep = nextStepDecoded - let conditionalDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConditionalSpecification.self, forKey: .conditional) - conditional = conditionalDecoded +extension DescribeSlotTypeOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeSlotTypeOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botVersion = output.botVersion + self.compositeSlotTypeSetting = output.compositeSlotTypeSetting + self.creationDateTime = output.creationDateTime + self.description = output.description + self.externalSourceSetting = output.externalSourceSetting + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.localeId = output.localeId + self.parentSlotTypeSignature = output.parentSlotTypeSignature + self.slotTypeId = output.slotTypeId + self.slotTypeName = output.slotTypeName + self.slotTypeValues = output.slotTypeValues + self.valueSelectionSetting = output.valueSelectionSetting + } else { + self.botId = nil + self.botVersion = nil + self.compositeSlotTypeSetting = nil + self.creationDateTime = nil + self.description = nil + self.externalSourceSetting = nil + self.lastUpdatedDateTime = nil + self.localeId = nil + self.parentSlotTypeSignature = nil + self.slotTypeId = nil + self.slotTypeName = nil + self.slotTypeValues = nil + self.valueSelectionSetting = nil + } } } -extension LexModelsV2ClientTypes { - /// Provides a statement the Amazon Lex conveys to the user when the intent is successfully fulfilled. - public struct IntentClosingSetting: Swift.Equatable { - /// Specifies whether an intent's closing response is used. When this field is false, the closing response isn't sent to the user. If the active field isn't specified, the default is true. - public var active: Swift.Bool? - /// The response that Amazon Lex sends to the user when the intent is complete. - public var closingResponse: LexModelsV2ClientTypes.ResponseSpecification? - /// A list of conditional branches associated with the intent's closing response. These branches are executed when the nextStep attribute is set to EvalutateConditional. - public var conditional: LexModelsV2ClientTypes.ConditionalSpecification? - /// Specifies the next step that the bot executes after playing the intent's closing response. - public var nextStep: LexModelsV2ClientTypes.DialogState? +public struct DescribeSlotTypeOutputResponse: Swift.Equatable { + /// The identifier of the bot associated with the slot type. + public var botId: Swift.String? + /// The version of the bot associated with the slot type. + public var botVersion: Swift.String? + /// Specifications for a composite slot type. + public var compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? + /// A timestamp of the date and time that the slot type was created. + public var creationDateTime: ClientRuntime.Date? + /// The description specified for the slot type. + public var description: Swift.String? + /// Provides information about the external source of the slot type's definition. + public var externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? + /// A timestamp of the date and time that the slot type was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The language and locale specified for the slot type. + public var localeId: Swift.String? + /// The built in slot type used as a parent to this slot type. + public var parentSlotTypeSignature: Swift.String? + /// The unique identifier for the slot type. + public var slotTypeId: Swift.String? + /// The name specified for the slot type. + public var slotTypeName: Swift.String? + /// The values that the slot type can take. Includes any synonyms for the slot type values. + public var slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? + /// The strategy that Amazon Lex uses to choose a value from a list of possible values. + public var valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? - public init( - active: Swift.Bool? = nil, - closingResponse: LexModelsV2ClientTypes.ResponseSpecification? = nil, - conditional: LexModelsV2ClientTypes.ConditionalSpecification? = nil, - nextStep: LexModelsV2ClientTypes.DialogState? = nil - ) - { - self.active = active - self.closingResponse = closingResponse - self.conditional = conditional - self.nextStep = nextStep - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? = nil, + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + localeId: Swift.String? = nil, + parentSlotTypeSignature: Swift.String? = nil, + slotTypeId: Swift.String? = nil, + slotTypeName: Swift.String? = nil, + slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? = nil, + valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.compositeSlotTypeSetting = compositeSlotTypeSetting + self.creationDateTime = creationDateTime + self.description = description + self.externalSourceSetting = externalSourceSetting + self.lastUpdatedDateTime = lastUpdatedDateTime + self.localeId = localeId + self.parentSlotTypeSignature = parentSlotTypeSignature + self.slotTypeId = slotTypeId + self.slotTypeName = slotTypeName + self.slotTypeValues = slotTypeValues + self.valueSelectionSetting = valueSelectionSetting } +} +struct DescribeSlotTypeOutputResponseBody: Swift.Equatable { + let slotTypeId: Swift.String? + let slotTypeName: Swift.String? + let description: Swift.String? + let slotTypeValues: [LexModelsV2ClientTypes.SlotTypeValue]? + let valueSelectionSetting: LexModelsV2ClientTypes.SlotValueSelectionSetting? + let parentSlotTypeSignature: Swift.String? + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? + let externalSourceSetting: LexModelsV2ClientTypes.ExternalSourceSetting? + let compositeSlotTypeSetting: LexModelsV2ClientTypes.CompositeSlotTypeSetting? } -extension LexModelsV2ClientTypes.IntentConfirmationSetting: Swift.Codable { +extension DescribeSlotTypeOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case active - case codeHook - case confirmationConditional - case confirmationNextStep - case confirmationResponse - case declinationConditional - case declinationNextStep - case declinationResponse - case elicitationCodeHook - case failureConditional - case failureNextStep - case failureResponse - case promptSpecification - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let active = self.active { - try encodeContainer.encode(active, forKey: .active) - } - if let codeHook = self.codeHook { - try encodeContainer.encode(codeHook, forKey: .codeHook) - } - if let confirmationConditional = self.confirmationConditional { - try encodeContainer.encode(confirmationConditional, forKey: .confirmationConditional) - } - if let confirmationNextStep = self.confirmationNextStep { - try encodeContainer.encode(confirmationNextStep, forKey: .confirmationNextStep) - } - if let confirmationResponse = self.confirmationResponse { - try encodeContainer.encode(confirmationResponse, forKey: .confirmationResponse) - } - if let declinationConditional = self.declinationConditional { - try encodeContainer.encode(declinationConditional, forKey: .declinationConditional) - } - if let declinationNextStep = self.declinationNextStep { - try encodeContainer.encode(declinationNextStep, forKey: .declinationNextStep) - } - if let declinationResponse = self.declinationResponse { - try encodeContainer.encode(declinationResponse, forKey: .declinationResponse) - } - if let elicitationCodeHook = self.elicitationCodeHook { - try encodeContainer.encode(elicitationCodeHook, forKey: .elicitationCodeHook) - } - if let failureConditional = self.failureConditional { - try encodeContainer.encode(failureConditional, forKey: .failureConditional) - } - if let failureNextStep = self.failureNextStep { - try encodeContainer.encode(failureNextStep, forKey: .failureNextStep) - } - if let failureResponse = self.failureResponse { - try encodeContainer.encode(failureResponse, forKey: .failureResponse) - } - if let promptSpecification = self.promptSpecification { - try encodeContainer.encode(promptSpecification, forKey: .promptSpecification) - } + case botId + case botVersion + case compositeSlotTypeSetting + case creationDateTime + case description + case externalSourceSetting + case lastUpdatedDateTime + case localeId + case parentSlotTypeSignature + case slotTypeId + case slotTypeName + case slotTypeValues + case valueSelectionSetting } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let promptSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.PromptSpecification.self, forKey: .promptSpecification) - promptSpecification = promptSpecificationDecoded - let declinationResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .declinationResponse) - declinationResponse = declinationResponseDecoded - let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) - active = activeDecoded - let confirmationResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .confirmationResponse) - confirmationResponse = confirmationResponseDecoded - let confirmationNextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .confirmationNextStep) - confirmationNextStep = confirmationNextStepDecoded - let confirmationConditionalDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConditionalSpecification.self, forKey: .confirmationConditional) - confirmationConditional = confirmationConditionalDecoded - let declinationNextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .declinationNextStep) - declinationNextStep = declinationNextStepDecoded - let declinationConditionalDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConditionalSpecification.self, forKey: .declinationConditional) - declinationConditional = declinationConditionalDecoded - let failureResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .failureResponse) - failureResponse = failureResponseDecoded - let failureNextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .failureNextStep) - failureNextStep = failureNextStepDecoded - let failureConditionalDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConditionalSpecification.self, forKey: .failureConditional) - failureConditional = failureConditionalDecoded - let codeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogCodeHookInvocationSetting.self, forKey: .codeHook) - codeHook = codeHookDecoded - let elicitationCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ElicitationCodeHookInvocationSetting.self, forKey: .elicitationCodeHook) - elicitationCodeHook = elicitationCodeHookDecoded - } + let slotTypeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeId) + slotTypeId = slotTypeIdDecoded + let slotTypeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotTypeName) + slotTypeName = slotTypeNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let slotTypeValuesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotTypeValue?].self, forKey: .slotTypeValues) + var slotTypeValuesDecoded0:[LexModelsV2ClientTypes.SlotTypeValue]? = nil + if let slotTypeValuesContainer = slotTypeValuesContainer { + slotTypeValuesDecoded0 = [LexModelsV2ClientTypes.SlotTypeValue]() + for structure0 in slotTypeValuesContainer { + if let structure0 = structure0 { + slotTypeValuesDecoded0?.append(structure0) + } + } + } + slotTypeValues = slotTypeValuesDecoded0 + let valueSelectionSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotValueSelectionSetting.self, forKey: .valueSelectionSetting) + valueSelectionSetting = valueSelectionSettingDecoded + let parentSlotTypeSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentSlotTypeSignature) + parentSlotTypeSignature = parentSlotTypeSignatureDecoded + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let externalSourceSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExternalSourceSetting.self, forKey: .externalSourceSetting) + externalSourceSetting = externalSourceSettingDecoded + let compositeSlotTypeSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CompositeSlotTypeSetting.self, forKey: .compositeSlotTypeSetting) + compositeSlotTypeSetting = compositeSlotTypeSettingDecoded + } +} + +extension DescribeTestExecutionInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let testExecutionId = testExecutionId else { + return nil + } + return "/testexecutions/\(testExecutionId.urlPercentEncoding())" + } +} + +public struct DescribeTestExecutionInput: Swift.Equatable { + /// The execution Id of the test set execution. + /// This member is required. + public var testExecutionId: Swift.String? + + public init( + testExecutionId: Swift.String? = nil + ) + { + self.testExecutionId = testExecutionId + } +} + +struct DescribeTestExecutionInputBody: Swift.Equatable { +} + +extension DescribeTestExecutionInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DescribeTestExecutionOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DescribeTestExecutionOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeTestExecutionOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.apiMode = output.apiMode + self.creationDateTime = output.creationDateTime + self.failureReasons = output.failureReasons + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.target = output.target + self.testExecutionId = output.testExecutionId + self.testExecutionModality = output.testExecutionModality + self.testExecutionStatus = output.testExecutionStatus + self.testSetId = output.testSetId + self.testSetName = output.testSetName + } else { + self.apiMode = nil + self.creationDateTime = nil + self.failureReasons = nil + self.lastUpdatedDateTime = nil + self.target = nil + self.testExecutionId = nil + self.testExecutionModality = nil + self.testExecutionStatus = nil + self.testSetId = nil + self.testSetName = nil + } + } +} + +public struct DescribeTestExecutionOutputResponse: Swift.Equatable { + /// Indicates whether we use streaming or non-streaming APIs are used for the test set execution. For streaming, StartConversation Amazon Lex Runtime API is used. Whereas for non-streaming, RecognizeUtterance and RecognizeText Amazon Lex Runtime API is used. + public var apiMode: LexModelsV2ClientTypes.TestExecutionApiMode? + /// The execution creation date and time for the test set execution. + public var creationDateTime: ClientRuntime.Date? + /// Reasons for the failure of the test set execution. + public var failureReasons: [Swift.String]? + /// The date and time of the last update for the execution. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The target bot for the test set execution details. + public var target: LexModelsV2ClientTypes.TestExecutionTarget? + /// The execution Id for the test set execution. + public var testExecutionId: Swift.String? + /// Indicates whether test set is audio or text. + public var testExecutionModality: LexModelsV2ClientTypes.TestExecutionModality? + /// The test execution status for the test execution. + public var testExecutionStatus: LexModelsV2ClientTypes.TestExecutionStatus? + /// The test set Id for the test set execution. + public var testSetId: Swift.String? + /// The test set name of the test set execution. + public var testSetName: Swift.String? + + public init( + apiMode: LexModelsV2ClientTypes.TestExecutionApiMode? = nil, + creationDateTime: ClientRuntime.Date? = nil, + failureReasons: [Swift.String]? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + target: LexModelsV2ClientTypes.TestExecutionTarget? = nil, + testExecutionId: Swift.String? = nil, + testExecutionModality: LexModelsV2ClientTypes.TestExecutionModality? = nil, + testExecutionStatus: LexModelsV2ClientTypes.TestExecutionStatus? = nil, + testSetId: Swift.String? = nil, + testSetName: Swift.String? = nil + ) + { + self.apiMode = apiMode + self.creationDateTime = creationDateTime + self.failureReasons = failureReasons + self.lastUpdatedDateTime = lastUpdatedDateTime + self.target = target + self.testExecutionId = testExecutionId + self.testExecutionModality = testExecutionModality + self.testExecutionStatus = testExecutionStatus + self.testSetId = testSetId + self.testSetName = testSetName + } +} + +struct DescribeTestExecutionOutputResponseBody: Swift.Equatable { + let testExecutionId: Swift.String? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? + let testExecutionStatus: LexModelsV2ClientTypes.TestExecutionStatus? + let testSetId: Swift.String? + let testSetName: Swift.String? + let target: LexModelsV2ClientTypes.TestExecutionTarget? + let apiMode: LexModelsV2ClientTypes.TestExecutionApiMode? + let testExecutionModality: LexModelsV2ClientTypes.TestExecutionModality? + let failureReasons: [Swift.String]? +} + +extension DescribeTestExecutionOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case apiMode + case creationDateTime + case failureReasons + case lastUpdatedDateTime + case target + case testExecutionId + case testExecutionModality + case testExecutionStatus + case testSetId + case testSetName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let testExecutionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testExecutionId) + testExecutionId = testExecutionIdDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let testExecutionStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionStatus.self, forKey: .testExecutionStatus) + testExecutionStatus = testExecutionStatusDecoded + let testSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetId) + testSetId = testSetIdDecoded + let testSetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetName) + testSetName = testSetNameDecoded + let targetDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionTarget.self, forKey: .target) + target = targetDecoded + let apiModeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionApiMode.self, forKey: .apiMode) + apiMode = apiModeDecoded + let testExecutionModalityDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionModality.self, forKey: .testExecutionModality) + testExecutionModality = testExecutionModalityDecoded + let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) + var failureReasonsDecoded0:[Swift.String]? = nil + if let failureReasonsContainer = failureReasonsContainer { + failureReasonsDecoded0 = [Swift.String]() + for string0 in failureReasonsContainer { + if let string0 = string0 { + failureReasonsDecoded0?.append(string0) + } + } + } + failureReasons = failureReasonsDecoded0 + } +} + +extension DescribeTestSetDiscrepancyReportInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let testSetDiscrepancyReportId = testSetDiscrepancyReportId else { + return nil + } + return "/testsetdiscrepancy/\(testSetDiscrepancyReportId.urlPercentEncoding())" + } +} + +public struct DescribeTestSetDiscrepancyReportInput: Swift.Equatable { + /// The unique identifier of the test set discrepancy report. + /// This member is required. + public var testSetDiscrepancyReportId: Swift.String? + + public init( + testSetDiscrepancyReportId: Swift.String? = nil + ) + { + self.testSetDiscrepancyReportId = testSetDiscrepancyReportId + } +} + +struct DescribeTestSetDiscrepancyReportInputBody: Swift.Equatable { +} + +extension DescribeTestSetDiscrepancyReportInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DescribeTestSetDiscrepancyReportOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DescribeTestSetDiscrepancyReportOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeTestSetDiscrepancyReportOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.creationDateTime = output.creationDateTime + self.failureReasons = output.failureReasons + self.lastUpdatedDataTime = output.lastUpdatedDataTime + self.target = output.target + self.testSetDiscrepancyRawOutputUrl = output.testSetDiscrepancyRawOutputUrl + self.testSetDiscrepancyReportId = output.testSetDiscrepancyReportId + self.testSetDiscrepancyReportStatus = output.testSetDiscrepancyReportStatus + self.testSetDiscrepancyTopErrors = output.testSetDiscrepancyTopErrors + self.testSetId = output.testSetId + } else { + self.creationDateTime = nil + self.failureReasons = nil + self.lastUpdatedDataTime = nil + self.target = nil + self.testSetDiscrepancyRawOutputUrl = nil + self.testSetDiscrepancyReportId = nil + self.testSetDiscrepancyReportStatus = nil + self.testSetDiscrepancyTopErrors = nil + self.testSetId = nil + } + } +} + +public struct DescribeTestSetDiscrepancyReportOutputResponse: Swift.Equatable { + /// The time and date of creation for the test set discrepancy report. + public var creationDateTime: ClientRuntime.Date? + /// The failure report for the test set discrepancy report generation action. + public var failureReasons: [Swift.String]? + /// The date and time of the last update for the test set discrepancy report. + public var lastUpdatedDataTime: ClientRuntime.Date? + /// The target bot location for the test set discrepancy report. + public var target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? + /// Pre-signed Amazon S3 URL to download the test set discrepancy report. + public var testSetDiscrepancyRawOutputUrl: Swift.String? + /// The unique identifier of the test set discrepancy report to describe. + public var testSetDiscrepancyReportId: Swift.String? + /// The status for the test set discrepancy report. + public var testSetDiscrepancyReportStatus: LexModelsV2ClientTypes.TestSetDiscrepancyReportStatus? + /// The top 200 error results from the test set discrepancy report. + public var testSetDiscrepancyTopErrors: LexModelsV2ClientTypes.TestSetDiscrepancyErrors? + /// The test set Id for the test set discrepancy report. + public var testSetId: Swift.String? + + public init( + creationDateTime: ClientRuntime.Date? = nil, + failureReasons: [Swift.String]? = nil, + lastUpdatedDataTime: ClientRuntime.Date? = nil, + target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? = nil, + testSetDiscrepancyRawOutputUrl: Swift.String? = nil, + testSetDiscrepancyReportId: Swift.String? = nil, + testSetDiscrepancyReportStatus: LexModelsV2ClientTypes.TestSetDiscrepancyReportStatus? = nil, + testSetDiscrepancyTopErrors: LexModelsV2ClientTypes.TestSetDiscrepancyErrors? = nil, + testSetId: Swift.String? = nil + ) + { + self.creationDateTime = creationDateTime + self.failureReasons = failureReasons + self.lastUpdatedDataTime = lastUpdatedDataTime + self.target = target + self.testSetDiscrepancyRawOutputUrl = testSetDiscrepancyRawOutputUrl + self.testSetDiscrepancyReportId = testSetDiscrepancyReportId + self.testSetDiscrepancyReportStatus = testSetDiscrepancyReportStatus + self.testSetDiscrepancyTopErrors = testSetDiscrepancyTopErrors + self.testSetId = testSetId + } +} + +struct DescribeTestSetDiscrepancyReportOutputResponseBody: Swift.Equatable { + let testSetDiscrepancyReportId: Swift.String? + let testSetId: Swift.String? + let creationDateTime: ClientRuntime.Date? + let target: LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget? + let testSetDiscrepancyReportStatus: LexModelsV2ClientTypes.TestSetDiscrepancyReportStatus? + let lastUpdatedDataTime: ClientRuntime.Date? + let testSetDiscrepancyTopErrors: LexModelsV2ClientTypes.TestSetDiscrepancyErrors? + let testSetDiscrepancyRawOutputUrl: Swift.String? + let failureReasons: [Swift.String]? +} + +extension DescribeTestSetDiscrepancyReportOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationDateTime + case failureReasons + case lastUpdatedDataTime + case target + case testSetDiscrepancyRawOutputUrl + case testSetDiscrepancyReportId + case testSetDiscrepancyReportStatus + case testSetDiscrepancyTopErrors + case testSetId + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let testSetDiscrepancyReportIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetDiscrepancyReportId) + testSetDiscrepancyReportId = testSetDiscrepancyReportIdDecoded + let testSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetId) + testSetId = testSetIdDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let targetDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetDiscrepancyReportResourceTarget.self, forKey: .target) + target = targetDecoded + let testSetDiscrepancyReportStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetDiscrepancyReportStatus.self, forKey: .testSetDiscrepancyReportStatus) + testSetDiscrepancyReportStatus = testSetDiscrepancyReportStatusDecoded + let lastUpdatedDataTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDataTime) + lastUpdatedDataTime = lastUpdatedDataTimeDecoded + let testSetDiscrepancyTopErrorsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetDiscrepancyErrors.self, forKey: .testSetDiscrepancyTopErrors) + testSetDiscrepancyTopErrors = testSetDiscrepancyTopErrorsDecoded + let testSetDiscrepancyRawOutputUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetDiscrepancyRawOutputUrl) + testSetDiscrepancyRawOutputUrl = testSetDiscrepancyRawOutputUrlDecoded + let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) + var failureReasonsDecoded0:[Swift.String]? = nil + if let failureReasonsContainer = failureReasonsContainer { + failureReasonsDecoded0 = [Swift.String]() + for string0 in failureReasonsContainer { + if let string0 = string0 { + failureReasonsDecoded0?.append(string0) + } + } + } + failureReasons = failureReasonsDecoded0 + } +} + +extension DescribeTestSetGenerationInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let testSetGenerationId = testSetGenerationId else { + return nil + } + return "/testsetgenerations/\(testSetGenerationId.urlPercentEncoding())" + } +} + +public struct DescribeTestSetGenerationInput: Swift.Equatable { + /// The unique identifier of the test set generation. + /// This member is required. + public var testSetGenerationId: Swift.String? + + public init( + testSetGenerationId: Swift.String? = nil + ) + { + self.testSetGenerationId = testSetGenerationId + } +} + +struct DescribeTestSetGenerationInputBody: Swift.Equatable { +} + +extension DescribeTestSetGenerationInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DescribeTestSetGenerationOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DescribeTestSetGenerationOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeTestSetGenerationOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.creationDateTime = output.creationDateTime + self.description = output.description + self.failureReasons = output.failureReasons + self.generationDataSource = output.generationDataSource + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.roleArn = output.roleArn + self.storageLocation = output.storageLocation + self.testSetGenerationId = output.testSetGenerationId + self.testSetGenerationStatus = output.testSetGenerationStatus + self.testSetId = output.testSetId + self.testSetName = output.testSetName + } else { + self.creationDateTime = nil + self.description = nil + self.failureReasons = nil + self.generationDataSource = nil + self.lastUpdatedDateTime = nil + self.roleArn = nil + self.storageLocation = nil + self.testSetGenerationId = nil + self.testSetGenerationStatus = nil + self.testSetId = nil + self.testSetName = nil + } + } +} + +public struct DescribeTestSetGenerationOutputResponse: Swift.Equatable { + /// The creation date and time for the test set generation. + public var creationDateTime: ClientRuntime.Date? + /// The test set description for the test set generation. + public var description: Swift.String? + /// The reasons the test set generation failed. + public var failureReasons: [Swift.String]? + /// The data source of the test set used for the test set generation. + public var generationDataSource: LexModelsV2ClientTypes.TestSetGenerationDataSource? + /// The date and time of the last update for the test set generation. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The roleARN of the test set used for the test set generation. + public var roleArn: Swift.String? + /// The Amazon S3 storage location for the test set generation. + public var storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? + /// The unique identifier of the test set generation. + public var testSetGenerationId: Swift.String? + /// The status for the test set generation. + public var testSetGenerationStatus: LexModelsV2ClientTypes.TestSetGenerationStatus? + /// The unique identifier for the test set created for the generated test set. + public var testSetId: Swift.String? + /// The test set name for the generated test set. + public var testSetName: Swift.String? + + public init( + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + failureReasons: [Swift.String]? = nil, + generationDataSource: LexModelsV2ClientTypes.TestSetGenerationDataSource? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + roleArn: Swift.String? = nil, + storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? = nil, + testSetGenerationId: Swift.String? = nil, + testSetGenerationStatus: LexModelsV2ClientTypes.TestSetGenerationStatus? = nil, + testSetId: Swift.String? = nil, + testSetName: Swift.String? = nil + ) + { + self.creationDateTime = creationDateTime + self.description = description + self.failureReasons = failureReasons + self.generationDataSource = generationDataSource + self.lastUpdatedDateTime = lastUpdatedDateTime + self.roleArn = roleArn + self.storageLocation = storageLocation + self.testSetGenerationId = testSetGenerationId + self.testSetGenerationStatus = testSetGenerationStatus + self.testSetId = testSetId + self.testSetName = testSetName + } +} + +struct DescribeTestSetGenerationOutputResponseBody: Swift.Equatable { + let testSetGenerationId: Swift.String? + let testSetGenerationStatus: LexModelsV2ClientTypes.TestSetGenerationStatus? + let failureReasons: [Swift.String]? + let testSetId: Swift.String? + let testSetName: Swift.String? + let description: Swift.String? + let storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? + let generationDataSource: LexModelsV2ClientTypes.TestSetGenerationDataSource? + let roleArn: Swift.String? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? +} + +extension DescribeTestSetGenerationOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationDateTime + case description + case failureReasons + case generationDataSource + case lastUpdatedDateTime + case roleArn + case storageLocation + case testSetGenerationId + case testSetGenerationStatus + case testSetId + case testSetName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let testSetGenerationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetGenerationId) + testSetGenerationId = testSetGenerationIdDecoded + let testSetGenerationStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetGenerationStatus.self, forKey: .testSetGenerationStatus) + testSetGenerationStatus = testSetGenerationStatusDecoded + let failureReasonsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .failureReasons) + var failureReasonsDecoded0:[Swift.String]? = nil + if let failureReasonsContainer = failureReasonsContainer { + failureReasonsDecoded0 = [Swift.String]() + for string0 in failureReasonsContainer { + if let string0 = string0 { + failureReasonsDecoded0?.append(string0) + } + } + } + failureReasons = failureReasonsDecoded0 + let testSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetId) + testSetId = testSetIdDecoded + let testSetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetName) + testSetName = testSetNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let storageLocationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetStorageLocation.self, forKey: .storageLocation) + storageLocation = storageLocationDecoded + let generationDataSourceDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetGenerationDataSource.self, forKey: .generationDataSource) + generationDataSource = generationDataSourceDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + } +} + +extension DescribeTestSetInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let testSetId = testSetId else { + return nil + } + return "/testsets/\(testSetId.urlPercentEncoding())" + } +} + +public struct DescribeTestSetInput: Swift.Equatable { + /// The test set Id for the test set request. + /// This member is required. + public var testSetId: Swift.String? + + public init( + testSetId: Swift.String? = nil + ) + { + self.testSetId = testSetId + } +} + +struct DescribeTestSetInputBody: Swift.Equatable { +} + +extension DescribeTestSetInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DescribeTestSetOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DescribeTestSetOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeTestSetOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.creationDateTime = output.creationDateTime + self.description = output.description + self.lastUpdatedDateTime = output.lastUpdatedDateTime + self.modality = output.modality + self.numTurns = output.numTurns + self.roleArn = output.roleArn + self.status = output.status + self.storageLocation = output.storageLocation + self.testSetId = output.testSetId + self.testSetName = output.testSetName + } else { + self.creationDateTime = nil + self.description = nil + self.lastUpdatedDateTime = nil + self.modality = nil + self.numTurns = nil + self.roleArn = nil + self.status = nil + self.storageLocation = nil + self.testSetId = nil + self.testSetName = nil + } + } +} + +public struct DescribeTestSetOutputResponse: Swift.Equatable { + /// The creation date and time for the test set data. + public var creationDateTime: ClientRuntime.Date? + /// The description of the test set. + public var description: Swift.String? + /// The date and time for the last update of the test set data. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// Indicates whether the test set is audio or text data. + public var modality: LexModelsV2ClientTypes.TestSetModality? + /// The total number of agent and user turn in the test set. + public var numTurns: Swift.Int? + /// The roleARN used for any operation in the test set to access resources in the Amazon Web Services account. + public var roleArn: Swift.String? + /// The status of the test set. + public var status: LexModelsV2ClientTypes.TestSetStatus? + /// The Amazon S3 storage location for the test set data. + public var storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? + /// The test set Id for the test set response. + public var testSetId: Swift.String? + /// The test set name of the test set. + public var testSetName: Swift.String? + + public init( + creationDateTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + modality: LexModelsV2ClientTypes.TestSetModality? = nil, + numTurns: Swift.Int? = nil, + roleArn: Swift.String? = nil, + status: LexModelsV2ClientTypes.TestSetStatus? = nil, + storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? = nil, + testSetId: Swift.String? = nil, + testSetName: Swift.String? = nil + ) + { + self.creationDateTime = creationDateTime + self.description = description + self.lastUpdatedDateTime = lastUpdatedDateTime + self.modality = modality + self.numTurns = numTurns + self.roleArn = roleArn + self.status = status + self.storageLocation = storageLocation + self.testSetId = testSetId + self.testSetName = testSetName + } +} + +struct DescribeTestSetOutputResponseBody: Swift.Equatable { + let testSetId: Swift.String? + let testSetName: Swift.String? + let description: Swift.String? + let modality: LexModelsV2ClientTypes.TestSetModality? + let status: LexModelsV2ClientTypes.TestSetStatus? + let roleArn: Swift.String? + let numTurns: Swift.Int? + let storageLocation: LexModelsV2ClientTypes.TestSetStorageLocation? + let creationDateTime: ClientRuntime.Date? + let lastUpdatedDateTime: ClientRuntime.Date? +} + +extension DescribeTestSetOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationDateTime + case description + case lastUpdatedDateTime + case modality + case numTurns + case roleArn + case status + case storageLocation + case testSetId + case testSetName + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let testSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetId) + testSetId = testSetIdDecoded + let testSetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testSetName) + testSetName = testSetNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let modalityDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetModality.self, forKey: .modality) + modality = modalityDecoded + let statusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetStatus.self, forKey: .status) + status = statusDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + let numTurnsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .numTurns) + numTurns = numTurnsDecoded + let storageLocationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetStorageLocation.self, forKey: .storageLocation) + storageLocation = storageLocationDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + } +} + +extension LexModelsV2ClientTypes.DialogAction: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case slotToElicit + case suppressNextMessage + case type + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let slotToElicit = self.slotToElicit { + try encodeContainer.encode(slotToElicit, forKey: .slotToElicit) + } + if let suppressNextMessage = self.suppressNextMessage { + try encodeContainer.encode(suppressNextMessage, forKey: .suppressNextMessage) + } + if let type = self.type { + try encodeContainer.encode(type.rawValue, forKey: .type) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let typeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogActionType.self, forKey: .type) + type = typeDecoded + let slotToElicitDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotToElicit) + slotToElicit = slotToElicitDecoded + let suppressNextMessageDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .suppressNextMessage) + suppressNextMessage = suppressNextMessageDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Defines the action that the bot executes at runtime when the conversation reaches this step. + public struct DialogAction: Swift.Equatable { + /// If the dialog action is ElicitSlot, defines the slot to elicit from the user. + public var slotToElicit: Swift.String? + /// When true the next message for the intent is not used. + public var suppressNextMessage: Swift.Bool? + /// The action that the bot should execute. + /// This member is required. + public var type: LexModelsV2ClientTypes.DialogActionType? + + public init( + slotToElicit: Swift.String? = nil, + suppressNextMessage: Swift.Bool? = nil, + type: LexModelsV2ClientTypes.DialogActionType? = nil + ) + { + self.slotToElicit = slotToElicit + self.suppressNextMessage = suppressNextMessage + self.type = type + } + } + +} + +extension LexModelsV2ClientTypes { + public enum DialogActionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case closeintent + case confirmintent + case elicitintent + case elicitslot + case endconversation + case evaluateconditional + case fulfillintent + case invokedialogcodehook + case startintent + case sdkUnknown(Swift.String) + + public static var allCases: [DialogActionType] { + return [ + .closeintent, + .confirmintent, + .elicitintent, + .elicitslot, + .endconversation, + .evaluateconditional, + .fulfillintent, + .invokedialogcodehook, + .startintent, + .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 .closeintent: return "CloseIntent" + case .confirmintent: return "ConfirmIntent" + case .elicitintent: return "ElicitIntent" + case .elicitslot: return "ElicitSlot" + case .endconversation: return "EndConversation" + case .evaluateconditional: return "EvaluateConditional" + case .fulfillintent: return "FulfillIntent" + case .invokedialogcodehook: return "InvokeDialogCodeHook" + case .startintent: return "StartIntent" + 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 = DialogActionType(rawValue: rawValue) ?? DialogActionType.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.DialogCodeHookInvocationSetting: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case active + case enableCodeHookInvocation + case invocationLabel + case postCodeHookSpecification + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let active = self.active { + try encodeContainer.encode(active, forKey: .active) + } + if let enableCodeHookInvocation = self.enableCodeHookInvocation { + try encodeContainer.encode(enableCodeHookInvocation, forKey: .enableCodeHookInvocation) + } + if let invocationLabel = self.invocationLabel { + try encodeContainer.encode(invocationLabel, forKey: .invocationLabel) + } + if let postCodeHookSpecification = self.postCodeHookSpecification { + try encodeContainer.encode(postCodeHookSpecification, forKey: .postCodeHookSpecification) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let enableCodeHookInvocationDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enableCodeHookInvocation) + enableCodeHookInvocation = enableCodeHookInvocationDecoded + let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) + active = activeDecoded + let invocationLabelDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .invocationLabel) + invocationLabel = invocationLabelDecoded + let postCodeHookSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.PostDialogCodeHookInvocationSpecification.self, forKey: .postCodeHookSpecification) + postCodeHookSpecification = postCodeHookSpecificationDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Settings that specify the dialog code hook that is called by Amazon Lex at a step of the conversation. + public struct DialogCodeHookInvocationSetting: Swift.Equatable { + /// Determines whether a dialog code hook is used when the intent is activated. + /// This member is required. + public var active: Swift.Bool? + /// Indicates whether a Lambda function should be invoked for the dialog. + /// This member is required. + public var enableCodeHookInvocation: Swift.Bool? + /// A label that indicates the dialog step from which the dialog code hook is happening. + public var invocationLabel: Swift.String? + /// Contains the responses and actions that Amazon Lex takes after the Lambda function is complete. + /// This member is required. + public var postCodeHookSpecification: LexModelsV2ClientTypes.PostDialogCodeHookInvocationSpecification? + + public init( + active: Swift.Bool? = nil, + enableCodeHookInvocation: Swift.Bool? = nil, + invocationLabel: Swift.String? = nil, + postCodeHookSpecification: LexModelsV2ClientTypes.PostDialogCodeHookInvocationSpecification? = nil + ) + { + self.active = active + self.enableCodeHookInvocation = enableCodeHookInvocation + self.invocationLabel = invocationLabel + self.postCodeHookSpecification = postCodeHookSpecification + } + } + +} + +extension LexModelsV2ClientTypes.DialogCodeHookSettings: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case enabled + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if enabled != false { + try encodeContainer.encode(enabled, forKey: .enabled) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) ?? false + enabled = enabledDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Settings that determine the Lambda function that Amazon Lex uses for processing user responses. + public struct DialogCodeHookSettings: Swift.Equatable { + /// Enables the dialog code hook so that it processes user requests. + /// This member is required. + public var enabled: Swift.Bool + + public init( + enabled: Swift.Bool = false + ) + { + self.enabled = enabled + } + } + +} + +extension LexModelsV2ClientTypes.DialogState: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dialogAction + case intent + case sessionAttributes + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let dialogAction = self.dialogAction { + try encodeContainer.encode(dialogAction, forKey: .dialogAction) + } + if let intent = self.intent { + try encodeContainer.encode(intent, forKey: .intent) + } + if let sessionAttributes = sessionAttributes { + var sessionAttributesContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .sessionAttributes) + for (dictKey0, stringMap0) in sessionAttributes { + try sessionAttributesContainer.encode(stringMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let dialogActionDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogAction.self, forKey: .dialogAction) + dialogAction = dialogActionDecoded + let intentDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentOverride.self, forKey: .intent) + intent = intentDecoded + let sessionAttributesContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .sessionAttributes) + var sessionAttributesDecoded0: [Swift.String:Swift.String]? = nil + if let sessionAttributesContainer = sessionAttributesContainer { + sessionAttributesDecoded0 = [Swift.String:Swift.String]() + for (key0, string0) in sessionAttributesContainer { + if let string0 = string0 { + sessionAttributesDecoded0?[key0] = string0 + } + } + } + sessionAttributes = sessionAttributesDecoded0 + } +} + +extension LexModelsV2ClientTypes { + /// The current state of the conversation with the user. + public struct DialogState: Swift.Equatable { + /// Defines the action that the bot executes at runtime when the conversation reaches this step. + public var dialogAction: LexModelsV2ClientTypes.DialogAction? + /// Override settings to configure the intent state. + public var intent: LexModelsV2ClientTypes.IntentOverride? + /// Map of key/value pairs representing session-specific context information. It contains application information passed between Amazon Lex and a client application. + public var sessionAttributes: [Swift.String:Swift.String]? + + public init( + dialogAction: LexModelsV2ClientTypes.DialogAction? = nil, + intent: LexModelsV2ClientTypes.IntentOverride? = nil, + sessionAttributes: [Swift.String:Swift.String]? = nil + ) + { + self.dialogAction = dialogAction + self.intent = intent + self.sessionAttributes = sessionAttributes + } + } + +} + +extension LexModelsV2ClientTypes { + public enum Effect: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case allow + case deny + case sdkUnknown(Swift.String) + + public static var allCases: [Effect] { + return [ + .allow, + .deny, + .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 .allow: return "Allow" + case .deny: return "Deny" + 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 = Effect(rawValue: rawValue) ?? Effect.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.ElicitationCodeHookInvocationSetting: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case enableCodeHookInvocation + case invocationLabel + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let enableCodeHookInvocation = self.enableCodeHookInvocation { + try encodeContainer.encode(enableCodeHookInvocation, forKey: .enableCodeHookInvocation) + } + if let invocationLabel = self.invocationLabel { + try encodeContainer.encode(invocationLabel, forKey: .invocationLabel) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let enableCodeHookInvocationDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enableCodeHookInvocation) + enableCodeHookInvocation = enableCodeHookInvocationDecoded + let invocationLabelDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .invocationLabel) + invocationLabel = invocationLabelDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Settings that specify the dialog code hook that is called by Amazon Lex between eliciting slot values. + public struct ElicitationCodeHookInvocationSetting: Swift.Equatable { + /// Indicates whether a Lambda function should be invoked for the dialog. + /// This member is required. + public var enableCodeHookInvocation: Swift.Bool? + /// A label that indicates the dialog step from which the dialog code hook is happening. + public var invocationLabel: Swift.String? + + public init( + enableCodeHookInvocation: Swift.Bool? = nil, + invocationLabel: Swift.String? = nil + ) + { + self.enableCodeHookInvocation = enableCodeHookInvocation + self.invocationLabel = invocationLabel + } + } + +} + +extension LexModelsV2ClientTypes.EncryptionSetting: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case associatedTranscriptsPassword + case botLocaleExportPassword + case kmsKeyArn + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let associatedTranscriptsPassword = self.associatedTranscriptsPassword { + try encodeContainer.encode(associatedTranscriptsPassword, forKey: .associatedTranscriptsPassword) + } + if let botLocaleExportPassword = self.botLocaleExportPassword { + try encodeContainer.encode(botLocaleExportPassword, forKey: .botLocaleExportPassword) + } + if let kmsKeyArn = self.kmsKeyArn { + try encodeContainer.encode(kmsKeyArn, forKey: .kmsKeyArn) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let kmsKeyArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kmsKeyArn) + kmsKeyArn = kmsKeyArnDecoded + let botLocaleExportPasswordDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botLocaleExportPassword) + botLocaleExportPassword = botLocaleExportPasswordDecoded + let associatedTranscriptsPasswordDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .associatedTranscriptsPassword) + associatedTranscriptsPassword = associatedTranscriptsPasswordDecoded + } +} + +extension LexModelsV2ClientTypes.EncryptionSetting: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "EncryptionSetting(kmsKeyArn: \(Swift.String(describing: kmsKeyArn)), associatedTranscriptsPassword: \"CONTENT_REDACTED\", botLocaleExportPassword: \"CONTENT_REDACTED\")"} +} + +extension LexModelsV2ClientTypes { + /// The object representing the passwords that were used to encrypt the data related to the bot recommendation, as well as the KMS key ARN used to encrypt the associated metadata. + public struct EncryptionSetting: Swift.Equatable { + /// The password used to encrypt the associated transcript file. + public var associatedTranscriptsPassword: Swift.String? + /// The password used to encrypt the recommended bot recommendation file. + public var botLocaleExportPassword: Swift.String? + /// The KMS key ARN used to encrypt the metadata associated with the bot recommendation. + public var kmsKeyArn: Swift.String? + + public init( + associatedTranscriptsPassword: Swift.String? = nil, + botLocaleExportPassword: Swift.String? = nil, + kmsKeyArn: Swift.String? = nil + ) + { + self.associatedTranscriptsPassword = associatedTranscriptsPassword + self.botLocaleExportPassword = botLocaleExportPassword + self.kmsKeyArn = kmsKeyArn + } + } + +} + +extension LexModelsV2ClientTypes { + public enum ErrorCode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case duplicateInput + case internalServerFailure + case resourceAlreadyExists + case resourceDoesNotExist + case sdkUnknown(Swift.String) + + public static var allCases: [ErrorCode] { + return [ + .duplicateInput, + .internalServerFailure, + .resourceAlreadyExists, + .resourceDoesNotExist, + .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 .duplicateInput: return "DUPLICATE_INPUT" + case .internalServerFailure: return "INTERNAL_SERVER_FAILURE" + case .resourceAlreadyExists: return "RESOURCE_ALREADY_EXISTS" + case .resourceDoesNotExist: return "RESOURCE_DOES_NOT_EXIST" + 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 = ErrorCode(rawValue: rawValue) ?? ErrorCode.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.ExecutionErrorDetails: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case errorCode + case errorMessage + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let errorCode = self.errorCode { + try encodeContainer.encode(errorCode, forKey: .errorCode) + } + if let errorMessage = self.errorMessage { + try encodeContainer.encode(errorMessage, forKey: .errorMessage) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let errorCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorCode) + errorCode = errorCodeDecoded + let errorMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorMessage) + errorMessage = errorMessageDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Details about an error in an execution of a test set. + public struct ExecutionErrorDetails: Swift.Equatable { + /// The error code for the error. + /// This member is required. + public var errorCode: Swift.String? + /// The message describing the error. + /// This member is required. + public var errorMessage: Swift.String? + + public init( + errorCode: Swift.String? = nil, + errorMessage: Swift.String? = nil + ) + { + self.errorCode = errorCode + self.errorMessage = errorMessage + } + } + +} + +extension LexModelsV2ClientTypes.ExportFilter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case `operator` = "operator" + case values + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let `operator` = self.`operator` { + try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + } + if let values = values { + var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) + for filtervalue0 in values { + try valuesContainer.encode(filtervalue0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportFilterName.self, forKey: .name) + name = nameDecoded + let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) + var valuesDecoded0:[Swift.String]? = nil + if let valuesContainer = valuesContainer { + valuesDecoded0 = [Swift.String]() + for string0 in valuesContainer { + if let string0 = string0 { + valuesDecoded0?.append(string0) + } + } + } + values = valuesDecoded0 + let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportFilterOperator.self, forKey: .operator) + `operator` = operatorDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Filters the response form the [ListExports](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListExports.html) operation + public struct ExportFilter: Swift.Equatable { + /// The name of the field to use for filtering. + /// This member is required. + public var name: LexModelsV2ClientTypes.ExportFilterName? + /// The operator to use for the filter. Specify EQ when the ListExports operation should return only resource types that equal the specified value. Specify CO when the ListExports operation should return resource types that contain the specified value. + /// This member is required. + public var `operator`: LexModelsV2ClientTypes.ExportFilterOperator? + /// The values to use to filter the response. The values must be Bot, BotLocale, or CustomVocabulary. + /// This member is required. + public var values: [Swift.String]? + + public init( + name: LexModelsV2ClientTypes.ExportFilterName? = nil, + `operator`: LexModelsV2ClientTypes.ExportFilterOperator? = nil, + values: [Swift.String]? = nil + ) + { + self.name = name + self.`operator` = `operator` + self.values = values + } + } + +} + +extension LexModelsV2ClientTypes { + public enum ExportFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case exportresourcetype + case sdkUnknown(Swift.String) + + public static var allCases: [ExportFilterName] { + return [ + .exportresourcetype, + .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 .exportresourcetype: return "ExportResourceType" + 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 = ExportFilterName(rawValue: rawValue) ?? ExportFilterName.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes { + public enum ExportFilterOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case contains + case equals + case sdkUnknown(Swift.String) + + public static var allCases: [ExportFilterOperator] { + return [ + .contains, + .equals, + .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 .contains: return "CO" + case .equals: return "EQ" + 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 = ExportFilterOperator(rawValue: rawValue) ?? ExportFilterOperator.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.ExportResourceSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botExportSpecification + case botLocaleExportSpecification + case customVocabularyExportSpecification + case testSetExportSpecification + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botExportSpecification = self.botExportSpecification { + try encodeContainer.encode(botExportSpecification, forKey: .botExportSpecification) + } + if let botLocaleExportSpecification = self.botLocaleExportSpecification { + try encodeContainer.encode(botLocaleExportSpecification, forKey: .botLocaleExportSpecification) + } + if let customVocabularyExportSpecification = self.customVocabularyExportSpecification { + try encodeContainer.encode(customVocabularyExportSpecification, forKey: .customVocabularyExportSpecification) + } + if let testSetExportSpecification = self.testSetExportSpecification { + try encodeContainer.encode(testSetExportSpecification, forKey: .testSetExportSpecification) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botExportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotExportSpecification.self, forKey: .botExportSpecification) + botExportSpecification = botExportSpecificationDecoded + let botLocaleExportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleExportSpecification.self, forKey: .botLocaleExportSpecification) + botLocaleExportSpecification = botLocaleExportSpecificationDecoded + let customVocabularyExportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CustomVocabularyExportSpecification.self, forKey: .customVocabularyExportSpecification) + customVocabularyExportSpecification = customVocabularyExportSpecificationDecoded + let testSetExportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetExportSpecification.self, forKey: .testSetExportSpecification) + testSetExportSpecification = testSetExportSpecificationDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides information about the bot or bot locale that you want to export. You can specify the botExportSpecification or the botLocaleExportSpecification, but not both. + public struct ExportResourceSpecification: Swift.Equatable { + /// Parameters for exporting a bot. + public var botExportSpecification: LexModelsV2ClientTypes.BotExportSpecification? + /// Parameters for exporting a bot locale. + public var botLocaleExportSpecification: LexModelsV2ClientTypes.BotLocaleExportSpecification? + /// The parameters required to export a custom vocabulary. + public var customVocabularyExportSpecification: LexModelsV2ClientTypes.CustomVocabularyExportSpecification? + /// Specifications for the test set that is exported as a resource. + public var testSetExportSpecification: LexModelsV2ClientTypes.TestSetExportSpecification? + + public init( + botExportSpecification: LexModelsV2ClientTypes.BotExportSpecification? = nil, + botLocaleExportSpecification: LexModelsV2ClientTypes.BotLocaleExportSpecification? = nil, + customVocabularyExportSpecification: LexModelsV2ClientTypes.CustomVocabularyExportSpecification? = nil, + testSetExportSpecification: LexModelsV2ClientTypes.TestSetExportSpecification? = nil + ) + { + self.botExportSpecification = botExportSpecification + self.botLocaleExportSpecification = botLocaleExportSpecification + self.customVocabularyExportSpecification = customVocabularyExportSpecification + self.testSetExportSpecification = testSetExportSpecification + } + } + +} + +extension LexModelsV2ClientTypes { + public enum ExportSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case lastupdateddatetime + case sdkUnknown(Swift.String) + + public static var allCases: [ExportSortAttribute] { + return [ + .lastupdateddatetime, + .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 .lastupdateddatetime: return "LastUpdatedDateTime" + 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 = ExportSortAttribute(rawValue: rawValue) ?? ExportSortAttribute.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.ExportSortBy: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case attribute + case order + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attribute = self.attribute { + try encodeContainer.encode(attribute.rawValue, forKey: .attribute) + } + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportSortAttribute.self, forKey: .attribute) + attribute = attributeDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) + order = orderDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides information about sorting a list of exports. + public struct ExportSortBy: Swift.Equatable { + /// The export field to use for sorting. + /// This member is required. + public var attribute: LexModelsV2ClientTypes.ExportSortAttribute? + /// The order to sort the list. + /// This member is required. + public var order: LexModelsV2ClientTypes.SortOrder? + + public init( + attribute: LexModelsV2ClientTypes.ExportSortAttribute? = nil, + order: LexModelsV2ClientTypes.SortOrder? = nil + ) + { + self.attribute = attribute + self.order = order + } + } + +} + +extension LexModelsV2ClientTypes { + public enum ExportStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case completed + case deleting + case failed + case inprogress + case sdkUnknown(Swift.String) + + public static var allCases: [ExportStatus] { + return [ + .completed, + .deleting, + .failed, + .inprogress, + .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 .completed: return "Completed" + case .deleting: return "Deleting" + case .failed: return "Failed" + case .inprogress: return "InProgress" + 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 = ExportStatus(rawValue: rawValue) ?? ExportStatus.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.ExportSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationDateTime + case exportId + case exportStatus + case fileFormat + case lastUpdatedDateTime + case resourceSpecification + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let creationDateTime = self.creationDateTime { + try encodeContainer.encodeTimestamp(creationDateTime, format: .epochSeconds, forKey: .creationDateTime) + } + if let exportId = self.exportId { + try encodeContainer.encode(exportId, forKey: .exportId) + } + if let exportStatus = self.exportStatus { + try encodeContainer.encode(exportStatus.rawValue, forKey: .exportStatus) + } + if let fileFormat = self.fileFormat { + try encodeContainer.encode(fileFormat.rawValue, forKey: .fileFormat) + } + if let lastUpdatedDateTime = self.lastUpdatedDateTime { + try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) + } + 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 exportIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .exportId) + exportId = exportIdDecoded + let resourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportResourceSpecification.self, forKey: .resourceSpecification) + resourceSpecification = resourceSpecificationDecoded + let fileFormatDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportExportFileFormat.self, forKey: .fileFormat) + fileFormat = fileFormatDecoded + let exportStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportStatus.self, forKey: .exportStatus) + exportStatus = exportStatusDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides summary information about an export in an export list. + public struct ExportSummary: Swift.Equatable { + /// The date and time that the export was created. + public var creationDateTime: ClientRuntime.Date? + /// The unique identifier that Amazon Lex assigned to the export. + public var exportId: Swift.String? + /// The status of the export. When the status is Completed the export is ready to download. + public var exportStatus: LexModelsV2ClientTypes.ExportStatus? + /// The file format used in the export files. + public var fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? + /// The date and time that the export was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// Information about the bot or bot locale that was exported. + public var resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? + + public init( + creationDateTime: ClientRuntime.Date? = nil, + exportId: Swift.String? = nil, + exportStatus: LexModelsV2ClientTypes.ExportStatus? = nil, + fileFormat: LexModelsV2ClientTypes.ImportExportFileFormat? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + resourceSpecification: LexModelsV2ClientTypes.ExportResourceSpecification? = nil + ) + { + self.creationDateTime = creationDateTime + self.exportId = exportId + self.exportStatus = exportStatus + self.fileFormat = fileFormat + self.lastUpdatedDateTime = lastUpdatedDateTime + self.resourceSpecification = resourceSpecification + } + } + +} + +extension LexModelsV2ClientTypes.ExternalSourceSetting: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case grammarSlotTypeSetting + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let grammarSlotTypeSetting = self.grammarSlotTypeSetting { + try encodeContainer.encode(grammarSlotTypeSetting, forKey: .grammarSlotTypeSetting) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let grammarSlotTypeSettingDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.GrammarSlotTypeSetting.self, forKey: .grammarSlotTypeSetting) + grammarSlotTypeSetting = grammarSlotTypeSettingDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides information about the external source of the slot type's definition. + public struct ExternalSourceSetting: Swift.Equatable { + /// Settings required for a slot type based on a grammar that you provide. + public var grammarSlotTypeSetting: LexModelsV2ClientTypes.GrammarSlotTypeSetting? + + public init( + grammarSlotTypeSetting: LexModelsV2ClientTypes.GrammarSlotTypeSetting? = nil + ) + { + self.grammarSlotTypeSetting = grammarSlotTypeSetting + } + } + +} + +extension LexModelsV2ClientTypes.FailedCustomVocabularyItem: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case errorCode + case errorMessage + case itemId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let errorCode = self.errorCode { + try encodeContainer.encode(errorCode.rawValue, forKey: .errorCode) + } + if let errorMessage = self.errorMessage { + try encodeContainer.encode(errorMessage, forKey: .errorMessage) + } + if let itemId = self.itemId { + try encodeContainer.encode(itemId, forKey: .itemId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let itemIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .itemId) + itemId = itemIdDecoded + let errorMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorMessage) + errorMessage = errorMessageDecoded + let errorCodeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ErrorCode.self, forKey: .errorCode) + errorCode = errorCodeDecoded + } +} + +extension LexModelsV2ClientTypes { + /// The unique failed custom vocabulary item from the custom vocabulary list. + public struct FailedCustomVocabularyItem: Swift.Equatable { + /// The unique error code for the failed custom vocabulary item from the custom vocabulary list. + public var errorCode: LexModelsV2ClientTypes.ErrorCode? + /// The error message for the failed custom vocabulary item from the custom vocabulary list. + public var errorMessage: Swift.String? + /// The unique item identifer for the failed custom vocabulary item from the custom vocabulary list. + public var itemId: Swift.String? + + public init( + errorCode: LexModelsV2ClientTypes.ErrorCode? = nil, + errorMessage: Swift.String? = nil, + itemId: Swift.String? = nil + ) + { + self.errorCode = errorCode + self.errorMessage = errorMessage + self.itemId = itemId + } + } + +} + +extension LexModelsV2ClientTypes.FulfillmentCodeHookSettings: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case active + case enabled + case fulfillmentUpdatesSpecification + case postFulfillmentStatusSpecification + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let active = self.active { + try encodeContainer.encode(active, forKey: .active) + } + if enabled != false { + try encodeContainer.encode(enabled, forKey: .enabled) + } + if let fulfillmentUpdatesSpecification = self.fulfillmentUpdatesSpecification { + try encodeContainer.encode(fulfillmentUpdatesSpecification, forKey: .fulfillmentUpdatesSpecification) + } + if let postFulfillmentStatusSpecification = self.postFulfillmentStatusSpecification { + try encodeContainer.encode(postFulfillmentStatusSpecification, forKey: .postFulfillmentStatusSpecification) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) ?? false + enabled = enabledDecoded + let postFulfillmentStatusSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.PostFulfillmentStatusSpecification.self, forKey: .postFulfillmentStatusSpecification) + postFulfillmentStatusSpecification = postFulfillmentStatusSpecificationDecoded + let fulfillmentUpdatesSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentUpdatesSpecification.self, forKey: .fulfillmentUpdatesSpecification) + fulfillmentUpdatesSpecification = fulfillmentUpdatesSpecificationDecoded + let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) + active = activeDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Determines if a Lambda function should be invoked for a specific intent. + public struct FulfillmentCodeHookSettings: Swift.Equatable { + /// Determines whether the fulfillment code hook is used. When active is false, the code hook doesn't run. + public var active: Swift.Bool? + /// Indicates whether a Lambda function should be invoked to fulfill a specific intent. + /// This member is required. + public var enabled: Swift.Bool + /// Provides settings for update messages sent to the user for long-running Lambda fulfillment functions. Fulfillment updates can be used only with streaming conversations. + public var fulfillmentUpdatesSpecification: LexModelsV2ClientTypes.FulfillmentUpdatesSpecification? + /// Provides settings for messages sent to the user for after the Lambda fulfillment function completes. Post-fulfillment messages can be sent for both streaming and non-streaming conversations. + public var postFulfillmentStatusSpecification: LexModelsV2ClientTypes.PostFulfillmentStatusSpecification? + + public init( + active: Swift.Bool? = nil, + enabled: Swift.Bool = false, + fulfillmentUpdatesSpecification: LexModelsV2ClientTypes.FulfillmentUpdatesSpecification? = nil, + postFulfillmentStatusSpecification: LexModelsV2ClientTypes.PostFulfillmentStatusSpecification? = nil + ) + { + self.active = active + self.enabled = enabled + self.fulfillmentUpdatesSpecification = fulfillmentUpdatesSpecification + self.postFulfillmentStatusSpecification = postFulfillmentStatusSpecification + } + } + +} + +extension LexModelsV2ClientTypes.FulfillmentStartResponseSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case allowInterrupt + case delayInSeconds + case messageGroups + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let allowInterrupt = self.allowInterrupt { + try encodeContainer.encode(allowInterrupt, forKey: .allowInterrupt) + } + if let delayInSeconds = self.delayInSeconds { + try encodeContainer.encode(delayInSeconds, forKey: .delayInSeconds) + } + if let messageGroups = messageGroups { + var messageGroupsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .messageGroups) + for messagegroup0 in messageGroups { + try messageGroupsContainer.encode(messagegroup0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let delayInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .delayInSeconds) + delayInSeconds = delayInSecondsDecoded + let messageGroupsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.MessageGroup?].self, forKey: .messageGroups) + var messageGroupsDecoded0:[LexModelsV2ClientTypes.MessageGroup]? = nil + if let messageGroupsContainer = messageGroupsContainer { + messageGroupsDecoded0 = [LexModelsV2ClientTypes.MessageGroup]() + for structure0 in messageGroupsContainer { + if let structure0 = structure0 { + messageGroupsDecoded0?.append(structure0) + } + } + } + messageGroups = messageGroupsDecoded0 + let allowInterruptDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .allowInterrupt) + allowInterrupt = allowInterruptDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides settings for a message that is sent to the user when a fulfillment Lambda function starts running. + public struct FulfillmentStartResponseSpecification: Swift.Equatable { + /// Determines whether the user can interrupt the start message while it is playing. + public var allowInterrupt: Swift.Bool? + /// The delay between when the Lambda fulfillment function starts running and the start message is played. If the Lambda function returns before the delay is over, the start message isn't played. + /// This member is required. + public var delayInSeconds: Swift.Int? + /// 1 - 5 message groups that contain start messages. Amazon Lex chooses one of the messages to play to the user. + /// This member is required. + public var messageGroups: [LexModelsV2ClientTypes.MessageGroup]? + + public init( + allowInterrupt: Swift.Bool? = nil, + delayInSeconds: Swift.Int? = nil, + messageGroups: [LexModelsV2ClientTypes.MessageGroup]? = nil + ) + { + self.allowInterrupt = allowInterrupt + self.delayInSeconds = delayInSeconds + self.messageGroups = messageGroups + } + } + +} + +extension LexModelsV2ClientTypes.FulfillmentUpdateResponseSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case allowInterrupt + case frequencyInSeconds + case messageGroups + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let allowInterrupt = self.allowInterrupt { + try encodeContainer.encode(allowInterrupt, forKey: .allowInterrupt) + } + if let frequencyInSeconds = self.frequencyInSeconds { + try encodeContainer.encode(frequencyInSeconds, forKey: .frequencyInSeconds) + } + if let messageGroups = messageGroups { + var messageGroupsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .messageGroups) + for messagegroup0 in messageGroups { + try messageGroupsContainer.encode(messagegroup0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let frequencyInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .frequencyInSeconds) + frequencyInSeconds = frequencyInSecondsDecoded + let messageGroupsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.MessageGroup?].self, forKey: .messageGroups) + var messageGroupsDecoded0:[LexModelsV2ClientTypes.MessageGroup]? = nil + if let messageGroupsContainer = messageGroupsContainer { + messageGroupsDecoded0 = [LexModelsV2ClientTypes.MessageGroup]() + for structure0 in messageGroupsContainer { + if let structure0 = structure0 { + messageGroupsDecoded0?.append(structure0) + } + } + } + messageGroups = messageGroupsDecoded0 + let allowInterruptDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .allowInterrupt) + allowInterrupt = allowInterruptDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides settings for a message that is sent periodically to the user while a fulfillment Lambda function is running. + public struct FulfillmentUpdateResponseSpecification: Swift.Equatable { + /// Determines whether the user can interrupt an update message while it is playing. + public var allowInterrupt: Swift.Bool? + /// The frequency that a message is sent to the user. When the period ends, Amazon Lex chooses a message from the message groups and plays it to the user. If the fulfillment Lambda returns before the first period ends, an update message is not played to the user. + /// This member is required. + public var frequencyInSeconds: Swift.Int? + /// 1 - 5 message groups that contain update messages. Amazon Lex chooses one of the messages to play to the user. + /// This member is required. + public var messageGroups: [LexModelsV2ClientTypes.MessageGroup]? + + public init( + allowInterrupt: Swift.Bool? = nil, + frequencyInSeconds: Swift.Int? = nil, + messageGroups: [LexModelsV2ClientTypes.MessageGroup]? = nil + ) + { + self.allowInterrupt = allowInterrupt + self.frequencyInSeconds = frequencyInSeconds + self.messageGroups = messageGroups + } + } + +} + +extension LexModelsV2ClientTypes.FulfillmentUpdatesSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case active + case startResponse + case timeoutInSeconds + case updateResponse + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let active = self.active { + try encodeContainer.encode(active, forKey: .active) + } + if let startResponse = self.startResponse { + try encodeContainer.encode(startResponse, forKey: .startResponse) + } + if let timeoutInSeconds = self.timeoutInSeconds { + try encodeContainer.encode(timeoutInSeconds, forKey: .timeoutInSeconds) + } + if let updateResponse = self.updateResponse { + try encodeContainer.encode(updateResponse, forKey: .updateResponse) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) + active = activeDecoded + let startResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentStartResponseSpecification.self, forKey: .startResponse) + startResponse = startResponseDecoded + let updateResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.FulfillmentUpdateResponseSpecification.self, forKey: .updateResponse) + updateResponse = updateResponseDecoded + let timeoutInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .timeoutInSeconds) + timeoutInSeconds = timeoutInSecondsDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides information for updating the user on the progress of fulfilling an intent. + public struct FulfillmentUpdatesSpecification: Swift.Equatable { + /// Determines whether fulfillment updates are sent to the user. When this field is true, updates are sent. If the active field is set to true, the startResponse, updateResponse, and timeoutInSeconds fields are required. + /// This member is required. + public var active: Swift.Bool? + /// Provides configuration information for the message sent to users when the fulfillment Lambda functions starts running. + public var startResponse: LexModelsV2ClientTypes.FulfillmentStartResponseSpecification? + /// The length of time that the fulfillment Lambda function should run before it times out. + public var timeoutInSeconds: Swift.Int? + /// Provides configuration information for messages sent periodically to the user while the fulfillment Lambda function is running. + public var updateResponse: LexModelsV2ClientTypes.FulfillmentUpdateResponseSpecification? + + public init( + active: Swift.Bool? = nil, + startResponse: LexModelsV2ClientTypes.FulfillmentStartResponseSpecification? = nil, + timeoutInSeconds: Swift.Int? = nil, + updateResponse: LexModelsV2ClientTypes.FulfillmentUpdateResponseSpecification? = nil + ) + { + self.active = active + self.startResponse = startResponse + self.timeoutInSeconds = timeoutInSeconds + self.updateResponse = updateResponse + } + } + +} + +extension GetTestExecutionArtifactsUrlInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let testExecutionId = testExecutionId else { + return nil + } + return "/testexecutions/\(testExecutionId.urlPercentEncoding())/artifacturl" + } +} + +public struct GetTestExecutionArtifactsUrlInput: Swift.Equatable { + /// The unique identifier of the completed test execution. + /// This member is required. + public var testExecutionId: Swift.String? + + public init( + testExecutionId: Swift.String? = nil + ) + { + self.testExecutionId = testExecutionId + } +} + +struct GetTestExecutionArtifactsUrlInputBody: Swift.Equatable { +} + +extension GetTestExecutionArtifactsUrlInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum GetTestExecutionArtifactsUrlOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetTestExecutionArtifactsUrlOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetTestExecutionArtifactsUrlOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.downloadArtifactsUrl = output.downloadArtifactsUrl + self.testExecutionId = output.testExecutionId + } else { + self.downloadArtifactsUrl = nil + self.testExecutionId = nil + } + } +} + +public struct GetTestExecutionArtifactsUrlOutputResponse: Swift.Equatable { + /// The pre-signed Amazon S3 URL to download completed test execution. + public var downloadArtifactsUrl: Swift.String? + /// The unique identifier of the completed test execution. + public var testExecutionId: Swift.String? + + public init( + downloadArtifactsUrl: Swift.String? = nil, + testExecutionId: Swift.String? = nil + ) + { + self.downloadArtifactsUrl = downloadArtifactsUrl + self.testExecutionId = testExecutionId + } +} + +struct GetTestExecutionArtifactsUrlOutputResponseBody: Swift.Equatable { + let testExecutionId: Swift.String? + let downloadArtifactsUrl: Swift.String? +} + +extension GetTestExecutionArtifactsUrlOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case downloadArtifactsUrl + case testExecutionId + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let testExecutionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .testExecutionId) + testExecutionId = testExecutionIdDecoded + let downloadArtifactsUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .downloadArtifactsUrl) + downloadArtifactsUrl = downloadArtifactsUrlDecoded + } +} + +extension LexModelsV2ClientTypes.GrammarSlotTypeSetting: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case source + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let source = self.source { + try encodeContainer.encode(source, forKey: .source) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sourceDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.GrammarSlotTypeSource.self, forKey: .source) + source = sourceDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Settings requried for a slot type based on a grammar that you provide. + public struct GrammarSlotTypeSetting: Swift.Equatable { + /// The source of the grammar used to create the slot type. + public var source: LexModelsV2ClientTypes.GrammarSlotTypeSource? + + public init( + source: LexModelsV2ClientTypes.GrammarSlotTypeSource? = nil + ) + { + self.source = source + } + } + +} + +extension LexModelsV2ClientTypes.GrammarSlotTypeSource: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case kmsKeyArn + case s3BucketName + case s3ObjectKey + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let kmsKeyArn = self.kmsKeyArn { + try encodeContainer.encode(kmsKeyArn, forKey: .kmsKeyArn) + } + if let s3BucketName = self.s3BucketName { + try encodeContainer.encode(s3BucketName, forKey: .s3BucketName) + } + if let s3ObjectKey = self.s3ObjectKey { + try encodeContainer.encode(s3ObjectKey, forKey: .s3ObjectKey) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let s3BucketNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .s3BucketName) + s3BucketName = s3BucketNameDecoded + let s3ObjectKeyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .s3ObjectKey) + s3ObjectKey = s3ObjectKeyDecoded + let kmsKeyArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kmsKeyArn) + kmsKeyArn = kmsKeyArnDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Describes the Amazon S3 bucket name and location for the grammar that is the source for the slot type. + public struct GrammarSlotTypeSource: Swift.Equatable { + /// The KMS key required to decrypt the contents of the grammar, if any. + public var kmsKeyArn: Swift.String? + /// The name of the Amazon S3 bucket that contains the grammar source. + /// This member is required. + public var s3BucketName: Swift.String? + /// The path to the grammar in the Amazon S3 bucket. + /// This member is required. + public var s3ObjectKey: Swift.String? + + public init( + kmsKeyArn: Swift.String? = nil, + s3BucketName: Swift.String? = nil, + s3ObjectKey: Swift.String? = nil + ) + { + self.kmsKeyArn = kmsKeyArn + self.s3BucketName = s3BucketName + self.s3ObjectKey = s3ObjectKey + } + } + +} + +extension LexModelsV2ClientTypes.ImageResponseCard: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case buttons + case imageUrl + case subtitle + case title + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let buttons = buttons { + var buttonsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .buttons) + for button0 in buttons { + try buttonsContainer.encode(button0) + } + } + if let imageUrl = self.imageUrl { + try encodeContainer.encode(imageUrl, forKey: .imageUrl) + } + if let subtitle = self.subtitle { + try encodeContainer.encode(subtitle, forKey: .subtitle) + } + if let title = self.title { + try encodeContainer.encode(title, forKey: .title) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let titleDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .title) + title = titleDecoded + let subtitleDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .subtitle) + subtitle = subtitleDecoded + let imageUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageUrl) + imageUrl = imageUrlDecoded + let buttonsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.Button?].self, forKey: .buttons) + var buttonsDecoded0:[LexModelsV2ClientTypes.Button]? = nil + if let buttonsContainer = buttonsContainer { + buttonsDecoded0 = [LexModelsV2ClientTypes.Button]() + for structure0 in buttonsContainer { + if let structure0 = structure0 { + buttonsDecoded0?.append(structure0) + } + } + } + buttons = buttonsDecoded0 + } +} + +extension LexModelsV2ClientTypes { + /// A card that is shown to the user by a messaging platform. You define the contents of the card, the card is displayed by the platform. When you use a response card, the response from the user is constrained to the text associated with a button on the card. + public struct ImageResponseCard: Swift.Equatable { + /// A list of buttons that should be displayed on the response card. The arrangement of the buttons is determined by the platform that displays the button. + public var buttons: [LexModelsV2ClientTypes.Button]? + /// The URL of an image to display on the response card. The image URL must be publicly available so that the platform displaying the response card has access to the image. + public var imageUrl: Swift.String? + /// The subtitle to display on the response card. The format of the subtitle is determined by the platform displaying the response card. + public var subtitle: Swift.String? + /// The title to display on the response card. The format of the title is determined by the platform displaying the response card. + /// This member is required. + public var title: Swift.String? + + public init( + buttons: [LexModelsV2ClientTypes.Button]? = nil, + imageUrl: Swift.String? = nil, + subtitle: Swift.String? = nil, + title: Swift.String? = nil + ) + { + self.buttons = buttons + self.imageUrl = imageUrl + self.subtitle = subtitle + self.title = title + } + } + +} + +extension LexModelsV2ClientTypes { + public enum ImportExportFileFormat: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case csv + case lexjson + case tsv + case sdkUnknown(Swift.String) + + public static var allCases: [ImportExportFileFormat] { + return [ + .csv, + .lexjson, + .tsv, + .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 .csv: return "CSV" + case .lexjson: return "LexJson" + case .tsv: return "TSV" + 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 = ImportExportFileFormat(rawValue: rawValue) ?? ImportExportFileFormat.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.ImportFilter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case `operator` = "operator" + case values + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let `operator` = self.`operator` { + try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + } + if let values = values { + var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) + for filtervalue0 in values { + try valuesContainer.encode(filtervalue0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportFilterName.self, forKey: .name) + name = nameDecoded + let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) + var valuesDecoded0:[Swift.String]? = nil + if let valuesContainer = valuesContainer { + valuesDecoded0 = [Swift.String]() + for string0 in valuesContainer { + if let string0 = string0 { + valuesDecoded0?.append(string0) + } + } + } + values = valuesDecoded0 + let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportFilterOperator.self, forKey: .operator) + `operator` = operatorDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Filters the response from the [ListImports](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_ListImports.html) operation. + public struct ImportFilter: Swift.Equatable { + /// The name of the field to use for filtering. + /// This member is required. + public var name: LexModelsV2ClientTypes.ImportFilterName? + /// The operator to use for the filter. Specify EQ when the ListImports operation should return only resource types that equal the specified value. Specify CO when the ListImports operation should return resource types that contain the specified value. + /// This member is required. + public var `operator`: LexModelsV2ClientTypes.ImportFilterOperator? + /// The values to use to filter the response. The values must be Bot, BotLocale, or CustomVocabulary. + /// This member is required. + public var values: [Swift.String]? + + public init( + name: LexModelsV2ClientTypes.ImportFilterName? = nil, + `operator`: LexModelsV2ClientTypes.ImportFilterOperator? = nil, + values: [Swift.String]? = nil + ) + { + self.name = name + self.`operator` = `operator` + self.values = values + } + } + +} + +extension LexModelsV2ClientTypes { + public enum ImportFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case importresourcetype + case sdkUnknown(Swift.String) + + public static var allCases: [ImportFilterName] { + return [ + .importresourcetype, + .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 .importresourcetype: return "ImportResourceType" + 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 = ImportFilterName(rawValue: rawValue) ?? ImportFilterName.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes { + public enum ImportFilterOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case contains + case equals + case sdkUnknown(Swift.String) + + public static var allCases: [ImportFilterOperator] { + return [ + .contains, + .equals, + .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 .contains: return "CO" + case .equals: return "EQ" + 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 = ImportFilterOperator(rawValue: rawValue) ?? ImportFilterOperator.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.ImportResourceSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botImportSpecification + case botLocaleImportSpecification + case customVocabularyImportSpecification + case testSetImportResourceSpecification + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botImportSpecification = self.botImportSpecification { + try encodeContainer.encode(botImportSpecification, forKey: .botImportSpecification) + } + if let botLocaleImportSpecification = self.botLocaleImportSpecification { + try encodeContainer.encode(botLocaleImportSpecification, forKey: .botLocaleImportSpecification) + } + if let customVocabularyImportSpecification = self.customVocabularyImportSpecification { + try encodeContainer.encode(customVocabularyImportSpecification, forKey: .customVocabularyImportSpecification) + } + if let testSetImportResourceSpecification = self.testSetImportResourceSpecification { + try encodeContainer.encode(testSetImportResourceSpecification, forKey: .testSetImportResourceSpecification) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botImportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotImportSpecification.self, forKey: .botImportSpecification) + botImportSpecification = botImportSpecificationDecoded + let botLocaleImportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleImportSpecification.self, forKey: .botLocaleImportSpecification) + botLocaleImportSpecification = botLocaleImportSpecificationDecoded + let customVocabularyImportSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.CustomVocabularyImportSpecification.self, forKey: .customVocabularyImportSpecification) + customVocabularyImportSpecification = customVocabularyImportSpecificationDecoded + let testSetImportResourceSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetImportResourceSpecification.self, forKey: .testSetImportResourceSpecification) + testSetImportResourceSpecification = testSetImportResourceSpecificationDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides information about the bot or bot locale that you want to import. You can specify the botImportSpecification or the botLocaleImportSpecification, but not both. + public struct ImportResourceSpecification: Swift.Equatable { + /// Parameters for importing a bot. + public var botImportSpecification: LexModelsV2ClientTypes.BotImportSpecification? + /// Parameters for importing a bot locale. + public var botLocaleImportSpecification: LexModelsV2ClientTypes.BotLocaleImportSpecification? + /// Provides the parameters required for importing a custom vocabulary. + public var customVocabularyImportSpecification: LexModelsV2ClientTypes.CustomVocabularyImportSpecification? + /// Specifications for the test set that is imported. + public var testSetImportResourceSpecification: LexModelsV2ClientTypes.TestSetImportResourceSpecification? + + public init( + botImportSpecification: LexModelsV2ClientTypes.BotImportSpecification? = nil, + botLocaleImportSpecification: LexModelsV2ClientTypes.BotLocaleImportSpecification? = nil, + customVocabularyImportSpecification: LexModelsV2ClientTypes.CustomVocabularyImportSpecification? = nil, + testSetImportResourceSpecification: LexModelsV2ClientTypes.TestSetImportResourceSpecification? = nil + ) + { + self.botImportSpecification = botImportSpecification + self.botLocaleImportSpecification = botLocaleImportSpecification + self.customVocabularyImportSpecification = customVocabularyImportSpecification + self.testSetImportResourceSpecification = testSetImportResourceSpecification + } + } + +} + +extension LexModelsV2ClientTypes { + public enum ImportResourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case bot + case botlocale + case customvocabulary + case testset + case sdkUnknown(Swift.String) + + public static var allCases: [ImportResourceType] { + return [ + .bot, + .botlocale, + .customvocabulary, + .testset, + .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 .bot: return "Bot" + case .botlocale: return "BotLocale" + case .customvocabulary: return "CustomVocabulary" + case .testset: return "TestSet" + 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 = ImportResourceType(rawValue: rawValue) ?? ImportResourceType.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes { + public enum ImportSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case lastupdateddatetime + case sdkUnknown(Swift.String) + + public static var allCases: [ImportSortAttribute] { + return [ + .lastupdateddatetime, + .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 .lastupdateddatetime: return "LastUpdatedDateTime" + 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 = ImportSortAttribute(rawValue: rawValue) ?? ImportSortAttribute.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.ImportSortBy: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case attribute + case order + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attribute = self.attribute { + try encodeContainer.encode(attribute.rawValue, forKey: .attribute) + } + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportSortAttribute.self, forKey: .attribute) + attribute = attributeDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) + order = orderDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides information for sorting a list of imports. + public struct ImportSortBy: Swift.Equatable { + /// The export field to use for sorting. + /// This member is required. + public var attribute: LexModelsV2ClientTypes.ImportSortAttribute? + /// The order to sort the list. + /// This member is required. + public var order: LexModelsV2ClientTypes.SortOrder? + + public init( + attribute: LexModelsV2ClientTypes.ImportSortAttribute? = nil, + order: LexModelsV2ClientTypes.SortOrder? = nil + ) + { + self.attribute = attribute + self.order = order + } + } + +} + +extension LexModelsV2ClientTypes { + public enum ImportStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case completed + case deleting + case failed + case inprogress + case sdkUnknown(Swift.String) + + public static var allCases: [ImportStatus] { + return [ + .completed, + .deleting, + .failed, + .inprogress, + .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 .completed: return "Completed" + case .deleting: return "Deleting" + case .failed: return "Failed" + case .inprogress: return "InProgress" + 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 = ImportStatus(rawValue: rawValue) ?? ImportStatus.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.ImportSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationDateTime + case importId + case importStatus + case importedResourceId + case importedResourceName + case importedResourceType + case lastUpdatedDateTime + case mergeStrategy + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let creationDateTime = self.creationDateTime { + try encodeContainer.encodeTimestamp(creationDateTime, format: .epochSeconds, forKey: .creationDateTime) + } + if let importId = self.importId { + try encodeContainer.encode(importId, forKey: .importId) + } + if let importStatus = self.importStatus { + try encodeContainer.encode(importStatus.rawValue, forKey: .importStatus) + } + if let importedResourceId = self.importedResourceId { + try encodeContainer.encode(importedResourceId, forKey: .importedResourceId) + } + if let importedResourceName = self.importedResourceName { + try encodeContainer.encode(importedResourceName, forKey: .importedResourceName) + } + if let importedResourceType = self.importedResourceType { + try encodeContainer.encode(importedResourceType.rawValue, forKey: .importedResourceType) + } + if let lastUpdatedDateTime = self.lastUpdatedDateTime { + try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) + } + if let mergeStrategy = self.mergeStrategy { + try encodeContainer.encode(mergeStrategy.rawValue, forKey: .mergeStrategy) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let importIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importId) + importId = importIdDecoded + let importedResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importedResourceId) + importedResourceId = importedResourceIdDecoded + let importedResourceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .importedResourceName) + importedResourceName = importedResourceNameDecoded + let importStatusDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportStatus.self, forKey: .importStatus) + importStatus = importStatusDecoded + let mergeStrategyDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.MergeStrategy.self, forKey: .mergeStrategy) + mergeStrategy = mergeStrategyDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let importedResourceTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportResourceType.self, forKey: .importedResourceType) + importedResourceType = importedResourceTypeDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides summary information about an import in an import list. + public struct ImportSummary: Swift.Equatable { + /// The date and time that the import was created. + public var creationDateTime: ClientRuntime.Date? + /// The unique identifier that Amazon Lex assigned to the import. + public var importId: Swift.String? + /// The status of the resource. When the status is Completed the resource is ready to build. + public var importStatus: LexModelsV2ClientTypes.ImportStatus? + /// The unique identifier that Amazon Lex assigned to the imported resource. + public var importedResourceId: Swift.String? + /// The name that you gave the imported resource. + public var importedResourceName: Swift.String? + /// The type of resource that was imported. + public var importedResourceType: LexModelsV2ClientTypes.ImportResourceType? + /// The date and time that the import was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The strategy used to merge existing bot or bot locale definitions with the imported definition. + public var mergeStrategy: LexModelsV2ClientTypes.MergeStrategy? + + public init( + creationDateTime: ClientRuntime.Date? = nil, + importId: Swift.String? = nil, + importStatus: LexModelsV2ClientTypes.ImportStatus? = nil, + importedResourceId: Swift.String? = nil, + importedResourceName: Swift.String? = nil, + importedResourceType: LexModelsV2ClientTypes.ImportResourceType? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + mergeStrategy: LexModelsV2ClientTypes.MergeStrategy? = nil + ) + { + self.creationDateTime = creationDateTime + self.importId = importId + self.importStatus = importStatus + self.importedResourceId = importedResourceId + self.importedResourceName = importedResourceName + self.importedResourceType = importedResourceType + self.lastUpdatedDateTime = lastUpdatedDateTime + self.mergeStrategy = mergeStrategy + } + } + +} + +extension LexModelsV2ClientTypes.InitialResponseSetting: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case codeHook + case conditional + case initialResponse + case nextStep + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let codeHook = self.codeHook { + try encodeContainer.encode(codeHook, forKey: .codeHook) + } + if let conditional = self.conditional { + try encodeContainer.encode(conditional, forKey: .conditional) + } + if let initialResponse = self.initialResponse { + try encodeContainer.encode(initialResponse, forKey: .initialResponse) + } + if let nextStep = self.nextStep { + try encodeContainer.encode(nextStep, forKey: .nextStep) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let initialResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .initialResponse) + initialResponse = initialResponseDecoded + let nextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .nextStep) + nextStep = nextStepDecoded + let conditionalDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConditionalSpecification.self, forKey: .conditional) + conditional = conditionalDecoded + let codeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogCodeHookInvocationSetting.self, forKey: .codeHook) + codeHook = codeHookDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Configuration setting for a response sent to the user before Amazon Lex starts eliciting slots. + public struct InitialResponseSetting: Swift.Equatable { + /// Settings that specify the dialog code hook that is called by Amazon Lex at a step of the conversation. + public var codeHook: LexModelsV2ClientTypes.DialogCodeHookInvocationSetting? + /// Provides a list of conditional branches. Branches are evaluated in the order that they are entered in the list. The first branch with a condition that evaluates to true is executed. The last branch in the list is the default branch. The default branch should not have any condition expression. The default branch is executed if no other branch has a matching condition. + public var conditional: LexModelsV2ClientTypes.ConditionalSpecification? + /// Specifies a list of message groups that Amazon Lex uses to respond the user input. + public var initialResponse: LexModelsV2ClientTypes.ResponseSpecification? + /// The next step in the conversation. + public var nextStep: LexModelsV2ClientTypes.DialogState? + + public init( + codeHook: LexModelsV2ClientTypes.DialogCodeHookInvocationSetting? = nil, + conditional: LexModelsV2ClientTypes.ConditionalSpecification? = nil, + initialResponse: LexModelsV2ClientTypes.ResponseSpecification? = nil, + nextStep: LexModelsV2ClientTypes.DialogState? = nil + ) + { + self.codeHook = codeHook + self.conditional = conditional + self.initialResponse = initialResponse + self.nextStep = nextStep + } + } + +} + +extension LexModelsV2ClientTypes.InputContext: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + } +} + +extension LexModelsV2ClientTypes { + /// A context that must be active for an intent to be selected by Amazon Lex. + public struct InputContext: Swift.Equatable { + /// The name of the context. + /// This member is required. + public var name: Swift.String? + + public init( + name: Swift.String? = nil + ) + { + self.name = name + } + } + +} + +extension LexModelsV2ClientTypes.InputSessionStateSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case activeContexts + case runtimeHints + case sessionAttributes + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let activeContexts = activeContexts { + var activeContextsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .activeContexts) + for activecontext0 in activeContexts { + try activeContextsContainer.encode(activecontext0) + } + } + if let runtimeHints = self.runtimeHints { + try encodeContainer.encode(runtimeHints, forKey: .runtimeHints) + } + if let sessionAttributes = sessionAttributes { + var sessionAttributesContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .sessionAttributes) + for (dictKey0, stringMap0) in sessionAttributes { + try sessionAttributesContainer.encode(stringMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sessionAttributesContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .sessionAttributes) + var sessionAttributesDecoded0: [Swift.String:Swift.String]? = nil + if let sessionAttributesContainer = sessionAttributesContainer { + sessionAttributesDecoded0 = [Swift.String:Swift.String]() + for (key0, string0) in sessionAttributesContainer { + if let string0 = string0 { + sessionAttributesDecoded0?[key0] = string0 + } + } + } + sessionAttributes = sessionAttributesDecoded0 + let activeContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ActiveContext?].self, forKey: .activeContexts) + var activeContextsDecoded0:[LexModelsV2ClientTypes.ActiveContext]? = nil + if let activeContextsContainer = activeContextsContainer { + activeContextsDecoded0 = [LexModelsV2ClientTypes.ActiveContext]() + for structure0 in activeContextsContainer { + if let structure0 = structure0 { + activeContextsDecoded0?.append(structure0) + } + } + } + activeContexts = activeContextsDecoded0 + let runtimeHintsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.RuntimeHints.self, forKey: .runtimeHints) + runtimeHints = runtimeHintsDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Specifications for the current state of the dialog between the user and the bot in the test set. + public struct InputSessionStateSpecification: Swift.Equatable { + /// Active contexts for the session state. + public var activeContexts: [LexModelsV2ClientTypes.ActiveContext]? + /// Runtime hints for the session state. + public var runtimeHints: LexModelsV2ClientTypes.RuntimeHints? + /// Session attributes for the session state. + public var sessionAttributes: [Swift.String:Swift.String]? + + public init( + activeContexts: [LexModelsV2ClientTypes.ActiveContext]? = nil, + runtimeHints: LexModelsV2ClientTypes.RuntimeHints? = nil, + sessionAttributes: [Swift.String:Swift.String]? = nil + ) + { + self.activeContexts = activeContexts + self.runtimeHints = runtimeHints + self.sessionAttributes = sessionAttributes + } + } + +} + +extension LexModelsV2ClientTypes.IntentClassificationTestResultItem: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case intentName + case multiTurnConversation + case resultCounts + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let intentName = self.intentName { + try encodeContainer.encode(intentName, forKey: .intentName) + } + if multiTurnConversation != false { + try encodeContainer.encode(multiTurnConversation, forKey: .multiTurnConversation) + } + if let resultCounts = self.resultCounts { + try encodeContainer.encode(resultCounts, forKey: .resultCounts) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) + intentName = intentNameDecoded + let multiTurnConversationDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .multiTurnConversation) ?? false + multiTurnConversation = multiTurnConversationDecoded + let resultCountsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentClassificationTestResultItemCounts.self, forKey: .resultCounts) + resultCounts = resultCountsDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Information for an intent that is classified by the test workbench. + public struct IntentClassificationTestResultItem: Swift.Equatable { + /// The name of the intent. + /// This member is required. + public var intentName: Swift.String? + /// Indicates whether the conversation involves multiple turns or not. + /// This member is required. + public var multiTurnConversation: Swift.Bool + /// The result of the intent classification test. + /// This member is required. + public var resultCounts: LexModelsV2ClientTypes.IntentClassificationTestResultItemCounts? + + public init( + intentName: Swift.String? = nil, + multiTurnConversation: Swift.Bool = false, + resultCounts: LexModelsV2ClientTypes.IntentClassificationTestResultItemCounts? = nil + ) + { + self.intentName = intentName + self.multiTurnConversation = multiTurnConversation + self.resultCounts = resultCounts + } + } + +} + +extension LexModelsV2ClientTypes.IntentClassificationTestResultItemCounts: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case intentMatchResultCounts + case speechTranscriptionResultCounts + case totalResultCount + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let intentMatchResultCounts = intentMatchResultCounts { + var intentMatchResultCountsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .intentMatchResultCounts) + for (dictKey0, testResultMatchStatusCountMap0) in intentMatchResultCounts { + try intentMatchResultCountsContainer.encode(testResultMatchStatusCountMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + if let speechTranscriptionResultCounts = speechTranscriptionResultCounts { + var speechTranscriptionResultCountsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .speechTranscriptionResultCounts) + for (dictKey0, testResultMatchStatusCountMap0) in speechTranscriptionResultCounts { + try speechTranscriptionResultCountsContainer.encode(testResultMatchStatusCountMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + if let totalResultCount = self.totalResultCount { + try encodeContainer.encode(totalResultCount, forKey: .totalResultCount) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let totalResultCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .totalResultCount) + totalResultCount = totalResultCountDecoded + let speechTranscriptionResultCountsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.Int?].self, forKey: .speechTranscriptionResultCounts) + var speechTranscriptionResultCountsDecoded0: [Swift.String:Swift.Int]? = nil + if let speechTranscriptionResultCountsContainer = speechTranscriptionResultCountsContainer { + speechTranscriptionResultCountsDecoded0 = [Swift.String:Swift.Int]() + for (key0, count0) in speechTranscriptionResultCountsContainer { + if let count0 = count0 { + speechTranscriptionResultCountsDecoded0?[key0] = count0 + } + } + } + speechTranscriptionResultCounts = speechTranscriptionResultCountsDecoded0 + let intentMatchResultCountsContainer = try containerValues.decodeIfPresent([Swift.String: Swift.Int?].self, forKey: .intentMatchResultCounts) + var intentMatchResultCountsDecoded0: [Swift.String:Swift.Int]? = nil + if let intentMatchResultCountsContainer = intentMatchResultCountsContainer { + intentMatchResultCountsDecoded0 = [Swift.String:Swift.Int]() + for (key0, count0) in intentMatchResultCountsContainer { + if let count0 = count0 { + intentMatchResultCountsDecoded0?[key0] = count0 + } + } + } + intentMatchResultCounts = intentMatchResultCountsDecoded0 + } +} + +extension LexModelsV2ClientTypes { + /// The number of items in the intent classification test. + public struct IntentClassificationTestResultItemCounts: Swift.Equatable { + /// The number of matched and mismatched results for intent recognition for the intent. + /// This member is required. + public var intentMatchResultCounts: [Swift.String:Swift.Int]? + /// The number of matched, mismatched, and execution error results for speech transcription for the intent. + public var speechTranscriptionResultCounts: [Swift.String:Swift.Int]? + /// The total number of results in the intent classification test. + /// This member is required. + public var totalResultCount: Swift.Int? + + public init( + intentMatchResultCounts: [Swift.String:Swift.Int]? = nil, + speechTranscriptionResultCounts: [Swift.String:Swift.Int]? = nil, + totalResultCount: Swift.Int? = nil + ) + { + self.intentMatchResultCounts = intentMatchResultCounts + self.speechTranscriptionResultCounts = speechTranscriptionResultCounts + self.totalResultCount = totalResultCount + } + } + +} + +extension LexModelsV2ClientTypes.IntentClassificationTestResults: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case items + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let items = items { + var itemsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .items) + for intentclassificationtestresultitem0 in items { + try itemsContainer.encode(intentclassificationtestresultitem0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let itemsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.IntentClassificationTestResultItem?].self, forKey: .items) + var itemsDecoded0:[LexModelsV2ClientTypes.IntentClassificationTestResultItem]? = nil + if let itemsContainer = itemsContainer { + itemsDecoded0 = [LexModelsV2ClientTypes.IntentClassificationTestResultItem]() + for structure0 in itemsContainer { + if let structure0 = structure0 { + itemsDecoded0?.append(structure0) + } + } + } + items = itemsDecoded0 + } +} + +extension LexModelsV2ClientTypes { + /// Information for the results of the intent classification test. + public struct IntentClassificationTestResults: Swift.Equatable { + /// A list of the results for the intent classification test. + /// This member is required. + public var items: [LexModelsV2ClientTypes.IntentClassificationTestResultItem]? + + public init( + items: [LexModelsV2ClientTypes.IntentClassificationTestResultItem]? = nil + ) + { + self.items = items + } + } + +} + +extension LexModelsV2ClientTypes.IntentClosingSetting: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case active + case closingResponse + case conditional + case nextStep + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let active = self.active { + try encodeContainer.encode(active, forKey: .active) + } + if let closingResponse = self.closingResponse { + try encodeContainer.encode(closingResponse, forKey: .closingResponse) + } + if let conditional = self.conditional { + try encodeContainer.encode(conditional, forKey: .conditional) + } + if let nextStep = self.nextStep { + try encodeContainer.encode(nextStep, forKey: .nextStep) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let closingResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .closingResponse) + closingResponse = closingResponseDecoded + let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) + active = activeDecoded + let nextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .nextStep) + nextStep = nextStepDecoded + let conditionalDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConditionalSpecification.self, forKey: .conditional) + conditional = conditionalDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides a statement the Amazon Lex conveys to the user when the intent is successfully fulfilled. + public struct IntentClosingSetting: Swift.Equatable { + /// Specifies whether an intent's closing response is used. When this field is false, the closing response isn't sent to the user. If the active field isn't specified, the default is true. + public var active: Swift.Bool? + /// The response that Amazon Lex sends to the user when the intent is complete. + public var closingResponse: LexModelsV2ClientTypes.ResponseSpecification? + /// A list of conditional branches associated with the intent's closing response. These branches are executed when the nextStep attribute is set to EvalutateConditional. + public var conditional: LexModelsV2ClientTypes.ConditionalSpecification? + /// Specifies the next step that the bot executes after playing the intent's closing response. + public var nextStep: LexModelsV2ClientTypes.DialogState? + + public init( + active: Swift.Bool? = nil, + closingResponse: LexModelsV2ClientTypes.ResponseSpecification? = nil, + conditional: LexModelsV2ClientTypes.ConditionalSpecification? = nil, + nextStep: LexModelsV2ClientTypes.DialogState? = nil + ) + { + self.active = active + self.closingResponse = closingResponse + self.conditional = conditional + self.nextStep = nextStep + } + } + +} + +extension LexModelsV2ClientTypes.IntentConfirmationSetting: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case active + case codeHook + case confirmationConditional + case confirmationNextStep + case confirmationResponse + case declinationConditional + case declinationNextStep + case declinationResponse + case elicitationCodeHook + case failureConditional + case failureNextStep + case failureResponse + case promptSpecification + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let active = self.active { + try encodeContainer.encode(active, forKey: .active) + } + if let codeHook = self.codeHook { + try encodeContainer.encode(codeHook, forKey: .codeHook) + } + if let confirmationConditional = self.confirmationConditional { + try encodeContainer.encode(confirmationConditional, forKey: .confirmationConditional) + } + if let confirmationNextStep = self.confirmationNextStep { + try encodeContainer.encode(confirmationNextStep, forKey: .confirmationNextStep) + } + if let confirmationResponse = self.confirmationResponse { + try encodeContainer.encode(confirmationResponse, forKey: .confirmationResponse) + } + if let declinationConditional = self.declinationConditional { + try encodeContainer.encode(declinationConditional, forKey: .declinationConditional) + } + if let declinationNextStep = self.declinationNextStep { + try encodeContainer.encode(declinationNextStep, forKey: .declinationNextStep) + } + if let declinationResponse = self.declinationResponse { + try encodeContainer.encode(declinationResponse, forKey: .declinationResponse) + } + if let elicitationCodeHook = self.elicitationCodeHook { + try encodeContainer.encode(elicitationCodeHook, forKey: .elicitationCodeHook) + } + if let failureConditional = self.failureConditional { + try encodeContainer.encode(failureConditional, forKey: .failureConditional) + } + if let failureNextStep = self.failureNextStep { + try encodeContainer.encode(failureNextStep, forKey: .failureNextStep) + } + if let failureResponse = self.failureResponse { + try encodeContainer.encode(failureResponse, forKey: .failureResponse) + } + if let promptSpecification = self.promptSpecification { + try encodeContainer.encode(promptSpecification, forKey: .promptSpecification) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let promptSpecificationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.PromptSpecification.self, forKey: .promptSpecification) + promptSpecification = promptSpecificationDecoded + let declinationResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .declinationResponse) + declinationResponse = declinationResponseDecoded + let activeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .active) + active = activeDecoded + let confirmationResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .confirmationResponse) + confirmationResponse = confirmationResponseDecoded + let confirmationNextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .confirmationNextStep) + confirmationNextStep = confirmationNextStepDecoded + let confirmationConditionalDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConditionalSpecification.self, forKey: .confirmationConditional) + confirmationConditional = confirmationConditionalDecoded + let declinationNextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .declinationNextStep) + declinationNextStep = declinationNextStepDecoded + let declinationConditionalDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConditionalSpecification.self, forKey: .declinationConditional) + declinationConditional = declinationConditionalDecoded + let failureResponseDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ResponseSpecification.self, forKey: .failureResponse) + failureResponse = failureResponseDecoded + let failureNextStepDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogState.self, forKey: .failureNextStep) + failureNextStep = failureNextStepDecoded + let failureConditionalDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConditionalSpecification.self, forKey: .failureConditional) + failureConditional = failureConditionalDecoded + let codeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DialogCodeHookInvocationSetting.self, forKey: .codeHook) + codeHook = codeHookDecoded + let elicitationCodeHookDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ElicitationCodeHookInvocationSetting.self, forKey: .elicitationCodeHook) + elicitationCodeHook = elicitationCodeHookDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides a prompt for making sure that the user is ready for the intent to be fulfilled. + public struct IntentConfirmationSetting: Swift.Equatable { + /// Specifies whether the intent's confirmation is sent to the user. When this field is false, confirmation and declination responses aren't sent. If the active field isn't specified, the default is true. + public var active: Swift.Bool? + /// The DialogCodeHookInvocationSetting object associated with intent's confirmation step. The dialog code hook is triggered based on these invocation settings when the confirmation next step or declination next step or failure next step is InvokeDialogCodeHook. + public var codeHook: LexModelsV2ClientTypes.DialogCodeHookInvocationSetting? + /// A list of conditional branches to evaluate after the intent is closed. + public var confirmationConditional: LexModelsV2ClientTypes.ConditionalSpecification? + /// Specifies the next step that the bot executes when the customer confirms the intent. + public var confirmationNextStep: LexModelsV2ClientTypes.DialogState? + /// Specifies a list of message groups that Amazon Lex uses to respond the user input. + public var confirmationResponse: LexModelsV2ClientTypes.ResponseSpecification? + /// A list of conditional branches to evaluate after the intent is declined. + public var declinationConditional: LexModelsV2ClientTypes.ConditionalSpecification? + /// Specifies the next step that the bot executes when the customer declines the intent. + public var declinationNextStep: LexModelsV2ClientTypes.DialogState? + /// When the user answers "no" to the question defined in promptSpecification, Amazon Lex responds with this response to acknowledge that the intent was canceled. + public var declinationResponse: LexModelsV2ClientTypes.ResponseSpecification? + /// The DialogCodeHookInvocationSetting used when the code hook is invoked during confirmation prompt retries. + public var elicitationCodeHook: LexModelsV2ClientTypes.ElicitationCodeHookInvocationSetting? + /// Provides a list of conditional branches. Branches are evaluated in the order that they are entered in the list. The first branch with a condition that evaluates to true is executed. The last branch in the list is the default branch. The default branch should not have any condition expression. The default branch is executed if no other branch has a matching condition. + public var failureConditional: LexModelsV2ClientTypes.ConditionalSpecification? + /// The next step to take in the conversation if the confirmation step fails. + public var failureNextStep: LexModelsV2ClientTypes.DialogState? + /// Specifies a list of message groups that Amazon Lex uses to respond the user input. + public var failureResponse: LexModelsV2ClientTypes.ResponseSpecification? + /// Prompts the user to confirm the intent. This question should have a yes or no answer. Amazon Lex uses this prompt to ensure that the user acknowledges that the intent is ready for fulfillment. For example, with the OrderPizza intent, you might want to confirm that the order is correct before placing it. For other intents, such as intents that simply respond to user questions, you might not need to ask the user for confirmation before providing the information. + /// This member is required. + public var promptSpecification: LexModelsV2ClientTypes.PromptSpecification? + + public init( + active: Swift.Bool? = nil, + codeHook: LexModelsV2ClientTypes.DialogCodeHookInvocationSetting? = nil, + confirmationConditional: LexModelsV2ClientTypes.ConditionalSpecification? = nil, + confirmationNextStep: LexModelsV2ClientTypes.DialogState? = nil, + confirmationResponse: LexModelsV2ClientTypes.ResponseSpecification? = nil, + declinationConditional: LexModelsV2ClientTypes.ConditionalSpecification? = nil, + declinationNextStep: LexModelsV2ClientTypes.DialogState? = nil, + declinationResponse: LexModelsV2ClientTypes.ResponseSpecification? = nil, + elicitationCodeHook: LexModelsV2ClientTypes.ElicitationCodeHookInvocationSetting? = nil, + failureConditional: LexModelsV2ClientTypes.ConditionalSpecification? = nil, + failureNextStep: LexModelsV2ClientTypes.DialogState? = nil, + failureResponse: LexModelsV2ClientTypes.ResponseSpecification? = nil, + promptSpecification: LexModelsV2ClientTypes.PromptSpecification? = nil + ) + { + self.active = active + self.codeHook = codeHook + self.confirmationConditional = confirmationConditional + self.confirmationNextStep = confirmationNextStep + self.confirmationResponse = confirmationResponse + self.declinationConditional = declinationConditional + self.declinationNextStep = declinationNextStep + self.declinationResponse = declinationResponse + self.elicitationCodeHook = elicitationCodeHook + self.failureConditional = failureConditional + self.failureNextStep = failureNextStep + self.failureResponse = failureResponse + self.promptSpecification = promptSpecification + } + } + +} + +extension LexModelsV2ClientTypes.IntentFilter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case `operator` = "operator" + case values + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let `operator` = self.`operator` { + try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + } + if let values = values { + var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) + for filtervalue0 in values { + try valuesContainer.encode(filtervalue0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentFilterName.self, forKey: .name) + name = nameDecoded + let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) + var valuesDecoded0:[Swift.String]? = nil + if let valuesContainer = valuesContainer { + valuesDecoded0 = [Swift.String]() + for string0 in valuesContainer { + if let string0 = string0 { + valuesDecoded0?.append(string0) + } + } + } + values = valuesDecoded0 + let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentFilterOperator.self, forKey: .operator) + `operator` = operatorDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Filters the response from the ListIntents operation. + public struct IntentFilter: Swift.Equatable { + /// The name of the field to use for the filter. + /// This member is required. + public var name: LexModelsV2ClientTypes.IntentFilterName? + /// The operator to use for the filter. Specify EQ when the ListIntents operation should return only aliases that equal the specified value. Specify CO when the ListIntents operation should return aliases that contain the specified value. + /// This member is required. + public var `operator`: LexModelsV2ClientTypes.IntentFilterOperator? + /// The value to use for the filter. + /// This member is required. + public var values: [Swift.String]? + + public init( + name: LexModelsV2ClientTypes.IntentFilterName? = nil, + `operator`: LexModelsV2ClientTypes.IntentFilterOperator? = nil, + values: [Swift.String]? = nil + ) + { + self.name = name + self.`operator` = `operator` + self.values = values + } + } + +} + +extension LexModelsV2ClientTypes { + public enum IntentFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case intentname + case sdkUnknown(Swift.String) + + public static var allCases: [IntentFilterName] { + return [ + .intentname, + .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 .intentname: return "IntentName" + 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 = IntentFilterName(rawValue: rawValue) ?? IntentFilterName.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes { + public enum IntentFilterOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case contains + case equals + case sdkUnknown(Swift.String) + + public static var allCases: [IntentFilterOperator] { + return [ + .contains, + .equals, + .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 .contains: return "CO" + case .equals: return "EQ" + 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 = IntentFilterOperator(rawValue: rawValue) ?? IntentFilterOperator.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case intentName + case multiTurnConversation + case slotResolutionResults + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let intentName = self.intentName { + try encodeContainer.encode(intentName, forKey: .intentName) + } + if multiTurnConversation != false { + try encodeContainer.encode(multiTurnConversation, forKey: .multiTurnConversation) + } + if let slotResolutionResults = slotResolutionResults { + var slotResolutionResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .slotResolutionResults) + for slotresolutiontestresultitem0 in slotResolutionResults { + try slotResolutionResultsContainer.encode(slotresolutiontestresultitem0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) + intentName = intentNameDecoded + let multiTurnConversationDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .multiTurnConversation) ?? false + multiTurnConversation = multiTurnConversationDecoded + let slotResolutionResultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotResolutionTestResultItem?].self, forKey: .slotResolutionResults) + var slotResolutionResultsDecoded0:[LexModelsV2ClientTypes.SlotResolutionTestResultItem]? = nil + if let slotResolutionResultsContainer = slotResolutionResultsContainer { + slotResolutionResultsDecoded0 = [LexModelsV2ClientTypes.SlotResolutionTestResultItem]() + for structure0 in slotResolutionResultsContainer { + if let structure0 = structure0 { + slotResolutionResultsDecoded0?.append(structure0) + } + } + } + slotResolutionResults = slotResolutionResultsDecoded0 + } +} + +extension LexModelsV2ClientTypes { + /// Information about intent-level slot resolution in a test result. + public struct IntentLevelSlotResolutionTestResultItem: Swift.Equatable { + /// The name of the intent that was recognized. + /// This member is required. + public var intentName: Swift.String? + /// Indicates whether the conversation involves multiple turns or not. + /// This member is required. + public var multiTurnConversation: Swift.Bool + /// The results for the slot resolution in the test execution result. + /// This member is required. + public var slotResolutionResults: [LexModelsV2ClientTypes.SlotResolutionTestResultItem]? + + public init( + intentName: Swift.String? = nil, + multiTurnConversation: Swift.Bool = false, + slotResolutionResults: [LexModelsV2ClientTypes.SlotResolutionTestResultItem]? = nil + ) + { + self.intentName = intentName + self.multiTurnConversation = multiTurnConversation + self.slotResolutionResults = slotResolutionResults + } + } + +} + +extension LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResults: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case items + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let items = items { + var itemsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .items) + for intentlevelslotresolutiontestresultitem0 in items { + try itemsContainer.encode(intentlevelslotresolutiontestresultitem0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let itemsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem?].self, forKey: .items) + var itemsDecoded0:[LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem]? = nil + if let itemsContainer = itemsContainer { + itemsDecoded0 = [LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem]() + for structure0 in itemsContainer { + if let structure0 = structure0 { + itemsDecoded0?.append(structure0) + } + } + } + items = itemsDecoded0 + } +} + +extension LexModelsV2ClientTypes { + /// Indicates the success or failure of slots at the intent level. + public struct IntentLevelSlotResolutionTestResults: Swift.Equatable { + /// Indicates the items for the slot level resolution for the intents. + /// This member is required. + public var items: [LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem]? + + public init( + items: [LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem]? = nil + ) + { + self.items = items + } + } + +} + +extension LexModelsV2ClientTypes.IntentOverride: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case slots + } + + 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) + } + if let slots = slots { + var slotsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .slots) + for (dictKey0, slotValueOverrideMap0) in slots { + try slotsContainer.encode(slotValueOverrideMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + } + + 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 slotsContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.SlotValueOverride?].self, forKey: .slots) + var slotsDecoded0: [Swift.String:LexModelsV2ClientTypes.SlotValueOverride]? = nil + if let slotsContainer = slotsContainer { + slotsDecoded0 = [Swift.String:LexModelsV2ClientTypes.SlotValueOverride]() + for (key0, slotvalueoverride0) in slotsContainer { + if let slotvalueoverride0 = slotvalueoverride0 { + slotsDecoded0?[key0] = slotvalueoverride0 + } + } + } + slots = slotsDecoded0 + } +} + +extension LexModelsV2ClientTypes { + /// Override settings to configure the intent state. + public struct IntentOverride: Swift.Equatable { + /// The name of the intent. Only required when you're switching intents. + public var name: Swift.String? + /// A map of all of the slot value overrides for the intent. The name of the slot maps to the value of the slot. Slots that are not included in the map aren't overridden. + public var slots: [Swift.String:LexModelsV2ClientTypes.SlotValueOverride]? + + public init( + name: Swift.String? = nil, + slots: [Swift.String:LexModelsV2ClientTypes.SlotValueOverride]? = nil + ) + { + self.name = name + self.slots = slots + } + } + +} + +extension LexModelsV2ClientTypes { + public enum IntentSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case intentname + case lastupdateddatetime + case sdkUnknown(Swift.String) + + public static var allCases: [IntentSortAttribute] { + return [ + .intentname, + .lastupdateddatetime, + .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 .intentname: return "IntentName" + case .lastupdateddatetime: return "LastUpdatedDateTime" + 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 = IntentSortAttribute(rawValue: rawValue) ?? IntentSortAttribute.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.IntentSortBy: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case attribute + case order + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attribute = self.attribute { + try encodeContainer.encode(attribute.rawValue, forKey: .attribute) + } + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentSortAttribute.self, forKey: .attribute) + attribute = attributeDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) + order = orderDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Specifies attributes for sorting a list of intents. + public struct IntentSortBy: Swift.Equatable { + /// The attribute to use to sort the list of intents. + /// This member is required. + public var attribute: LexModelsV2ClientTypes.IntentSortAttribute? + /// The order to sort the list. You can choose ascending or descending. + /// This member is required. + public var order: LexModelsV2ClientTypes.SortOrder? + + public init( + attribute: LexModelsV2ClientTypes.IntentSortAttribute? = nil, + order: LexModelsV2ClientTypes.SortOrder? = nil + ) + { + self.attribute = attribute + self.order = order + } + } + +} + +extension LexModelsV2ClientTypes { + public enum IntentState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case failed + case fulfilled + case fulfillmentinprogress + case inprogress + case readyforfulfillment + case waiting + case sdkUnknown(Swift.String) + + public static var allCases: [IntentState] { + return [ + .failed, + .fulfilled, + .fulfillmentinprogress, + .inprogress, + .readyforfulfillment, + .waiting, + .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 .failed: return "Failed" + case .fulfilled: return "Fulfilled" + case .fulfillmentinprogress: return "FulfillmentInProgress" + case .inprogress: return "InProgress" + case .readyforfulfillment: return "ReadyForFulfillment" + case .waiting: return "Waiting" + 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 = IntentState(rawValue: rawValue) ?? IntentState.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.IntentStatistics: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case discoveredIntentCount + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let discoveredIntentCount = self.discoveredIntentCount { + try encodeContainer.encode(discoveredIntentCount, forKey: .discoveredIntentCount) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let discoveredIntentCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .discoveredIntentCount) + discoveredIntentCount = discoveredIntentCountDecoded + } +} + +extension LexModelsV2ClientTypes { + /// The object that contains the statistical summary of recommended intents associated with the bot recommendation. + public struct IntentStatistics: Swift.Equatable { + /// The number of recommended intents associated with the bot recommendation. + public var discoveredIntentCount: Swift.Int? + + public init( + discoveredIntentCount: Swift.Int? = nil + ) + { + self.discoveredIntentCount = discoveredIntentCount + } + } + +} + +extension LexModelsV2ClientTypes.IntentSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case description + case inputContexts + case intentId + case intentName + case lastUpdatedDateTime + case outputContexts + case parentIntentSignature + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let inputContexts = inputContexts { + var inputContextsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputContexts) + for inputcontext0 in inputContexts { + try inputContextsContainer.encode(inputcontext0) + } + } + if let intentId = self.intentId { + try encodeContainer.encode(intentId, forKey: .intentId) + } + if let intentName = self.intentName { + try encodeContainer.encode(intentName, forKey: .intentName) + } + if let lastUpdatedDateTime = self.lastUpdatedDateTime { + try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) + } + if let outputContexts = outputContexts { + var outputContextsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputContexts) + for outputcontext0 in outputContexts { + try outputContextsContainer.encode(outputcontext0) + } + } + if let parentIntentSignature = self.parentIntentSignature { + try encodeContainer.encode(parentIntentSignature, forKey: .parentIntentSignature) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) + intentId = intentIdDecoded + let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) + intentName = intentNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let parentIntentSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentIntentSignature) + parentIntentSignature = parentIntentSignatureDecoded + let inputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.InputContext?].self, forKey: .inputContexts) + var inputContextsDecoded0:[LexModelsV2ClientTypes.InputContext]? = nil + if let inputContextsContainer = inputContextsContainer { + inputContextsDecoded0 = [LexModelsV2ClientTypes.InputContext]() + for structure0 in inputContextsContainer { + if let structure0 = structure0 { + inputContextsDecoded0?.append(structure0) + } + } + } + inputContexts = inputContextsDecoded0 + let outputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.OutputContext?].self, forKey: .outputContexts) + var outputContextsDecoded0:[LexModelsV2ClientTypes.OutputContext]? = nil + if let outputContextsContainer = outputContextsContainer { + outputContextsDecoded0 = [LexModelsV2ClientTypes.OutputContext]() + for structure0 in outputContextsContainer { + if let structure0 = structure0 { + outputContextsDecoded0?.append(structure0) + } + } + } + outputContexts = outputContextsDecoded0 + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Summary information about an intent returned by the ListIntents operation. + public struct IntentSummary: Swift.Equatable { + /// The description of the intent. + public var description: Swift.String? + /// The input contexts that must be active for this intent to be considered for recognition. + public var inputContexts: [LexModelsV2ClientTypes.InputContext]? + /// The unique identifier assigned to the intent. Use this ID to get detailed information about the intent with the DescribeIntent operation. + public var intentId: Swift.String? + /// The name of the intent. + public var intentName: Swift.String? + /// The timestamp of the date and time that the intent was last updated. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The output contexts that are activated when this intent is fulfilled. + public var outputContexts: [LexModelsV2ClientTypes.OutputContext]? + /// If this intent is derived from a built-in intent, the name of the parent intent. + public var parentIntentSignature: Swift.String? + + public init( + description: Swift.String? = nil, + inputContexts: [LexModelsV2ClientTypes.InputContext]? = nil, + intentId: Swift.String? = nil, + intentName: Swift.String? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + outputContexts: [LexModelsV2ClientTypes.OutputContext]? = nil, + parentIntentSignature: Swift.String? = nil + ) + { + self.description = description + self.inputContexts = inputContexts + self.intentId = intentId + self.intentName = intentName + self.lastUpdatedDateTime = lastUpdatedDateTime + self.outputContexts = outputContexts + self.parentIntentSignature = parentIntentSignature + } + } + +} + +extension InternalServerException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: InternalServerExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The service encountered an unexpected condition. Try your request again. +public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "InternalServerException" } + public static var fault: ErrorFault { .server } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct InternalServerExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension InternalServerExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 LexModelsV2ClientTypes.InvokedIntentSample: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case intentName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let intentName = self.intentName { + try encodeContainer.encode(intentName, forKey: .intentName) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) + intentName = intentNameDecoded + } +} + +extension LexModelsV2ClientTypes { + /// An object containing the name of an intent that was invoked. + public struct InvokedIntentSample: Swift.Equatable { + /// The name of an intent that was invoked. + public var intentName: Swift.String? + + public init( + intentName: Swift.String? = nil + ) + { + self.intentName = intentName + } + } + +} + +extension LexModelsV2ClientTypes.KendraConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case kendraIndex + case queryFilterString + case queryFilterStringEnabled + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let kendraIndex = self.kendraIndex { + try encodeContainer.encode(kendraIndex, forKey: .kendraIndex) + } + if let queryFilterString = self.queryFilterString { + try encodeContainer.encode(queryFilterString, forKey: .queryFilterString) + } + if queryFilterStringEnabled != false { + try encodeContainer.encode(queryFilterStringEnabled, forKey: .queryFilterStringEnabled) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let kendraIndexDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kendraIndex) + kendraIndex = kendraIndexDecoded + let queryFilterStringEnabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .queryFilterStringEnabled) ?? false + queryFilterStringEnabled = queryFilterStringEnabledDecoded + let queryFilterStringDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .queryFilterString) + queryFilterString = queryFilterStringDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Provides configuration information for the AMAZON.KendraSearchIntent intent. When you use this intent, Amazon Lex searches the specified Amazon Kendra index and returns documents from the index that match the user's utterance. + public struct KendraConfiguration: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the Amazon Kendra index that you want the AMAZON.KendraSearchIntent intent to search. The index must be in the same account and Region as the Amazon Lex bot. + /// This member is required. + public var kendraIndex: Swift.String? + /// A query filter that Amazon Lex sends to Amazon Kendra to filter the response from a query. The filter is in the format defined by Amazon Kendra. For more information, see [Filtering queries](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html). + public var queryFilterString: Swift.String? + /// Determines whether the AMAZON.KendraSearchIntent intent uses a custom query string to query the Amazon Kendra index. + public var queryFilterStringEnabled: Swift.Bool + + public init( + kendraIndex: Swift.String? = nil, + queryFilterString: Swift.String? = nil, + queryFilterStringEnabled: Swift.Bool = false + ) + { + self.kendraIndex = kendraIndex + self.queryFilterString = queryFilterString + self.queryFilterStringEnabled = queryFilterStringEnabled + } + } + +} + +extension LexModelsV2ClientTypes.LambdaCodeHook: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case codeHookInterfaceVersion + case lambdaARN + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let codeHookInterfaceVersion = self.codeHookInterfaceVersion { + try encodeContainer.encode(codeHookInterfaceVersion, forKey: .codeHookInterfaceVersion) + } + if let lambdaARN = self.lambdaARN { + try encodeContainer.encode(lambdaARN, forKey: .lambdaARN) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let lambdaARNDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lambdaARN) + lambdaARN = lambdaARNDecoded + let codeHookInterfaceVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .codeHookInterfaceVersion) + codeHookInterfaceVersion = codeHookInterfaceVersionDecoded + } +} + +extension LexModelsV2ClientTypes { + /// Specifies a Lambda function that verifies requests to a bot or fulfills the user's request to a bot. + public struct LambdaCodeHook: Swift.Equatable { + /// The version of the request-response that you want Amazon Lex to use to invoke your Lambda function. + /// This member is required. + public var codeHookInterfaceVersion: Swift.String? + /// The Amazon Resource Name (ARN) of the Lambda function. + /// This member is required. + public var lambdaARN: Swift.String? + + public init( + codeHookInterfaceVersion: Swift.String? = nil, + lambdaARN: Swift.String? = nil + ) + { + self.codeHookInterfaceVersion = codeHookInterfaceVersion + self.lambdaARN = lambdaARN + } + } + +} + +extension LexModelsV2ClientTypes.LexTranscriptFilter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dateRangeFilter + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let dateRangeFilter = self.dateRangeFilter { + try encodeContainer.encode(dateRangeFilter, forKey: .dateRangeFilter) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let dateRangeFilterDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DateRangeFilter.self, forKey: .dateRangeFilter) + dateRangeFilter = dateRangeFilterDecoded + } +} + +extension LexModelsV2ClientTypes { + /// The object that contains transcript filter details that are associated with a bot recommendation. + public struct LexTranscriptFilter: Swift.Equatable { + /// The object that contains a date range filter that will be applied to the transcript. Specify this object if you want Amazon Lex to only read the files that are within the date range. + public var dateRangeFilter: LexModelsV2ClientTypes.DateRangeFilter? + + public init( + dateRangeFilter: LexModelsV2ClientTypes.DateRangeFilter? = nil + ) + { + self.dateRangeFilter = dateRangeFilter + } + } + +} + +extension ListAggregatedUtterancesInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case aggregationDuration + case botAliasId + case botVersion + case filters + case localeId + case maxResults + case nextToken + case sortBy + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let aggregationDuration = self.aggregationDuration { + try encodeContainer.encode(aggregationDuration, forKey: .aggregationDuration) + } + if let botAliasId = self.botAliasId { + try encodeContainer.encode(botAliasId, forKey: .botAliasId) + } + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) + } + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for aggregatedutterancesfilter0 in filters { + try filtersContainer.encode(aggregatedutterancesfilter0) + } + } + if let localeId = self.localeId { + try encodeContainer.encode(localeId, forKey: .localeId) + } + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy, forKey: .sortBy) + } + } } -extension LexModelsV2ClientTypes { - /// Provides a prompt for making sure that the user is ready for the intent to be fulfilled. - public struct IntentConfirmationSetting: Swift.Equatable { - /// Specifies whether the intent's confirmation is sent to the user. When this field is false, confirmation and declination responses aren't sent. If the active field isn't specified, the default is true. - public var active: Swift.Bool? - /// The DialogCodeHookInvocationSetting object associated with intent's confirmation step. The dialog code hook is triggered based on these invocation settings when the confirmation next step or declination next step or failure next step is InvokeDialogCodeHook. - public var codeHook: LexModelsV2ClientTypes.DialogCodeHookInvocationSetting? - /// A list of conditional branches to evaluate after the intent is closed. - public var confirmationConditional: LexModelsV2ClientTypes.ConditionalSpecification? - /// Specifies the next step that the bot executes when the customer confirms the intent. - public var confirmationNextStep: LexModelsV2ClientTypes.DialogState? - /// Specifies a list of message groups that Amazon Lex uses to respond the user input. - public var confirmationResponse: LexModelsV2ClientTypes.ResponseSpecification? - /// A list of conditional branches to evaluate after the intent is declined. - public var declinationConditional: LexModelsV2ClientTypes.ConditionalSpecification? - /// Specifies the next step that the bot executes when the customer declines the intent. - public var declinationNextStep: LexModelsV2ClientTypes.DialogState? - /// When the user answers "no" to the question defined in promptSpecification, Amazon Lex responds with this response to acknowledge that the intent was canceled. - public var declinationResponse: LexModelsV2ClientTypes.ResponseSpecification? - /// The DialogCodeHookInvocationSetting used when the code hook is invoked during confirmation prompt retries. - public var elicitationCodeHook: LexModelsV2ClientTypes.ElicitationCodeHookInvocationSetting? - /// Provides a list of conditional branches. Branches are evaluated in the order that they are entered in the list. The first branch with a condition that evaluates to true is executed. The last branch in the list is the default branch. The default branch should not have any condition expression. The default branch is executed if no other branch has a matching condition. - public var failureConditional: LexModelsV2ClientTypes.ConditionalSpecification? - /// The next step to take in the conversation if the confirmation step fails. - public var failureNextStep: LexModelsV2ClientTypes.DialogState? - /// Specifies a list of message groups that Amazon Lex uses to respond the user input. - public var failureResponse: LexModelsV2ClientTypes.ResponseSpecification? - /// Prompts the user to confirm the intent. This question should have a yes or no answer. Amazon Lex uses this prompt to ensure that the user acknowledges that the intent is ready for fulfillment. For example, with the OrderPizza intent, you might want to confirm that the order is correct before placing it. For other intents, such as intents that simply respond to user questions, you might not need to ask the user for confirmation before providing the information. - /// This member is required. - public var promptSpecification: LexModelsV2ClientTypes.PromptSpecification? +extension ListAggregatedUtterancesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/aggregatedutterances" + } +} + +public struct ListAggregatedUtterancesInput: Swift.Equatable { + /// The time window for aggregating the utterance information. You can specify a time between one hour and two weeks. + /// This member is required. + public var aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? + /// The identifier of the bot alias associated with this request. If you specify the bot alias, you can't specify the bot version. + public var botAliasId: Swift.String? + /// The unique identifier of the bot associated with this request. + /// This member is required. + public var botId: Swift.String? + /// The identifier of the bot version associated with this request. If you specify the bot version, you can't specify the bot alias. + public var botVersion: Swift.String? + /// Provides the specification of a filter used to limit the utterances in the response to only those that match the filter specification. You can only specify one filter and one string to filter on. + public var filters: [LexModelsV2ClientTypes.AggregatedUtterancesFilter]? + /// The identifier of the language and locale where the utterances were collected. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? + /// The maximum number of utterances to return in each page of results. If there are fewer results than the maximum page size, only the actual number of results are returned. If you don't specify the maxResults parameter, 1,000 results are returned. + public var maxResults: Swift.Int? + /// If the response from the ListAggregatedUtterances operation contains more results that specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + public var nextToken: Swift.String? + /// Specifies sorting parameters for the list of utterances. You can sort by the hit count, the missed count, or the number of distinct sessions the utterance appeared in. + public var sortBy: LexModelsV2ClientTypes.AggregatedUtterancesSortBy? + + public init( + aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? = nil, + botAliasId: Swift.String? = nil, + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + filters: [LexModelsV2ClientTypes.AggregatedUtterancesFilter]? = nil, + localeId: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + sortBy: LexModelsV2ClientTypes.AggregatedUtterancesSortBy? = nil + ) + { + self.aggregationDuration = aggregationDuration + self.botAliasId = botAliasId + self.botId = botId + self.botVersion = botVersion + self.filters = filters + self.localeId = localeId + self.maxResults = maxResults + self.nextToken = nextToken + self.sortBy = sortBy + } +} + +struct ListAggregatedUtterancesInputBody: Swift.Equatable { + let botAliasId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? + let sortBy: LexModelsV2ClientTypes.AggregatedUtterancesSortBy? + let filters: [LexModelsV2ClientTypes.AggregatedUtterancesFilter]? + let maxResults: Swift.Int? + let nextToken: Swift.String? +} + +extension ListAggregatedUtterancesInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case aggregationDuration + case botAliasId + case botVersion + case filters + case localeId + case maxResults + case nextToken + case sortBy + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) + botAliasId = botAliasIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let aggregationDurationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.UtteranceAggregationDuration.self, forKey: .aggregationDuration) + aggregationDuration = aggregationDurationDecoded + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AggregatedUtterancesSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AggregatedUtterancesFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.AggregatedUtterancesFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [LexModelsV2ClientTypes.AggregatedUtterancesFilter]() + for structure0 in filtersContainer { + if let structure0 = structure0 { + filtersDecoded0?.append(structure0) + } + } + } + filters = filtersDecoded0 + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +public enum ListAggregatedUtterancesOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListAggregatedUtterancesOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListAggregatedUtterancesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.aggregatedUtterancesSummaries = output.aggregatedUtterancesSummaries + self.aggregationDuration = output.aggregationDuration + self.aggregationLastRefreshedDateTime = output.aggregationLastRefreshedDateTime + self.aggregationWindowEndTime = output.aggregationWindowEndTime + self.aggregationWindowStartTime = output.aggregationWindowStartTime + self.botAliasId = output.botAliasId + self.botId = output.botId + self.botVersion = output.botVersion + self.localeId = output.localeId + self.nextToken = output.nextToken + } else { + self.aggregatedUtterancesSummaries = nil + self.aggregationDuration = nil + self.aggregationLastRefreshedDateTime = nil + self.aggregationWindowEndTime = nil + self.aggregationWindowStartTime = nil + self.botAliasId = nil + self.botId = nil + self.botVersion = nil + self.localeId = nil + self.nextToken = nil + } + } +} + +public struct ListAggregatedUtterancesOutputResponse: Swift.Equatable { + /// Summaries of the aggregated utterance data. Each response contains information about the number of times that the utterance was seen during the time period, whether it was detected or missed, and when it was seen during the time period. + public var aggregatedUtterancesSummaries: [LexModelsV2ClientTypes.AggregatedUtterancesSummary]? + /// The time period used to aggregate the utterance data. + public var aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? + /// The last date and time that the aggregated data was collected. The time period depends on the length of the aggregation window. + /// + /// * Hours - for 1 hour time window, every half hour; otherwise every hour. + /// + /// * Days - every 6 hours + /// + /// * Weeks - for a one week time window, every 12 hours; otherwise, every day + public var aggregationLastRefreshedDateTime: ClientRuntime.Date? + /// The date and time that the aggregation window ends. Only data collected between the start time and the end time are returned in the results. + public var aggregationWindowEndTime: ClientRuntime.Date? + /// The date and time that the aggregation window begins. Only data collected after this time is returned in the results. + public var aggregationWindowStartTime: ClientRuntime.Date? + /// The identifier of the bot alias that contains the utterances. If you specified the bot version, the bot alias ID isn't returned. + public var botAliasId: Swift.String? + /// The identifier of the bot that contains the utterances. + public var botId: Swift.String? + /// The identifier of the bot version that contains the utterances. If you specified the bot alias, the bot version isn't returned. + public var botVersion: Swift.String? + /// The identifier of the language and locale that the utterances are in. + public var localeId: Swift.String? + /// A token that indicates whether there are more results to return in a response to the ListAggregatedUtterances operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListAggregatedUtterances operation request to get the next page of results. + public var nextToken: Swift.String? + + public init( + aggregatedUtterancesSummaries: [LexModelsV2ClientTypes.AggregatedUtterancesSummary]? = nil, + aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? = nil, + aggregationLastRefreshedDateTime: ClientRuntime.Date? = nil, + aggregationWindowEndTime: ClientRuntime.Date? = nil, + aggregationWindowStartTime: ClientRuntime.Date? = nil, + botAliasId: Swift.String? = nil, + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil, + nextToken: Swift.String? = nil + ) + { + self.aggregatedUtterancesSummaries = aggregatedUtterancesSummaries + self.aggregationDuration = aggregationDuration + self.aggregationLastRefreshedDateTime = aggregationLastRefreshedDateTime + self.aggregationWindowEndTime = aggregationWindowEndTime + self.aggregationWindowStartTime = aggregationWindowStartTime + self.botAliasId = botAliasId + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId + self.nextToken = nextToken + } +} + +struct ListAggregatedUtterancesOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botAliasId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? + let aggregationWindowStartTime: ClientRuntime.Date? + let aggregationWindowEndTime: ClientRuntime.Date? + let aggregationLastRefreshedDateTime: ClientRuntime.Date? + let aggregatedUtterancesSummaries: [LexModelsV2ClientTypes.AggregatedUtterancesSummary]? + let nextToken: Swift.String? +} + +extension ListAggregatedUtterancesOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case aggregatedUtterancesSummaries + case aggregationDuration + case aggregationLastRefreshedDateTime + case aggregationWindowEndTime + case aggregationWindowStartTime + case botAliasId + case botId + case botVersion + case localeId + case nextToken + } - public init( - active: Swift.Bool? = nil, - codeHook: LexModelsV2ClientTypes.DialogCodeHookInvocationSetting? = nil, - confirmationConditional: LexModelsV2ClientTypes.ConditionalSpecification? = nil, - confirmationNextStep: LexModelsV2ClientTypes.DialogState? = nil, - confirmationResponse: LexModelsV2ClientTypes.ResponseSpecification? = nil, - declinationConditional: LexModelsV2ClientTypes.ConditionalSpecification? = nil, - declinationNextStep: LexModelsV2ClientTypes.DialogState? = nil, - declinationResponse: LexModelsV2ClientTypes.ResponseSpecification? = nil, - elicitationCodeHook: LexModelsV2ClientTypes.ElicitationCodeHookInvocationSetting? = nil, - failureConditional: LexModelsV2ClientTypes.ConditionalSpecification? = nil, - failureNextStep: LexModelsV2ClientTypes.DialogState? = nil, - failureResponse: LexModelsV2ClientTypes.ResponseSpecification? = nil, - promptSpecification: LexModelsV2ClientTypes.PromptSpecification? = nil - ) - { - self.active = active - self.codeHook = codeHook - self.confirmationConditional = confirmationConditional - self.confirmationNextStep = confirmationNextStep - self.confirmationResponse = confirmationResponse - self.declinationConditional = declinationConditional - self.declinationNextStep = declinationNextStep - self.declinationResponse = declinationResponse - self.elicitationCodeHook = elicitationCodeHook - self.failureConditional = failureConditional - self.failureNextStep = failureNextStep - self.failureResponse = failureResponse - self.promptSpecification = promptSpecification + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) + botAliasId = botAliasIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let aggregationDurationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.UtteranceAggregationDuration.self, forKey: .aggregationDuration) + aggregationDuration = aggregationDurationDecoded + let aggregationWindowStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .aggregationWindowStartTime) + aggregationWindowStartTime = aggregationWindowStartTimeDecoded + let aggregationWindowEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .aggregationWindowEndTime) + aggregationWindowEndTime = aggregationWindowEndTimeDecoded + let aggregationLastRefreshedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .aggregationLastRefreshedDateTime) + aggregationLastRefreshedDateTime = aggregationLastRefreshedDateTimeDecoded + let aggregatedUtterancesSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AggregatedUtterancesSummary?].self, forKey: .aggregatedUtterancesSummaries) + var aggregatedUtterancesSummariesDecoded0:[LexModelsV2ClientTypes.AggregatedUtterancesSummary]? = nil + if let aggregatedUtterancesSummariesContainer = aggregatedUtterancesSummariesContainer { + aggregatedUtterancesSummariesDecoded0 = [LexModelsV2ClientTypes.AggregatedUtterancesSummary]() + for structure0 in aggregatedUtterancesSummariesContainer { + if let structure0 = structure0 { + aggregatedUtterancesSummariesDecoded0?.append(structure0) + } + } } + aggregatedUtterancesSummaries = aggregatedUtterancesSummariesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } - } -extension LexModelsV2ClientTypes.IntentFilter: Swift.Codable { +extension ListBotAliasesInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case name - case `operator` = "operator" - case values + case maxResults + case nextToken } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let name = self.name { - try encodeContainer.encode(name.rawValue, forKey: .name) + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) } - if let `operator` = self.`operator` { - try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) } - if let values = values { - var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) - for filtervalue0 in values { - try valuesContainer.encode(filtervalue0) - } + } +} + +extension ListBotAliasesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } + return "/bots/\(botId.urlPercentEncoding())/botaliases" + } +} + +public struct ListBotAliasesInput: Swift.Equatable { + /// The identifier of the bot to list aliases for. + /// This member is required. + public var botId: Swift.String? + /// The maximum number of aliases to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + public var maxResults: Swift.Int? + /// If the response from the ListBotAliases operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + public var nextToken: Swift.String? + + public init( + botId: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.botId = botId + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListBotAliasesInputBody: Swift.Equatable { + let maxResults: Swift.Int? + let nextToken: Swift.String? +} + +extension ListBotAliasesInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults + case nextToken } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentFilterName.self, forKey: .name) - name = nameDecoded - let valuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .values) - var valuesDecoded0:[Swift.String]? = nil - if let valuesContainer = valuesContainer { - valuesDecoded0 = [Swift.String]() - for string0 in valuesContainer { - if let string0 = string0 { - valuesDecoded0?.append(string0) - } - } - } - values = valuesDecoded0 - let operatorDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentFilterOperator.self, forKey: .operator) - `operator` = operatorDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -extension LexModelsV2ClientTypes { - /// Filters the response from the ListIntents operation. - public struct IntentFilter: Swift.Equatable { - /// The name of the field to use for the filter. - /// This member is required. - public var name: LexModelsV2ClientTypes.IntentFilterName? - /// The operator to use for the filter. Specify EQ when the ListIntents operation should return only aliases that equal the specified value. Specify CO when the ListIntents operation should return aliases that contain the specified value. - /// This member is required. - public var `operator`: LexModelsV2ClientTypes.IntentFilterOperator? - /// The value to use for the filter. - /// This member is required. - public var values: [Swift.String]? +public enum ListBotAliasesOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} - public init( - name: LexModelsV2ClientTypes.IntentFilterName? = nil, - `operator`: LexModelsV2ClientTypes.IntentFilterOperator? = nil, - values: [Swift.String]? = nil - ) - { - self.name = name - self.`operator` = `operator` - self.values = values +extension ListBotAliasesOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListBotAliasesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botAliasSummaries = output.botAliasSummaries + self.botId = output.botId + self.nextToken = output.nextToken + } else { + self.botAliasSummaries = nil + self.botId = nil + self.nextToken = nil } } +} + +public struct ListBotAliasesOutputResponse: Swift.Equatable { + /// Summary information for the bot aliases that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more aliases available, the nextToken field contains a token to get the next page of results. + public var botAliasSummaries: [LexModelsV2ClientTypes.BotAliasSummary]? + /// The identifier of the bot associated with the aliases. + public var botId: Swift.String? + /// A token that indicates whether there are more results to return in a response to the ListBotAliases operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBotAliases operation request to get the next page of results. + public var nextToken: Swift.String? + + public init( + botAliasSummaries: [LexModelsV2ClientTypes.BotAliasSummary]? = nil, + botId: Swift.String? = nil, + nextToken: Swift.String? = nil + ) + { + self.botAliasSummaries = botAliasSummaries + self.botId = botId + self.nextToken = nextToken + } +} +struct ListBotAliasesOutputResponseBody: Swift.Equatable { + let botAliasSummaries: [LexModelsV2ClientTypes.BotAliasSummary]? + let nextToken: Swift.String? + let botId: Swift.String? } -extension LexModelsV2ClientTypes { - public enum IntentFilterName: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case intentname - case sdkUnknown(Swift.String) +extension ListBotAliasesOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botAliasSummaries + case botId + case nextToken + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botAliasSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotAliasSummary?].self, forKey: .botAliasSummaries) + var botAliasSummariesDecoded0:[LexModelsV2ClientTypes.BotAliasSummary]? = nil + if let botAliasSummariesContainer = botAliasSummariesContainer { + botAliasSummariesDecoded0 = [LexModelsV2ClientTypes.BotAliasSummary]() + for structure0 in botAliasSummariesContainer { + if let structure0 = structure0 { + botAliasSummariesDecoded0?.append(structure0) + } + } + } + botAliasSummaries = botAliasSummariesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + } +} + +extension ListBotLocalesInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case filters + case maxResults + case nextToken + case sortBy + } - public static var allCases: [IntentFilterName] { - return [ - .intentname, - .sdkUnknown("") - ] + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for botlocalefilter0 in filters { + try filtersContainer.encode(botlocalefilter0) + } } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) } - public var rawValue: Swift.String { - switch self { - case .intentname: return "IntentName" - case let .sdkUnknown(s): return s - } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = IntentFilterName(rawValue: rawValue) ?? IntentFilterName.sdkUnknown(rawValue) + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy, forKey: .sortBy) } } } -extension LexModelsV2ClientTypes { - public enum IntentFilterOperator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case contains - case equals - case sdkUnknown(Swift.String) - - public static var allCases: [IntentFilterOperator] { - return [ - .contains, - .equals, - .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 .contains: return "CO" - case .equals: return "EQ" - case let .sdkUnknown(s): return s - } +extension ListBotLocalesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - public init(from decoder: Swift.Decoder) throws { - let container = try decoder.singleValueContainer() - let rawValue = try container.decode(RawValue.self) - self = IntentFilterOperator(rawValue: rawValue) ?? IntentFilterOperator.sdkUnknown(rawValue) + guard let botVersion = botVersion else { + return nil } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales" } } -extension LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case intentName - case multiTurnConversation - case slotResolutionResults +public struct ListBotLocalesInput: Swift.Equatable { + /// The identifier of the bot to list locales for. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot to list locales for. + /// This member is required. + public var botVersion: Swift.String? + /// Provides the specification for a filter used to limit the response to only those locales that match the filter specification. You can only specify one filter and one value to filter on. + public var filters: [LexModelsV2ClientTypes.BotLocaleFilter]? + /// The maximum number of aliases to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + public var maxResults: Swift.Int? + /// If the response from the ListBotLocales operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token as the nextToken parameter to return the next page of results. + public var nextToken: Swift.String? + /// Specifies sorting parameters for the list of locales. You can sort by locale name in ascending or descending order. + public var sortBy: LexModelsV2ClientTypes.BotLocaleSortBy? + + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + filters: [LexModelsV2ClientTypes.BotLocaleFilter]? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + sortBy: LexModelsV2ClientTypes.BotLocaleSortBy? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.filters = filters + self.maxResults = maxResults + self.nextToken = nextToken + self.sortBy = sortBy } +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let intentName = self.intentName { - try encodeContainer.encode(intentName, forKey: .intentName) - } - if multiTurnConversation != false { - try encodeContainer.encode(multiTurnConversation, forKey: .multiTurnConversation) - } - if let slotResolutionResults = slotResolutionResults { - var slotResolutionResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .slotResolutionResults) - for slotresolutiontestresultitem0 in slotResolutionResults { - try slotResolutionResultsContainer.encode(slotresolutiontestresultitem0) - } - } +struct ListBotLocalesInputBody: Swift.Equatable { + let sortBy: LexModelsV2ClientTypes.BotLocaleSortBy? + let filters: [LexModelsV2ClientTypes.BotLocaleFilter]? + let maxResults: Swift.Int? + let nextToken: Swift.String? +} + +extension ListBotLocalesInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case filters + case maxResults + case nextToken + case sortBy } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) - intentName = intentNameDecoded - let multiTurnConversationDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .multiTurnConversation) ?? false - multiTurnConversation = multiTurnConversationDecoded - let slotResolutionResultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotResolutionTestResultItem?].self, forKey: .slotResolutionResults) - var slotResolutionResultsDecoded0:[LexModelsV2ClientTypes.SlotResolutionTestResultItem]? = nil - if let slotResolutionResultsContainer = slotResolutionResultsContainer { - slotResolutionResultsDecoded0 = [LexModelsV2ClientTypes.SlotResolutionTestResultItem]() - for structure0 in slotResolutionResultsContainer { + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotLocaleFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.BotLocaleFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [LexModelsV2ClientTypes.BotLocaleFilter]() + for structure0 in filtersContainer { if let structure0 = structure0 { - slotResolutionResultsDecoded0?.append(structure0) + filtersDecoded0?.append(structure0) } } } - slotResolutionResults = slotResolutionResultsDecoded0 + filters = filtersDecoded0 + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -extension LexModelsV2ClientTypes { - /// Information about intent-level slot resolution in a test result. - public struct IntentLevelSlotResolutionTestResultItem: Swift.Equatable { - /// The name of the intent that was recognized. - /// This member is required. - public var intentName: Swift.String? - /// Indicates whether the conversation involves multiple turns or not. - /// This member is required. - public var multiTurnConversation: Swift.Bool - /// The results for the slot resolution in the test execution result. - /// This member is required. - public var slotResolutionResults: [LexModelsV2ClientTypes.SlotResolutionTestResultItem]? - - public init( - intentName: Swift.String? = nil, - multiTurnConversation: Swift.Bool = false, - slotResolutionResults: [LexModelsV2ClientTypes.SlotResolutionTestResultItem]? = nil - ) - { - self.intentName = intentName - self.multiTurnConversation = multiTurnConversation - self.slotResolutionResults = slotResolutionResults +public enum ListBotLocalesOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } +} +extension ListBotLocalesOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListBotLocalesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botLocaleSummaries = output.botLocaleSummaries + self.botVersion = output.botVersion + self.nextToken = output.nextToken + } else { + self.botId = nil + self.botLocaleSummaries = nil + self.botVersion = nil + self.nextToken = nil + } + } } -extension LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResults: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case items +public struct ListBotLocalesOutputResponse: Swift.Equatable { + /// The identifier of the bot to list locales for. + public var botId: Swift.String? + /// Summary information for the locales that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more locales available, the nextToken field contains a token to get the next page of results. + public var botLocaleSummaries: [LexModelsV2ClientTypes.BotLocaleSummary]? + /// The version of the bot. + public var botVersion: Swift.String? + /// A token that indicates whether there are more results to return in a response to the ListBotLocales operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBotLocales operation request to get the next page of results. + public var nextToken: Swift.String? + + public init( + botId: Swift.String? = nil, + botLocaleSummaries: [LexModelsV2ClientTypes.BotLocaleSummary]? = nil, + botVersion: Swift.String? = nil, + nextToken: Swift.String? = nil + ) + { + self.botId = botId + self.botLocaleSummaries = botLocaleSummaries + self.botVersion = botVersion + self.nextToken = nextToken } +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let items = items { - var itemsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .items) - for intentlevelslotresolutiontestresultitem0 in items { - try itemsContainer.encode(intentlevelslotresolutiontestresultitem0) - } - } +struct ListBotLocalesOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let nextToken: Swift.String? + let botLocaleSummaries: [LexModelsV2ClientTypes.BotLocaleSummary]? +} + +extension ListBotLocalesOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botId + case botLocaleSummaries + case botVersion + case nextToken } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let itemsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem?].self, forKey: .items) - var itemsDecoded0:[LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem]? = nil - if let itemsContainer = itemsContainer { - itemsDecoded0 = [LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem]() - for structure0 in itemsContainer { + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let botLocaleSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotLocaleSummary?].self, forKey: .botLocaleSummaries) + var botLocaleSummariesDecoded0:[LexModelsV2ClientTypes.BotLocaleSummary]? = nil + if let botLocaleSummariesContainer = botLocaleSummariesContainer { + botLocaleSummariesDecoded0 = [LexModelsV2ClientTypes.BotLocaleSummary]() + for structure0 in botLocaleSummariesContainer { if let structure0 = structure0 { - itemsDecoded0?.append(structure0) + botLocaleSummariesDecoded0?.append(structure0) } } } - items = itemsDecoded0 - } -} - -extension LexModelsV2ClientTypes { - /// Indicates the success or failure of slots at the intent level. - public struct IntentLevelSlotResolutionTestResults: Swift.Equatable { - /// Indicates the items for the slot level resolution for the intents. - /// This member is required. - public var items: [LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem]? - - public init( - items: [LexModelsV2ClientTypes.IntentLevelSlotResolutionTestResultItem]? = nil - ) - { - self.items = items - } + botLocaleSummaries = botLocaleSummariesDecoded0 } - } -extension LexModelsV2ClientTypes.IntentOverride: Swift.Codable { +extension ListBotRecommendationsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case name - case slots + case maxResults + case nextToken } 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) + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) } - if let slots = slots { - var slotsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .slots) - for (dictKey0, slotValueOverrideMap0) in slots { - try slotsContainer.encode(slotValueOverrideMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) } } +} - 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 slotsContainer = try containerValues.decodeIfPresent([Swift.String: LexModelsV2ClientTypes.SlotValueOverride?].self, forKey: .slots) - var slotsDecoded0: [Swift.String:LexModelsV2ClientTypes.SlotValueOverride]? = nil - if let slotsContainer = slotsContainer { - slotsDecoded0 = [Swift.String:LexModelsV2ClientTypes.SlotValueOverride]() - for (key0, slotvalueoverride0) in slotsContainer { - if let slotvalueoverride0 = slotvalueoverride0 { - slotsDecoded0?[key0] = slotvalueoverride0 - } - } +extension ListBotRecommendationsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil } - slots = slotsDecoded0 + guard let botVersion = botVersion else { + return nil + } + guard let localeId = localeId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/botrecommendations" } } -extension LexModelsV2ClientTypes { - /// Override settings to configure the intent state. - public struct IntentOverride: Swift.Equatable { - /// The name of the intent. Only required when you're switching intents. - public var name: Swift.String? - /// A map of all of the slot value overrides for the intent. The name of the slot maps to the value of the slot. Slots that are not included in the map aren't overridden. - public var slots: [Swift.String:LexModelsV2ClientTypes.SlotValueOverride]? +public struct ListBotRecommendationsInput: Swift.Equatable { + /// The unique identifier of the bot that contains the bot recommendation list. + /// This member is required. + public var botId: Swift.String? + /// The version of the bot that contains the bot recommendation list. + /// This member is required. + public var botVersion: Swift.String? + /// The identifier of the language and locale of the bot recommendation list. + /// This member is required. + public var localeId: Swift.String? + /// The maximum number of bot recommendations to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + public var maxResults: Swift.Int? + /// If the response from the ListBotRecommendation operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + public var nextToken: Swift.String? - public init( - name: Swift.String? = nil, - slots: [Swift.String:LexModelsV2ClientTypes.SlotValueOverride]? = nil - ) - { - self.name = name - self.slots = slots - } + public init( + botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.botId = botId + self.botVersion = botVersion + self.localeId = localeId + self.maxResults = maxResults + self.nextToken = nextToken } +} +struct ListBotRecommendationsInputBody: Swift.Equatable { + let maxResults: Swift.Int? + let nextToken: Swift.String? } -extension LexModelsV2ClientTypes { - public enum IntentSortAttribute: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case intentname - case lastupdateddatetime - case sdkUnknown(Swift.String) +extension ListBotRecommendationsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults + case nextToken + } - public static var allCases: [IntentSortAttribute] { - return [ - .intentname, - .lastupdateddatetime, - .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 .intentname: return "IntentName" - case .lastupdateddatetime: return "LastUpdatedDateTime" - 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 = IntentSortAttribute(rawValue: rawValue) ?? IntentSortAttribute.sdkUnknown(rawValue) - } + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -extension LexModelsV2ClientTypes.IntentSortBy: Swift.Codable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case attribute - case order +public enum ListBotRecommendationsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } } +} - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let attribute = self.attribute { - try encodeContainer.encode(attribute.rawValue, forKey: .attribute) - } - if let order = self.order { - try encodeContainer.encode(order.rawValue, forKey: .order) +extension ListBotRecommendationsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListBotRecommendationsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botRecommendationSummaries = output.botRecommendationSummaries + self.botVersion = output.botVersion + self.localeId = output.localeId + self.nextToken = output.nextToken + } else { + self.botId = nil + self.botRecommendationSummaries = nil + self.botVersion = nil + self.localeId = nil + self.nextToken = nil } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let attributeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentSortAttribute.self, forKey: .attribute) - attribute = attributeDecoded - let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SortOrder.self, forKey: .order) - order = orderDecoded +public struct ListBotRecommendationsOutputResponse: Swift.Equatable { + /// The unique identifier of the bot that contains the bot recommendation list. + public var botId: Swift.String? + /// Summary information for the bot recommendations that meet the filter specified in this request. The length of the list is specified in the maxResults parameter of the request. If there are more bot recommendations available, the nextToken field contains a token to get the next page of results. + public var botRecommendationSummaries: [LexModelsV2ClientTypes.BotRecommendationSummary]? + /// The version of the bot that contains the bot recommendation list. + public var botVersion: Swift.String? + /// The identifier of the language and locale of the bot recommendation list. + public var localeId: Swift.String? + /// A token that indicates whether there are more results to return in a response to the ListBotRecommendations operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBotRecommendations operation request to get the next page of results. + public var nextToken: Swift.String? + + public init( + botId: Swift.String? = nil, + botRecommendationSummaries: [LexModelsV2ClientTypes.BotRecommendationSummary]? = nil, + botVersion: Swift.String? = nil, + localeId: Swift.String? = nil, + nextToken: Swift.String? = nil + ) + { + self.botId = botId + self.botRecommendationSummaries = botRecommendationSummaries + self.botVersion = botVersion + self.localeId = localeId + self.nextToken = nextToken } } -extension LexModelsV2ClientTypes { - /// Specifies attributes for sorting a list of intents. - public struct IntentSortBy: Swift.Equatable { - /// The attribute to use to sort the list of intents. - /// This member is required. - public var attribute: LexModelsV2ClientTypes.IntentSortAttribute? - /// The order to sort the list. You can choose ascending or descending. - /// This member is required. - public var order: LexModelsV2ClientTypes.SortOrder? +struct ListBotRecommendationsOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let localeId: Swift.String? + let botRecommendationSummaries: [LexModelsV2ClientTypes.BotRecommendationSummary]? + let nextToken: Swift.String? +} - public init( - attribute: LexModelsV2ClientTypes.IntentSortAttribute? = nil, - order: LexModelsV2ClientTypes.SortOrder? = nil - ) - { - self.attribute = attribute - self.order = order - } +extension ListBotRecommendationsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botId + case botRecommendationSummaries + case botVersion + case localeId + case nextToken } + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let botRecommendationSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotRecommendationSummary?].self, forKey: .botRecommendationSummaries) + var botRecommendationSummariesDecoded0:[LexModelsV2ClientTypes.BotRecommendationSummary]? = nil + if let botRecommendationSummariesContainer = botRecommendationSummariesContainer { + botRecommendationSummariesDecoded0 = [LexModelsV2ClientTypes.BotRecommendationSummary]() + for structure0 in botRecommendationSummariesContainer { + if let structure0 = structure0 { + botRecommendationSummariesDecoded0?.append(structure0) + } + } + } + botRecommendationSummaries = botRecommendationSummariesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } } -extension LexModelsV2ClientTypes.IntentStatistics: Swift.Codable { +extension ListBotVersionsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case discoveredIntentCount + case maxResults + case nextToken + case sortBy } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let discoveredIntentCount = self.discoveredIntentCount { - try encodeContainer.encode(discoveredIntentCount, forKey: .discoveredIntentCount) + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy, forKey: .sortBy) } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let discoveredIntentCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .discoveredIntentCount) - discoveredIntentCount = discoveredIntentCountDecoded +extension ListBotVersionsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let botId = botId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions" } } -extension LexModelsV2ClientTypes { - /// The object that contains the statistical summary of recommended intents associated with the bot recommendation. - public struct IntentStatistics: Swift.Equatable { - /// The number of recommended intents associated with the bot recommendation. - public var discoveredIntentCount: Swift.Int? +public struct ListBotVersionsInput: Swift.Equatable { + /// The identifier of the bot to list versions for. + /// This member is required. + public var botId: Swift.String? + /// The maximum number of versions to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + public var maxResults: Swift.Int? + /// If the response to the ListBotVersion operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + public var nextToken: Swift.String? + /// Specifies sorting parameters for the list of versions. You can specify that the list be sorted by version name in either ascending or descending order. + public var sortBy: LexModelsV2ClientTypes.BotVersionSortBy? - public init( - discoveredIntentCount: Swift.Int? = nil - ) - { - self.discoveredIntentCount = discoveredIntentCount - } + public init( + botId: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + sortBy: LexModelsV2ClientTypes.BotVersionSortBy? = nil + ) + { + self.botId = botId + self.maxResults = maxResults + self.nextToken = nextToken + self.sortBy = sortBy } +} +struct ListBotVersionsInputBody: Swift.Equatable { + let sortBy: LexModelsV2ClientTypes.BotVersionSortBy? + let maxResults: Swift.Int? + let nextToken: Swift.String? } -extension LexModelsV2ClientTypes.IntentSummary: Swift.Codable { +extension ListBotVersionsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case description - case inputContexts - case intentId - case intentName - case lastUpdatedDateTime - case outputContexts - case parentIntentSignature - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let inputContexts = inputContexts { - var inputContextsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .inputContexts) - for inputcontext0 in inputContexts { - try inputContextsContainer.encode(inputcontext0) - } - } - if let intentId = self.intentId { - try encodeContainer.encode(intentId, forKey: .intentId) - } - if let intentName = self.intentName { - try encodeContainer.encode(intentName, forKey: .intentName) - } - if let lastUpdatedDateTime = self.lastUpdatedDateTime { - try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) - } - if let outputContexts = outputContexts { - var outputContextsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .outputContexts) - for outputcontext0 in outputContexts { - try outputContextsContainer.encode(outputcontext0) - } - } - if let parentIntentSignature = self.parentIntentSignature { - try encodeContainer.encode(parentIntentSignature, forKey: .parentIntentSignature) - } + case maxResults + case nextToken + case sortBy } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) - intentId = intentIdDecoded - let intentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentName) - intentName = intentNameDecoded - let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) - description = descriptionDecoded - let parentIntentSignatureDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentIntentSignature) - parentIntentSignature = parentIntentSignatureDecoded - let inputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.InputContext?].self, forKey: .inputContexts) - var inputContextsDecoded0:[LexModelsV2ClientTypes.InputContext]? = nil - if let inputContextsContainer = inputContextsContainer { - inputContextsDecoded0 = [LexModelsV2ClientTypes.InputContext]() - for structure0 in inputContextsContainer { - if let structure0 = structure0 { - inputContextsDecoded0?.append(structure0) - } - } - } - inputContexts = inputContextsDecoded0 - let outputContextsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.OutputContext?].self, forKey: .outputContexts) - var outputContextsDecoded0:[LexModelsV2ClientTypes.OutputContext]? = nil - if let outputContextsContainer = outputContextsContainer { - outputContextsDecoded0 = [LexModelsV2ClientTypes.OutputContext]() - for structure0 in outputContextsContainer { - if let structure0 = structure0 { - outputContextsDecoded0?.append(structure0) - } - } - } - outputContexts = outputContextsDecoded0 - let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) - lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotVersionSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -extension LexModelsV2ClientTypes { - /// Summary information about an intent returned by the ListIntents operation. - public struct IntentSummary: Swift.Equatable { - /// The description of the intent. - public var description: Swift.String? - /// The input contexts that must be active for this intent to be considered for recognition. - public var inputContexts: [LexModelsV2ClientTypes.InputContext]? - /// The unique identifier assigned to the intent. Use this ID to get detailed information about the intent with the DescribeIntent operation. - public var intentId: Swift.String? - /// The name of the intent. - public var intentName: Swift.String? - /// The timestamp of the date and time that the intent was last updated. - public var lastUpdatedDateTime: ClientRuntime.Date? - /// The output contexts that are activated when this intent is fulfilled. - public var outputContexts: [LexModelsV2ClientTypes.OutputContext]? - /// If this intent is derived from a built-in intent, the name of the parent intent. - public var parentIntentSignature: Swift.String? - - public init( - description: Swift.String? = nil, - inputContexts: [LexModelsV2ClientTypes.InputContext]? = nil, - intentId: Swift.String? = nil, - intentName: Swift.String? = nil, - lastUpdatedDateTime: ClientRuntime.Date? = nil, - outputContexts: [LexModelsV2ClientTypes.OutputContext]? = nil, - parentIntentSignature: Swift.String? = nil - ) - { - self.description = description - self.inputContexts = inputContexts - self.intentId = intentId - self.intentName = intentName - self.lastUpdatedDateTime = lastUpdatedDateTime - self.outputContexts = outputContexts - self.parentIntentSignature = parentIntentSignature +public enum ListBotVersionsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } - } -extension InternalServerException { - public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { +extension ListBotVersionsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: InternalServerExceptionBody = try responseDecoder.decode(responseBody: data) - self.properties.message = output.message + let output: ListBotVersionsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId + self.botVersionSummaries = output.botVersionSummaries + self.nextToken = output.nextToken } else { - self.properties.message = nil + self.botId = nil + self.botVersionSummaries = nil + self.nextToken = nil } - self.httpResponse = httpResponse - self.requestID = requestID - self.message = message } } -/// The service encountered an unexpected condition. Try your request again. -public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "InternalServerException" } - public static var fault: ErrorFault { .server } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? +public struct ListBotVersionsOutputResponse: Swift.Equatable { + /// The identifier of the bot to list versions for. + public var botId: Swift.String? + /// Summary information for the bot versions that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more versions available, the nextToken field contains a token to get the next page of results. + public var botVersionSummaries: [LexModelsV2ClientTypes.BotVersionSummary]? + /// A token that indicates whether there are more results to return in a response to the ListBotVersions operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBotAliases operation request to get the next page of results. + public var nextToken: Swift.String? public init( - message: Swift.String? = nil + botId: Swift.String? = nil, + botVersionSummaries: [LexModelsV2ClientTypes.BotVersionSummary]? = nil, + nextToken: Swift.String? = nil ) { - self.properties.message = message + self.botId = botId + self.botVersionSummaries = botVersionSummaries + self.nextToken = nextToken } } -struct InternalServerExceptionBody: Swift.Equatable { - let message: Swift.String? +struct ListBotVersionsOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let botVersionSummaries: [LexModelsV2ClientTypes.BotVersionSummary]? + let nextToken: Swift.String? } -extension InternalServerExceptionBody: Swift.Decodable { +extension ListBotVersionsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message + case botId + case botVersionSummaries + case nextToken } 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 botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotVersionSummary?].self, forKey: .botVersionSummaries) + var botVersionSummariesDecoded0:[LexModelsV2ClientTypes.BotVersionSummary]? = nil + if let botVersionSummariesContainer = botVersionSummariesContainer { + botVersionSummariesDecoded0 = [LexModelsV2ClientTypes.BotVersionSummary]() + for structure0 in botVersionSummariesContainer { + if let structure0 = structure0 { + botVersionSummariesDecoded0?.append(structure0) + } + } + } + botVersionSummaries = botVersionSummariesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -extension LexModelsV2ClientTypes.KendraConfiguration: Swift.Codable { +extension ListBotsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case kendraIndex - case queryFilterString - case queryFilterStringEnabled + case filters + case maxResults + case nextToken + case sortBy } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let kendraIndex = self.kendraIndex { - try encodeContainer.encode(kendraIndex, forKey: .kendraIndex) + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for botfilter0 in filters { + try filtersContainer.encode(botfilter0) + } } - if let queryFilterString = self.queryFilterString { - try encodeContainer.encode(queryFilterString, forKey: .queryFilterString) + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) } - if queryFilterStringEnabled != false { - try encodeContainer.encode(queryFilterStringEnabled, forKey: .queryFilterStringEnabled) + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy, forKey: .sortBy) } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let kendraIndexDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kendraIndex) - kendraIndex = kendraIndexDecoded - let queryFilterStringEnabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .queryFilterStringEnabled) ?? false - queryFilterStringEnabled = queryFilterStringEnabledDecoded - let queryFilterStringDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .queryFilterString) - queryFilterString = queryFilterStringDecoded +extension ListBotsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/bots" } } -extension LexModelsV2ClientTypes { - /// Provides configuration information for the AMAZON.KendraSearchIntent intent. When you use this intent, Amazon Lex searches the specified Amazon Kendra index and returns documents from the index that match the user's utterance. - public struct KendraConfiguration: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Amazon Kendra index that you want the AMAZON.KendraSearchIntent intent to search. The index must be in the same account and Region as the Amazon Lex bot. - /// This member is required. - public var kendraIndex: Swift.String? - /// A query filter that Amazon Lex sends to Amazon Kendra to filter the response from a query. The filter is in the format defined by Amazon Kendra. For more information, see [Filtering queries](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html). - public var queryFilterString: Swift.String? - /// Determines whether the AMAZON.KendraSearchIntent intent uses a custom query string to query the Amazon Kendra index. - public var queryFilterStringEnabled: Swift.Bool +public struct ListBotsInput: Swift.Equatable { + /// Provides the specification of a filter used to limit the bots in the response to only those that match the filter specification. You can only specify one filter and one string to filter on. + public var filters: [LexModelsV2ClientTypes.BotFilter]? + /// The maximum number of bots to return in each page of results. If there are fewer results than the maximum page size, only the actual number of results are returned. + public var maxResults: Swift.Int? + /// If the response from the ListBots operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListBots request to return the next page of results. For a complete set of results, call the ListBots operation until the nextToken returned in the response is null. + public var nextToken: Swift.String? + /// Specifies sorting parameters for the list of bots. You can specify that the list be sorted by bot name in ascending or descending order. + public var sortBy: LexModelsV2ClientTypes.BotSortBy? - public init( - kendraIndex: Swift.String? = nil, - queryFilterString: Swift.String? = nil, - queryFilterStringEnabled: Swift.Bool = false - ) - { - self.kendraIndex = kendraIndex - self.queryFilterString = queryFilterString - self.queryFilterStringEnabled = queryFilterStringEnabled - } + public init( + filters: [LexModelsV2ClientTypes.BotFilter]? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + sortBy: LexModelsV2ClientTypes.BotSortBy? = nil + ) + { + self.filters = filters + self.maxResults = maxResults + self.nextToken = nextToken + self.sortBy = sortBy } +} +struct ListBotsInputBody: Swift.Equatable { + let sortBy: LexModelsV2ClientTypes.BotSortBy? + let filters: [LexModelsV2ClientTypes.BotFilter]? + let maxResults: Swift.Int? + let nextToken: Swift.String? } -extension LexModelsV2ClientTypes.LambdaCodeHook: Swift.Codable { +extension ListBotsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case codeHookInterfaceVersion - case lambdaARN + case filters + case maxResults + case nextToken + case sortBy } - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let codeHookInterfaceVersion = self.codeHookInterfaceVersion { - try encodeContainer.encode(codeHookInterfaceVersion, forKey: .codeHookInterfaceVersion) + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.BotFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [LexModelsV2ClientTypes.BotFilter]() + for structure0 in filtersContainer { + if let structure0 = structure0 { + filtersDecoded0?.append(structure0) + } + } } - if let lambdaARN = self.lambdaARN { - try encodeContainer.encode(lambdaARN, forKey: .lambdaARN) + filters = filtersDecoded0 + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +public enum ListBotsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let lambdaARNDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lambdaARN) - lambdaARN = lambdaARNDecoded - let codeHookInterfaceVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .codeHookInterfaceVersion) - codeHookInterfaceVersion = codeHookInterfaceVersionDecoded +extension ListBotsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListBotsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botSummaries = output.botSummaries + self.nextToken = output.nextToken + } else { + self.botSummaries = nil + self.nextToken = nil + } } } -extension LexModelsV2ClientTypes { - /// Specifies a Lambda function that verifies requests to a bot or fulfills the user's request to a bot. - public struct LambdaCodeHook: Swift.Equatable { - /// The version of the request-response that you want Amazon Lex to use to invoke your Lambda function. - /// This member is required. - public var codeHookInterfaceVersion: Swift.String? - /// The Amazon Resource Name (ARN) of the Lambda function. - /// This member is required. - public var lambdaARN: Swift.String? +public struct ListBotsOutputResponse: Swift.Equatable { + /// Summary information for the bots that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more bots available, the nextToken field contains a token to the next page of results. + public var botSummaries: [LexModelsV2ClientTypes.BotSummary]? + /// A token that indicates whether there are more results to return in a response to the ListBots operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBots operation request to get the next page of results. + public var nextToken: Swift.String? - public init( - codeHookInterfaceVersion: Swift.String? = nil, - lambdaARN: Swift.String? = nil - ) - { - self.codeHookInterfaceVersion = codeHookInterfaceVersion - self.lambdaARN = lambdaARN - } + public init( + botSummaries: [LexModelsV2ClientTypes.BotSummary]? = nil, + nextToken: Swift.String? = nil + ) + { + self.botSummaries = botSummaries + self.nextToken = nextToken } +} +struct ListBotsOutputResponseBody: Swift.Equatable { + let botSummaries: [LexModelsV2ClientTypes.BotSummary]? + let nextToken: Swift.String? } -extension LexModelsV2ClientTypes.LexTranscriptFilter: Swift.Codable { +extension ListBotsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case dateRangeFilter - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let dateRangeFilter = self.dateRangeFilter { - try encodeContainer.encode(dateRangeFilter, forKey: .dateRangeFilter) - } + case botSummaries + case nextToken } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let dateRangeFilterDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.DateRangeFilter.self, forKey: .dateRangeFilter) - dateRangeFilter = dateRangeFilterDecoded - } -} - -extension LexModelsV2ClientTypes { - /// The object that contains transcript filter details that are associated with a bot recommendation. - public struct LexTranscriptFilter: Swift.Equatable { - /// The object that contains a date range filter that will be applied to the transcript. Specify this object if you want Amazon Lex to only read the files that are within the date range. - public var dateRangeFilter: LexModelsV2ClientTypes.DateRangeFilter? - - public init( - dateRangeFilter: LexModelsV2ClientTypes.DateRangeFilter? = nil - ) - { - self.dateRangeFilter = dateRangeFilter + let botSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotSummary?].self, forKey: .botSummaries) + var botSummariesDecoded0:[LexModelsV2ClientTypes.BotSummary]? = nil + if let botSummariesContainer = botSummariesContainer { + botSummariesDecoded0 = [LexModelsV2ClientTypes.BotSummary]() + for structure0 in botSummariesContainer { + if let structure0 = structure0 { + botSummariesDecoded0?.append(structure0) + } + } } + botSummaries = botSummariesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } - } -extension ListAggregatedUtterancesInput: Swift.Encodable { +extension ListBuiltInIntentsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case aggregationDuration - case botAliasId - case botVersion - case filters - case localeId case maxResults case nextToken case sortBy @@ -16373,24 +20792,6 @@ extension ListAggregatedUtterancesInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let aggregationDuration = self.aggregationDuration { - try encodeContainer.encode(aggregationDuration, forKey: .aggregationDuration) - } - if let botAliasId = self.botAliasId { - try encodeContainer.encode(botAliasId, forKey: .botAliasId) - } - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) - } - if let filters = filters { - var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) - for aggregatedutterancesfilter0 in filters { - try filtersContainer.encode(aggregatedutterancesfilter0) - } - } - if let localeId = self.localeId { - try encodeContainer.encode(localeId, forKey: .localeId) - } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } @@ -16403,55 +20804,33 @@ extension ListAggregatedUtterancesInput: Swift.Encodable { } } -extension ListAggregatedUtterancesInput: ClientRuntime.URLPathProvider { +extension ListBuiltInIntentsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let botId = botId else { + guard let localeId = localeId else { return nil } - return "/bots/\(botId.urlPercentEncoding())/aggregatedutterances" + return "/builtins/locales/\(localeId.urlPercentEncoding())/intents" } } -public struct ListAggregatedUtterancesInput: Swift.Equatable { - /// The time window for aggregating the utterance information. You can specify a time between one hour and two weeks. - /// This member is required. - public var aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? - /// The identifier of the bot alias associated with this request. If you specify the bot alias, you can't specify the bot version. - public var botAliasId: Swift.String? - /// The unique identifier of the bot associated with this request. - /// This member is required. - public var botId: Swift.String? - /// The identifier of the bot version associated with this request. If you specify the bot version, you can't specify the bot alias. - public var botVersion: Swift.String? - /// Provides the specification of a filter used to limit the utterances in the response to only those that match the filter specification. You can only specify one filter and one string to filter on. - public var filters: [LexModelsV2ClientTypes.AggregatedUtterancesFilter]? - /// The identifier of the language and locale where the utterances were collected. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). +public struct ListBuiltInIntentsInput: Swift.Equatable { + /// The identifier of the language and locale of the intents to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). /// This member is required. public var localeId: Swift.String? - /// The maximum number of utterances to return in each page of results. If there are fewer results than the maximum page size, only the actual number of results are returned. If you don't specify the maxResults parameter, 1,000 results are returned. + /// The maximum number of built-in intents to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListAggregatedUtterances operation contains more results that specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// If the response from the ListBuiltInIntents operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. public var nextToken: Swift.String? - /// Specifies sorting parameters for the list of utterances. You can sort by the hit count, the missed count, or the number of distinct sessions the utterance appeared in. - public var sortBy: LexModelsV2ClientTypes.AggregatedUtterancesSortBy? + /// Specifies sorting parameters for the list of built-in intents. You can specify that the list be sorted by the built-in intent signature in either ascending or descending order. + public var sortBy: LexModelsV2ClientTypes.BuiltInIntentSortBy? public init( - aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? = nil, - botAliasId: Swift.String? = nil, - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - filters: [LexModelsV2ClientTypes.AggregatedUtterancesFilter]? = nil, localeId: Swift.String? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.AggregatedUtterancesSortBy? = nil + sortBy: LexModelsV2ClientTypes.BuiltInIntentSortBy? = nil ) { - self.aggregationDuration = aggregationDuration - self.botAliasId = botAliasId - self.botId = botId - self.botVersion = botVersion - self.filters = filters self.localeId = localeId self.maxResults = maxResults self.nextToken = nextToken @@ -16459,24 +20838,14 @@ public struct ListAggregatedUtterancesInput: Swift.Equatable { } } -struct ListAggregatedUtterancesInputBody: Swift.Equatable { - let botAliasId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? - let sortBy: LexModelsV2ClientTypes.AggregatedUtterancesSortBy? - let filters: [LexModelsV2ClientTypes.AggregatedUtterancesFilter]? +struct ListBuiltInIntentsInputBody: Swift.Equatable { + let sortBy: LexModelsV2ClientTypes.BuiltInIntentSortBy? let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListAggregatedUtterancesInputBody: Swift.Decodable { +extension ListBuiltInIntentsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case aggregationDuration - case botAliasId - case botVersion - case filters - case localeId case maxResults case nextToken case sortBy @@ -16484,27 +20853,8 @@ extension ListAggregatedUtterancesInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) - botAliasId = botAliasIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let aggregationDurationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.UtteranceAggregationDuration.self, forKey: .aggregationDuration) - aggregationDuration = aggregationDurationDecoded - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AggregatedUtterancesSortBy.self, forKey: .sortBy) + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BuiltInIntentSortBy.self, forKey: .sortBy) sortBy = sortByDecoded - let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AggregatedUtterancesFilter?].self, forKey: .filters) - var filtersDecoded0:[LexModelsV2ClientTypes.AggregatedUtterancesFilter]? = nil - if let filtersContainer = filtersContainer { - filtersDecoded0 = [LexModelsV2ClientTypes.AggregatedUtterancesFilter]() - for structure0 in filtersContainer { - if let structure0 = structure0 { - filtersDecoded0?.append(structure0) - } - } - } - filters = filtersDecoded0 let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) @@ -16512,13 +20862,13 @@ extension ListAggregatedUtterancesInputBody: Swift.Decodable { } } -public enum ListAggregatedUtterancesOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListBuiltInIntentsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -16526,155 +20876,80 @@ public enum ListAggregatedUtterancesOutputError: ClientRuntime.HttpResponseError } } -extension ListAggregatedUtterancesOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListBuiltInIntentsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListAggregatedUtterancesOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.aggregatedUtterancesSummaries = output.aggregatedUtterancesSummaries - self.aggregationDuration = output.aggregationDuration - self.aggregationLastRefreshedDateTime = output.aggregationLastRefreshedDateTime - self.aggregationWindowEndTime = output.aggregationWindowEndTime - self.aggregationWindowStartTime = output.aggregationWindowStartTime - self.botAliasId = output.botAliasId - self.botId = output.botId - self.botVersion = output.botVersion + let output: ListBuiltInIntentsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.builtInIntentSummaries = output.builtInIntentSummaries self.localeId = output.localeId self.nextToken = output.nextToken } else { - self.aggregatedUtterancesSummaries = nil - self.aggregationDuration = nil - self.aggregationLastRefreshedDateTime = nil - self.aggregationWindowEndTime = nil - self.aggregationWindowStartTime = nil - self.botAliasId = nil - self.botId = nil - self.botVersion = nil + self.builtInIntentSummaries = nil self.localeId = nil self.nextToken = nil } } } -public struct ListAggregatedUtterancesOutputResponse: Swift.Equatable { - /// Summaries of the aggregated utterance data. Each response contains information about the number of times that the utterance was seen during the time period, whether it was detected or missed, and when it was seen during the time period. - public var aggregatedUtterancesSummaries: [LexModelsV2ClientTypes.AggregatedUtterancesSummary]? - /// The time period used to aggregate the utterance data. - public var aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? - /// The last date and time that the aggregated data was collected. The time period depends on the length of the aggregation window. - /// - /// * Hours - for 1 hour time window, every half hour; otherwise every hour. - /// - /// * Days - every 6 hours - /// - /// * Weeks - for a one week time window, every 12 hours; otherwise, every day - public var aggregationLastRefreshedDateTime: ClientRuntime.Date? - /// The date and time that the aggregation window ends. Only data collected between the start time and the end time are returned in the results. - public var aggregationWindowEndTime: ClientRuntime.Date? - /// The date and time that the aggregation window begins. Only data collected after this time is returned in the results. - public var aggregationWindowStartTime: ClientRuntime.Date? - /// The identifier of the bot alias that contains the utterances. If you specified the bot version, the bot alias ID isn't returned. - public var botAliasId: Swift.String? - /// The identifier of the bot that contains the utterances. - public var botId: Swift.String? - /// The identifier of the bot version that contains the utterances. If you specified the bot alias, the bot version isn't returned. - public var botVersion: Swift.String? - /// The identifier of the language and locale that the utterances are in. +public struct ListBuiltInIntentsOutputResponse: Swift.Equatable { + /// Summary information for the built-in intents that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more intents available, the nextToken field contains a token to get the next page of results. + public var builtInIntentSummaries: [LexModelsV2ClientTypes.BuiltInIntentSummary]? + /// The language and locale of the intents in the list. public var localeId: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListAggregatedUtterances operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListAggregatedUtterances operation request to get the next page of results. + /// A token that indicates whether there are more results to return in a response to the ListBuiltInIntents operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBotAliases operation request to get the next page of results. public var nextToken: Swift.String? public init( - aggregatedUtterancesSummaries: [LexModelsV2ClientTypes.AggregatedUtterancesSummary]? = nil, - aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? = nil, - aggregationLastRefreshedDateTime: ClientRuntime.Date? = nil, - aggregationWindowEndTime: ClientRuntime.Date? = nil, - aggregationWindowStartTime: ClientRuntime.Date? = nil, - botAliasId: Swift.String? = nil, - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, + builtInIntentSummaries: [LexModelsV2ClientTypes.BuiltInIntentSummary]? = nil, localeId: Swift.String? = nil, nextToken: Swift.String? = nil ) { - self.aggregatedUtterancesSummaries = aggregatedUtterancesSummaries - self.aggregationDuration = aggregationDuration - self.aggregationLastRefreshedDateTime = aggregationLastRefreshedDateTime - self.aggregationWindowEndTime = aggregationWindowEndTime - self.aggregationWindowStartTime = aggregationWindowStartTime - self.botAliasId = botAliasId - self.botId = botId - self.botVersion = botVersion + self.builtInIntentSummaries = builtInIntentSummaries self.localeId = localeId self.nextToken = nextToken } } -struct ListAggregatedUtterancesOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botAliasId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let aggregationDuration: LexModelsV2ClientTypes.UtteranceAggregationDuration? - let aggregationWindowStartTime: ClientRuntime.Date? - let aggregationWindowEndTime: ClientRuntime.Date? - let aggregationLastRefreshedDateTime: ClientRuntime.Date? - let aggregatedUtterancesSummaries: [LexModelsV2ClientTypes.AggregatedUtterancesSummary]? +struct ListBuiltInIntentsOutputResponseBody: Swift.Equatable { + let builtInIntentSummaries: [LexModelsV2ClientTypes.BuiltInIntentSummary]? let nextToken: Swift.String? + let localeId: Swift.String? } -extension ListAggregatedUtterancesOutputResponseBody: Swift.Decodable { +extension ListBuiltInIntentsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case aggregatedUtterancesSummaries - case aggregationDuration - case aggregationLastRefreshedDateTime - case aggregationWindowEndTime - case aggregationWindowStartTime - case botAliasId - case botId - case botVersion + case builtInIntentSummaries case localeId case nextToken } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) - botAliasId = botAliasIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let aggregationDurationDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.UtteranceAggregationDuration.self, forKey: .aggregationDuration) - aggregationDuration = aggregationDurationDecoded - let aggregationWindowStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .aggregationWindowStartTime) - aggregationWindowStartTime = aggregationWindowStartTimeDecoded - let aggregationWindowEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .aggregationWindowEndTime) - aggregationWindowEndTime = aggregationWindowEndTimeDecoded - let aggregationLastRefreshedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .aggregationLastRefreshedDateTime) - aggregationLastRefreshedDateTime = aggregationLastRefreshedDateTimeDecoded - let aggregatedUtterancesSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AggregatedUtterancesSummary?].self, forKey: .aggregatedUtterancesSummaries) - var aggregatedUtterancesSummariesDecoded0:[LexModelsV2ClientTypes.AggregatedUtterancesSummary]? = nil - if let aggregatedUtterancesSummariesContainer = aggregatedUtterancesSummariesContainer { - aggregatedUtterancesSummariesDecoded0 = [LexModelsV2ClientTypes.AggregatedUtterancesSummary]() - for structure0 in aggregatedUtterancesSummariesContainer { + let builtInIntentSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BuiltInIntentSummary?].self, forKey: .builtInIntentSummaries) + var builtInIntentSummariesDecoded0:[LexModelsV2ClientTypes.BuiltInIntentSummary]? = nil + if let builtInIntentSummariesContainer = builtInIntentSummariesContainer { + builtInIntentSummariesDecoded0 = [LexModelsV2ClientTypes.BuiltInIntentSummary]() + for structure0 in builtInIntentSummariesContainer { if let structure0 = structure0 { - aggregatedUtterancesSummariesDecoded0?.append(structure0) + builtInIntentSummariesDecoded0?.append(structure0) } } } - aggregatedUtterancesSummaries = aggregatedUtterancesSummariesDecoded0 + builtInIntentSummaries = builtInIntentSummariesDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded } } -extension ListBotAliasesInput: Swift.Encodable { +extension ListBuiltInSlotTypesInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case maxResults case nextToken + case sortBy } public func encode(to encoder: Swift.Encoder) throws { @@ -16685,52 +20960,63 @@ extension ListBotAliasesInput: Swift.Encodable { if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy, forKey: .sortBy) + } } } -extension ListBotAliasesInput: ClientRuntime.URLPathProvider { +extension ListBuiltInSlotTypesInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let botId = botId else { + guard let localeId = localeId else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botaliases" + return "/builtins/locales/\(localeId.urlPercentEncoding())/slottypes" } } -public struct ListBotAliasesInput: Swift.Equatable { - /// The identifier of the bot to list aliases for. +public struct ListBuiltInSlotTypesInput: Swift.Equatable { + /// The identifier of the language and locale of the slot types to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). /// This member is required. - public var botId: Swift.String? - /// The maximum number of aliases to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + public var localeId: Swift.String? + /// The maximum number of built-in slot types to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListBotAliases operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// If the response from the ListBuiltInSlotTypes operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. public var nextToken: Swift.String? + /// Determines the sort order for the response from the ListBuiltInSlotTypes operation. You can choose to sort by the slot type signature in either ascending or descending order. + public var sortBy: LexModelsV2ClientTypes.BuiltInSlotTypeSortBy? public init( - botId: Swift.String? = nil, + localeId: Swift.String? = nil, maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil + nextToken: Swift.String? = nil, + sortBy: LexModelsV2ClientTypes.BuiltInSlotTypeSortBy? = nil ) { - self.botId = botId + self.localeId = localeId self.maxResults = maxResults self.nextToken = nextToken + self.sortBy = sortBy } } -struct ListBotAliasesInputBody: Swift.Equatable { +struct ListBuiltInSlotTypesInputBody: Swift.Equatable { + let sortBy: LexModelsV2ClientTypes.BuiltInSlotTypeSortBy? let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListBotAliasesInputBody: Swift.Decodable { +extension ListBuiltInSlotTypesInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case maxResults case nextToken + case sortBy } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BuiltInSlotTypeSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) @@ -16738,7 +21024,7 @@ extension ListBotAliasesInputBody: Swift.Decodable { } } -public enum ListBotAliasesOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListBuiltInSlotTypesOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -16752,104 +21038,93 @@ public enum ListBotAliasesOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListBotAliasesOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListBuiltInSlotTypesOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListBotAliasesOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botAliasSummaries = output.botAliasSummaries - self.botId = output.botId + let output: ListBuiltInSlotTypesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.builtInSlotTypeSummaries = output.builtInSlotTypeSummaries + self.localeId = output.localeId self.nextToken = output.nextToken } else { - self.botAliasSummaries = nil - self.botId = nil + self.builtInSlotTypeSummaries = nil + self.localeId = nil self.nextToken = nil } } } -public struct ListBotAliasesOutputResponse: Swift.Equatable { - /// Summary information for the bot aliases that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more aliases available, the nextToken field contains a token to get the next page of results. - public var botAliasSummaries: [LexModelsV2ClientTypes.BotAliasSummary]? - /// The identifier of the bot associated with the aliases. - public var botId: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListBotAliases operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBotAliases operation request to get the next page of results. +public struct ListBuiltInSlotTypesOutputResponse: Swift.Equatable { + /// Summary information for the built-in slot types that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more slot types available, the nextToken field contains a token to get the next page of results. + public var builtInSlotTypeSummaries: [LexModelsV2ClientTypes.BuiltInSlotTypeSummary]? + /// The language and locale of the slot types in the list. + public var localeId: Swift.String? + /// A token that indicates whether there are more results to return in a response to the ListBuiltInSlotTypes operation. If the nextToken field is present, you send the contents as the nextToken parameter of a LIstBuiltInSlotTypes operation request to get the next page of results. public var nextToken: Swift.String? public init( - botAliasSummaries: [LexModelsV2ClientTypes.BotAliasSummary]? = nil, - botId: Swift.String? = nil, + builtInSlotTypeSummaries: [LexModelsV2ClientTypes.BuiltInSlotTypeSummary]? = nil, + localeId: Swift.String? = nil, nextToken: Swift.String? = nil ) { - self.botAliasSummaries = botAliasSummaries - self.botId = botId + self.builtInSlotTypeSummaries = builtInSlotTypeSummaries + self.localeId = localeId self.nextToken = nextToken } } -struct ListBotAliasesOutputResponseBody: Swift.Equatable { - let botAliasSummaries: [LexModelsV2ClientTypes.BotAliasSummary]? +struct ListBuiltInSlotTypesOutputResponseBody: Swift.Equatable { + let builtInSlotTypeSummaries: [LexModelsV2ClientTypes.BuiltInSlotTypeSummary]? let nextToken: Swift.String? - let botId: Swift.String? + let localeId: Swift.String? } -extension ListBotAliasesOutputResponseBody: Swift.Decodable { +extension ListBuiltInSlotTypesOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botAliasSummaries - case botId + case builtInSlotTypeSummaries + case localeId case nextToken } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botAliasSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotAliasSummary?].self, forKey: .botAliasSummaries) - var botAliasSummariesDecoded0:[LexModelsV2ClientTypes.BotAliasSummary]? = nil - if let botAliasSummariesContainer = botAliasSummariesContainer { - botAliasSummariesDecoded0 = [LexModelsV2ClientTypes.BotAliasSummary]() - for structure0 in botAliasSummariesContainer { + let builtInSlotTypeSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BuiltInSlotTypeSummary?].self, forKey: .builtInSlotTypeSummaries) + var builtInSlotTypeSummariesDecoded0:[LexModelsV2ClientTypes.BuiltInSlotTypeSummary]? = nil + if let builtInSlotTypeSummariesContainer = builtInSlotTypeSummariesContainer { + builtInSlotTypeSummariesDecoded0 = [LexModelsV2ClientTypes.BuiltInSlotTypeSummary]() + for structure0 in builtInSlotTypeSummariesContainer { if let structure0 = structure0 { - botAliasSummariesDecoded0?.append(structure0) + builtInSlotTypeSummariesDecoded0?.append(structure0) } } } - botAliasSummaries = botAliasSummariesDecoded0 + builtInSlotTypeSummaries = builtInSlotTypeSummariesDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded } } -extension ListBotLocalesInput: Swift.Encodable { +extension ListCustomVocabularyItemsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case filters case maxResults case nextToken - case sortBy } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let filters = filters { - var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) - for botlocalefilter0 in filters { - try filtersContainer.encode(botlocalefilter0) - } - } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } - if let sortBy = self.sortBy { - try encodeContainer.encode(sortBy, forKey: .sortBy) - } } } -extension ListBotLocalesInput: ClientRuntime.URLPathProvider { +extension ListCustomVocabularyItemsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil @@ -16857,74 +21132,57 @@ extension ListBotLocalesInput: ClientRuntime.URLPathProvider { guard let botVersion = botVersion else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales" + guard let localeId = localeId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary/DEFAULT/list" } } -public struct ListBotLocalesInput: Swift.Equatable { - /// The identifier of the bot to list locales for. +public struct ListCustomVocabularyItemsInput: Swift.Equatable { + /// The identifier of the version of the bot associated with this custom vocabulary. /// This member is required. public var botId: Swift.String? - /// The version of the bot to list locales for. + /// The bot version of the bot to the list custom vocabulary request. /// This member is required. public var botVersion: Swift.String? - /// Provides the specification for a filter used to limit the response to only those locales that match the filter specification. You can only specify one filter and one value to filter on. - public var filters: [LexModelsV2ClientTypes.BotLocaleFilter]? - /// The maximum number of aliases to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see Supported languages (https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// This member is required. + public var localeId: Swift.String? + /// The maximum number of items returned by the list operation. public var maxResults: Swift.Int? - /// If the response from the ListBotLocales operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token as the nextToken parameter to return the next page of results. + /// The nextToken identifier to the list custom vocabulary request. public var nextToken: Swift.String? - /// Specifies sorting parameters for the list of locales. You can sort by locale name in ascending or descending order. - public var sortBy: LexModelsV2ClientTypes.BotLocaleSortBy? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, - filters: [LexModelsV2ClientTypes.BotLocaleFilter]? = nil, + localeId: Swift.String? = nil, maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.BotLocaleSortBy? = nil + nextToken: Swift.String? = nil ) { self.botId = botId self.botVersion = botVersion - self.filters = filters + self.localeId = localeId self.maxResults = maxResults self.nextToken = nextToken - self.sortBy = sortBy } } -struct ListBotLocalesInputBody: Swift.Equatable { - let sortBy: LexModelsV2ClientTypes.BotLocaleSortBy? - let filters: [LexModelsV2ClientTypes.BotLocaleFilter]? +struct ListCustomVocabularyItemsInputBody: Swift.Equatable { let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListBotLocalesInputBody: Swift.Decodable { +extension ListCustomVocabularyItemsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case filters case maxResults case nextToken - case sortBy } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotLocaleSortBy.self, forKey: .sortBy) - sortBy = sortByDecoded - let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotLocaleFilter?].self, forKey: .filters) - var filtersDecoded0:[LexModelsV2ClientTypes.BotLocaleFilter]? = nil - if let filtersContainer = filtersContainer { - filtersDecoded0 = [LexModelsV2ClientTypes.BotLocaleFilter]() - for structure0 in filtersContainer { - if let structure0 = structure0 { - filtersDecoded0?.append(structure0) - } - } - } - filters = filtersDecoded0 let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) @@ -16932,12 +21190,13 @@ extension ListBotLocalesInputBody: Swift.Decodable { } } -public enum ListBotLocalesOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListCustomVocabularyItemsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -16946,60 +21205,68 @@ public enum ListBotLocalesOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListBotLocalesOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListCustomVocabularyItemsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListBotLocalesOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListCustomVocabularyItemsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId - self.botLocaleSummaries = output.botLocaleSummaries self.botVersion = output.botVersion + self.customVocabularyItems = output.customVocabularyItems + self.localeId = output.localeId self.nextToken = output.nextToken } else { self.botId = nil - self.botLocaleSummaries = nil self.botVersion = nil + self.customVocabularyItems = nil + self.localeId = nil self.nextToken = nil } } } -public struct ListBotLocalesOutputResponse: Swift.Equatable { - /// The identifier of the bot to list locales for. +public struct ListCustomVocabularyItemsOutputResponse: Swift.Equatable { + /// The identifier of the bot associated with this custom vocabulary. public var botId: Swift.String? - /// Summary information for the locales that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more locales available, the nextToken field contains a token to get the next page of results. - public var botLocaleSummaries: [LexModelsV2ClientTypes.BotLocaleSummary]? - /// The version of the bot. + /// The identifier of the version of the bot associated with this custom vocabulary. public var botVersion: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListBotLocales operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBotLocales operation request to get the next page of results. + /// The custom vocabulary items from the list custom vocabulary response. + public var customVocabularyItems: [LexModelsV2ClientTypes.CustomVocabularyItem]? + /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + public var localeId: Swift.String? + /// The nextToken identifier to the list custom vocabulary response. public var nextToken: Swift.String? public init( botId: Swift.String? = nil, - botLocaleSummaries: [LexModelsV2ClientTypes.BotLocaleSummary]? = nil, botVersion: Swift.String? = nil, + customVocabularyItems: [LexModelsV2ClientTypes.CustomVocabularyItem]? = nil, + localeId: Swift.String? = nil, nextToken: Swift.String? = nil ) { self.botId = botId - self.botLocaleSummaries = botLocaleSummaries self.botVersion = botVersion + self.customVocabularyItems = customVocabularyItems + self.localeId = localeId self.nextToken = nextToken } } -struct ListBotLocalesOutputResponseBody: Swift.Equatable { +struct ListCustomVocabularyItemsOutputResponseBody: Swift.Equatable { let botId: Swift.String? let botVersion: Swift.String? + let localeId: Swift.String? + let customVocabularyItems: [LexModelsV2ClientTypes.CustomVocabularyItem]? let nextToken: Swift.String? - let botLocaleSummaries: [LexModelsV2ClientTypes.BotLocaleSummary]? } -extension ListBotLocalesOutputResponseBody: Swift.Decodable { +extension ListCustomVocabularyItemsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId - case botLocaleSummaries case botVersion + case customVocabularyItems + case localeId case nextToken } @@ -17009,112 +21276,161 @@ extension ListBotLocalesOutputResponseBody: Swift.Decodable { botId = botIdDecoded let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) botVersion = botVersionDecoded - let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) - nextToken = nextTokenDecoded - let botLocaleSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotLocaleSummary?].self, forKey: .botLocaleSummaries) - var botLocaleSummariesDecoded0:[LexModelsV2ClientTypes.BotLocaleSummary]? = nil - if let botLocaleSummariesContainer = botLocaleSummariesContainer { - botLocaleSummariesDecoded0 = [LexModelsV2ClientTypes.BotLocaleSummary]() - for structure0 in botLocaleSummariesContainer { + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let customVocabularyItemsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyItem?].self, forKey: .customVocabularyItems) + var customVocabularyItemsDecoded0:[LexModelsV2ClientTypes.CustomVocabularyItem]? = nil + if let customVocabularyItemsContainer = customVocabularyItemsContainer { + customVocabularyItemsDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyItem]() + for structure0 in customVocabularyItemsContainer { if let structure0 = structure0 { - botLocaleSummariesDecoded0?.append(structure0) + customVocabularyItemsDecoded0?.append(structure0) } } } - botLocaleSummaries = botLocaleSummariesDecoded0 + customVocabularyItems = customVocabularyItemsDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -extension ListBotRecommendationsInput: Swift.Encodable { +extension ListExportsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case botId + case botVersion + case filters + case localeId case maxResults case nextToken + case sortBy } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botId = self.botId { + try encodeContainer.encode(botId, forKey: .botId) + } + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) + } + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for exportfilter0 in filters { + try filtersContainer.encode(exportfilter0) + } + } + if let localeId = self.localeId { + try encodeContainer.encode(localeId, forKey: .localeId) + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy, forKey: .sortBy) + } } } -extension ListBotRecommendationsInput: ClientRuntime.URLPathProvider { +extension ListExportsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil - } - guard let localeId = localeId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/botrecommendations" + return "/exports" } } -public struct ListBotRecommendationsInput: Swift.Equatable { - /// The unique identifier of the bot that contains the bot recommendation list. - /// This member is required. +public struct ListExportsInput: Swift.Equatable { + /// The unique identifier that Amazon Lex assigned to the bot. public var botId: Swift.String? - /// The version of the bot that contains the bot recommendation list. - /// This member is required. + /// The version of the bot to list exports for. public var botVersion: Swift.String? - /// The identifier of the language and locale of the bot recommendation list. - /// This member is required. + /// Provides the specification of a filter used to limit the exports in the response to only those that match the filter specification. You can only specify one filter and one string to filter on. + public var filters: [LexModelsV2ClientTypes.ExportFilter]? + /// Specifies the resources that should be exported. If you don't specify a resource type in the filters parameter, both bot locales and custom vocabularies are exported. public var localeId: Swift.String? - /// The maximum number of bot recommendations to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + /// The maximum number of exports to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListBotRecommendation operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// If the response from the ListExports operation contains more results that specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListExports request to return the next page of results. For a complete set of results, call the ListExports operation until the nextToken returned in the response is null. public var nextToken: Swift.String? + /// Determines the field that the list of exports is sorted by. You can sort by the LastUpdatedDateTime field in ascending or descending order. + public var sortBy: LexModelsV2ClientTypes.ExportSortBy? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, + filters: [LexModelsV2ClientTypes.ExportFilter]? = nil, localeId: Swift.String? = nil, maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil + nextToken: Swift.String? = nil, + sortBy: LexModelsV2ClientTypes.ExportSortBy? = nil ) { self.botId = botId self.botVersion = botVersion + self.filters = filters self.localeId = localeId self.maxResults = maxResults self.nextToken = nextToken + self.sortBy = sortBy } } -struct ListBotRecommendationsInputBody: Swift.Equatable { +struct ListExportsInputBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let sortBy: LexModelsV2ClientTypes.ExportSortBy? + let filters: [LexModelsV2ClientTypes.ExportFilter]? let maxResults: Swift.Int? let nextToken: Swift.String? + let localeId: Swift.String? } -extension ListBotRecommendationsInputBody: Swift.Decodable { +extension ListExportsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case botId + case botVersion + case filters + case localeId case maxResults case nextToken + case sortBy } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ExportFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.ExportFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [LexModelsV2ClientTypes.ExportFilter]() + for structure0 in filtersContainer { + if let structure0 = structure0 { + filtersDecoded0?.append(structure0) + } + } + } + filters = filtersDecoded0 let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded } } -public enum ListBotRecommendationsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListExportsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -17122,67 +21438,67 @@ public enum ListBotRecommendationsOutputError: ClientRuntime.HttpResponseErrorBi } } -extension ListBotRecommendationsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListExportsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListBotRecommendationsOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListExportsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId - self.botRecommendationSummaries = output.botRecommendationSummaries self.botVersion = output.botVersion + self.exportSummaries = output.exportSummaries self.localeId = output.localeId self.nextToken = output.nextToken } else { self.botId = nil - self.botRecommendationSummaries = nil self.botVersion = nil + self.exportSummaries = nil self.localeId = nil self.nextToken = nil } } } -public struct ListBotRecommendationsOutputResponse: Swift.Equatable { - /// The unique identifier of the bot that contains the bot recommendation list. +public struct ListExportsOutputResponse: Swift.Equatable { + /// The unique identifier assigned to the bot by Amazon Lex. public var botId: Swift.String? - /// Summary information for the bot recommendations that meet the filter specified in this request. The length of the list is specified in the maxResults parameter of the request. If there are more bot recommendations available, the nextToken field contains a token to get the next page of results. - public var botRecommendationSummaries: [LexModelsV2ClientTypes.BotRecommendationSummary]? - /// The version of the bot that contains the bot recommendation list. + /// The version of the bot that was exported. public var botVersion: Swift.String? - /// The identifier of the language and locale of the bot recommendation list. + /// Summary information for the exports that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter. If there are more exports available, the nextToken field contains a token to get the next page of results. + public var exportSummaries: [LexModelsV2ClientTypes.ExportSummary]? + /// The locale specified in the request. public var localeId: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListBotRecommendations operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBotRecommendations operation request to get the next page of results. + /// A token that indicates whether there are more results to return in a response to the ListExports operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListExports operation request to get the next page of results. public var nextToken: Swift.String? public init( botId: Swift.String? = nil, - botRecommendationSummaries: [LexModelsV2ClientTypes.BotRecommendationSummary]? = nil, botVersion: Swift.String? = nil, + exportSummaries: [LexModelsV2ClientTypes.ExportSummary]? = nil, localeId: Swift.String? = nil, nextToken: Swift.String? = nil ) { self.botId = botId - self.botRecommendationSummaries = botRecommendationSummaries self.botVersion = botVersion + self.exportSummaries = exportSummaries self.localeId = localeId self.nextToken = nextToken } } -struct ListBotRecommendationsOutputResponseBody: Swift.Equatable { +struct ListExportsOutputResponseBody: Swift.Equatable { let botId: Swift.String? let botVersion: Swift.String? - let localeId: Swift.String? - let botRecommendationSummaries: [LexModelsV2ClientTypes.BotRecommendationSummary]? + let exportSummaries: [LexModelsV2ClientTypes.ExportSummary]? let nextToken: Swift.String? + let localeId: Swift.String? } -extension ListBotRecommendationsOutputResponseBody: Swift.Decodable { +extension ListExportsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId - case botRecommendationSummaries case botVersion + case exportSummaries case localeId case nextToken } @@ -17193,26 +21509,30 @@ extension ListBotRecommendationsOutputResponseBody: Swift.Decodable { botId = botIdDecoded let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let botRecommendationSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotRecommendationSummary?].self, forKey: .botRecommendationSummaries) - var botRecommendationSummariesDecoded0:[LexModelsV2ClientTypes.BotRecommendationSummary]? = nil - if let botRecommendationSummariesContainer = botRecommendationSummariesContainer { - botRecommendationSummariesDecoded0 = [LexModelsV2ClientTypes.BotRecommendationSummary]() - for structure0 in botRecommendationSummariesContainer { + let exportSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ExportSummary?].self, forKey: .exportSummaries) + var exportSummariesDecoded0:[LexModelsV2ClientTypes.ExportSummary]? = nil + if let exportSummariesContainer = exportSummariesContainer { + exportSummariesDecoded0 = [LexModelsV2ClientTypes.ExportSummary]() + for structure0 in exportSummariesContainer { if let structure0 = structure0 { - botRecommendationSummariesDecoded0?.append(structure0) + exportSummariesDecoded0?.append(structure0) } } } - botRecommendationSummaries = botRecommendationSummariesDecoded0 + exportSummaries = exportSummariesDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded } } -extension ListBotVersionsInput: Swift.Encodable { +extension ListImportsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case botId + case botVersion + case filters + case localeId case maxResults case nextToken case sortBy @@ -17220,6 +21540,21 @@ extension ListBotVersionsInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botId = self.botId { + try encodeContainer.encode(botId, forKey: .botId) + } + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) + } + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for importfilter0 in filters { + try filtersContainer.encode(importfilter0) + } + } + if let localeId = self.localeId { + try encodeContainer.encode(localeId, forKey: .localeId) + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } @@ -17232,48 +21567,64 @@ extension ListBotVersionsInput: Swift.Encodable { } } -extension ListBotVersionsInput: ClientRuntime.URLPathProvider { +extension ListImportsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions" + return "/imports" } } -public struct ListBotVersionsInput: Swift.Equatable { - /// The identifier of the bot to list versions for. - /// This member is required. +public struct ListImportsInput: Swift.Equatable { + /// The unique identifier that Amazon Lex assigned to the bot. public var botId: Swift.String? - /// The maximum number of versions to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + /// The version of the bot to list imports for. + public var botVersion: Swift.String? + /// Provides the specification of a filter used to limit the bots in the response to only those that match the filter specification. You can only specify one filter and one string to filter on. + public var filters: [LexModelsV2ClientTypes.ImportFilter]? + /// Specifies the locale that should be present in the list. If you don't specify a resource type in the filters parameter, the list contains both bot locales and custom vocabularies. + public var localeId: Swift.String? + /// The maximum number of imports to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response to the ListBotVersion operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// If the response from the ListImports operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListImports request to return the next page of results. For a complete set of results, call the ListImports operation until the nextToken returned in the response is null. public var nextToken: Swift.String? - /// Specifies sorting parameters for the list of versions. You can specify that the list be sorted by version name in either ascending or descending order. - public var sortBy: LexModelsV2ClientTypes.BotVersionSortBy? + /// Determines the field that the list of imports is sorted by. You can sort by the LastUpdatedDateTime field in ascending or descending order. + public var sortBy: LexModelsV2ClientTypes.ImportSortBy? public init( botId: Swift.String? = nil, + botVersion: Swift.String? = nil, + filters: [LexModelsV2ClientTypes.ImportFilter]? = nil, + localeId: Swift.String? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.BotVersionSortBy? = nil + sortBy: LexModelsV2ClientTypes.ImportSortBy? = nil ) { self.botId = botId + self.botVersion = botVersion + self.filters = filters + self.localeId = localeId self.maxResults = maxResults self.nextToken = nextToken self.sortBy = sortBy } } -struct ListBotVersionsInputBody: Swift.Equatable { - let sortBy: LexModelsV2ClientTypes.BotVersionSortBy? +struct ListImportsInputBody: Swift.Equatable { + let botId: Swift.String? + let botVersion: Swift.String? + let sortBy: LexModelsV2ClientTypes.ImportSortBy? + let filters: [LexModelsV2ClientTypes.ImportFilter]? let maxResults: Swift.Int? let nextToken: Swift.String? + let localeId: Swift.String? } -extension ListBotVersionsInputBody: Swift.Decodable { +extension ListImportsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case botId + case botVersion + case filters + case localeId case maxResults case nextToken case sortBy @@ -17281,22 +21632,38 @@ extension ListBotVersionsInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotVersionSortBy.self, forKey: .sortBy) + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportSortBy.self, forKey: .sortBy) sortBy = sortByDecoded + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ImportFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.ImportFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [LexModelsV2ClientTypes.ImportFilter]() + for structure0 in filtersContainer { + if let structure0 = structure0 { + filtersDecoded0?.append(structure0) + } + } + } + filters = filtersDecoded0 let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded } } -public enum ListBotVersionsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListImportsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -17304,156 +21671,275 @@ public enum ListBotVersionsOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListBotVersionsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListImportsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListBotVersionsOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListImportsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId - self.botVersionSummaries = output.botVersionSummaries + self.botVersion = output.botVersion + self.importSummaries = output.importSummaries + self.localeId = output.localeId self.nextToken = output.nextToken } else { self.botId = nil - self.botVersionSummaries = nil + self.botVersion = nil + self.importSummaries = nil + self.localeId = nil self.nextToken = nil } } } -public struct ListBotVersionsOutputResponse: Swift.Equatable { - /// The identifier of the bot to list versions for. +public struct ListImportsOutputResponse: Swift.Equatable { + /// The unique identifier assigned by Amazon Lex to the bot. public var botId: Swift.String? - /// Summary information for the bot versions that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more versions available, the nextToken field contains a token to get the next page of results. - public var botVersionSummaries: [LexModelsV2ClientTypes.BotVersionSummary]? - /// A token that indicates whether there are more results to return in a response to the ListBotVersions operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBotAliases operation request to get the next page of results. + /// The version of the bot that was imported. It will always be DRAFT. + public var botVersion: Swift.String? + /// Summary information for the imports that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter. If there are more imports available, the nextToken field contains a token to get the next page of results. + public var importSummaries: [LexModelsV2ClientTypes.ImportSummary]? + /// The locale specified in the request. + public var localeId: Swift.String? + /// A token that indicates whether there are more results to return in a response to the ListImports operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListImports operation request to get the next page of results. public var nextToken: Swift.String? public init( botId: Swift.String? = nil, - botVersionSummaries: [LexModelsV2ClientTypes.BotVersionSummary]? = nil, + botVersion: Swift.String? = nil, + importSummaries: [LexModelsV2ClientTypes.ImportSummary]? = nil, + localeId: Swift.String? = nil, nextToken: Swift.String? = nil ) { self.botId = botId - self.botVersionSummaries = botVersionSummaries + self.botVersion = botVersion + self.importSummaries = importSummaries + self.localeId = localeId self.nextToken = nextToken } } -struct ListBotVersionsOutputResponseBody: Swift.Equatable { +struct ListImportsOutputResponseBody: Swift.Equatable { let botId: Swift.String? - let botVersionSummaries: [LexModelsV2ClientTypes.BotVersionSummary]? + let botVersion: Swift.String? + let importSummaries: [LexModelsV2ClientTypes.ImportSummary]? let nextToken: Swift.String? + let localeId: Swift.String? } -extension ListBotVersionsOutputResponseBody: Swift.Decodable { +extension ListImportsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId - case botVersionSummaries + case botVersion + case importSummaries + case localeId case nextToken } - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotVersionSummary?].self, forKey: .botVersionSummaries) - var botVersionSummariesDecoded0:[LexModelsV2ClientTypes.BotVersionSummary]? = nil - if let botVersionSummariesContainer = botVersionSummariesContainer { - botVersionSummariesDecoded0 = [LexModelsV2ClientTypes.BotVersionSummary]() - for structure0 in botVersionSummariesContainer { + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let importSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ImportSummary?].self, forKey: .importSummaries) + var importSummariesDecoded0:[LexModelsV2ClientTypes.ImportSummary]? = nil + if let importSummariesContainer = importSummariesContainer { + importSummariesDecoded0 = [LexModelsV2ClientTypes.ImportSummary]() + for structure0 in importSummariesContainer { if let structure0 = structure0 { - botVersionSummariesDecoded0?.append(structure0) + importSummariesDecoded0?.append(structure0) } } } - botVersionSummaries = botVersionSummariesDecoded0 + importSummaries = importSummariesDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded } } -extension ListBotsInput: Swift.Encodable { +extension ListIntentMetricsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case binBy + case endDateTime case filters + case groupBy case maxResults + case metrics case nextToken - case sortBy + case startDateTime } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let binBy = binBy { + var binByContainer = encodeContainer.nestedUnkeyedContainer(forKey: .binBy) + for analyticsbinbyspecification0 in binBy { + try binByContainer.encode(analyticsbinbyspecification0) + } + } + if let endDateTime = self.endDateTime { + try encodeContainer.encodeTimestamp(endDateTime, format: .epochSeconds, forKey: .endDateTime) + } if let filters = filters { var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) - for botfilter0 in filters { - try filtersContainer.encode(botfilter0) + for analyticsintentfilter0 in filters { + try filtersContainer.encode(analyticsintentfilter0) + } + } + if let groupBy = groupBy { + var groupByContainer = encodeContainer.nestedUnkeyedContainer(forKey: .groupBy) + for analyticsintentgroupbyspecification0 in groupBy { + try groupByContainer.encode(analyticsintentgroupbyspecification0) } } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } + if let metrics = metrics { + var metricsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .metrics) + for analyticsintentmetric0 in metrics { + try metricsContainer.encode(analyticsintentmetric0) + } + } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } - if let sortBy = self.sortBy { - try encodeContainer.encode(sortBy, forKey: .sortBy) + if let startDateTime = self.startDateTime { + try encodeContainer.encodeTimestamp(startDateTime, format: .epochSeconds, forKey: .startDateTime) } } } -extension ListBotsInput: ClientRuntime.URLPathProvider { +extension ListIntentMetricsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - return "/bots" + guard let botId = botId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/analytics/intentmetrics" } } -public struct ListBotsInput: Swift.Equatable { - /// Provides the specification of a filter used to limit the bots in the response to only those that match the filter specification. You can only specify one filter and one string to filter on. - public var filters: [LexModelsV2ClientTypes.BotFilter]? - /// The maximum number of bots to return in each page of results. If there are fewer results than the maximum page size, only the actual number of results are returned. +public struct ListIntentMetricsInput: Swift.Equatable { + /// A list of objects, each of which contains specifications for organizing the results by time. + public var binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? + /// The identifier for the bot for which you want to retrieve intent metrics. + /// This member is required. + public var botId: Swift.String? + /// The date and time that marks the end of the range of time for which you want to see intent metrics. + /// This member is required. + public var endDateTime: ClientRuntime.Date? + /// A list of objects, each of which describes a condition by which you want to filter the results. + public var filters: [LexModelsV2ClientTypes.AnalyticsIntentFilter]? + /// A list of objects, each of which specifies how to group the results. You can group by the following criteria: + /// + /// * IntentName – The name of the intent. + /// + /// * IntentEndState – The final state of the intent. The possible end states are detailed in [Key definitions](https://docs.aws.amazon.com/analytics-key-definitions-intents) in the user guide. + public var groupBy: [LexModelsV2ClientTypes.AnalyticsIntentGroupBySpecification]? + /// The maximum number of results to return in each page of results. If there are fewer results than the maximum page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListBots operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListBots request to return the next page of results. For a complete set of results, call the ListBots operation until the nextToken returned in the response is null. + /// A list of objects, each of which contains a metric you want to list, the statistic for the metric you want to return, and the order by which to organize the results. + /// This member is required. + public var metrics: [LexModelsV2ClientTypes.AnalyticsIntentMetric]? + /// If the response from the ListIntentMetrics operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListIntentMetrics request to return the next page of results. For a complete set of results, call the ListIntentMetrics operation until the nextToken returned in the response is null. public var nextToken: Swift.String? - /// Specifies sorting parameters for the list of bots. You can specify that the list be sorted by bot name in ascending or descending order. - public var sortBy: LexModelsV2ClientTypes.BotSortBy? + /// The timestamp that marks the beginning of the range of time for which you want to see intent metrics. + /// This member is required. + public var startDateTime: ClientRuntime.Date? public init( - filters: [LexModelsV2ClientTypes.BotFilter]? = nil, + binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? = nil, + botId: Swift.String? = nil, + endDateTime: ClientRuntime.Date? = nil, + filters: [LexModelsV2ClientTypes.AnalyticsIntentFilter]? = nil, + groupBy: [LexModelsV2ClientTypes.AnalyticsIntentGroupBySpecification]? = nil, maxResults: Swift.Int? = nil, + metrics: [LexModelsV2ClientTypes.AnalyticsIntentMetric]? = nil, nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.BotSortBy? = nil + startDateTime: ClientRuntime.Date? = nil ) { + self.binBy = binBy + self.botId = botId + self.endDateTime = endDateTime self.filters = filters + self.groupBy = groupBy self.maxResults = maxResults + self.metrics = metrics self.nextToken = nextToken - self.sortBy = sortBy + self.startDateTime = startDateTime } } -struct ListBotsInputBody: Swift.Equatable { - let sortBy: LexModelsV2ClientTypes.BotSortBy? - let filters: [LexModelsV2ClientTypes.BotFilter]? +struct ListIntentMetricsInputBody: Swift.Equatable { + let startDateTime: ClientRuntime.Date? + let endDateTime: ClientRuntime.Date? + let metrics: [LexModelsV2ClientTypes.AnalyticsIntentMetric]? + let binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? + let groupBy: [LexModelsV2ClientTypes.AnalyticsIntentGroupBySpecification]? + let filters: [LexModelsV2ClientTypes.AnalyticsIntentFilter]? let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListBotsInputBody: Swift.Decodable { +extension ListIntentMetricsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case binBy + case endDateTime case filters + case groupBy case maxResults + case metrics case nextToken - case sortBy + case startDateTime } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BotSortBy.self, forKey: .sortBy) - sortBy = sortByDecoded - let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotFilter?].self, forKey: .filters) - var filtersDecoded0:[LexModelsV2ClientTypes.BotFilter]? = nil + let startDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startDateTime) + startDateTime = startDateTimeDecoded + let endDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endDateTime) + endDateTime = endDateTimeDecoded + let metricsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentMetric?].self, forKey: .metrics) + var metricsDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentMetric]? = nil + if let metricsContainer = metricsContainer { + metricsDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentMetric]() + for structure0 in metricsContainer { + if let structure0 = structure0 { + metricsDecoded0?.append(structure0) + } + } + } + metrics = metricsDecoded0 + let binByContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsBinBySpecification?].self, forKey: .binBy) + var binByDecoded0:[LexModelsV2ClientTypes.AnalyticsBinBySpecification]? = nil + if let binByContainer = binByContainer { + binByDecoded0 = [LexModelsV2ClientTypes.AnalyticsBinBySpecification]() + for structure0 in binByContainer { + if let structure0 = structure0 { + binByDecoded0?.append(structure0) + } + } + } + binBy = binByDecoded0 + let groupByContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentGroupBySpecification?].self, forKey: .groupBy) + var groupByDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentGroupBySpecification]? = nil + if let groupByContainer = groupByContainer { + groupByDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentGroupBySpecification]() + for structure0 in groupByContainer { + if let structure0 = structure0 { + groupByDecoded0?.append(structure0) + } + } + } + groupBy = groupByDecoded0 + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentFilter]? = nil if let filtersContainer = filtersContainer { - filtersDecoded0 = [LexModelsV2ClientTypes.BotFilter]() + filtersDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentFilter]() for structure0 in filtersContainer { if let structure0 = structure0 { filtersDecoded0?.append(structure0) @@ -17468,12 +21954,13 @@ extension ListBotsInputBody: Swift.Decodable { } } -public enum ListBotsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListIntentMetricsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -17482,150 +21969,194 @@ public enum ListBotsOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListBotsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListIntentMetricsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListBotsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botSummaries = output.botSummaries + let output: ListIntentMetricsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId self.nextToken = output.nextToken + self.results = output.results } else { - self.botSummaries = nil + self.botId = nil self.nextToken = nil + self.results = nil } } } -public struct ListBotsOutputResponse: Swift.Equatable { - /// Summary information for the bots that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more bots available, the nextToken field contains a token to the next page of results. - public var botSummaries: [LexModelsV2ClientTypes.BotSummary]? - /// A token that indicates whether there are more results to return in a response to the ListBots operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBots operation request to get the next page of results. +public struct ListIntentMetricsOutputResponse: Swift.Equatable { + /// The identifier for the bot for which you retrieved intent metrics. + public var botId: Swift.String? + /// If the response from the ListIntentMetrics operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListIntentMetrics request to return the next page of results. For a complete set of results, call the ListIntentMetrics operation until the nextToken returned in the response is null. public var nextToken: Swift.String? + /// The results for the intent metrics. + public var results: [LexModelsV2ClientTypes.AnalyticsIntentResult]? public init( - botSummaries: [LexModelsV2ClientTypes.BotSummary]? = nil, - nextToken: Swift.String? = nil + botId: Swift.String? = nil, + nextToken: Swift.String? = nil, + results: [LexModelsV2ClientTypes.AnalyticsIntentResult]? = nil ) { - self.botSummaries = botSummaries + self.botId = botId self.nextToken = nextToken + self.results = results } } -struct ListBotsOutputResponseBody: Swift.Equatable { - let botSummaries: [LexModelsV2ClientTypes.BotSummary]? +struct ListIntentMetricsOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let results: [LexModelsV2ClientTypes.AnalyticsIntentResult]? let nextToken: Swift.String? } -extension ListBotsOutputResponseBody: Swift.Decodable { +extension ListIntentMetricsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botSummaries + case botId case nextToken + case results } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BotSummary?].self, forKey: .botSummaries) - var botSummariesDecoded0:[LexModelsV2ClientTypes.BotSummary]? = nil - if let botSummariesContainer = botSummariesContainer { - botSummariesDecoded0 = [LexModelsV2ClientTypes.BotSummary]() - for structure0 in botSummariesContainer { + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let resultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentResult?].self, forKey: .results) + var resultsDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentResult]? = nil + if let resultsContainer = resultsContainer { + resultsDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentResult]() + for structure0 in resultsContainer { if let structure0 = structure0 { - botSummariesDecoded0?.append(structure0) + resultsDecoded0?.append(structure0) } } } - botSummaries = botSummariesDecoded0 + results = resultsDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded } } -extension ListBuiltInIntentsInput: Swift.Encodable { +extension ListIntentPathsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case maxResults - case nextToken - case sortBy + case endDateTime + case filters + case intentPath + case startDateTime } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let maxResults = self.maxResults { - try encodeContainer.encode(maxResults, forKey: .maxResults) + if let endDateTime = self.endDateTime { + try encodeContainer.encodeTimestamp(endDateTime, format: .epochSeconds, forKey: .endDateTime) } - if let nextToken = self.nextToken { - try encodeContainer.encode(nextToken, forKey: .nextToken) + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for analyticspathfilter0 in filters { + try filtersContainer.encode(analyticspathfilter0) + } } - if let sortBy = self.sortBy { - try encodeContainer.encode(sortBy, forKey: .sortBy) + if let intentPath = self.intentPath { + try encodeContainer.encode(intentPath, forKey: .intentPath) + } + if let startDateTime = self.startDateTime { + try encodeContainer.encodeTimestamp(startDateTime, format: .epochSeconds, forKey: .startDateTime) } } } -extension ListBuiltInIntentsInput: ClientRuntime.URLPathProvider { +extension ListIntentPathsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let localeId = localeId else { + guard let botId = botId else { return nil } - return "/builtins/locales/\(localeId.urlPercentEncoding())/intents" + return "/bots/\(botId.urlPercentEncoding())/analytics/intentpaths" } } -public struct ListBuiltInIntentsInput: Swift.Equatable { - /// The identifier of the language and locale of the intents to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). +public struct ListIntentPathsInput: Swift.Equatable { + /// The identifier for the bot for which you want to retrieve intent path metrics. /// This member is required. - public var localeId: Swift.String? - /// The maximum number of built-in intents to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. - public var maxResults: Swift.Int? - /// If the response from the ListBuiltInIntents operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. - public var nextToken: Swift.String? - /// Specifies sorting parameters for the list of built-in intents. You can specify that the list be sorted by the built-in intent signature in either ascending or descending order. - public var sortBy: LexModelsV2ClientTypes.BuiltInIntentSortBy? + public var botId: Swift.String? + /// The date and time that marks the end of the range of time for which you want to see intent path metrics. + /// This member is required. + public var endDateTime: ClientRuntime.Date? + /// A list of objects, each describes a condition by which you want to filter the results. + public var filters: [LexModelsV2ClientTypes.AnalyticsPathFilter]? + /// The intent path for which you want to retrieve metrics. Use a forward slash to separate intents in the path. For example: + /// + /// * /BookCar + /// + /// * /BookCar/BookHotel + /// + /// * /BookHotel/BookCar + /// This member is required. + public var intentPath: Swift.String? + /// The date and time that marks the beginning of the range of time for which you want to see intent path metrics. + /// This member is required. + public var startDateTime: ClientRuntime.Date? public init( - localeId: Swift.String? = nil, - maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.BuiltInIntentSortBy? = nil + botId: Swift.String? = nil, + endDateTime: ClientRuntime.Date? = nil, + filters: [LexModelsV2ClientTypes.AnalyticsPathFilter]? = nil, + intentPath: Swift.String? = nil, + startDateTime: ClientRuntime.Date? = nil ) { - self.localeId = localeId - self.maxResults = maxResults - self.nextToken = nextToken - self.sortBy = sortBy + self.botId = botId + self.endDateTime = endDateTime + self.filters = filters + self.intentPath = intentPath + self.startDateTime = startDateTime } } -struct ListBuiltInIntentsInputBody: Swift.Equatable { - let sortBy: LexModelsV2ClientTypes.BuiltInIntentSortBy? - let maxResults: Swift.Int? - let nextToken: Swift.String? +struct ListIntentPathsInputBody: Swift.Equatable { + let startDateTime: ClientRuntime.Date? + let endDateTime: ClientRuntime.Date? + let intentPath: Swift.String? + let filters: [LexModelsV2ClientTypes.AnalyticsPathFilter]? } -extension ListBuiltInIntentsInputBody: Swift.Decodable { +extension ListIntentPathsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case maxResults - case nextToken - case sortBy + case endDateTime + case filters + case intentPath + case startDateTime } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BuiltInIntentSortBy.self, forKey: .sortBy) - sortBy = sortByDecoded - let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) - maxResults = maxResultsDecoded - let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) - nextToken = nextTokenDecoded + let startDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startDateTime) + startDateTime = startDateTimeDecoded + let endDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endDateTime) + endDateTime = endDateTimeDecoded + let intentPathDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentPath) + intentPath = intentPathDecoded + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsPathFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.AnalyticsPathFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [LexModelsV2ClientTypes.AnalyticsPathFilter]() + for structure0 in filtersContainer { + if let structure0 = structure0 { + filtersDecoded0?.append(structure0) + } + } + } + filters = filtersDecoded0 } } -public enum ListBuiltInIntentsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListIntentPathsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -17634,147 +22165,242 @@ public enum ListBuiltInIntentsOutputError: ClientRuntime.HttpResponseErrorBindin } } -extension ListBuiltInIntentsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListIntentPathsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListBuiltInIntentsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.builtInIntentSummaries = output.builtInIntentSummaries - self.localeId = output.localeId - self.nextToken = output.nextToken + let output: ListIntentPathsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nodeSummaries = output.nodeSummaries } else { - self.builtInIntentSummaries = nil - self.localeId = nil - self.nextToken = nil + self.nodeSummaries = nil } } } -public struct ListBuiltInIntentsOutputResponse: Swift.Equatable { - /// Summary information for the built-in intents that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more intents available, the nextToken field contains a token to get the next page of results. - public var builtInIntentSummaries: [LexModelsV2ClientTypes.BuiltInIntentSummary]? - /// The language and locale of the intents in the list. - public var localeId: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListBuiltInIntents operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListBotAliases operation request to get the next page of results. - public var nextToken: Swift.String? +public struct ListIntentPathsOutputResponse: Swift.Equatable { + /// A list of objects, each of which contains information about a node in the intent path for which you requested metrics. + public var nodeSummaries: [LexModelsV2ClientTypes.AnalyticsIntentNodeSummary]? public init( - builtInIntentSummaries: [LexModelsV2ClientTypes.BuiltInIntentSummary]? = nil, - localeId: Swift.String? = nil, - nextToken: Swift.String? = nil + nodeSummaries: [LexModelsV2ClientTypes.AnalyticsIntentNodeSummary]? = nil ) { - self.builtInIntentSummaries = builtInIntentSummaries - self.localeId = localeId - self.nextToken = nextToken + self.nodeSummaries = nodeSummaries } } -struct ListBuiltInIntentsOutputResponseBody: Swift.Equatable { - let builtInIntentSummaries: [LexModelsV2ClientTypes.BuiltInIntentSummary]? - let nextToken: Swift.String? - let localeId: Swift.String? +struct ListIntentPathsOutputResponseBody: Swift.Equatable { + let nodeSummaries: [LexModelsV2ClientTypes.AnalyticsIntentNodeSummary]? } -extension ListBuiltInIntentsOutputResponseBody: Swift.Decodable { +extension ListIntentPathsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case builtInIntentSummaries - case localeId - case nextToken + case nodeSummaries } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let builtInIntentSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BuiltInIntentSummary?].self, forKey: .builtInIntentSummaries) - var builtInIntentSummariesDecoded0:[LexModelsV2ClientTypes.BuiltInIntentSummary]? = nil - if let builtInIntentSummariesContainer = builtInIntentSummariesContainer { - builtInIntentSummariesDecoded0 = [LexModelsV2ClientTypes.BuiltInIntentSummary]() - for structure0 in builtInIntentSummariesContainer { + let nodeSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentNodeSummary?].self, forKey: .nodeSummaries) + var nodeSummariesDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentNodeSummary]? = nil + if let nodeSummariesContainer = nodeSummariesContainer { + nodeSummariesDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentNodeSummary]() + for structure0 in nodeSummariesContainer { if let structure0 = structure0 { - builtInIntentSummariesDecoded0?.append(structure0) + nodeSummariesDecoded0?.append(structure0) } } } - builtInIntentSummaries = builtInIntentSummariesDecoded0 - let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) - nextToken = nextTokenDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded + nodeSummaries = nodeSummariesDecoded0 } } -extension ListBuiltInSlotTypesInput: Swift.Encodable { +extension ListIntentStageMetricsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case binBy + case endDateTime + case filters + case groupBy case maxResults + case metrics case nextToken - case sortBy + case startDateTime } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let binBy = binBy { + var binByContainer = encodeContainer.nestedUnkeyedContainer(forKey: .binBy) + for analyticsbinbyspecification0 in binBy { + try binByContainer.encode(analyticsbinbyspecification0) + } + } + if let endDateTime = self.endDateTime { + try encodeContainer.encodeTimestamp(endDateTime, format: .epochSeconds, forKey: .endDateTime) + } + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for analyticsintentstagefilter0 in filters { + try filtersContainer.encode(analyticsintentstagefilter0) + } + } + if let groupBy = groupBy { + var groupByContainer = encodeContainer.nestedUnkeyedContainer(forKey: .groupBy) + for analyticsintentstagegroupbyspecification0 in groupBy { + try groupByContainer.encode(analyticsintentstagegroupbyspecification0) + } + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } + if let metrics = metrics { + var metricsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .metrics) + for analyticsintentstagemetric0 in metrics { + try metricsContainer.encode(analyticsintentstagemetric0) + } + } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } - if let sortBy = self.sortBy { - try encodeContainer.encode(sortBy, forKey: .sortBy) + if let startDateTime = self.startDateTime { + try encodeContainer.encodeTimestamp(startDateTime, format: .epochSeconds, forKey: .startDateTime) } } } -extension ListBuiltInSlotTypesInput: ClientRuntime.URLPathProvider { +extension ListIntentStageMetricsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let localeId = localeId else { + guard let botId = botId else { return nil } - return "/builtins/locales/\(localeId.urlPercentEncoding())/slottypes" + return "/bots/\(botId.urlPercentEncoding())/analytics/intentstagemetrics" } } -public struct ListBuiltInSlotTypesInput: Swift.Equatable { - /// The identifier of the language and locale of the slot types to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). +public struct ListIntentStageMetricsInput: Swift.Equatable { + /// A list of objects, each of which contains specifications for organizing the results by time. + public var binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? + /// The identifier for the bot for which you want to retrieve intent stage metrics. /// This member is required. - public var localeId: Swift.String? - /// The maximum number of built-in slot types to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + public var botId: Swift.String? + /// The date and time that marks the end of the range of time for which you want to see intent stage metrics. + /// This member is required. + public var endDateTime: ClientRuntime.Date? + /// A list of objects, each of which describes a condition by which you want to filter the results. + public var filters: [LexModelsV2ClientTypes.AnalyticsIntentStageFilter]? + /// A list of objects, each of which specifies how to group the results. You can group by the following criteria: + /// + /// * IntentStageName – The name of the intent stage. + /// + /// * SwitchedToIntent – The intent to which the conversation was switched (if any). + public var groupBy: [LexModelsV2ClientTypes.AnalyticsIntentStageGroupBySpecification]? + /// The maximum number of results to return in each page of results. If there are fewer results than the maximum page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListBuiltInSlotTypes operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// A list of objects, each of which contains a metric you want to list, the statistic for the metric you want to return, and the method by which to organize the results. + /// This member is required. + public var metrics: [LexModelsV2ClientTypes.AnalyticsIntentStageMetric]? + /// If the response from the ListIntentStageMetrics operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListIntentStageMetrics request to return the next page of results. For a complete set of results, call the ListIntentStageMetrics operation until the nextToken returned in the response is null. public var nextToken: Swift.String? - /// Determines the sort order for the response from the ListBuiltInSlotTypes operation. You can choose to sort by the slot type signature in either ascending or descending order. - public var sortBy: LexModelsV2ClientTypes.BuiltInSlotTypeSortBy? + /// The date and time that marks the beginning of the range of time for which you want to see intent stage metrics. + /// This member is required. + public var startDateTime: ClientRuntime.Date? public init( - localeId: Swift.String? = nil, + binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? = nil, + botId: Swift.String? = nil, + endDateTime: ClientRuntime.Date? = nil, + filters: [LexModelsV2ClientTypes.AnalyticsIntentStageFilter]? = nil, + groupBy: [LexModelsV2ClientTypes.AnalyticsIntentStageGroupBySpecification]? = nil, maxResults: Swift.Int? = nil, + metrics: [LexModelsV2ClientTypes.AnalyticsIntentStageMetric]? = nil, nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.BuiltInSlotTypeSortBy? = nil + startDateTime: ClientRuntime.Date? = nil ) { - self.localeId = localeId + self.binBy = binBy + self.botId = botId + self.endDateTime = endDateTime + self.filters = filters + self.groupBy = groupBy self.maxResults = maxResults + self.metrics = metrics self.nextToken = nextToken - self.sortBy = sortBy + self.startDateTime = startDateTime } } -struct ListBuiltInSlotTypesInputBody: Swift.Equatable { - let sortBy: LexModelsV2ClientTypes.BuiltInSlotTypeSortBy? +struct ListIntentStageMetricsInputBody: Swift.Equatable { + let startDateTime: ClientRuntime.Date? + let endDateTime: ClientRuntime.Date? + let metrics: [LexModelsV2ClientTypes.AnalyticsIntentStageMetric]? + let binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? + let groupBy: [LexModelsV2ClientTypes.AnalyticsIntentStageGroupBySpecification]? + let filters: [LexModelsV2ClientTypes.AnalyticsIntentStageFilter]? let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListBuiltInSlotTypesInputBody: Swift.Decodable { +extension ListIntentStageMetricsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case binBy + case endDateTime + case filters + case groupBy case maxResults + case metrics case nextToken - case sortBy + case startDateTime } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.BuiltInSlotTypeSortBy.self, forKey: .sortBy) - sortBy = sortByDecoded + let startDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startDateTime) + startDateTime = startDateTimeDecoded + let endDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endDateTime) + endDateTime = endDateTimeDecoded + let metricsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentStageMetric?].self, forKey: .metrics) + var metricsDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentStageMetric]? = nil + if let metricsContainer = metricsContainer { + metricsDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentStageMetric]() + for structure0 in metricsContainer { + if let structure0 = structure0 { + metricsDecoded0?.append(structure0) + } + } + } + metrics = metricsDecoded0 + let binByContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsBinBySpecification?].self, forKey: .binBy) + var binByDecoded0:[LexModelsV2ClientTypes.AnalyticsBinBySpecification]? = nil + if let binByContainer = binByContainer { + binByDecoded0 = [LexModelsV2ClientTypes.AnalyticsBinBySpecification]() + for structure0 in binByContainer { + if let structure0 = structure0 { + binByDecoded0?.append(structure0) + } + } + } + binBy = binByDecoded0 + let groupByContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentStageGroupBySpecification?].self, forKey: .groupBy) + var groupByDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentStageGroupBySpecification]? = nil + if let groupByContainer = groupByContainer { + groupByDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentStageGroupBySpecification]() + for structure0 in groupByContainer { + if let structure0 = structure0 { + groupByDecoded0?.append(structure0) + } + } + } + groupBy = groupByDecoded0 + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentStageFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentStageFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentStageFilter]() + for structure0 in filtersContainer { + if let structure0 = structure0 { + filtersDecoded0?.append(structure0) + } + } + } + filters = filtersDecoded0 let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) @@ -17782,12 +22408,13 @@ extension ListBuiltInSlotTypesInputBody: Swift.Decodable { } } -public enum ListBuiltInSlotTypesOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListIntentStageMetricsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -17796,93 +22423,104 @@ public enum ListBuiltInSlotTypesOutputError: ClientRuntime.HttpResponseErrorBind } } -extension ListBuiltInSlotTypesOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListIntentStageMetricsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListBuiltInSlotTypesOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.builtInSlotTypeSummaries = output.builtInSlotTypeSummaries - self.localeId = output.localeId + let output: ListIntentStageMetricsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId self.nextToken = output.nextToken + self.results = output.results } else { - self.builtInSlotTypeSummaries = nil - self.localeId = nil + self.botId = nil self.nextToken = nil + self.results = nil } } } -public struct ListBuiltInSlotTypesOutputResponse: Swift.Equatable { - /// Summary information for the built-in slot types that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more slot types available, the nextToken field contains a token to get the next page of results. - public var builtInSlotTypeSummaries: [LexModelsV2ClientTypes.BuiltInSlotTypeSummary]? - /// The language and locale of the slot types in the list. - public var localeId: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListBuiltInSlotTypes operation. If the nextToken field is present, you send the contents as the nextToken parameter of a LIstBuiltInSlotTypes operation request to get the next page of results. +public struct ListIntentStageMetricsOutputResponse: Swift.Equatable { + /// The identifier for the bot for which you retrieved intent stage metrics. + public var botId: Swift.String? + /// If the response from the ListIntentStageMetrics operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListIntentStageMetrics request to return the next page of results. For a complete set of results, call the ListIntentStageMetrics operation until the nextToken returned in the response is null. public var nextToken: Swift.String? + /// The results for the intent stage metrics. + public var results: [LexModelsV2ClientTypes.AnalyticsIntentStageResult]? public init( - builtInSlotTypeSummaries: [LexModelsV2ClientTypes.BuiltInSlotTypeSummary]? = nil, - localeId: Swift.String? = nil, - nextToken: Swift.String? = nil + botId: Swift.String? = nil, + nextToken: Swift.String? = nil, + results: [LexModelsV2ClientTypes.AnalyticsIntentStageResult]? = nil ) { - self.builtInSlotTypeSummaries = builtInSlotTypeSummaries - self.localeId = localeId + self.botId = botId self.nextToken = nextToken + self.results = results } } -struct ListBuiltInSlotTypesOutputResponseBody: Swift.Equatable { - let builtInSlotTypeSummaries: [LexModelsV2ClientTypes.BuiltInSlotTypeSummary]? +struct ListIntentStageMetricsOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let results: [LexModelsV2ClientTypes.AnalyticsIntentStageResult]? let nextToken: Swift.String? - let localeId: Swift.String? } -extension ListBuiltInSlotTypesOutputResponseBody: Swift.Decodable { +extension ListIntentStageMetricsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case builtInSlotTypeSummaries - case localeId + case botId case nextToken + case results } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let builtInSlotTypeSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.BuiltInSlotTypeSummary?].self, forKey: .builtInSlotTypeSummaries) - var builtInSlotTypeSummariesDecoded0:[LexModelsV2ClientTypes.BuiltInSlotTypeSummary]? = nil - if let builtInSlotTypeSummariesContainer = builtInSlotTypeSummariesContainer { - builtInSlotTypeSummariesDecoded0 = [LexModelsV2ClientTypes.BuiltInSlotTypeSummary]() - for structure0 in builtInSlotTypeSummariesContainer { + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let resultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsIntentStageResult?].self, forKey: .results) + var resultsDecoded0:[LexModelsV2ClientTypes.AnalyticsIntentStageResult]? = nil + if let resultsContainer = resultsContainer { + resultsDecoded0 = [LexModelsV2ClientTypes.AnalyticsIntentStageResult]() + for structure0 in resultsContainer { if let structure0 = structure0 { - builtInSlotTypeSummariesDecoded0?.append(structure0) + resultsDecoded0?.append(structure0) } } } - builtInSlotTypeSummaries = builtInSlotTypeSummariesDecoded0 + results = resultsDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded } } -extension ListCustomVocabularyItemsInput: Swift.Encodable { +extension ListIntentsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case filters case maxResults case nextToken + case sortBy } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for intentfilter0 in filters { + try filtersContainer.encode(intentfilter0) + } + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy, forKey: .sortBy) + } } } -extension ListCustomVocabularyItemsInput: ClientRuntime.URLPathProvider { +extension ListIntentsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil @@ -17893,54 +22531,79 @@ extension ListCustomVocabularyItemsInput: ClientRuntime.URLPathProvider { guard let localeId = localeId else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/customvocabulary/DEFAULT/list" + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents" } } -public struct ListCustomVocabularyItemsInput: Swift.Equatable { - /// The identifier of the version of the bot associated with this custom vocabulary. +public struct ListIntentsInput: Swift.Equatable { + /// The unique identifier of the bot that contains the intent. /// This member is required. public var botId: Swift.String? - /// The bot version of the bot to the list custom vocabulary request. + /// The version of the bot that contains the intent. /// This member is required. public var botVersion: Swift.String? - /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see Supported languages (https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// Provides the specification of a filter used to limit the intents in the response to only those that match the filter specification. You can only specify one filter and only one string to filter on. + public var filters: [LexModelsV2ClientTypes.IntentFilter]? + /// The identifier of the language and locale of the intents to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). /// This member is required. public var localeId: Swift.String? - /// The maximum number of items returned by the list operation. + /// The maximum number of intents to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// The nextToken identifier to the list custom vocabulary request. + /// If the response from the ListIntents operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListIntents request to return the next page of results. For a complete set of results, call the ListIntents operation until the nextToken returned in the response is null. public var nextToken: Swift.String? + /// Determines the sort order for the response from the ListIntents operation. You can choose to sort by the intent name or last updated date in either ascending or descending order. + public var sortBy: LexModelsV2ClientTypes.IntentSortBy? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, + filters: [LexModelsV2ClientTypes.IntentFilter]? = nil, localeId: Swift.String? = nil, maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil + nextToken: Swift.String? = nil, + sortBy: LexModelsV2ClientTypes.IntentSortBy? = nil ) { self.botId = botId self.botVersion = botVersion + self.filters = filters self.localeId = localeId self.maxResults = maxResults self.nextToken = nextToken + self.sortBy = sortBy } } -struct ListCustomVocabularyItemsInputBody: Swift.Equatable { +struct ListIntentsInputBody: Swift.Equatable { + let sortBy: LexModelsV2ClientTypes.IntentSortBy? + let filters: [LexModelsV2ClientTypes.IntentFilter]? let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListCustomVocabularyItemsInputBody: Swift.Decodable { +extension ListIntentsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case filters case maxResults case nextToken + case sortBy } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.IntentFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.IntentFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [LexModelsV2ClientTypes.IntentFilter]() + for structure0 in filtersContainer { + if let structure0 = structure0 { + filtersDecoded0?.append(structure0) + } + } + } + filters = filtersDecoded0 let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) @@ -17948,13 +22611,12 @@ extension ListCustomVocabularyItemsInputBody: Swift.Decodable { } } -public enum ListCustomVocabularyItemsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListIntentsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -17963,67 +22625,67 @@ public enum ListCustomVocabularyItemsOutputError: ClientRuntime.HttpResponseErro } } -extension ListCustomVocabularyItemsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListIntentsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListCustomVocabularyItemsOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListIntentsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId self.botVersion = output.botVersion - self.customVocabularyItems = output.customVocabularyItems + self.intentSummaries = output.intentSummaries self.localeId = output.localeId self.nextToken = output.nextToken } else { self.botId = nil self.botVersion = nil - self.customVocabularyItems = nil + self.intentSummaries = nil self.localeId = nil self.nextToken = nil } } } -public struct ListCustomVocabularyItemsOutputResponse: Swift.Equatable { - /// The identifier of the bot associated with this custom vocabulary. +public struct ListIntentsOutputResponse: Swift.Equatable { + /// The identifier of the bot that contains the intent. public var botId: Swift.String? - /// The identifier of the version of the bot associated with this custom vocabulary. + /// The version of the bot that contains the intent. public var botVersion: Swift.String? - /// The custom vocabulary items from the list custom vocabulary response. - public var customVocabularyItems: [LexModelsV2ClientTypes.CustomVocabularyItem]? - /// The identifier of the language and locale where this custom vocabulary is used. The string must match one of the supported locales. For more information, see [ Supported Languages ](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// Summary information for the intents that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more intents available, the nextToken field contains a token to get the next page of results. + public var intentSummaries: [LexModelsV2ClientTypes.IntentSummary]? + /// The language and locale of the intents in the list. public var localeId: Swift.String? - /// The nextToken identifier to the list custom vocabulary response. + /// A token that indicates whether there are more results to return in a response to the ListIntents operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListIntents operation request to get the next page of results. public var nextToken: Swift.String? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, - customVocabularyItems: [LexModelsV2ClientTypes.CustomVocabularyItem]? = nil, + intentSummaries: [LexModelsV2ClientTypes.IntentSummary]? = nil, localeId: Swift.String? = nil, nextToken: Swift.String? = nil ) { self.botId = botId self.botVersion = botVersion - self.customVocabularyItems = customVocabularyItems + self.intentSummaries = intentSummaries self.localeId = localeId self.nextToken = nextToken } } -struct ListCustomVocabularyItemsOutputResponseBody: Swift.Equatable { +struct ListIntentsOutputResponseBody: Swift.Equatable { let botId: Swift.String? let botVersion: Swift.String? let localeId: Swift.String? - let customVocabularyItems: [LexModelsV2ClientTypes.CustomVocabularyItem]? + let intentSummaries: [LexModelsV2ClientTypes.IntentSummary]? let nextToken: Swift.String? } -extension ListCustomVocabularyItemsOutputResponseBody: Swift.Decodable { +extension ListIntentsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId case botVersion - case customVocabularyItems + case intentSummaries case localeId case nextToken } @@ -18036,159 +22698,121 @@ extension ListCustomVocabularyItemsOutputResponseBody: Swift.Decodable { botVersion = botVersionDecoded let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) localeId = localeIdDecoded - let customVocabularyItemsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.CustomVocabularyItem?].self, forKey: .customVocabularyItems) - var customVocabularyItemsDecoded0:[LexModelsV2ClientTypes.CustomVocabularyItem]? = nil - if let customVocabularyItemsContainer = customVocabularyItemsContainer { - customVocabularyItemsDecoded0 = [LexModelsV2ClientTypes.CustomVocabularyItem]() - for structure0 in customVocabularyItemsContainer { + let intentSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.IntentSummary?].self, forKey: .intentSummaries) + var intentSummariesDecoded0:[LexModelsV2ClientTypes.IntentSummary]? = nil + if let intentSummariesContainer = intentSummariesContainer { + intentSummariesDecoded0 = [LexModelsV2ClientTypes.IntentSummary]() + for structure0 in intentSummariesContainer { if let structure0 = structure0 { - customVocabularyItemsDecoded0?.append(structure0) + intentSummariesDecoded0?.append(structure0) } } } - customVocabularyItems = customVocabularyItemsDecoded0 - let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) - nextToken = nextTokenDecoded - } -} - -extension ListExportsInput: Swift.Encodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case filters - case localeId - case maxResults - case nextToken - case sortBy - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botId = self.botId { - try encodeContainer.encode(botId, forKey: .botId) - } - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) - } - if let filters = filters { - var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) - for exportfilter0 in filters { - try filtersContainer.encode(exportfilter0) - } - } - if let localeId = self.localeId { - try encodeContainer.encode(localeId, forKey: .localeId) - } + intentSummaries = intentSummariesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ListRecommendedIntentsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults + case nextToken + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } - if let sortBy = self.sortBy { - try encodeContainer.encode(sortBy, forKey: .sortBy) - } } } -extension ListExportsInput: ClientRuntime.URLPathProvider { +extension ListRecommendedIntentsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - return "/exports" + guard let botId = botId else { + return nil + } + guard let botVersion = botVersion else { + return nil + } + guard let localeId = localeId else { + return nil + } + guard let botRecommendationId = botRecommendationId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/botrecommendations/\(botRecommendationId.urlPercentEncoding())/intents" } } -public struct ListExportsInput: Swift.Equatable { - /// The unique identifier that Amazon Lex assigned to the bot. +public struct ListRecommendedIntentsInput: Swift.Equatable { + /// The unique identifier of the bot associated with the recommended intents. + /// This member is required. public var botId: Swift.String? - /// The version of the bot to list exports for. + /// The identifier of the bot recommendation that contains the recommended intents. + /// This member is required. + public var botRecommendationId: Swift.String? + /// The version of the bot that contains the recommended intents. + /// This member is required. public var botVersion: Swift.String? - /// Provides the specification of a filter used to limit the exports in the response to only those that match the filter specification. You can only specify one filter and one string to filter on. - public var filters: [LexModelsV2ClientTypes.ExportFilter]? - /// Specifies the resources that should be exported. If you don't specify a resource type in the filters parameter, both bot locales and custom vocabularies are exported. + /// The identifier of the language and locale of the recommended intents. + /// This member is required. public var localeId: Swift.String? - /// The maximum number of exports to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + /// The maximum number of bot recommendations to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListExports operation contains more results that specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListExports request to return the next page of results. For a complete set of results, call the ListExports operation until the nextToken returned in the response is null. + /// If the response from the ListRecommendedIntents operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. public var nextToken: Swift.String? - /// Determines the field that the list of exports is sorted by. You can sort by the LastUpdatedDateTime field in ascending or descending order. - public var sortBy: LexModelsV2ClientTypes.ExportSortBy? public init( botId: Swift.String? = nil, + botRecommendationId: Swift.String? = nil, botVersion: Swift.String? = nil, - filters: [LexModelsV2ClientTypes.ExportFilter]? = nil, localeId: Swift.String? = nil, maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.ExportSortBy? = nil + nextToken: Swift.String? = nil ) { self.botId = botId + self.botRecommendationId = botRecommendationId self.botVersion = botVersion - self.filters = filters self.localeId = localeId self.maxResults = maxResults self.nextToken = nextToken - self.sortBy = sortBy } } -struct ListExportsInputBody: Swift.Equatable { - let botId: Swift.String? - let botVersion: Swift.String? - let sortBy: LexModelsV2ClientTypes.ExportSortBy? - let filters: [LexModelsV2ClientTypes.ExportFilter]? - let maxResults: Swift.Int? +struct ListRecommendedIntentsInputBody: Swift.Equatable { let nextToken: Swift.String? - let localeId: Swift.String? + let maxResults: Swift.Int? } -extension ListExportsInputBody: Swift.Decodable { +extension ListRecommendedIntentsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case filters - case localeId case maxResults case nextToken - case sortBy } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ExportSortBy.self, forKey: .sortBy) - sortBy = sortByDecoded - let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ExportFilter?].self, forKey: .filters) - var filtersDecoded0:[LexModelsV2ClientTypes.ExportFilter]? = nil - if let filtersContainer = filtersContainer { - filtersDecoded0 = [LexModelsV2ClientTypes.ExportFilter]() - for structure0 in filtersContainer { - if let structure0 = structure0 { - filtersDecoded0?.append(structure0) - } - } - } - filters = filtersDecoded0 - let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) - maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded } } -public enum ListExportsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListRecommendedIntentsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -18196,69 +22820,77 @@ public enum ListExportsOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListExportsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListRecommendedIntentsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListExportsOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListRecommendedIntentsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId + self.botRecommendationId = output.botRecommendationId self.botVersion = output.botVersion - self.exportSummaries = output.exportSummaries self.localeId = output.localeId self.nextToken = output.nextToken + self.summaryList = output.summaryList } else { self.botId = nil + self.botRecommendationId = nil self.botVersion = nil - self.exportSummaries = nil self.localeId = nil self.nextToken = nil + self.summaryList = nil } } } -public struct ListExportsOutputResponse: Swift.Equatable { - /// The unique identifier assigned to the bot by Amazon Lex. +public struct ListRecommendedIntentsOutputResponse: Swift.Equatable { + /// The unique identifier of the bot associated with the recommended intent. public var botId: Swift.String? - /// The version of the bot that was exported. + /// The identifier of the bot recommendation that contains the recommended intent. + public var botRecommendationId: Swift.String? + /// The version of the bot that contains the intent. public var botVersion: Swift.String? - /// Summary information for the exports that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter. If there are more exports available, the nextToken field contains a token to get the next page of results. - public var exportSummaries: [LexModelsV2ClientTypes.ExportSummary]? - /// The locale specified in the request. + /// The identifier of the language and locale of the intents to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). public var localeId: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListExports operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListExports operation request to get the next page of results. + /// A token that indicates whether there are more results to return in a response to the ListRecommendedIntents operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListRecommendedIntents operation request to get the next page of results. public var nextToken: Swift.String? + /// Summary information for the intents that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more intents available, the nextToken field contains a token to get the next page of results. + public var summaryList: [LexModelsV2ClientTypes.RecommendedIntentSummary]? public init( botId: Swift.String? = nil, + botRecommendationId: Swift.String? = nil, botVersion: Swift.String? = nil, - exportSummaries: [LexModelsV2ClientTypes.ExportSummary]? = nil, localeId: Swift.String? = nil, - nextToken: Swift.String? = nil + nextToken: Swift.String? = nil, + summaryList: [LexModelsV2ClientTypes.RecommendedIntentSummary]? = nil ) { self.botId = botId + self.botRecommendationId = botRecommendationId self.botVersion = botVersion - self.exportSummaries = exportSummaries self.localeId = localeId self.nextToken = nextToken + self.summaryList = summaryList } } -struct ListExportsOutputResponseBody: Swift.Equatable { +struct ListRecommendedIntentsOutputResponseBody: Swift.Equatable { let botId: Swift.String? let botVersion: Swift.String? - let exportSummaries: [LexModelsV2ClientTypes.ExportSummary]? - let nextToken: Swift.String? let localeId: Swift.String? + let botRecommendationId: Swift.String? + let summaryList: [LexModelsV2ClientTypes.RecommendedIntentSummary]? + let nextToken: Swift.String? } -extension ListExportsOutputResponseBody: Swift.Decodable { +extension ListRecommendedIntentsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId + case botRecommendationId case botVersion - case exportSummaries case localeId case nextToken + case summaryList } public init(from decoder: Swift.Decoder) throws { @@ -18267,52 +22899,47 @@ extension ListExportsOutputResponseBody: Swift.Decodable { botId = botIdDecoded let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) botVersion = botVersionDecoded - let exportSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ExportSummary?].self, forKey: .exportSummaries) - var exportSummariesDecoded0:[LexModelsV2ClientTypes.ExportSummary]? = nil - if let exportSummariesContainer = exportSummariesContainer { - exportSummariesDecoded0 = [LexModelsV2ClientTypes.ExportSummary]() - for structure0 in exportSummariesContainer { + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let botRecommendationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botRecommendationId) + botRecommendationId = botRecommendationIdDecoded + let summaryListContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.RecommendedIntentSummary?].self, forKey: .summaryList) + var summaryListDecoded0:[LexModelsV2ClientTypes.RecommendedIntentSummary]? = nil + if let summaryListContainer = summaryListContainer { + summaryListDecoded0 = [LexModelsV2ClientTypes.RecommendedIntentSummary]() + for structure0 in summaryListContainer { if let structure0 = structure0 { - exportSummariesDecoded0?.append(structure0) + summaryListDecoded0?.append(structure0) } } } - exportSummaries = exportSummariesDecoded0 + summaryList = summaryListDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded } } -extension ListImportsInput: Swift.Encodable { +extension ListSessionAnalyticsDataInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion + case endDateTime case filters - case localeId case maxResults case nextToken case sortBy + case startDateTime } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let botId = self.botId { - try encodeContainer.encode(botId, forKey: .botId) - } - if let botVersion = self.botVersion { - try encodeContainer.encode(botVersion, forKey: .botVersion) + if let endDateTime = self.endDateTime { + try encodeContainer.encodeTimestamp(endDateTime, format: .epochSeconds, forKey: .endDateTime) } if let filters = filters { var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) - for importfilter0 in filters { - try filtersContainer.encode(importfilter0) + for analyticssessionfilter0 in filters { + try filtersContainer.encode(analyticssessionfilter0) } } - if let localeId = self.localeId { - try encodeContainer.encode(localeId, forKey: .localeId) - } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } @@ -18322,84 +22949,91 @@ extension ListImportsInput: Swift.Encodable { if let sortBy = self.sortBy { try encodeContainer.encode(sortBy, forKey: .sortBy) } + if let startDateTime = self.startDateTime { + try encodeContainer.encodeTimestamp(startDateTime, format: .epochSeconds, forKey: .startDateTime) + } } } -extension ListImportsInput: ClientRuntime.URLPathProvider { +extension ListSessionAnalyticsDataInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - return "/imports" + guard let botId = botId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/analytics/sessions" } } -public struct ListImportsInput: Swift.Equatable { - /// The unique identifier that Amazon Lex assigned to the bot. +public struct ListSessionAnalyticsDataInput: Swift.Equatable { + /// The identifier for the bot for which you want to retrieve session analytics. + /// This member is required. public var botId: Swift.String? - /// The version of the bot to list imports for. - public var botVersion: Swift.String? - /// Provides the specification of a filter used to limit the bots in the response to only those that match the filter specification. You can only specify one filter and one string to filter on. - public var filters: [LexModelsV2ClientTypes.ImportFilter]? - /// Specifies the locale that should be present in the list. If you don't specify a resource type in the filters parameter, the list contains both bot locales and custom vocabularies. - public var localeId: Swift.String? - /// The maximum number of imports to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + /// The date and time that marks the end of the range of time for which you want to see session analytics. + /// This member is required. + public var endDateTime: ClientRuntime.Date? + /// A list of objects, each of which describes a condition by which you want to filter the results. + public var filters: [LexModelsV2ClientTypes.AnalyticsSessionFilter]? + /// The maximum number of results to return in each page of results. If there are fewer results than the maximum page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListImports operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListImports request to return the next page of results. For a complete set of results, call the ListImports operation until the nextToken returned in the response is null. + /// If the response from the ListSessionAnalyticsData operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListSessionAnalyticsData request to return the next page of results. For a complete set of results, call the ListSessionAnalyticsData operation until the nextToken returned in the response is null. public var nextToken: Swift.String? - /// Determines the field that the list of imports is sorted by. You can sort by the LastUpdatedDateTime field in ascending or descending order. - public var sortBy: LexModelsV2ClientTypes.ImportSortBy? + /// An object specifying the measure and method by which to sort the session analytics data. + public var sortBy: LexModelsV2ClientTypes.SessionDataSortBy? + /// The date and time that marks the beginning of the range of time for which you want to see session analytics. + /// This member is required. + public var startDateTime: ClientRuntime.Date? public init( botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - filters: [LexModelsV2ClientTypes.ImportFilter]? = nil, - localeId: Swift.String? = nil, + endDateTime: ClientRuntime.Date? = nil, + filters: [LexModelsV2ClientTypes.AnalyticsSessionFilter]? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.ImportSortBy? = nil + sortBy: LexModelsV2ClientTypes.SessionDataSortBy? = nil, + startDateTime: ClientRuntime.Date? = nil ) { self.botId = botId - self.botVersion = botVersion + self.endDateTime = endDateTime self.filters = filters - self.localeId = localeId self.maxResults = maxResults self.nextToken = nextToken self.sortBy = sortBy + self.startDateTime = startDateTime } } -struct ListImportsInputBody: Swift.Equatable { - let botId: Swift.String? - let botVersion: Swift.String? - let sortBy: LexModelsV2ClientTypes.ImportSortBy? - let filters: [LexModelsV2ClientTypes.ImportFilter]? +struct ListSessionAnalyticsDataInputBody: Swift.Equatable { + let startDateTime: ClientRuntime.Date? + let endDateTime: ClientRuntime.Date? + let sortBy: LexModelsV2ClientTypes.SessionDataSortBy? + let filters: [LexModelsV2ClientTypes.AnalyticsSessionFilter]? let maxResults: Swift.Int? let nextToken: Swift.String? - let localeId: Swift.String? } -extension ListImportsInputBody: Swift.Decodable { +extension ListSessionAnalyticsDataInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion + case endDateTime case filters - case localeId case maxResults case nextToken case sortBy + case startDateTime } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImportSortBy.self, forKey: .sortBy) + let startDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startDateTime) + startDateTime = startDateTimeDecoded + let endDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endDateTime) + endDateTime = endDateTimeDecoded + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SessionDataSortBy.self, forKey: .sortBy) sortBy = sortByDecoded - let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ImportFilter?].self, forKey: .filters) - var filtersDecoded0:[LexModelsV2ClientTypes.ImportFilter]? = nil + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsSessionFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.AnalyticsSessionFilter]? = nil if let filtersContainer = filtersContainer { - filtersDecoded0 = [LexModelsV2ClientTypes.ImportFilter]() + filtersDecoded0 = [LexModelsV2ClientTypes.AnalyticsSessionFilter]() for structure0 in filtersContainer { if let structure0 = structure0 { filtersDecoded0?.append(structure0) @@ -18411,17 +23045,17 @@ extension ListImportsInputBody: Swift.Decodable { maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded } } -public enum ListImportsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListSessionAnalyticsDataOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -18429,200 +23063,255 @@ public enum ListImportsOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListImportsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListSessionAnalyticsDataOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListImportsOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListSessionAnalyticsDataOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId - self.botVersion = output.botVersion - self.importSummaries = output.importSummaries - self.localeId = output.localeId self.nextToken = output.nextToken + self.sessions = output.sessions } else { - self.botId = nil - self.botVersion = nil - self.importSummaries = nil - self.localeId = nil + self.botId = nil self.nextToken = nil + self.sessions = nil } } } -public struct ListImportsOutputResponse: Swift.Equatable { - /// The unique identifier assigned by Amazon Lex to the bot. +public struct ListSessionAnalyticsDataOutputResponse: Swift.Equatable { + /// The unique identifier of the bot that the sessions belong to. public var botId: Swift.String? - /// The version of the bot that was imported. It will always be DRAFT. - public var botVersion: Swift.String? - /// Summary information for the imports that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter. If there are more imports available, the nextToken field contains a token to get the next page of results. - public var importSummaries: [LexModelsV2ClientTypes.ImportSummary]? - /// The locale specified in the request. - public var localeId: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListImports operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListImports operation request to get the next page of results. + /// If the response from the ListSessionAnalyticsData operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListSessionAnalyticsData request to return the next page of results. For a complete set of results, call the ListSessionAnalyticsData operation until the nextToken returned in the response is null. public var nextToken: Swift.String? + /// A list of objects, each of which contains information about a session with the bot. + public var sessions: [LexModelsV2ClientTypes.SessionSpecification]? public init( botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - importSummaries: [LexModelsV2ClientTypes.ImportSummary]? = nil, - localeId: Swift.String? = nil, - nextToken: Swift.String? = nil + nextToken: Swift.String? = nil, + sessions: [LexModelsV2ClientTypes.SessionSpecification]? = nil ) { self.botId = botId - self.botVersion = botVersion - self.importSummaries = importSummaries - self.localeId = localeId self.nextToken = nextToken + self.sessions = sessions } } -struct ListImportsOutputResponseBody: Swift.Equatable { +struct ListSessionAnalyticsDataOutputResponseBody: Swift.Equatable { let botId: Swift.String? - let botVersion: Swift.String? - let importSummaries: [LexModelsV2ClientTypes.ImportSummary]? let nextToken: Swift.String? - let localeId: Swift.String? + let sessions: [LexModelsV2ClientTypes.SessionSpecification]? } -extension ListImportsOutputResponseBody: Swift.Decodable { +extension ListSessionAnalyticsDataOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId - case botVersion - case importSummaries - case localeId case nextToken + case sessions } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let importSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.ImportSummary?].self, forKey: .importSummaries) - var importSummariesDecoded0:[LexModelsV2ClientTypes.ImportSummary]? = nil - if let importSummariesContainer = importSummariesContainer { - importSummariesDecoded0 = [LexModelsV2ClientTypes.ImportSummary]() - for structure0 in importSummariesContainer { + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let sessionsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SessionSpecification?].self, forKey: .sessions) + var sessionsDecoded0:[LexModelsV2ClientTypes.SessionSpecification]? = nil + if let sessionsContainer = sessionsContainer { + sessionsDecoded0 = [LexModelsV2ClientTypes.SessionSpecification]() + for structure0 in sessionsContainer { if let structure0 = structure0 { - importSummariesDecoded0?.append(structure0) + sessionsDecoded0?.append(structure0) } } } - importSummaries = importSummariesDecoded0 - let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) - nextToken = nextTokenDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded + sessions = sessionsDecoded0 } } -extension ListIntentsInput: Swift.Encodable { +extension ListSessionMetricsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case binBy + case endDateTime case filters + case groupBy case maxResults + case metrics case nextToken - case sortBy + case startDateTime } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let binBy = binBy { + var binByContainer = encodeContainer.nestedUnkeyedContainer(forKey: .binBy) + for analyticsbinbyspecification0 in binBy { + try binByContainer.encode(analyticsbinbyspecification0) + } + } + if let endDateTime = self.endDateTime { + try encodeContainer.encodeTimestamp(endDateTime, format: .epochSeconds, forKey: .endDateTime) + } if let filters = filters { var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) - for intentfilter0 in filters { - try filtersContainer.encode(intentfilter0) + for analyticssessionfilter0 in filters { + try filtersContainer.encode(analyticssessionfilter0) + } + } + if let groupBy = groupBy { + var groupByContainer = encodeContainer.nestedUnkeyedContainer(forKey: .groupBy) + for analyticssessiongroupbyspecification0 in groupBy { + try groupByContainer.encode(analyticssessiongroupbyspecification0) } } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } + if let metrics = metrics { + var metricsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .metrics) + for analyticssessionmetric0 in metrics { + try metricsContainer.encode(analyticssessionmetric0) + } + } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } - if let sortBy = self.sortBy { - try encodeContainer.encode(sortBy, forKey: .sortBy) + if let startDateTime = self.startDateTime { + try encodeContainer.encodeTimestamp(startDateTime, format: .epochSeconds, forKey: .startDateTime) } } } -extension ListIntentsInput: ClientRuntime.URLPathProvider { +extension ListSessionMetricsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil } - guard let botVersion = botVersion else { - return nil - } - guard let localeId = localeId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents" + return "/bots/\(botId.urlPercentEncoding())/analytics/sessionmetrics" } } -public struct ListIntentsInput: Swift.Equatable { - /// The unique identifier of the bot that contains the intent. +public struct ListSessionMetricsInput: Swift.Equatable { + /// A list of objects, each of which contains specifications for organizing the results by time. + public var binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? + /// The identifier for the bot for which you want to retrieve session metrics. /// This member is required. public var botId: Swift.String? - /// The version of the bot that contains the intent. - /// This member is required. - public var botVersion: Swift.String? - /// Provides the specification of a filter used to limit the intents in the response to only those that match the filter specification. You can only specify one filter and only one string to filter on. - public var filters: [LexModelsV2ClientTypes.IntentFilter]? - /// The identifier of the language and locale of the intents to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// The date and time that marks the end of the range of time for which you want to see session metrics. /// This member is required. - public var localeId: Swift.String? - /// The maximum number of intents to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + public var endDateTime: ClientRuntime.Date? + /// A list of objects, each of which describes a condition by which you want to filter the results. + public var filters: [LexModelsV2ClientTypes.AnalyticsSessionFilter]? + /// A list of objects, each of which specifies how to group the results. You can group by the following criteria: + /// + /// * ConversationEndState – The final state of the conversation. The possible end states are detailed in [Key definitions](https://docs.aws.amazon.com/analytics-key-definitions-conversations) in the user guide. + /// + /// * LocaleId – The unique identifier of the bot locale. + public var groupBy: [LexModelsV2ClientTypes.AnalyticsSessionGroupBySpecification]? + /// The maximum number of results to return in each page of results. If there are fewer results than the maximum page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListIntents operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListIntents request to return the next page of results. For a complete set of results, call the ListIntents operation until the nextToken returned in the response is null. + /// A list of objects, each of which contains a metric you want to list, the statistic for the metric you want to return, and the method by which to organize the results. + /// This member is required. + public var metrics: [LexModelsV2ClientTypes.AnalyticsSessionMetric]? + /// If the response from the ListSessionMetrics operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListSessionMetrics request to return the next page of results. For a complete set of results, call the ListSessionMetrics operation until the nextToken returned in the response is null. public var nextToken: Swift.String? - /// Determines the sort order for the response from the ListIntents operation. You can choose to sort by the intent name or last updated date in either ascending or descending order. - public var sortBy: LexModelsV2ClientTypes.IntentSortBy? + /// The date and time that marks the beginning of the range of time for which you want to see session metrics. + /// This member is required. + public var startDateTime: ClientRuntime.Date? public init( + binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? = nil, botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - filters: [LexModelsV2ClientTypes.IntentFilter]? = nil, - localeId: Swift.String? = nil, + endDateTime: ClientRuntime.Date? = nil, + filters: [LexModelsV2ClientTypes.AnalyticsSessionFilter]? = nil, + groupBy: [LexModelsV2ClientTypes.AnalyticsSessionGroupBySpecification]? = nil, maxResults: Swift.Int? = nil, + metrics: [LexModelsV2ClientTypes.AnalyticsSessionMetric]? = nil, nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.IntentSortBy? = nil + startDateTime: ClientRuntime.Date? = nil ) { + self.binBy = binBy self.botId = botId - self.botVersion = botVersion + self.endDateTime = endDateTime self.filters = filters - self.localeId = localeId + self.groupBy = groupBy self.maxResults = maxResults + self.metrics = metrics self.nextToken = nextToken - self.sortBy = sortBy + self.startDateTime = startDateTime } } -struct ListIntentsInputBody: Swift.Equatable { - let sortBy: LexModelsV2ClientTypes.IntentSortBy? - let filters: [LexModelsV2ClientTypes.IntentFilter]? +struct ListSessionMetricsInputBody: Swift.Equatable { + let startDateTime: ClientRuntime.Date? + let endDateTime: ClientRuntime.Date? + let metrics: [LexModelsV2ClientTypes.AnalyticsSessionMetric]? + let binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? + let groupBy: [LexModelsV2ClientTypes.AnalyticsSessionGroupBySpecification]? + let filters: [LexModelsV2ClientTypes.AnalyticsSessionFilter]? let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListIntentsInputBody: Swift.Decodable { +extension ListSessionMetricsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case binBy + case endDateTime case filters + case groupBy case maxResults + case metrics case nextToken - case sortBy + case startDateTime } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentSortBy.self, forKey: .sortBy) - sortBy = sortByDecoded - let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.IntentFilter?].self, forKey: .filters) - var filtersDecoded0:[LexModelsV2ClientTypes.IntentFilter]? = nil + let startDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startDateTime) + startDateTime = startDateTimeDecoded + let endDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endDateTime) + endDateTime = endDateTimeDecoded + let metricsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsSessionMetric?].self, forKey: .metrics) + var metricsDecoded0:[LexModelsV2ClientTypes.AnalyticsSessionMetric]? = nil + if let metricsContainer = metricsContainer { + metricsDecoded0 = [LexModelsV2ClientTypes.AnalyticsSessionMetric]() + for structure0 in metricsContainer { + if let structure0 = structure0 { + metricsDecoded0?.append(structure0) + } + } + } + metrics = metricsDecoded0 + let binByContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsBinBySpecification?].self, forKey: .binBy) + var binByDecoded0:[LexModelsV2ClientTypes.AnalyticsBinBySpecification]? = nil + if let binByContainer = binByContainer { + binByDecoded0 = [LexModelsV2ClientTypes.AnalyticsBinBySpecification]() + for structure0 in binByContainer { + if let structure0 = structure0 { + binByDecoded0?.append(structure0) + } + } + } + binBy = binByDecoded0 + let groupByContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsSessionGroupBySpecification?].self, forKey: .groupBy) + var groupByDecoded0:[LexModelsV2ClientTypes.AnalyticsSessionGroupBySpecification]? = nil + if let groupByContainer = groupByContainer { + groupByDecoded0 = [LexModelsV2ClientTypes.AnalyticsSessionGroupBySpecification]() + for structure0 in groupByContainer { + if let structure0 = structure0 { + groupByDecoded0?.append(structure0) + } + } + } + groupBy = groupByDecoded0 + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsSessionFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.AnalyticsSessionFilter]? = nil if let filtersContainer = filtersContainer { - filtersDecoded0 = [LexModelsV2ClientTypes.IntentFilter]() + filtersDecoded0 = [LexModelsV2ClientTypes.AnalyticsSessionFilter]() for structure0 in filtersContainer { if let structure0 = structure0 { filtersDecoded0?.append(structure0) @@ -18637,12 +23326,13 @@ extension ListIntentsInputBody: Swift.Decodable { } } -public enum ListIntentsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListSessionMetricsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -18651,113 +23341,104 @@ public enum ListIntentsOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListIntentsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListSessionMetricsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListIntentsOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListSessionMetricsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId - self.botVersion = output.botVersion - self.intentSummaries = output.intentSummaries - self.localeId = output.localeId self.nextToken = output.nextToken + self.results = output.results } else { self.botId = nil - self.botVersion = nil - self.intentSummaries = nil - self.localeId = nil self.nextToken = nil + self.results = nil } } } -public struct ListIntentsOutputResponse: Swift.Equatable { - /// The identifier of the bot that contains the intent. +public struct ListSessionMetricsOutputResponse: Swift.Equatable { + /// The identifier for the bot for which you retrieved session metrics. public var botId: Swift.String? - /// The version of the bot that contains the intent. - public var botVersion: Swift.String? - /// Summary information for the intents that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more intents available, the nextToken field contains a token to get the next page of results. - public var intentSummaries: [LexModelsV2ClientTypes.IntentSummary]? - /// The language and locale of the intents in the list. - public var localeId: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListIntents operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListIntents operation request to get the next page of results. + /// If the response from the ListSessionMetrics operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListSessionMetrics request to return the next page of results. For a complete set of results, call the ListSessionMetrics operation until the nextToken returned in the response is null. public var nextToken: Swift.String? + /// The results for the session metrics. + public var results: [LexModelsV2ClientTypes.AnalyticsSessionResult]? public init( botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - intentSummaries: [LexModelsV2ClientTypes.IntentSummary]? = nil, - localeId: Swift.String? = nil, - nextToken: Swift.String? = nil + nextToken: Swift.String? = nil, + results: [LexModelsV2ClientTypes.AnalyticsSessionResult]? = nil ) { self.botId = botId - self.botVersion = botVersion - self.intentSummaries = intentSummaries - self.localeId = localeId self.nextToken = nextToken + self.results = results } } -struct ListIntentsOutputResponseBody: Swift.Equatable { +struct ListSessionMetricsOutputResponseBody: Swift.Equatable { let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let intentSummaries: [LexModelsV2ClientTypes.IntentSummary]? + let results: [LexModelsV2ClientTypes.AnalyticsSessionResult]? let nextToken: Swift.String? } -extension ListIntentsOutputResponseBody: Swift.Decodable { +extension ListSessionMetricsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId - case botVersion - case intentSummaries - case localeId case nextToken + case results } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let intentSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.IntentSummary?].self, forKey: .intentSummaries) - var intentSummariesDecoded0:[LexModelsV2ClientTypes.IntentSummary]? = nil - if let intentSummariesContainer = intentSummariesContainer { - intentSummariesDecoded0 = [LexModelsV2ClientTypes.IntentSummary]() - for structure0 in intentSummariesContainer { + let resultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsSessionResult?].self, forKey: .results) + var resultsDecoded0:[LexModelsV2ClientTypes.AnalyticsSessionResult]? = nil + if let resultsContainer = resultsContainer { + resultsDecoded0 = [LexModelsV2ClientTypes.AnalyticsSessionResult]() + for structure0 in resultsContainer { if let structure0 = structure0 { - intentSummariesDecoded0?.append(structure0) + resultsDecoded0?.append(structure0) } } } - intentSummaries = intentSummariesDecoded0 + results = resultsDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded } } -extension ListRecommendedIntentsInput: Swift.Encodable { +extension ListSlotTypesInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case filters case maxResults case nextToken + case sortBy } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for slottypefilter0 in filters { + try filtersContainer.encode(slottypefilter0) + } + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy, forKey: .sortBy) + } } } -extension ListRecommendedIntentsInput: ClientRuntime.URLPathProvider { +extension ListSlotTypesInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil @@ -18768,76 +23449,92 @@ extension ListRecommendedIntentsInput: ClientRuntime.URLPathProvider { guard let localeId = localeId else { return nil } - guard let botRecommendationId = botRecommendationId else { - return nil - } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/botrecommendations/\(botRecommendationId.urlPercentEncoding())/intents" + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/slottypes" } } -public struct ListRecommendedIntentsInput: Swift.Equatable { - /// The unique identifier of the bot associated with the recommended intents. +public struct ListSlotTypesInput: Swift.Equatable { + /// The unique identifier of the bot that contains the slot types. /// This member is required. public var botId: Swift.String? - /// The identifier of the bot recommendation that contains the recommended intents. - /// This member is required. - public var botRecommendationId: Swift.String? - /// The version of the bot that contains the recommended intents. + /// The version of the bot that contains the slot type. /// This member is required. public var botVersion: Swift.String? - /// The identifier of the language and locale of the recommended intents. + /// Provides the specification of a filter used to limit the slot types in the response to only those that match the filter specification. You can only specify one filter and only one string to filter on. + public var filters: [LexModelsV2ClientTypes.SlotTypeFilter]? + /// The identifier of the language and locale of the slot types to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). /// This member is required. public var localeId: Swift.String? - /// The maximum number of bot recommendations to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + /// The maximum number of slot types to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListRecommendedIntents operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// If the response from the ListSlotTypes operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. public var nextToken: Swift.String? + /// Determines the sort order for the response from the ListSlotTypes operation. You can choose to sort by the slot type name or last updated date in either ascending or descending order. + public var sortBy: LexModelsV2ClientTypes.SlotTypeSortBy? public init( botId: Swift.String? = nil, - botRecommendationId: Swift.String? = nil, botVersion: Swift.String? = nil, + filters: [LexModelsV2ClientTypes.SlotTypeFilter]? = nil, localeId: Swift.String? = nil, maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil + nextToken: Swift.String? = nil, + sortBy: LexModelsV2ClientTypes.SlotTypeSortBy? = nil ) { self.botId = botId - self.botRecommendationId = botRecommendationId self.botVersion = botVersion + self.filters = filters self.localeId = localeId self.maxResults = maxResults self.nextToken = nextToken + self.sortBy = sortBy } } -struct ListRecommendedIntentsInputBody: Swift.Equatable { - let nextToken: Swift.String? +struct ListSlotTypesInputBody: Swift.Equatable { + let sortBy: LexModelsV2ClientTypes.SlotTypeSortBy? + let filters: [LexModelsV2ClientTypes.SlotTypeFilter]? let maxResults: Swift.Int? + let nextToken: Swift.String? } -extension ListRecommendedIntentsInputBody: Swift.Decodable { +extension ListSlotTypesInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case filters case maxResults case nextToken + case sortBy } 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 sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotTypeSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotTypeFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.SlotTypeFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [LexModelsV2ClientTypes.SlotTypeFilter]() + for structure0 in filtersContainer { + if let structure0 = structure0 { + filtersDecoded0?.append(structure0) + } + } + } + filters = filtersDecoded0 let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -public enum ListRecommendedIntentsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListSlotTypesOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -18846,77 +23543,69 @@ public enum ListRecommendedIntentsOutputError: ClientRuntime.HttpResponseErrorBi } } -extension ListRecommendedIntentsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListSlotTypesOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListRecommendedIntentsOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListSlotTypesOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId - self.botRecommendationId = output.botRecommendationId self.botVersion = output.botVersion self.localeId = output.localeId self.nextToken = output.nextToken - self.summaryList = output.summaryList + self.slotTypeSummaries = output.slotTypeSummaries } else { self.botId = nil - self.botRecommendationId = nil self.botVersion = nil self.localeId = nil self.nextToken = nil - self.summaryList = nil + self.slotTypeSummaries = nil } } } -public struct ListRecommendedIntentsOutputResponse: Swift.Equatable { - /// The unique identifier of the bot associated with the recommended intent. +public struct ListSlotTypesOutputResponse: Swift.Equatable { + /// The identifier of the bot that contains the slot types. public var botId: Swift.String? - /// The identifier of the bot recommendation that contains the recommended intent. - public var botRecommendationId: Swift.String? - /// The version of the bot that contains the intent. + /// The version of the bot that contains the slot types. public var botVersion: Swift.String? - /// The identifier of the language and locale of the intents to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// The language and local of the slot types in the list. public var localeId: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListRecommendedIntents operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListRecommendedIntents operation request to get the next page of results. + /// A token that indicates whether there are more results to return in a response to the ListSlotTypes operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListSlotTypes operation request to get the next page of results. public var nextToken: Swift.String? - /// Summary information for the intents that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more intents available, the nextToken field contains a token to get the next page of results. - public var summaryList: [LexModelsV2ClientTypes.RecommendedIntentSummary]? + /// Summary information for the slot types that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more slot types available, the nextToken field contains a token to get the next page of results. + public var slotTypeSummaries: [LexModelsV2ClientTypes.SlotTypeSummary]? public init( botId: Swift.String? = nil, - botRecommendationId: Swift.String? = nil, botVersion: Swift.String? = nil, localeId: Swift.String? = nil, nextToken: Swift.String? = nil, - summaryList: [LexModelsV2ClientTypes.RecommendedIntentSummary]? = nil + slotTypeSummaries: [LexModelsV2ClientTypes.SlotTypeSummary]? = nil ) { self.botId = botId - self.botRecommendationId = botRecommendationId self.botVersion = botVersion self.localeId = localeId self.nextToken = nextToken - self.summaryList = summaryList + self.slotTypeSummaries = slotTypeSummaries } } -struct ListRecommendedIntentsOutputResponseBody: Swift.Equatable { +struct ListSlotTypesOutputResponseBody: Swift.Equatable { let botId: Swift.String? let botVersion: Swift.String? let localeId: Swift.String? - let botRecommendationId: Swift.String? - let summaryList: [LexModelsV2ClientTypes.RecommendedIntentSummary]? + let slotTypeSummaries: [LexModelsV2ClientTypes.SlotTypeSummary]? let nextToken: Swift.String? } -extension ListRecommendedIntentsOutputResponseBody: Swift.Decodable { +extension ListSlotTypesOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId - case botRecommendationId case botVersion case localeId case nextToken - case summaryList + case slotTypeSummaries } public init(from decoder: Swift.Decoder) throws { @@ -18927,25 +23616,23 @@ extension ListRecommendedIntentsOutputResponseBody: Swift.Decodable { botVersion = botVersionDecoded let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) localeId = localeIdDecoded - let botRecommendationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botRecommendationId) - botRecommendationId = botRecommendationIdDecoded - let summaryListContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.RecommendedIntentSummary?].self, forKey: .summaryList) - var summaryListDecoded0:[LexModelsV2ClientTypes.RecommendedIntentSummary]? = nil - if let summaryListContainer = summaryListContainer { - summaryListDecoded0 = [LexModelsV2ClientTypes.RecommendedIntentSummary]() - for structure0 in summaryListContainer { + let slotTypeSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotTypeSummary?].self, forKey: .slotTypeSummaries) + var slotTypeSummariesDecoded0:[LexModelsV2ClientTypes.SlotTypeSummary]? = nil + if let slotTypeSummariesContainer = slotTypeSummariesContainer { + slotTypeSummariesDecoded0 = [LexModelsV2ClientTypes.SlotTypeSummary]() + for structure0 in slotTypeSummariesContainer { if let structure0 = structure0 { - summaryListDecoded0?.append(structure0) + slotTypeSummariesDecoded0?.append(structure0) } } } - summaryList = summaryListDecoded0 + slotTypeSummaries = slotTypeSummariesDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded } } -extension ListSlotTypesInput: Swift.Encodable { +extension ListSlotsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case filters case maxResults @@ -18957,8 +23644,8 @@ extension ListSlotTypesInput: Swift.Encodable { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) if let filters = filters { var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) - for slottypefilter0 in filters { - try filtersContainer.encode(slottypefilter0) + for slotfilter0 in filters { + try filtersContainer.encode(slotfilter0) } } if let maxResults = self.maxResults { @@ -18973,7 +23660,7 @@ extension ListSlotTypesInput: Swift.Encodable { } } -extension ListSlotTypesInput: ClientRuntime.URLPathProvider { +extension ListSlotsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let botId = botId else { return nil @@ -18984,42 +23671,50 @@ extension ListSlotTypesInput: ClientRuntime.URLPathProvider { guard let localeId = localeId else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/slottypes" + guard let intentId = intentId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())/slots" } } -public struct ListSlotTypesInput: Swift.Equatable { - /// The unique identifier of the bot that contains the slot types. +public struct ListSlotsInput: Swift.Equatable { + /// The identifier of the bot that contains the slot. /// This member is required. public var botId: Swift.String? - /// The version of the bot that contains the slot type. + /// The version of the bot that contains the slot. /// This member is required. public var botVersion: Swift.String? - /// Provides the specification of a filter used to limit the slot types in the response to only those that match the filter specification. You can only specify one filter and only one string to filter on. - public var filters: [LexModelsV2ClientTypes.SlotTypeFilter]? - /// The identifier of the language and locale of the slot types to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). + /// Provides the specification of a filter used to limit the slots in the response to only those that match the filter specification. You can only specify one filter and only one string to filter on. + public var filters: [LexModelsV2ClientTypes.SlotFilter]? + /// The unique identifier of the intent that contains the slot. + /// This member is required. + public var intentId: Swift.String? + /// The identifier of the language and locale of the slots to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). /// This member is required. public var localeId: Swift.String? - /// The maximum number of slot types to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. + /// The maximum number of slots to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListSlotTypes operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// If the response from the ListSlots operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. public var nextToken: Swift.String? - /// Determines the sort order for the response from the ListSlotTypes operation. You can choose to sort by the slot type name or last updated date in either ascending or descending order. - public var sortBy: LexModelsV2ClientTypes.SlotTypeSortBy? + /// Determines the sort order for the response from the ListSlots operation. You can choose to sort by the slot name or last updated date in either ascending or descending order. + public var sortBy: LexModelsV2ClientTypes.SlotSortBy? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, - filters: [LexModelsV2ClientTypes.SlotTypeFilter]? = nil, + filters: [LexModelsV2ClientTypes.SlotFilter]? = nil, + intentId: Swift.String? = nil, localeId: Swift.String? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.SlotTypeSortBy? = nil + sortBy: LexModelsV2ClientTypes.SlotSortBy? = nil ) { self.botId = botId self.botVersion = botVersion self.filters = filters + self.intentId = intentId self.localeId = localeId self.maxResults = maxResults self.nextToken = nextToken @@ -19027,14 +23722,14 @@ public struct ListSlotTypesInput: Swift.Equatable { } } -struct ListSlotTypesInputBody: Swift.Equatable { - let sortBy: LexModelsV2ClientTypes.SlotTypeSortBy? - let filters: [LexModelsV2ClientTypes.SlotTypeFilter]? +struct ListSlotsInputBody: Swift.Equatable { + let sortBy: LexModelsV2ClientTypes.SlotSortBy? + let filters: [LexModelsV2ClientTypes.SlotFilter]? let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListSlotTypesInputBody: Swift.Decodable { +extension ListSlotsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case filters case maxResults @@ -19044,12 +23739,12 @@ extension ListSlotTypesInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotTypeSortBy.self, forKey: .sortBy) + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotSortBy.self, forKey: .sortBy) sortBy = sortByDecoded - let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotTypeFilter?].self, forKey: .filters) - var filtersDecoded0:[LexModelsV2ClientTypes.SlotTypeFilter]? = nil + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.SlotFilter]? = nil if let filtersContainer = filtersContainer { - filtersDecoded0 = [LexModelsV2ClientTypes.SlotTypeFilter]() + filtersDecoded0 = [LexModelsV2ClientTypes.SlotFilter]() for structure0 in filtersContainer { if let structure0 = structure0 { filtersDecoded0?.append(structure0) @@ -19064,7 +23759,7 @@ extension ListSlotTypesInputBody: Swift.Decodable { } } -public enum ListSlotTypesOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListSlotsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -19078,69 +23773,77 @@ public enum ListSlotTypesOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListSlotTypesOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListSlotsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListSlotTypesOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListSlotsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.botId = output.botId self.botVersion = output.botVersion + self.intentId = output.intentId self.localeId = output.localeId self.nextToken = output.nextToken - self.slotTypeSummaries = output.slotTypeSummaries + self.slotSummaries = output.slotSummaries } else { self.botId = nil self.botVersion = nil + self.intentId = nil self.localeId = nil self.nextToken = nil - self.slotTypeSummaries = nil + self.slotSummaries = nil } } } -public struct ListSlotTypesOutputResponse: Swift.Equatable { - /// The identifier of the bot that contains the slot types. +public struct ListSlotsOutputResponse: Swift.Equatable { + /// The identifier of the bot that contains the slots. public var botId: Swift.String? - /// The version of the bot that contains the slot types. + /// The version of the bot that contains the slots. public var botVersion: Swift.String? - /// The language and local of the slot types in the list. + /// The identifier of the intent that contains the slots. + public var intentId: Swift.String? + /// The language and locale of the slots in the list. public var localeId: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListSlotTypes operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListSlotTypes operation request to get the next page of results. + /// A token that indicates whether there are more results to return in a response to the ListSlots operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListSlots operation request to get the next page of results. public var nextToken: Swift.String? - /// Summary information for the slot types that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more slot types available, the nextToken field contains a token to get the next page of results. - public var slotTypeSummaries: [LexModelsV2ClientTypes.SlotTypeSummary]? + /// Summary information for the slots that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more slots available, the nextToken field contains a token to get the next page of results. + public var slotSummaries: [LexModelsV2ClientTypes.SlotSummary]? public init( botId: Swift.String? = nil, botVersion: Swift.String? = nil, + intentId: Swift.String? = nil, localeId: Swift.String? = nil, nextToken: Swift.String? = nil, - slotTypeSummaries: [LexModelsV2ClientTypes.SlotTypeSummary]? = nil + slotSummaries: [LexModelsV2ClientTypes.SlotSummary]? = nil ) { self.botId = botId self.botVersion = botVersion + self.intentId = intentId self.localeId = localeId self.nextToken = nextToken - self.slotTypeSummaries = slotTypeSummaries + self.slotSummaries = slotSummaries } } -struct ListSlotTypesOutputResponseBody: Swift.Equatable { +struct ListSlotsOutputResponseBody: Swift.Equatable { let botId: Swift.String? let botVersion: Swift.String? let localeId: Swift.String? - let slotTypeSummaries: [LexModelsV2ClientTypes.SlotTypeSummary]? + let intentId: Swift.String? + let slotSummaries: [LexModelsV2ClientTypes.SlotSummary]? let nextToken: Swift.String? } -extension ListSlotTypesOutputResponseBody: Swift.Decodable { +extension ListSlotsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case botId case botVersion + case intentId case localeId case nextToken - case slotTypeSummaries + case slotSummaries } public init(from decoder: Swift.Decoder) throws { @@ -19151,142 +23854,191 @@ extension ListSlotTypesOutputResponseBody: Swift.Decodable { botVersion = botVersionDecoded let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) localeId = localeIdDecoded - let slotTypeSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotTypeSummary?].self, forKey: .slotTypeSummaries) - var slotTypeSummariesDecoded0:[LexModelsV2ClientTypes.SlotTypeSummary]? = nil - if let slotTypeSummariesContainer = slotTypeSummariesContainer { - slotTypeSummariesDecoded0 = [LexModelsV2ClientTypes.SlotTypeSummary]() - for structure0 in slotTypeSummariesContainer { + let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) + intentId = intentIdDecoded + let slotSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotSummary?].self, forKey: .slotSummaries) + var slotSummariesDecoded0:[LexModelsV2ClientTypes.SlotSummary]? = nil + if let slotSummariesContainer = slotSummariesContainer { + slotSummariesDecoded0 = [LexModelsV2ClientTypes.SlotSummary]() + for structure0 in slotSummariesContainer { if let structure0 = structure0 { - slotTypeSummariesDecoded0?.append(structure0) + slotSummariesDecoded0?.append(structure0) } } } - slotTypeSummaries = slotTypeSummariesDecoded0 + slotSummaries = slotSummariesDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded } } -extension ListSlotsInput: Swift.Encodable { +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) of the resource to get a list of tags for. + /// 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 { + } +} + +public enum ListTagsForResourceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListTagsForResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListTagsForResourceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.tags = output.tags + } else { + self.tags = nil + } + } +} + +public struct ListTagsForResourceOutputResponse: Swift.Equatable { + /// The tags associated with a resource. + 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 + } + + 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 + } +} + +extension ListTestExecutionResultItemsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case filters case maxResults case nextToken - case sortBy + case resultFilterBy } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let filters = filters { - var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) - for slotfilter0 in filters { - try filtersContainer.encode(slotfilter0) - } - } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } - if let sortBy = self.sortBy { - try encodeContainer.encode(sortBy, forKey: .sortBy) + if let resultFilterBy = self.resultFilterBy { + try encodeContainer.encode(resultFilterBy, forKey: .resultFilterBy) } } } -extension ListSlotsInput: ClientRuntime.URLPathProvider { +extension ListTestExecutionResultItemsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let botId = botId else { - return nil - } - guard let botVersion = botVersion else { - return nil - } - guard let localeId = localeId else { - return nil - } - guard let intentId = intentId else { + guard let testExecutionId = testExecutionId else { return nil } - return "/bots/\(botId.urlPercentEncoding())/botversions/\(botVersion.urlPercentEncoding())/botlocales/\(localeId.urlPercentEncoding())/intents/\(intentId.urlPercentEncoding())/slots" + return "/testexecutions/\(testExecutionId.urlPercentEncoding())/results" } } -public struct ListSlotsInput: Swift.Equatable { - /// The identifier of the bot that contains the slot. - /// This member is required. - public var botId: Swift.String? - /// The version of the bot that contains the slot. - /// This member is required. - public var botVersion: Swift.String? - /// Provides the specification of a filter used to limit the slots in the response to only those that match the filter specification. You can only specify one filter and only one string to filter on. - public var filters: [LexModelsV2ClientTypes.SlotFilter]? - /// The unique identifier of the intent that contains the slot. - /// This member is required. - public var intentId: Swift.String? - /// The identifier of the language and locale of the slots to list. The string must match one of the supported locales. For more information, see [Supported languages](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html). - /// This member is required. - public var localeId: Swift.String? - /// The maximum number of slots to return in each page of results. If there are fewer results than the max page size, only the actual number of results are returned. +public struct ListTestExecutionResultItemsInput: Swift.Equatable { + /// The maximum number of test execution result items to return in each page. If there are fewer results than the max page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListSlots operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// If the response from the ListTestExecutionResultItems operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. public var nextToken: Swift.String? - /// Determines the sort order for the response from the ListSlots operation. You can choose to sort by the slot name or last updated date in either ascending or descending order. - public var sortBy: LexModelsV2ClientTypes.SlotSortBy? + /// The filter for the list of results from the test set execution. + /// This member is required. + public var resultFilterBy: LexModelsV2ClientTypes.TestExecutionResultFilterBy? + /// The unique identifier of the test execution to list the result items. + /// This member is required. + public var testExecutionId: Swift.String? public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - filters: [LexModelsV2ClientTypes.SlotFilter]? = nil, - intentId: Swift.String? = nil, - localeId: Swift.String? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.SlotSortBy? = nil + resultFilterBy: LexModelsV2ClientTypes.TestExecutionResultFilterBy? = nil, + testExecutionId: Swift.String? = nil ) { - self.botId = botId - self.botVersion = botVersion - self.filters = filters - self.intentId = intentId - self.localeId = localeId self.maxResults = maxResults self.nextToken = nextToken - self.sortBy = sortBy + self.resultFilterBy = resultFilterBy + self.testExecutionId = testExecutionId } } -struct ListSlotsInputBody: Swift.Equatable { - let sortBy: LexModelsV2ClientTypes.SlotSortBy? - let filters: [LexModelsV2ClientTypes.SlotFilter]? +struct ListTestExecutionResultItemsInputBody: Swift.Equatable { + let resultFilterBy: LexModelsV2ClientTypes.TestExecutionResultFilterBy? let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListSlotsInputBody: Swift.Decodable { +extension ListTestExecutionResultItemsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case filters case maxResults case nextToken - case sortBy + case resultFilterBy } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.SlotSortBy.self, forKey: .sortBy) - sortBy = sortByDecoded - let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotFilter?].self, forKey: .filters) - var filtersDecoded0:[LexModelsV2ClientTypes.SlotFilter]? = nil - if let filtersContainer = filtersContainer { - filtersDecoded0 = [LexModelsV2ClientTypes.SlotFilter]() - for structure0 in filtersContainer { - if let structure0 = structure0 { - filtersDecoded0?.append(structure0) - } - } - } - filters = filtersDecoded0 + let resultFilterByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionResultFilterBy.self, forKey: .resultFilterBy) + resultFilterBy = resultFilterByDecoded let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) @@ -19294,12 +24046,13 @@ extension ListSlotsInputBody: Swift.Decodable { } } -public enum ListSlotsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListTestExecutionResultItemsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -19308,143 +24061,134 @@ public enum ListSlotsOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListSlotsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListTestExecutionResultItemsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListSlotsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.botId = output.botId - self.botVersion = output.botVersion - self.intentId = output.intentId - self.localeId = output.localeId + let output: ListTestExecutionResultItemsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.nextToken = output.nextToken - self.slotSummaries = output.slotSummaries + self.testExecutionResults = output.testExecutionResults } else { - self.botId = nil - self.botVersion = nil - self.intentId = nil - self.localeId = nil self.nextToken = nil - self.slotSummaries = nil + self.testExecutionResults = nil } } } -public struct ListSlotsOutputResponse: Swift.Equatable { - /// The identifier of the bot that contains the slots. - public var botId: Swift.String? - /// The version of the bot that contains the slots. - public var botVersion: Swift.String? - /// The identifier of the intent that contains the slots. - public var intentId: Swift.String? - /// The language and locale of the slots in the list. - public var localeId: Swift.String? - /// A token that indicates whether there are more results to return in a response to the ListSlots operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListSlots operation request to get the next page of results. +public struct ListTestExecutionResultItemsOutputResponse: Swift.Equatable { + /// A token that indicates whether there are more results to return in a response to the ListTestExecutionResultItems operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListTestExecutionResultItems operation request to get the next page of results. public var nextToken: Swift.String? - /// Summary information for the slots that meet the filter criteria specified in the request. The length of the list is specified in the maxResults parameter of the request. If there are more slots available, the nextToken field contains a token to get the next page of results. - public var slotSummaries: [LexModelsV2ClientTypes.SlotSummary]? + /// The list of results from the test execution. + public var testExecutionResults: LexModelsV2ClientTypes.TestExecutionResultItems? public init( - botId: Swift.String? = nil, - botVersion: Swift.String? = nil, - intentId: Swift.String? = nil, - localeId: Swift.String? = nil, nextToken: Swift.String? = nil, - slotSummaries: [LexModelsV2ClientTypes.SlotSummary]? = nil + testExecutionResults: LexModelsV2ClientTypes.TestExecutionResultItems? = nil ) { - self.botId = botId - self.botVersion = botVersion - self.intentId = intentId - self.localeId = localeId self.nextToken = nextToken - self.slotSummaries = slotSummaries + self.testExecutionResults = testExecutionResults } } -struct ListSlotsOutputResponseBody: Swift.Equatable { - let botId: Swift.String? - let botVersion: Swift.String? - let localeId: Swift.String? - let intentId: Swift.String? - let slotSummaries: [LexModelsV2ClientTypes.SlotSummary]? +struct ListTestExecutionResultItemsOutputResponseBody: Swift.Equatable { + let testExecutionResults: LexModelsV2ClientTypes.TestExecutionResultItems? let nextToken: Swift.String? } -extension ListSlotsOutputResponseBody: Swift.Decodable { +extension ListTestExecutionResultItemsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case botId - case botVersion - case intentId - case localeId case nextToken - case slotSummaries + case testExecutionResults } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) - botId = botIdDecoded - let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) - botVersion = botVersionDecoded - let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) - localeId = localeIdDecoded - let intentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .intentId) - intentId = intentIdDecoded - let slotSummariesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.SlotSummary?].self, forKey: .slotSummaries) - var slotSummariesDecoded0:[LexModelsV2ClientTypes.SlotSummary]? = nil - if let slotSummariesContainer = slotSummariesContainer { - slotSummariesDecoded0 = [LexModelsV2ClientTypes.SlotSummary]() - for structure0 in slotSummariesContainer { - if let structure0 = structure0 { - slotSummariesDecoded0?.append(structure0) - } - } - } - slotSummaries = slotSummariesDecoded0 + let testExecutionResultsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionResultItems.self, forKey: .testExecutionResults) + testExecutionResults = testExecutionResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded } } -extension ListTagsForResourceInput: ClientRuntime.URLPathProvider { - public var urlPath: Swift.String? { - guard let resourceARN = resourceARN else { - return nil +extension ListTestExecutionsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults + case nextToken + case sortBy + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy, forKey: .sortBy) } - return "/tags/\(resourceARN.urlPercentEncoding())" } } -public struct ListTagsForResourceInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the resource to get a list of tags for. - /// This member is required. - public var resourceARN: Swift.String? +extension ListTestExecutionsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/testexecutions" + } +} + +public struct ListTestExecutionsInput: Swift.Equatable { + /// The maximum number of test executions to return in each page. If there are fewer results than the max page size, only the actual number of results are returned. + public var maxResults: Swift.Int? + /// If the response from the ListTestExecutions operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + public var nextToken: Swift.String? + /// The sort order of the test set executions. + public var sortBy: LexModelsV2ClientTypes.TestExecutionSortBy? public init( - resourceARN: Swift.String? = nil + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + sortBy: LexModelsV2ClientTypes.TestExecutionSortBy? = nil ) { - self.resourceARN = resourceARN + self.maxResults = maxResults + self.nextToken = nextToken + self.sortBy = sortBy } } -struct ListTagsForResourceInputBody: Swift.Equatable { +struct ListTestExecutionsInputBody: Swift.Equatable { + let sortBy: LexModelsV2ClientTypes.TestExecutionSortBy? + let maxResults: Swift.Int? + let nextToken: Swift.String? } -extension ListTagsForResourceInputBody: Swift.Decodable { +extension ListTestExecutionsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults + case nextToken + case sortBy + } public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -public enum ListTagsForResourceOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListTestExecutionsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -19452,60 +24196,69 @@ public enum ListTagsForResourceOutputError: ClientRuntime.HttpResponseErrorBindi } } -extension ListTagsForResourceOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListTestExecutionsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListTagsForResourceOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.tags = output.tags + let output: ListTestExecutionsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nextToken = output.nextToken + self.testExecutions = output.testExecutions } else { - self.tags = nil + self.nextToken = nil + self.testExecutions = nil } } } -public struct ListTagsForResourceOutputResponse: Swift.Equatable { - /// The tags associated with a resource. - public var tags: [Swift.String:Swift.String]? +public struct ListTestExecutionsOutputResponse: Swift.Equatable { + /// A token that indicates whether there are more results to return in a response to the ListTestExecutions operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListTestExecutions operation request to get the next page of results. + public var nextToken: Swift.String? + /// The list of test executions. + public var testExecutions: [LexModelsV2ClientTypes.TestExecutionSummary]? public init( - tags: [Swift.String:Swift.String]? = nil + nextToken: Swift.String? = nil, + testExecutions: [LexModelsV2ClientTypes.TestExecutionSummary]? = nil ) { - self.tags = tags + self.nextToken = nextToken + self.testExecutions = testExecutions } } -struct ListTagsForResourceOutputResponseBody: Swift.Equatable { - let tags: [Swift.String:Swift.String]? +struct ListTestExecutionsOutputResponseBody: Swift.Equatable { + let testExecutions: [LexModelsV2ClientTypes.TestExecutionSummary]? + let nextToken: Swift.String? } -extension ListTagsForResourceOutputResponseBody: Swift.Decodable { +extension ListTestExecutionsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case tags + case nextToken + case testExecutions } 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 + let testExecutionsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.TestExecutionSummary?].self, forKey: .testExecutions) + var testExecutionsDecoded0:[LexModelsV2ClientTypes.TestExecutionSummary]? = nil + if let testExecutionsContainer = testExecutionsContainer { + testExecutionsDecoded0 = [LexModelsV2ClientTypes.TestExecutionSummary]() + for structure0 in testExecutionsContainer { + if let structure0 = structure0 { + testExecutionsDecoded0?.append(structure0) } } } - tags = tagsDecoded0 + testExecutions = testExecutionsDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -extension ListTestExecutionResultItemsInput: Swift.Encodable { +extension ListTestSetRecordsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case maxResults case nextToken - case resultFilterBy } public func encode(to encoder: Swift.Encoder) throws { @@ -19516,64 +24269,52 @@ extension ListTestExecutionResultItemsInput: Swift.Encodable { if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } - if let resultFilterBy = self.resultFilterBy { - try encodeContainer.encode(resultFilterBy, forKey: .resultFilterBy) - } } } -extension ListTestExecutionResultItemsInput: ClientRuntime.URLPathProvider { +extension ListTestSetRecordsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let testExecutionId = testExecutionId else { + guard let testSetId = testSetId else { return nil } - return "/testexecutions/\(testExecutionId.urlPercentEncoding())/results" + return "/testsets/\(testSetId.urlPercentEncoding())/records" } } -public struct ListTestExecutionResultItemsInput: Swift.Equatable { - /// The maximum number of test execution result items to return in each page. If there are fewer results than the max page size, only the actual number of results are returned. +public struct ListTestSetRecordsInput: Swift.Equatable { + /// The maximum number of test set records to return in each page. If there are fewer records than the max page size, only the actual number of records are returned. public var maxResults: Swift.Int? - /// If the response from the ListTestExecutionResultItems operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// If the response from the ListTestSetRecords operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. public var nextToken: Swift.String? - /// The filter for the list of results from the test set execution. - /// This member is required. - public var resultFilterBy: LexModelsV2ClientTypes.TestExecutionResultFilterBy? - /// The unique identifier of the test execution to list the result items. + /// The identifier of the test set to list its test set records. /// This member is required. - public var testExecutionId: Swift.String? + public var testSetId: Swift.String? public init( maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, - resultFilterBy: LexModelsV2ClientTypes.TestExecutionResultFilterBy? = nil, - testExecutionId: Swift.String? = nil + testSetId: Swift.String? = nil ) { self.maxResults = maxResults self.nextToken = nextToken - self.resultFilterBy = resultFilterBy - self.testExecutionId = testExecutionId + self.testSetId = testSetId } } -struct ListTestExecutionResultItemsInputBody: Swift.Equatable { - let resultFilterBy: LexModelsV2ClientTypes.TestExecutionResultFilterBy? +struct ListTestSetRecordsInputBody: Swift.Equatable { let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListTestExecutionResultItemsInputBody: Swift.Decodable { +extension ListTestSetRecordsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case maxResults case nextToken - case resultFilterBy } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let resultFilterByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionResultFilterBy.self, forKey: .resultFilterBy) - resultFilterBy = resultFilterByDecoded let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) @@ -19581,7 +24322,7 @@ extension ListTestExecutionResultItemsInputBody: Swift.Decodable { } } -public enum ListTestExecutionResultItemsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListTestSetRecordsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -19596,57 +24337,66 @@ public enum ListTestExecutionResultItemsOutputError: ClientRuntime.HttpResponseE } } -extension ListTestExecutionResultItemsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListTestSetRecordsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListTestExecutionResultItemsOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListTestSetRecordsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.nextToken = output.nextToken - self.testExecutionResults = output.testExecutionResults + self.testSetRecords = output.testSetRecords } else { self.nextToken = nil - self.testExecutionResults = nil + self.testSetRecords = nil } } } -public struct ListTestExecutionResultItemsOutputResponse: Swift.Equatable { - /// A token that indicates whether there are more results to return in a response to the ListTestExecutionResultItems operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListTestExecutionResultItems operation request to get the next page of results. +public struct ListTestSetRecordsOutputResponse: Swift.Equatable { + /// A token that indicates whether there are more records to return in a response to the ListTestSetRecords operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListTestSetRecords operation request to get the next page of records. public var nextToken: Swift.String? - /// The list of results from the test execution. - public var testExecutionResults: LexModelsV2ClientTypes.TestExecutionResultItems? + /// The list of records from the test set. + public var testSetRecords: [LexModelsV2ClientTypes.TestSetTurnRecord]? public init( nextToken: Swift.String? = nil, - testExecutionResults: LexModelsV2ClientTypes.TestExecutionResultItems? = nil + testSetRecords: [LexModelsV2ClientTypes.TestSetTurnRecord]? = nil ) { self.nextToken = nextToken - self.testExecutionResults = testExecutionResults + self.testSetRecords = testSetRecords } } -struct ListTestExecutionResultItemsOutputResponseBody: Swift.Equatable { - let testExecutionResults: LexModelsV2ClientTypes.TestExecutionResultItems? +struct ListTestSetRecordsOutputResponseBody: Swift.Equatable { + let testSetRecords: [LexModelsV2ClientTypes.TestSetTurnRecord]? let nextToken: Swift.String? } -extension ListTestExecutionResultItemsOutputResponseBody: Swift.Decodable { +extension ListTestSetRecordsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case nextToken - case testExecutionResults + case testSetRecords } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let testExecutionResultsDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionResultItems.self, forKey: .testExecutionResults) - testExecutionResults = testExecutionResultsDecoded + let testSetRecordsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.TestSetTurnRecord?].self, forKey: .testSetRecords) + var testSetRecordsDecoded0:[LexModelsV2ClientTypes.TestSetTurnRecord]? = nil + if let testSetRecordsContainer = testSetRecordsContainer { + testSetRecordsDecoded0 = [LexModelsV2ClientTypes.TestSetTurnRecord]() + for structure0 in testSetRecordsContainer { + if let structure0 = structure0 { + testSetRecordsDecoded0?.append(structure0) + } + } + } + testSetRecords = testSetRecordsDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded } } -extension ListTestExecutionsInput: Swift.Encodable { +extension ListTestSetsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case maxResults case nextToken @@ -19667,24 +24417,24 @@ extension ListTestExecutionsInput: Swift.Encodable { } } -extension ListTestExecutionsInput: ClientRuntime.URLPathProvider { +extension ListTestSetsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - return "/testexecutions" + return "/testsets" } } -public struct ListTestExecutionsInput: Swift.Equatable { - /// The maximum number of test executions to return in each page. If there are fewer results than the max page size, only the actual number of results are returned. +public struct ListTestSetsInput: Swift.Equatable { + /// The maximum number of test sets to return in each page. If there are fewer results than the max page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListTestExecutions operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// If the response from the ListTestSets operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. public var nextToken: Swift.String? - /// The sort order of the test set executions. - public var sortBy: LexModelsV2ClientTypes.TestExecutionSortBy? + /// The sort order for the list of test sets. + public var sortBy: LexModelsV2ClientTypes.TestSetSortBy? public init( maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.TestExecutionSortBy? = nil + sortBy: LexModelsV2ClientTypes.TestSetSortBy? = nil ) { self.maxResults = maxResults @@ -19693,13 +24443,13 @@ public struct ListTestExecutionsInput: Swift.Equatable { } } -struct ListTestExecutionsInputBody: Swift.Equatable { - let sortBy: LexModelsV2ClientTypes.TestExecutionSortBy? +struct ListTestSetsInputBody: Swift.Equatable { + let sortBy: LexModelsV2ClientTypes.TestSetSortBy? let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListTestExecutionsInputBody: Swift.Decodable { +extension ListTestSetsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case maxResults case nextToken @@ -19708,7 +24458,7 @@ extension ListTestExecutionsInputBody: Swift.Decodable { public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestExecutionSortBy.self, forKey: .sortBy) + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetSortBy.self, forKey: .sortBy) sortBy = sortByDecoded let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded @@ -19717,7 +24467,7 @@ extension ListTestExecutionsInputBody: Swift.Decodable { } } -public enum ListTestExecutionsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListTestSetsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -19731,125 +24481,187 @@ public enum ListTestExecutionsOutputError: ClientRuntime.HttpResponseErrorBindin } } -extension ListTestExecutionsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListTestSetsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListTestExecutionsOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListTestSetsOutputResponseBody = try responseDecoder.decode(responseBody: data) self.nextToken = output.nextToken - self.testExecutions = output.testExecutions + self.testSets = output.testSets } else { self.nextToken = nil - self.testExecutions = nil + self.testSets = nil } } } -public struct ListTestExecutionsOutputResponse: Swift.Equatable { - /// A token that indicates whether there are more results to return in a response to the ListTestExecutions operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListTestExecutions operation request to get the next page of results. +public struct ListTestSetsOutputResponse: Swift.Equatable { + /// A token that indicates whether there are more results to return in a response to the ListTestSets operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListTestSets operation request to get the next page of results. public var nextToken: Swift.String? - /// The list of test executions. - public var testExecutions: [LexModelsV2ClientTypes.TestExecutionSummary]? + /// The selected test sets in a list of test sets. + public var testSets: [LexModelsV2ClientTypes.TestSetSummary]? public init( nextToken: Swift.String? = nil, - testExecutions: [LexModelsV2ClientTypes.TestExecutionSummary]? = nil + testSets: [LexModelsV2ClientTypes.TestSetSummary]? = nil ) { self.nextToken = nextToken - self.testExecutions = testExecutions + self.testSets = testSets } } -struct ListTestExecutionsOutputResponseBody: Swift.Equatable { - let testExecutions: [LexModelsV2ClientTypes.TestExecutionSummary]? +struct ListTestSetsOutputResponseBody: Swift.Equatable { + let testSets: [LexModelsV2ClientTypes.TestSetSummary]? let nextToken: Swift.String? } -extension ListTestExecutionsOutputResponseBody: Swift.Decodable { +extension ListTestSetsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case nextToken - case testExecutions + case testSets } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let testExecutionsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.TestExecutionSummary?].self, forKey: .testExecutions) - var testExecutionsDecoded0:[LexModelsV2ClientTypes.TestExecutionSummary]? = nil - if let testExecutionsContainer = testExecutionsContainer { - testExecutionsDecoded0 = [LexModelsV2ClientTypes.TestExecutionSummary]() - for structure0 in testExecutionsContainer { + let testSetsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.TestSetSummary?].self, forKey: .testSets) + var testSetsDecoded0:[LexModelsV2ClientTypes.TestSetSummary]? = nil + if let testSetsContainer = testSetsContainer { + testSetsDecoded0 = [LexModelsV2ClientTypes.TestSetSummary]() + for structure0 in testSetsContainer { if let structure0 = structure0 { - testExecutionsDecoded0?.append(structure0) + testSetsDecoded0?.append(structure0) } } } - testExecutions = testExecutionsDecoded0 + testSets = testSetsDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded } } -extension ListTestSetRecordsInput: Swift.Encodable { +extension ListUtteranceAnalyticsDataInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case endDateTime + case filters case maxResults case nextToken + case sortBy + case startDateTime } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let endDateTime = self.endDateTime { + try encodeContainer.encodeTimestamp(endDateTime, format: .epochSeconds, forKey: .endDateTime) + } + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for analyticsutterancefilter0 in filters { + try filtersContainer.encode(analyticsutterancefilter0) + } + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy, forKey: .sortBy) + } + if let startDateTime = self.startDateTime { + try encodeContainer.encodeTimestamp(startDateTime, format: .epochSeconds, forKey: .startDateTime) + } } } -extension ListTestSetRecordsInput: ClientRuntime.URLPathProvider { +extension ListUtteranceAnalyticsDataInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - guard let testSetId = testSetId else { + guard let botId = botId else { return nil } - return "/testsets/\(testSetId.urlPercentEncoding())/records" + return "/bots/\(botId.urlPercentEncoding())/analytics/utterances" } } -public struct ListTestSetRecordsInput: Swift.Equatable { - /// The maximum number of test set records to return in each page. If there are fewer records than the max page size, only the actual number of records are returned. +public struct ListUtteranceAnalyticsDataInput: Swift.Equatable { + /// The identifier for the bot for which you want to retrieve utterance analytics. + /// This member is required. + public var botId: Swift.String? + /// The date and time that marks the end of the range of time for which you want to see utterance analytics. + /// This member is required. + public var endDateTime: ClientRuntime.Date? + /// A list of objects, each of which describes a condition by which you want to filter the results. + public var filters: [LexModelsV2ClientTypes.AnalyticsUtteranceFilter]? + /// The maximum number of results to return in each page of results. If there are fewer results than the maximum page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListTestSetRecords operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// If the response from the ListUtteranceAnalyticsData operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListUtteranceAnalyticsData request to return the next page of results. For a complete set of results, call the ListUtteranceAnalyticsData operation until the nextToken returned in the response is null. public var nextToken: Swift.String? - /// The identifier of the test set to list its test set records. + /// An object specifying the measure and method by which to sort the utterance analytics data. + public var sortBy: LexModelsV2ClientTypes.UtteranceDataSortBy? + /// The date and time that marks the beginning of the range of time for which you want to see utterance analytics. /// This member is required. - public var testSetId: Swift.String? + public var startDateTime: ClientRuntime.Date? public init( + botId: Swift.String? = nil, + endDateTime: ClientRuntime.Date? = nil, + filters: [LexModelsV2ClientTypes.AnalyticsUtteranceFilter]? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, - testSetId: Swift.String? = nil + sortBy: LexModelsV2ClientTypes.UtteranceDataSortBy? = nil, + startDateTime: ClientRuntime.Date? = nil ) { + self.botId = botId + self.endDateTime = endDateTime + self.filters = filters self.maxResults = maxResults self.nextToken = nextToken - self.testSetId = testSetId + self.sortBy = sortBy + self.startDateTime = startDateTime } } -struct ListTestSetRecordsInputBody: Swift.Equatable { +struct ListUtteranceAnalyticsDataInputBody: Swift.Equatable { + let startDateTime: ClientRuntime.Date? + let endDateTime: ClientRuntime.Date? + let sortBy: LexModelsV2ClientTypes.UtteranceDataSortBy? + let filters: [LexModelsV2ClientTypes.AnalyticsUtteranceFilter]? let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListTestSetRecordsInputBody: Swift.Decodable { +extension ListUtteranceAnalyticsDataInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case endDateTime + case filters case maxResults case nextToken + case sortBy + case startDateTime } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let startDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startDateTime) + startDateTime = startDateTimeDecoded + let endDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endDateTime) + endDateTime = endDateTimeDecoded + let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.UtteranceDataSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsUtteranceFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.AnalyticsUtteranceFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [LexModelsV2ClientTypes.AnalyticsUtteranceFilter]() + for structure0 in filtersContainer { + if let structure0 = structure0 { + filtersDecoded0?.append(structure0) + } + } + } + filters = filtersDecoded0 let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) @@ -19857,13 +24669,13 @@ extension ListTestSetRecordsInputBody: Swift.Decodable { } } -public enum ListTestSetRecordsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListUtteranceAnalyticsDataOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -19872,129 +24684,288 @@ public enum ListTestSetRecordsOutputError: ClientRuntime.HttpResponseErrorBindin } } -extension ListTestSetRecordsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListUtteranceAnalyticsDataOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListTestSetRecordsOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListUtteranceAnalyticsDataOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId self.nextToken = output.nextToken - self.testSetRecords = output.testSetRecords + self.utterances = output.utterances } else { + self.botId = nil self.nextToken = nil - self.testSetRecords = nil + self.utterances = nil } } } -public struct ListTestSetRecordsOutputResponse: Swift.Equatable { - /// A token that indicates whether there are more records to return in a response to the ListTestSetRecords operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListTestSetRecords operation request to get the next page of records. +public struct ListUtteranceAnalyticsDataOutputResponse: Swift.Equatable { + /// The unique identifier of the bot that the utterances belong to. + public var botId: Swift.String? + /// If the response from the ListUtteranceAnalyticsData operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListUtteranceAnalyticsData request to return the next page of results. For a complete set of results, call the ListUtteranceAnalyticsData operation until the nextToken returned in the response is null. public var nextToken: Swift.String? - /// The list of records from the test set. - public var testSetRecords: [LexModelsV2ClientTypes.TestSetTurnRecord]? + /// A list of objects, each of which contains information about an utterance in a user session with your bot. + public var utterances: [LexModelsV2ClientTypes.UtteranceSpecification]? public init( + botId: Swift.String? = nil, nextToken: Swift.String? = nil, - testSetRecords: [LexModelsV2ClientTypes.TestSetTurnRecord]? = nil + utterances: [LexModelsV2ClientTypes.UtteranceSpecification]? = nil ) { + self.botId = botId self.nextToken = nextToken - self.testSetRecords = testSetRecords + self.utterances = utterances } } -struct ListTestSetRecordsOutputResponseBody: Swift.Equatable { - let testSetRecords: [LexModelsV2ClientTypes.TestSetTurnRecord]? +struct ListUtteranceAnalyticsDataOutputResponseBody: Swift.Equatable { + let botId: Swift.String? let nextToken: Swift.String? + let utterances: [LexModelsV2ClientTypes.UtteranceSpecification]? } -extension ListTestSetRecordsOutputResponseBody: Swift.Decodable { +extension ListUtteranceAnalyticsDataOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case botId case nextToken - case testSetRecords + case utterances } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let testSetRecordsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.TestSetTurnRecord?].self, forKey: .testSetRecords) - var testSetRecordsDecoded0:[LexModelsV2ClientTypes.TestSetTurnRecord]? = nil - if let testSetRecordsContainer = testSetRecordsContainer { - testSetRecordsDecoded0 = [LexModelsV2ClientTypes.TestSetTurnRecord]() - for structure0 in testSetRecordsContainer { + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let utterancesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.UtteranceSpecification?].self, forKey: .utterances) + var utterancesDecoded0:[LexModelsV2ClientTypes.UtteranceSpecification]? = nil + if let utterancesContainer = utterancesContainer { + utterancesDecoded0 = [LexModelsV2ClientTypes.UtteranceSpecification]() + for structure0 in utterancesContainer { if let structure0 = structure0 { - testSetRecordsDecoded0?.append(structure0) + utterancesDecoded0?.append(structure0) } } } - testSetRecords = testSetRecordsDecoded0 - let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) - nextToken = nextTokenDecoded + utterances = utterancesDecoded0 } } -extension ListTestSetsInput: Swift.Encodable { +extension ListUtteranceMetricsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case attributes + case binBy + case endDateTime + case filters + case groupBy case maxResults + case metrics case nextToken - case sortBy + case startDateTime } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attributes = attributes { + var attributesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .attributes) + for analyticsutteranceattribute0 in attributes { + try attributesContainer.encode(analyticsutteranceattribute0) + } + } + if let binBy = binBy { + var binByContainer = encodeContainer.nestedUnkeyedContainer(forKey: .binBy) + for analyticsbinbyspecification0 in binBy { + try binByContainer.encode(analyticsbinbyspecification0) + } + } + if let endDateTime = self.endDateTime { + try encodeContainer.encodeTimestamp(endDateTime, format: .epochSeconds, forKey: .endDateTime) + } + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for analyticsutterancefilter0 in filters { + try filtersContainer.encode(analyticsutterancefilter0) + } + } + if let groupBy = groupBy { + var groupByContainer = encodeContainer.nestedUnkeyedContainer(forKey: .groupBy) + for analyticsutterancegroupbyspecification0 in groupBy { + try groupByContainer.encode(analyticsutterancegroupbyspecification0) + } + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } + if let metrics = metrics { + var metricsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .metrics) + for analyticsutterancemetric0 in metrics { + try metricsContainer.encode(analyticsutterancemetric0) + } + } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } - if let sortBy = self.sortBy { - try encodeContainer.encode(sortBy, forKey: .sortBy) + if let startDateTime = self.startDateTime { + try encodeContainer.encodeTimestamp(startDateTime, format: .epochSeconds, forKey: .startDateTime) } } } -extension ListTestSetsInput: ClientRuntime.URLPathProvider { +extension ListUtteranceMetricsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - return "/testsets" + guard let botId = botId else { + return nil + } + return "/bots/\(botId.urlPercentEncoding())/analytics/utterancemetrics" } } -public struct ListTestSetsInput: Swift.Equatable { - /// The maximum number of test sets to return in each page. If there are fewer results than the max page size, only the actual number of results are returned. +public struct ListUtteranceMetricsInput: Swift.Equatable { + /// A list containing attributes related to the utterance that you want the response to return. The following attributes are possible: + /// + /// * LastUsedIntent – The last used intent at the time of the utterance. + public var attributes: [LexModelsV2ClientTypes.AnalyticsUtteranceAttribute]? + /// A list of objects, each of which contains specifications for organizing the results by time. + public var binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? + /// The identifier for the bot for which you want to retrieve utterance metrics. + /// This member is required. + public var botId: Swift.String? + /// The date and time that marks the end of the range of time for which you want to see utterance metrics. + /// This member is required. + public var endDateTime: ClientRuntime.Date? + /// A list of objects, each of which describes a condition by which you want to filter the results. + public var filters: [LexModelsV2ClientTypes.AnalyticsUtteranceFilter]? + /// A list of objects, each of which specifies how to group the results. You can group by the following criteria: + /// + /// * UtteranceText – The transcription of the utterance. + /// + /// * UtteranceState – The state of the utterance. The possible states are detailed in [Key definitions](https://docs.aws.amazon.com/analytics-key-definitions-utterances) in the user guide. + public var groupBy: [LexModelsV2ClientTypes.AnalyticsUtteranceGroupBySpecification]? + /// The maximum number of results to return in each page of results. If there are fewer results than the maximum page size, only the actual number of results are returned. public var maxResults: Swift.Int? - /// If the response from the ListTestSets operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use that token in the nextToken parameter to return the next page of results. + /// A list of objects, each of which contains a metric you want to list, the statistic for the metric you want to return, and the method by which to organize the results. + /// This member is required. + public var metrics: [LexModelsV2ClientTypes.AnalyticsUtteranceMetric]? + /// If the response from the ListUtteranceMetrics operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListUtteranceMetrics request to return the next page of results. For a complete set of results, call the ListUtteranceMetrics operation until the nextToken returned in the response is null. public var nextToken: Swift.String? - /// The sort order for the list of test sets. - public var sortBy: LexModelsV2ClientTypes.TestSetSortBy? + /// The date and time that marks the beginning of the range of time for which you want to see utterance metrics. + /// This member is required. + public var startDateTime: ClientRuntime.Date? public init( + attributes: [LexModelsV2ClientTypes.AnalyticsUtteranceAttribute]? = nil, + binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? = nil, + botId: Swift.String? = nil, + endDateTime: ClientRuntime.Date? = nil, + filters: [LexModelsV2ClientTypes.AnalyticsUtteranceFilter]? = nil, + groupBy: [LexModelsV2ClientTypes.AnalyticsUtteranceGroupBySpecification]? = nil, maxResults: Swift.Int? = nil, + metrics: [LexModelsV2ClientTypes.AnalyticsUtteranceMetric]? = nil, nextToken: Swift.String? = nil, - sortBy: LexModelsV2ClientTypes.TestSetSortBy? = nil + startDateTime: ClientRuntime.Date? = nil ) { + self.attributes = attributes + self.binBy = binBy + self.botId = botId + self.endDateTime = endDateTime + self.filters = filters + self.groupBy = groupBy self.maxResults = maxResults + self.metrics = metrics self.nextToken = nextToken - self.sortBy = sortBy + self.startDateTime = startDateTime } } -struct ListTestSetsInputBody: Swift.Equatable { - let sortBy: LexModelsV2ClientTypes.TestSetSortBy? +struct ListUtteranceMetricsInputBody: Swift.Equatable { + let startDateTime: ClientRuntime.Date? + let endDateTime: ClientRuntime.Date? + let metrics: [LexModelsV2ClientTypes.AnalyticsUtteranceMetric]? + let binBy: [LexModelsV2ClientTypes.AnalyticsBinBySpecification]? + let groupBy: [LexModelsV2ClientTypes.AnalyticsUtteranceGroupBySpecification]? + let attributes: [LexModelsV2ClientTypes.AnalyticsUtteranceAttribute]? + let filters: [LexModelsV2ClientTypes.AnalyticsUtteranceFilter]? let maxResults: Swift.Int? let nextToken: Swift.String? } -extension ListTestSetsInputBody: Swift.Decodable { +extension ListUtteranceMetricsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case attributes + case binBy + case endDateTime + case filters + case groupBy case maxResults + case metrics case nextToken - case sortBy + case startDateTime } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let sortByDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.TestSetSortBy.self, forKey: .sortBy) - sortBy = sortByDecoded + let startDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startDateTime) + startDateTime = startDateTimeDecoded + let endDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endDateTime) + endDateTime = endDateTimeDecoded + let metricsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsUtteranceMetric?].self, forKey: .metrics) + var metricsDecoded0:[LexModelsV2ClientTypes.AnalyticsUtteranceMetric]? = nil + if let metricsContainer = metricsContainer { + metricsDecoded0 = [LexModelsV2ClientTypes.AnalyticsUtteranceMetric]() + for structure0 in metricsContainer { + if let structure0 = structure0 { + metricsDecoded0?.append(structure0) + } + } + } + metrics = metricsDecoded0 + let binByContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsBinBySpecification?].self, forKey: .binBy) + var binByDecoded0:[LexModelsV2ClientTypes.AnalyticsBinBySpecification]? = nil + if let binByContainer = binByContainer { + binByDecoded0 = [LexModelsV2ClientTypes.AnalyticsBinBySpecification]() + for structure0 in binByContainer { + if let structure0 = structure0 { + binByDecoded0?.append(structure0) + } + } + } + binBy = binByDecoded0 + let groupByContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsUtteranceGroupBySpecification?].self, forKey: .groupBy) + var groupByDecoded0:[LexModelsV2ClientTypes.AnalyticsUtteranceGroupBySpecification]? = nil + if let groupByContainer = groupByContainer { + groupByDecoded0 = [LexModelsV2ClientTypes.AnalyticsUtteranceGroupBySpecification]() + for structure0 in groupByContainer { + if let structure0 = structure0 { + groupByDecoded0?.append(structure0) + } + } + } + groupBy = groupByDecoded0 + let attributesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsUtteranceAttribute?].self, forKey: .attributes) + var attributesDecoded0:[LexModelsV2ClientTypes.AnalyticsUtteranceAttribute]? = nil + if let attributesContainer = attributesContainer { + attributesDecoded0 = [LexModelsV2ClientTypes.AnalyticsUtteranceAttribute]() + for structure0 in attributesContainer { + if let structure0 = structure0 { + attributesDecoded0?.append(structure0) + } + } + } + attributes = attributesDecoded0 + let filtersContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsUtteranceFilter?].self, forKey: .filters) + var filtersDecoded0:[LexModelsV2ClientTypes.AnalyticsUtteranceFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [LexModelsV2ClientTypes.AnalyticsUtteranceFilter]() + for structure0 in filtersContainer { + if let structure0 = structure0 { + filtersDecoded0?.append(structure0) + } + } + } + filters = filtersDecoded0 let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) @@ -20002,12 +24973,13 @@ extension ListTestSetsInputBody: Swift.Decodable { } } -public enum ListTestSetsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListUtteranceMetricsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionFailedException": return try await PreconditionFailedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -20016,60 +24988,70 @@ public enum ListTestSetsOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListTestSetsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListUtteranceMetricsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListTestSetsOutputResponseBody = try responseDecoder.decode(responseBody: data) + let output: ListUtteranceMetricsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.botId = output.botId self.nextToken = output.nextToken - self.testSets = output.testSets + self.results = output.results } else { + self.botId = nil self.nextToken = nil - self.testSets = nil + self.results = nil } } } -public struct ListTestSetsOutputResponse: Swift.Equatable { - /// A token that indicates whether there are more results to return in a response to the ListTestSets operation. If the nextToken field is present, you send the contents as the nextToken parameter of a ListTestSets operation request to get the next page of results. +public struct ListUtteranceMetricsOutputResponse: Swift.Equatable { + /// The identifier for the bot for which you retrieved utterance metrics. + public var botId: Swift.String? + /// If the response from the ListUtteranceMetrics operation contains more results than specified in the maxResults parameter, a token is returned in the response. Use the returned token in the nextToken parameter of a ListUtteranceMetrics request to return the next page of results. For a complete set of results, call the ListUtteranceMetrics operation until the nextToken returned in the response is null. public var nextToken: Swift.String? - /// The selected test sets in a list of test sets. - public var testSets: [LexModelsV2ClientTypes.TestSetSummary]? + /// The results for the utterance metrics. + public var results: [LexModelsV2ClientTypes.AnalyticsUtteranceResult]? public init( + botId: Swift.String? = nil, nextToken: Swift.String? = nil, - testSets: [LexModelsV2ClientTypes.TestSetSummary]? = nil + results: [LexModelsV2ClientTypes.AnalyticsUtteranceResult]? = nil ) { + self.botId = botId self.nextToken = nextToken - self.testSets = testSets + self.results = results } } -struct ListTestSetsOutputResponseBody: Swift.Equatable { - let testSets: [LexModelsV2ClientTypes.TestSetSummary]? +struct ListUtteranceMetricsOutputResponseBody: Swift.Equatable { + let botId: Swift.String? + let results: [LexModelsV2ClientTypes.AnalyticsUtteranceResult]? let nextToken: Swift.String? } -extension ListTestSetsOutputResponseBody: Swift.Decodable { +extension ListUtteranceMetricsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case botId case nextToken - case testSets + case results } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let testSetsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.TestSetSummary?].self, forKey: .testSets) - var testSetsDecoded0:[LexModelsV2ClientTypes.TestSetSummary]? = nil - if let testSetsContainer = testSetsContainer { - testSetsDecoded0 = [LexModelsV2ClientTypes.TestSetSummary]() - for structure0 in testSetsContainer { + let botIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botId) + botId = botIdDecoded + let resultsContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.AnalyticsUtteranceResult?].self, forKey: .results) + var resultsDecoded0:[LexModelsV2ClientTypes.AnalyticsUtteranceResult]? = nil + if let resultsContainer = resultsContainer { + resultsDecoded0 = [LexModelsV2ClientTypes.AnalyticsUtteranceResult]() + for structure0 in resultsContainer { if let structure0 = structure0 { - testSetsDecoded0?.append(structure0) + resultsDecoded0?.append(structure0) } } } - testSets = testSetsDecoded0 + results = resultsDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded } @@ -22267,37 +27249,265 @@ public struct ServiceQuotaExceededException: ClientRuntime.ModeledError, AWSClie public internal(set) var message: Swift.String? = nil } - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ServiceQuotaExceededException" } - public static var fault: ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = HttpResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - message: Swift.String? = nil - ) - { - self.properties.message = message + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ServiceQuotaExceededException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ServiceQuotaExceededExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ServiceQuotaExceededExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 LexModelsV2ClientTypes.SessionDataSortBy: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case order + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSessionSortByName.self, forKey: .name) + name = nameDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSortOrder.self, forKey: .order) + order = orderDecoded + } +} + +extension LexModelsV2ClientTypes { + /// An object specifying the measure and method by which to sort the session analytics data. + public struct SessionDataSortBy: Swift.Equatable { + /// The measure by which to sort the session analytics data. + /// + /// * conversationStartTime – The date and time when the conversation began. A conversation is defined as a unique combination of a sessionId and an originatingRequestId. + /// + /// * numberOfTurns – The number of turns that the session took. + /// + /// * conversationDurationSeconds – The duration of the conversation in seconds. + /// This member is required. + public var name: LexModelsV2ClientTypes.AnalyticsSessionSortByName? + /// Specifies whether to sort the results in ascending or descending order. + /// This member is required. + public var order: LexModelsV2ClientTypes.AnalyticsSortOrder? + + public init( + name: LexModelsV2ClientTypes.AnalyticsSessionSortByName? = nil, + order: LexModelsV2ClientTypes.AnalyticsSortOrder? = nil + ) + { + self.name = name + self.order = order + } + } + +} + +extension LexModelsV2ClientTypes.SessionSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case botAliasId + case botVersion + case channel + case conversationDurationSeconds + case conversationEndState + case conversationEndTime + case conversationStartTime + case invokedIntentSamples + case localeId + case mode + case numberOfTurns + case originatingRequestId + case sessionId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let botAliasId = self.botAliasId { + try encodeContainer.encode(botAliasId, forKey: .botAliasId) + } + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) + } + if let channel = self.channel { + try encodeContainer.encode(channel, forKey: .channel) + } + if let conversationDurationSeconds = self.conversationDurationSeconds { + try encodeContainer.encode(conversationDurationSeconds, forKey: .conversationDurationSeconds) + } + if let conversationEndState = self.conversationEndState { + try encodeContainer.encode(conversationEndState.rawValue, forKey: .conversationEndState) + } + if let conversationEndTime = self.conversationEndTime { + try encodeContainer.encodeTimestamp(conversationEndTime, format: .epochSeconds, forKey: .conversationEndTime) + } + if let conversationStartTime = self.conversationStartTime { + try encodeContainer.encodeTimestamp(conversationStartTime, format: .epochSeconds, forKey: .conversationStartTime) + } + if let invokedIntentSamples = invokedIntentSamples { + var invokedIntentSamplesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .invokedIntentSamples) + for invokedintentsample0 in invokedIntentSamples { + try invokedIntentSamplesContainer.encode(invokedintentsample0) + } + } + if let localeId = self.localeId { + try encodeContainer.encode(localeId, forKey: .localeId) + } + if let mode = self.mode { + try encodeContainer.encode(mode.rawValue, forKey: .mode) + } + if let numberOfTurns = self.numberOfTurns { + try encodeContainer.encode(numberOfTurns, forKey: .numberOfTurns) + } + if let originatingRequestId = self.originatingRequestId { + try encodeContainer.encode(originatingRequestId, forKey: .originatingRequestId) + } + if let sessionId = self.sessionId { + try encodeContainer.encode(sessionId, forKey: .sessionId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) + botAliasId = botAliasIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let channelDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .channel) + channel = channelDecoded + let sessionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sessionId) + sessionId = sessionIdDecoded + let conversationStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .conversationStartTime) + conversationStartTime = conversationStartTimeDecoded + let conversationEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .conversationEndTime) + conversationEndTime = conversationEndTimeDecoded + let conversationDurationSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .conversationDurationSeconds) + conversationDurationSeconds = conversationDurationSecondsDecoded + let conversationEndStateDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ConversationEndState.self, forKey: .conversationEndState) + conversationEndState = conversationEndStateDecoded + let modeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsModality.self, forKey: .mode) + mode = modeDecoded + let numberOfTurnsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .numberOfTurns) + numberOfTurns = numberOfTurnsDecoded + let invokedIntentSamplesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.InvokedIntentSample?].self, forKey: .invokedIntentSamples) + var invokedIntentSamplesDecoded0:[LexModelsV2ClientTypes.InvokedIntentSample]? = nil + if let invokedIntentSamplesContainer = invokedIntentSamplesContainer { + invokedIntentSamplesDecoded0 = [LexModelsV2ClientTypes.InvokedIntentSample]() + for structure0 in invokedIntentSamplesContainer { + if let structure0 = structure0 { + invokedIntentSamplesDecoded0?.append(structure0) + } + } + } + invokedIntentSamples = invokedIntentSamplesDecoded0 + let originatingRequestIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .originatingRequestId) + originatingRequestId = originatingRequestIdDecoded } } -struct ServiceQuotaExceededExceptionBody: Swift.Equatable { - let message: Swift.String? -} +extension LexModelsV2ClientTypes { + /// An object containing information about a specific session. + public struct SessionSpecification: Swift.Equatable { + /// The identifier of the alias of the bot that the session was held with. + public var botAliasId: Swift.String? + /// The version of the bot that the session was held with. + public var botVersion: Swift.String? + /// The channel that is integrated with the bot that the session was held with. + public var channel: Swift.String? + /// The duration of the conversation in seconds. A conversation is defined as a unique combination of a sessionId and an originatingRequestId. + public var conversationDurationSeconds: Swift.Int? + /// The final state of the conversation. A conversation is defined as a unique combination of a sessionId and an originatingRequestId. + public var conversationEndState: LexModelsV2ClientTypes.ConversationEndState? + /// The date and time when the conversation ended. A conversation is defined as a unique combination of a sessionId and an originatingRequestId. + public var conversationEndTime: ClientRuntime.Date? + /// The date and time when the conversation began. A conversation is defined as a unique combination of a sessionId and an originatingRequestId. + public var conversationStartTime: ClientRuntime.Date? + /// A list of objects containing the name of an intent that was invoked. + public var invokedIntentSamples: [LexModelsV2ClientTypes.InvokedIntentSample]? + /// The locale of the bot that the session was held with. + public var localeId: Swift.String? + /// The mode of the session. The possible values are as follows: + /// + /// * Speech – The session was spoken. + /// + /// * Text – The session was written. + /// + /// * DTMF – The session used a touch-tone keypad (Dual Tone Multi-Frequency). + /// + /// * MultiMode – The session used multiple modes. + public var mode: LexModelsV2ClientTypes.AnalyticsModality? + /// The number of turns that the session took. + public var numberOfTurns: Swift.Int? + /// The identifier of the first request in a session. + public var originatingRequestId: Swift.String? + /// The identifier of the session. + public var sessionId: Swift.String? -extension ServiceQuotaExceededExceptionBody: Swift.Decodable { - enum CodingKeys: Swift.String, Swift.CodingKey { - case message + public init( + botAliasId: Swift.String? = nil, + botVersion: Swift.String? = nil, + channel: Swift.String? = nil, + conversationDurationSeconds: Swift.Int? = nil, + conversationEndState: LexModelsV2ClientTypes.ConversationEndState? = nil, + conversationEndTime: ClientRuntime.Date? = nil, + conversationStartTime: ClientRuntime.Date? = nil, + invokedIntentSamples: [LexModelsV2ClientTypes.InvokedIntentSample]? = nil, + localeId: Swift.String? = nil, + mode: LexModelsV2ClientTypes.AnalyticsModality? = nil, + numberOfTurns: Swift.Int? = nil, + originatingRequestId: Swift.String? = nil, + sessionId: Swift.String? = nil + ) + { + self.botAliasId = botAliasId + self.botVersion = botVersion + self.channel = channel + self.conversationDurationSeconds = conversationDurationSeconds + self.conversationEndState = conversationEndState + self.conversationEndTime = conversationEndTime + self.conversationStartTime = conversationStartTime + self.invokedIntentSamples = invokedIntentSamples + self.localeId = localeId + self.mode = mode + self.numberOfTurns = numberOfTurns + self.originatingRequestId = originatingRequestId + self.sessionId = sessionId + } } - 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 LexModelsV2ClientTypes.SlotCaptureSetting: Swift.Codable { @@ -30620,6 +35830,158 @@ extension LexModelsV2ClientTypes { } +extension LexModelsV2ClientTypes.UtteranceBotResponse: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case content + case contentType + case imageResponseCard + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let content = self.content { + try encodeContainer.encode(content, forKey: .content) + } + if let contentType = self.contentType { + try encodeContainer.encode(contentType.rawValue, forKey: .contentType) + } + if let imageResponseCard = self.imageResponseCard { + try encodeContainer.encode(imageResponseCard, forKey: .imageResponseCard) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let contentDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .content) + content = contentDecoded + let contentTypeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.UtteranceContentType.self, forKey: .contentType) + contentType = contentTypeDecoded + let imageResponseCardDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.ImageResponseCard.self, forKey: .imageResponseCard) + imageResponseCard = imageResponseCardDecoded + } +} + +extension LexModelsV2ClientTypes { + /// An object that contains a response to the utterance from the bot. + public struct UtteranceBotResponse: Swift.Equatable { + /// The text of the response to the utterance from the bot. + public var content: Swift.String? + /// The type of the response. The following values are possible: + /// + /// * PlainText – A plain text string. + /// + /// * CustomPayload – A response string that you can customize to include data or metadata for your application. + /// + /// * SSML – A string that includes Speech Synthesis Markup Language to customize the audio response. + /// + /// * ImageResponseCard – An image with buttons that the customer can select. See [ImageResponseCard](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_ImageResponseCard.html) for more information. + public var contentType: LexModelsV2ClientTypes.UtteranceContentType? + /// A card that is shown to the user by a messaging platform. You define the contents of the card, the card is displayed by the platform. When you use a response card, the response from the user is constrained to the text associated with a button on the card. + public var imageResponseCard: LexModelsV2ClientTypes.ImageResponseCard? + + public init( + content: Swift.String? = nil, + contentType: LexModelsV2ClientTypes.UtteranceContentType? = nil, + imageResponseCard: LexModelsV2ClientTypes.ImageResponseCard? = nil + ) + { + self.content = content + self.contentType = contentType + self.imageResponseCard = imageResponseCard + } + } + +} + +extension LexModelsV2ClientTypes { + public enum UtteranceContentType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case custompayload + case imageresponsecard + case plaintext + case ssml + case sdkUnknown(Swift.String) + + public static var allCases: [UtteranceContentType] { + return [ + .custompayload, + .imageresponsecard, + .plaintext, + .ssml, + .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 .custompayload: return "CustomPayload" + case .imageresponsecard: return "ImageResponseCard" + case .plaintext: return "PlainText" + case .ssml: return "SSML" + 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 = UtteranceContentType(rawValue: rawValue) ?? UtteranceContentType.sdkUnknown(rawValue) + } + } +} + +extension LexModelsV2ClientTypes.UtteranceDataSortBy: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + case order + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let name = self.name { + try encodeContainer.encode(name.rawValue, forKey: .name) + } + if let order = self.order { + try encodeContainer.encode(order.rawValue, forKey: .order) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsUtteranceSortByName.self, forKey: .name) + name = nameDecoded + let orderDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsSortOrder.self, forKey: .order) + order = orderDecoded + } +} + +extension LexModelsV2ClientTypes { + /// An object specifying the measure and method by which to sort the utterance data. + public struct UtteranceDataSortBy: Swift.Equatable { + /// The measure by which to sort the utterance analytics data. + /// + /// * Count – The number of utterances. + /// + /// * UtteranceTimestamp – The date and time of the utterance. + /// This member is required. + public var name: LexModelsV2ClientTypes.AnalyticsUtteranceSortByName? + /// Specifies whether to sort the results in ascending or descending order. + /// This member is required. + public var order: LexModelsV2ClientTypes.AnalyticsSortOrder? + + public init( + name: LexModelsV2ClientTypes.AnalyticsUtteranceSortByName? = nil, + order: LexModelsV2ClientTypes.AnalyticsSortOrder? = nil + ) + { + self.name = name + self.order = order + } + } + +} + extension LexModelsV2ClientTypes.UtteranceInputSpecification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case audioInput @@ -30770,6 +36132,303 @@ extension LexModelsV2ClientTypes { } +extension LexModelsV2ClientTypes.UtteranceSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case associatedIntentName + case associatedSlotName + case audioVoiceDurationMillis + case botAliasId + case botResponseAudioVoiceId + case botResponses + case botVersion + case channel + case conversationEndTime + case conversationStartTime + case dialogActionType + case inputType + case intentState + case localeId + case mode + case outputType + case sessionId + case slotsFilledInSession + case utterance + case utteranceRequestId + case utteranceTimestamp + case utteranceUnderstood + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let associatedIntentName = self.associatedIntentName { + try encodeContainer.encode(associatedIntentName, forKey: .associatedIntentName) + } + if let associatedSlotName = self.associatedSlotName { + try encodeContainer.encode(associatedSlotName, forKey: .associatedSlotName) + } + if let audioVoiceDurationMillis = self.audioVoiceDurationMillis { + try encodeContainer.encode(audioVoiceDurationMillis, forKey: .audioVoiceDurationMillis) + } + if let botAliasId = self.botAliasId { + try encodeContainer.encode(botAliasId, forKey: .botAliasId) + } + if let botResponseAudioVoiceId = self.botResponseAudioVoiceId { + try encodeContainer.encode(botResponseAudioVoiceId, forKey: .botResponseAudioVoiceId) + } + if let botResponses = botResponses { + var botResponsesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .botResponses) + for utterancebotresponse0 in botResponses { + try botResponsesContainer.encode(utterancebotresponse0) + } + } + if let botVersion = self.botVersion { + try encodeContainer.encode(botVersion, forKey: .botVersion) + } + if let channel = self.channel { + try encodeContainer.encode(channel, forKey: .channel) + } + if let conversationEndTime = self.conversationEndTime { + try encodeContainer.encodeTimestamp(conversationEndTime, format: .epochSeconds, forKey: .conversationEndTime) + } + if let conversationStartTime = self.conversationStartTime { + try encodeContainer.encodeTimestamp(conversationStartTime, format: .epochSeconds, forKey: .conversationStartTime) + } + if let dialogActionType = self.dialogActionType { + try encodeContainer.encode(dialogActionType, forKey: .dialogActionType) + } + if let inputType = self.inputType { + try encodeContainer.encode(inputType, forKey: .inputType) + } + if let intentState = self.intentState { + try encodeContainer.encode(intentState.rawValue, forKey: .intentState) + } + if let localeId = self.localeId { + try encodeContainer.encode(localeId, forKey: .localeId) + } + if let mode = self.mode { + try encodeContainer.encode(mode.rawValue, forKey: .mode) + } + if let outputType = self.outputType { + try encodeContainer.encode(outputType, forKey: .outputType) + } + if let sessionId = self.sessionId { + try encodeContainer.encode(sessionId, forKey: .sessionId) + } + if let slotsFilledInSession = self.slotsFilledInSession { + try encodeContainer.encode(slotsFilledInSession, forKey: .slotsFilledInSession) + } + if let utterance = self.utterance { + try encodeContainer.encode(utterance, forKey: .utterance) + } + if let utteranceRequestId = self.utteranceRequestId { + try encodeContainer.encode(utteranceRequestId, forKey: .utteranceRequestId) + } + if let utteranceTimestamp = self.utteranceTimestamp { + try encodeContainer.encodeTimestamp(utteranceTimestamp, format: .epochSeconds, forKey: .utteranceTimestamp) + } + if utteranceUnderstood != false { + try encodeContainer.encode(utteranceUnderstood, forKey: .utteranceUnderstood) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let botAliasIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botAliasId) + botAliasId = botAliasIdDecoded + let botVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botVersion) + botVersion = botVersionDecoded + let localeIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localeId) + localeId = localeIdDecoded + let sessionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sessionId) + sessionId = sessionIdDecoded + let channelDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .channel) + channel = channelDecoded + let modeDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.AnalyticsModality.self, forKey: .mode) + mode = modeDecoded + let conversationStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .conversationStartTime) + conversationStartTime = conversationStartTimeDecoded + let conversationEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .conversationEndTime) + conversationEndTime = conversationEndTimeDecoded + let utteranceDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .utterance) + utterance = utteranceDecoded + let utteranceTimestampDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .utteranceTimestamp) + utteranceTimestamp = utteranceTimestampDecoded + let audioVoiceDurationMillisDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .audioVoiceDurationMillis) + audioVoiceDurationMillis = audioVoiceDurationMillisDecoded + let utteranceUnderstoodDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .utteranceUnderstood) ?? false + utteranceUnderstood = utteranceUnderstoodDecoded + let inputTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inputType) + inputType = inputTypeDecoded + let outputTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outputType) + outputType = outputTypeDecoded + let associatedIntentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .associatedIntentName) + associatedIntentName = associatedIntentNameDecoded + let associatedSlotNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .associatedSlotName) + associatedSlotName = associatedSlotNameDecoded + let intentStateDecoded = try containerValues.decodeIfPresent(LexModelsV2ClientTypes.IntentState.self, forKey: .intentState) + intentState = intentStateDecoded + let dialogActionTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dialogActionType) + dialogActionType = dialogActionTypeDecoded + let botResponseAudioVoiceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .botResponseAudioVoiceId) + botResponseAudioVoiceId = botResponseAudioVoiceIdDecoded + let slotsFilledInSessionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .slotsFilledInSession) + slotsFilledInSession = slotsFilledInSessionDecoded + let utteranceRequestIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .utteranceRequestId) + utteranceRequestId = utteranceRequestIdDecoded + let botResponsesContainer = try containerValues.decodeIfPresent([LexModelsV2ClientTypes.UtteranceBotResponse?].self, forKey: .botResponses) + var botResponsesDecoded0:[LexModelsV2ClientTypes.UtteranceBotResponse]? = nil + if let botResponsesContainer = botResponsesContainer { + botResponsesDecoded0 = [LexModelsV2ClientTypes.UtteranceBotResponse]() + for structure0 in botResponsesContainer { + if let structure0 = structure0 { + botResponsesDecoded0?.append(structure0) + } + } + } + botResponses = botResponsesDecoded0 + } +} + +extension LexModelsV2ClientTypes { + /// An object containing information about a specific utterance. + public struct UtteranceSpecification: Swift.Equatable { + /// The name of the intent that the utterance is associated to. + public var associatedIntentName: Swift.String? + /// The name of the slot that the utterance is associated to. + public var associatedSlotName: Swift.String? + /// The duration in milliseconds of the audio associated with the utterance. + public var audioVoiceDurationMillis: Swift.Int? + /// The identifier of the alias of the bot that the utterance was made to. + public var botAliasId: Swift.String? + /// The identifier for the audio of the bot response. + public var botResponseAudioVoiceId: Swift.String? + /// A list of objects containing information about the bot response to the utterance. + public var botResponses: [LexModelsV2ClientTypes.UtteranceBotResponse]? + /// The version of the bot that the utterance was made to. + public var botVersion: Swift.String? + /// The channel that is integrated with the bot that the utterance was made to. + public var channel: Swift.String? + /// The date and time when the conversation in which the utterance took place ended. A conversation is defined as a unique combination of a sessionId and an originatingRequestId. + public var conversationEndTime: ClientRuntime.Date? + /// The date and time when the conversation in which the utterance took place began. A conversation is defined as a unique combination of a sessionId and an originatingRequestId. + public var conversationStartTime: ClientRuntime.Date? + /// The type of dialog action that the utterance is associated to. See the type field in [DialogAction](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_DialogAction.html) for more information. + public var dialogActionType: Swift.String? + /// The input type of the utterance. The possible values are as follows: + /// + /// * PCM format: audio data must be in little-endian byte order. + /// + /// * audio/l16; rate=16000; channels=1 + /// + /// * audio/x-l16; sample-rate=16000; channel-count=1 + /// + /// * audio/lpcm; sample-rate=8000; sample-size-bits=16; channel-count=1; is-big-endian=false + /// + /// + /// + /// + /// * Opus format + /// + /// * audio/x-cbr-opus-with-preamble;preamble-size=0;bit-rate=256000;frame-size-milliseconds=4 + /// + /// + /// + /// + /// * Text format + /// + /// * text/plain; charset=utf-8 + public var inputType: Swift.String? + /// The state of the intent that the utterance is associated to. + public var intentState: LexModelsV2ClientTypes.IntentState? + /// The locale of the bot that the utterance was made to. + public var localeId: Swift.String? + /// The mode of the session. The possible values are as follows: + /// + /// * Speech – The session consisted of spoken dialogue. + /// + /// * Text – The session consisted of written dialogue. + /// + /// * DTMF – The session consisted of touch-tone keypad (Dual Tone Multi-Frequency) key presses. + /// + /// * MultiMode – The session consisted of multiple modes. + public var mode: LexModelsV2ClientTypes.AnalyticsModality? + /// The output type of the utterance. The possible values are as follows: + /// + /// * audio/mpeg + /// + /// * audio/ogg + /// + /// * audio/pcm (16 KHz) + /// + /// * audio/ (defaults to mpeg) + /// + /// * text/plain; charset=utf-8 + public var outputType: Swift.String? + /// The identifier of the session that the utterance was made in. + public var sessionId: Swift.String? + /// The slots that have been filled in the session by the time of the utterance. + public var slotsFilledInSession: Swift.String? + /// The text of the utterance. + public var utterance: Swift.String? + /// The identifier of the request associated with the utterance. + public var utteranceRequestId: Swift.String? + /// The date and time when the utterance took place. + public var utteranceTimestamp: ClientRuntime.Date? + /// Specifies whether the bot understood the utterance or not. + public var utteranceUnderstood: Swift.Bool + + public init( + associatedIntentName: Swift.String? = nil, + associatedSlotName: Swift.String? = nil, + audioVoiceDurationMillis: Swift.Int? = nil, + botAliasId: Swift.String? = nil, + botResponseAudioVoiceId: Swift.String? = nil, + botResponses: [LexModelsV2ClientTypes.UtteranceBotResponse]? = nil, + botVersion: Swift.String? = nil, + channel: Swift.String? = nil, + conversationEndTime: ClientRuntime.Date? = nil, + conversationStartTime: ClientRuntime.Date? = nil, + dialogActionType: Swift.String? = nil, + inputType: Swift.String? = nil, + intentState: LexModelsV2ClientTypes.IntentState? = nil, + localeId: Swift.String? = nil, + mode: LexModelsV2ClientTypes.AnalyticsModality? = nil, + outputType: Swift.String? = nil, + sessionId: Swift.String? = nil, + slotsFilledInSession: Swift.String? = nil, + utterance: Swift.String? = nil, + utteranceRequestId: Swift.String? = nil, + utteranceTimestamp: ClientRuntime.Date? = nil, + utteranceUnderstood: Swift.Bool = false + ) + { + self.associatedIntentName = associatedIntentName + self.associatedSlotName = associatedSlotName + self.audioVoiceDurationMillis = audioVoiceDurationMillis + self.botAliasId = botAliasId + self.botResponseAudioVoiceId = botResponseAudioVoiceId + self.botResponses = botResponses + self.botVersion = botVersion + self.channel = channel + self.conversationEndTime = conversationEndTime + self.conversationStartTime = conversationStartTime + self.dialogActionType = dialogActionType + self.inputType = inputType + self.intentState = intentState + self.localeId = localeId + self.mode = mode + self.outputType = outputType + self.sessionId = sessionId + self.slotsFilledInSession = slotsFilledInSession + self.utterance = utterance + self.utteranceRequestId = utteranceRequestId + self.utteranceTimestamp = utteranceTimestamp + self.utteranceUnderstood = utteranceUnderstood + } + } + +} + extension ValidationException { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), diff --git a/Sources/Services/AWSLookoutEquipment/EndpointResolver.swift b/Sources/Services/AWSLookoutEquipment/EndpointResolver.swift index c17f941c44b..9c0ef0277a5 100644 --- a/Sources/Services/AWSLookoutEquipment/EndpointResolver.swift +++ b/Sources/Services/AWSLookoutEquipment/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://lookoutequipment-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://lookoutequipment-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://lookoutequipment.{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://lookoutequipment.{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\":[{\"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\":[{\"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\":[],\"endpoint\":{\"url\":\"https://lookoutequipment-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\":[],\"endpoint\":{\"url\":\"https://lookoutequipment-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\":[],\"endpoint\":{\"url\":\"https://lookoutequipment.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://lookoutequipment.{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/AWSLookoutEquipment/LookoutEquipmentClient.swift b/Sources/Services/AWSLookoutEquipment/LookoutEquipmentClient.swift index 199de52541b..c347c27b83b 100644 --- a/Sources/Services/AWSLookoutEquipment/LookoutEquipmentClient.swift +++ b/Sources/Services/AWSLookoutEquipment/LookoutEquipmentClient.swift @@ -67,7 +67,7 @@ public struct LookoutEquipmentClientLogHandlerFactory: ClientRuntime.SDKLogHandl } extension LookoutEquipmentClient: LookoutEquipmentClientProtocol { - /// Creates a container for a collection of data being ingested for analysis. The dataset contains the metadata describing where the data is and what the data actually looks like. In other words, it contains the location of the data source, the data schema, and other information. A dataset also contains any tags associated with the ingested data. + /// Creates a container for a collection of data being ingested for analysis. The dataset contains the metadata describing where the data is and what the data actually looks like. For example, it contains the location of the data source, the data schema, and other information. A dataset also contains any tags associated with the ingested data. public func createDataset(input: CreateDatasetInput) async throws -> CreateDatasetOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -477,6 +477,43 @@ extension LookoutEquipmentClient: LookoutEquipmentClientProtocol { return result } + /// Deletes the resource policy attached to the resource. + public func deleteResourcePolicy(input: DeleteResourcePolicyInput) async throws -> DeleteResourcePolicyOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "deleteResourcePolicy") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lookoutequipment") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteResourcePolicy") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSLookoutEquipmentFrontendService.DeleteResourcePolicy")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "DeleteResourcePolicyRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.0")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Provides information on a specific data ingestion job such as creation time, dataset ARN, and status. public func describeDataIngestionJob(input: DescribeDataIngestionJobInput) async throws -> DescribeDataIngestionJobOutputResponse { @@ -699,6 +736,170 @@ extension LookoutEquipmentClient: LookoutEquipmentClientProtocol { return result } + /// Retrieves information about a specific machine learning model version. + public func describeModelVersion(input: DescribeModelVersionInput) async throws -> DescribeModelVersionOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "describeModelVersion") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lookoutequipment") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "describeModelVersion") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSLookoutEquipmentFrontendService.DescribeModelVersion")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "DescribeModelVersionRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.0")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Provides the details of a resource policy attached to a resource. + public func describeResourcePolicy(input: DescribeResourcePolicyInput) async throws -> DescribeResourcePolicyOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "describeResourcePolicy") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lookoutequipment") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "describeResourcePolicy") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSLookoutEquipmentFrontendService.DescribeResourcePolicy")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "DescribeResourcePolicyRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.0")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Imports a dataset. + public func importDataset(input: ImportDatasetInput) async throws -> ImportDatasetOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "importDataset") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lookoutequipment") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "importDataset") + 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) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSLookoutEquipmentFrontendService.ImportDataset")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "ImportDatasetRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.0")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Imports a model that has been trained successfully. + public func importModelVersion(input: ImportModelVersionInput) async throws -> ImportModelVersionOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "importModelVersion") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lookoutequipment") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "importModelVersion") + 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) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSLookoutEquipmentFrontendService.ImportModelVersion")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "ImportModelVersionRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.0")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Provides a list of all data ingestion jobs, including dataset name and ARN, S3 location of the input data, status, and so on. public func listDataIngestionJobs(input: ListDataIngestionJobsInput) async throws -> ListDataIngestionJobsOutputResponse { @@ -958,6 +1159,43 @@ extension LookoutEquipmentClient: LookoutEquipmentClientProtocol { return result } + /// Generates a list of all model versions for a given model, including the model version, model version ARN, and status. To list a subset of versions, use the MaxModelVersion and MinModelVersion fields. + public func listModelVersions(input: ListModelVersionsInput) async throws -> ListModelVersionsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listModelVersions") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lookoutequipment") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listModelVersions") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSLookoutEquipmentFrontendService.ListModelVersions")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "ListModelVersionsRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.0")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Generates a list of all models in the account, including model name and ARN, dataset, and status. public func listModels(input: ListModelsInput) async throws -> ListModelsOutputResponse { @@ -1069,6 +1307,51 @@ extension LookoutEquipmentClient: LookoutEquipmentClientProtocol { return result } + /// Creates a resource control policy for a given resource. + public func putResourcePolicy(input: PutResourcePolicyInput) async throws -> PutResourcePolicyOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "putResourcePolicy") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lookoutequipment") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "putResourcePolicy") + 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) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSLookoutEquipmentFrontendService.PutResourcePolicy")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "PutResourcePolicyRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.0")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Starts a data ingestion job. Amazon Lookout for Equipment returns the job status. public func startDataIngestionJob(input: StartDataIngestionJobInput) async throws -> StartDataIngestionJobOutputResponse { @@ -1262,6 +1545,43 @@ extension LookoutEquipmentClient: LookoutEquipmentClientProtocol { return result } + /// Sets the active model version for a given machine learning model. + public func updateActiveModelVersion(input: UpdateActiveModelVersionInput) async throws -> UpdateActiveModelVersionOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "updateActiveModelVersion") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "lookoutequipment") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateActiveModelVersion") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSLookoutEquipmentFrontendService.UpdateActiveModelVersion")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateActiveModelVersionRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.0")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Updates an inference scheduler. public func updateInferenceScheduler(input: UpdateInferenceSchedulerInput) async throws -> UpdateInferenceSchedulerOutputResponse { diff --git a/Sources/Services/AWSLookoutEquipment/LookoutEquipmentClientProtocol.swift b/Sources/Services/AWSLookoutEquipment/LookoutEquipmentClientProtocol.swift index 7de839c3279..c4e7d8031a6 100644 --- a/Sources/Services/AWSLookoutEquipment/LookoutEquipmentClientProtocol.swift +++ b/Sources/Services/AWSLookoutEquipment/LookoutEquipmentClientProtocol.swift @@ -4,7 +4,7 @@ import ClientRuntime /// Amazon Lookout for Equipment is a machine learning service that uses advanced analytics to identify anomalies in machines from sensor data for use in predictive maintenance. public protocol LookoutEquipmentClientProtocol { - /// Creates a container for a collection of data being ingested for analysis. The dataset contains the metadata describing where the data is and what the data actually looks like. In other words, it contains the location of the data source, the data schema, and other information. A dataset also contains any tags associated with the ingested data. + /// Creates a container for a collection of data being ingested for analysis. The dataset contains the metadata describing where the data is and what the data actually looks like. For example, it contains the location of the data source, the data schema, and other information. A dataset also contains any tags associated with the ingested data. func createDataset(input: CreateDatasetInput) async throws -> CreateDatasetOutputResponse /// Creates a scheduled inference. Scheduling an inference is setting up a continuous real-time inference plan to analyze new measurement data. When setting up the schedule, you provide an S3 bucket location for the input data, assign it a delimiter between separate entries in the data, set an offset delay if desired, and set the frequency of inferencing. You must also provide an S3 bucket location for the output data. func createInferenceScheduler(input: CreateInferenceSchedulerInput) async throws -> CreateInferenceSchedulerOutputResponse @@ -24,6 +24,8 @@ public protocol LookoutEquipmentClientProtocol { func deleteLabelGroup(input: DeleteLabelGroupInput) async throws -> DeleteLabelGroupOutputResponse /// Deletes an ML model currently available for Amazon Lookout for Equipment. This will prevent it from being used with an inference scheduler, even one that is already set up. func deleteModel(input: DeleteModelInput) async throws -> DeleteModelOutputResponse + /// Deletes the resource policy attached to the resource. + func deleteResourcePolicy(input: DeleteResourcePolicyInput) async throws -> DeleteResourcePolicyOutputResponse /// Provides information on a specific data ingestion job such as creation time, dataset ARN, and status. func describeDataIngestionJob(input: DescribeDataIngestionJobInput) async throws -> DescribeDataIngestionJobOutputResponse /// Provides a JSON description of the data in each time series dataset, including names, column names, and data types. @@ -36,6 +38,14 @@ public protocol LookoutEquipmentClientProtocol { func describeLabelGroup(input: DescribeLabelGroupInput) async throws -> DescribeLabelGroupOutputResponse /// Provides a JSON containing the overall information about a specific ML model, including model name and ARN, dataset, training and evaluation information, status, and so on. func describeModel(input: DescribeModelInput) async throws -> DescribeModelOutputResponse + /// Retrieves information about a specific machine learning model version. + func describeModelVersion(input: DescribeModelVersionInput) async throws -> DescribeModelVersionOutputResponse + /// Provides the details of a resource policy attached to a resource. + func describeResourcePolicy(input: DescribeResourcePolicyInput) async throws -> DescribeResourcePolicyOutputResponse + /// Imports a dataset. + func importDataset(input: ImportDatasetInput) async throws -> ImportDatasetOutputResponse + /// Imports a model that has been trained successfully. + func importModelVersion(input: ImportModelVersionInput) async throws -> ImportModelVersionOutputResponse /// Provides a list of all data ingestion jobs, including dataset name and ARN, S3 location of the input data, status, and so on. func listDataIngestionJobs(input: ListDataIngestionJobsInput) async throws -> ListDataIngestionJobsOutputResponse /// Lists all datasets currently available in your account, filtering on the dataset name. @@ -52,10 +62,14 @@ public protocol LookoutEquipmentClientProtocol { func listLabels(input: ListLabelsInput) async throws -> ListLabelsOutputResponse /// Generates a list of all models in the account, including model name and ARN, dataset, and status. func listModels(input: ListModelsInput) async throws -> ListModelsOutputResponse + /// Generates a list of all model versions for a given model, including the model version, model version ARN, and status. To list a subset of versions, use the MaxModelVersion and MinModelVersion fields. + func listModelVersions(input: ListModelVersionsInput) async throws -> ListModelVersionsOutputResponse /// Lists statistics about the data collected for each of the sensors that have been successfully ingested in the particular dataset. Can also be used to retreive Sensor Statistics for a previous ingestion job. func listSensorStatistics(input: ListSensorStatisticsInput) async throws -> ListSensorStatisticsOutputResponse /// Lists all the tags for a specified resource, including key and value. func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse + /// Creates a resource control policy for a given resource. + func putResourcePolicy(input: PutResourcePolicyInput) async throws -> PutResourcePolicyOutputResponse /// Starts a data ingestion job. Amazon Lookout for Equipment returns the job status. func startDataIngestionJob(input: StartDataIngestionJobInput) async throws -> StartDataIngestionJobOutputResponse /// Starts an inference scheduler. @@ -66,6 +80,8 @@ public protocol LookoutEquipmentClientProtocol { func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse /// Removes a specific tag from a given resource. The tag is specified by its key. func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse + /// Sets the active model version for a given machine learning model. + func updateActiveModelVersion(input: UpdateActiveModelVersionInput) async throws -> UpdateActiveModelVersionOutputResponse /// Updates an inference scheduler. func updateInferenceScheduler(input: UpdateInferenceSchedulerInput) async throws -> UpdateInferenceSchedulerOutputResponse /// Updates the label group. diff --git a/Sources/Services/AWSLookoutEquipment/Paginators.swift b/Sources/Services/AWSLookoutEquipment/Paginators.swift index f1a2dd60d34..29459db0fd1 100644 --- a/Sources/Services/AWSLookoutEquipment/Paginators.swift +++ b/Sources/Services/AWSLookoutEquipment/Paginators.swift @@ -192,6 +192,34 @@ extension ListModelsInput: ClientRuntime.PaginateToken { status: self.status )} } +extension LookoutEquipmentClient { + /// Paginate over `[ListModelVersionsOutputResponse]` 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 `[ListModelVersionsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListModelVersionsOutputResponse` + public func listModelVersionsPaginated(input: ListModelVersionsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListModelVersionsInput.nextToken, outputKey: \ListModelVersionsOutputResponse.nextToken, paginationFunction: self.listModelVersions(input:)) + } +} + +extension ListModelVersionsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListModelVersionsInput { + return ListModelVersionsInput( + createdAtEndTime: self.createdAtEndTime, + createdAtStartTime: self.createdAtStartTime, + maxModelVersion: self.maxModelVersion, + maxResults: self.maxResults, + minModelVersion: self.minModelVersion, + modelName: self.modelName, + nextToken: token, + sourceType: self.sourceType, + status: self.status + )} +} extension LookoutEquipmentClient { /// Paginate over `[ListSensorStatisticsOutputResponse]` results. /// diff --git a/Sources/Services/AWSLookoutEquipment/models/Models.swift b/Sources/Services/AWSLookoutEquipment/models/Models.swift index 6f30af77268..296f1875293 100644 --- a/Sources/Services/AWSLookoutEquipment/models/Models.swift +++ b/Sources/Services/AWSLookoutEquipment/models/Models.swift @@ -783,7 +783,7 @@ extension CreateLabelGroupOutputResponse: ClientRuntime.HttpResponseBinding { } public struct CreateLabelGroupOutputResponse: Swift.Equatable { - /// The ARN of the label group that you have created. + /// The Amazon Resource Name (ARN) of the label group that you have created. public var labelGroupArn: Swift.String? /// The name of the label group that you have created. Data in this field will be retained for service usage. Follow best practices for the security of your data. public var labelGroupName: Swift.String? @@ -1566,6 +1566,7 @@ extension LookoutEquipmentClientTypes { public enum DatasetStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case active case created + case importInProgress case ingestionInProgress case sdkUnknown(Swift.String) @@ -1573,6 +1574,7 @@ extension LookoutEquipmentClientTypes { return [ .active, .created, + .importInProgress, .ingestionInProgress, .sdkUnknown("") ] @@ -1585,6 +1587,7 @@ extension LookoutEquipmentClientTypes { switch self { case .active: return "ACTIVE" case .created: return "CREATED" + case .importInProgress: return "IMPORT_IN_PROGRESS" case .ingestionInProgress: return "INGESTION_IN_PROGRESS" case let .sdkUnknown(s): return s } @@ -2045,6 +2048,80 @@ public struct DeleteModelOutputResponse: Swift.Equatable { public init() { } } +extension DeleteResourcePolicyInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case resourceArn = "ResourceArn" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let resourceArn = self.resourceArn { + try encodeContainer.encode(resourceArn, forKey: .resourceArn) + } + } +} + +extension DeleteResourcePolicyInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct DeleteResourcePolicyInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the resource for which the resource policy should be deleted. + /// This member is required. + public var resourceArn: Swift.String? + + public init( + resourceArn: Swift.String? = nil + ) + { + self.resourceArn = resourceArn + } +} + +struct DeleteResourcePolicyInputBody: Swift.Equatable { + let resourceArn: Swift.String? +} + +extension DeleteResourcePolicyInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case resourceArn = "ResourceArn" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) + resourceArn = resourceArnDecoded + } +} + +public enum DeleteResourcePolicyOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteResourcePolicyOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct DeleteResourcePolicyOutputResponse: Swift.Equatable { + + public init() { } +} + extension DescribeDataIngestionJobInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case jobId = "JobId" @@ -2124,6 +2201,7 @@ extension DescribeDataIngestionJobOutputResponse: ClientRuntime.HttpResponseBind self.ingestionInputConfiguration = output.ingestionInputConfiguration self.jobId = output.jobId self.roleArn = output.roleArn + self.sourceDatasetArn = output.sourceDatasetArn self.status = output.status self.statusDetail = output.statusDetail } else { @@ -2138,6 +2216,7 @@ extension DescribeDataIngestionJobOutputResponse: ClientRuntime.HttpResponseBind self.ingestionInputConfiguration = nil self.jobId = nil self.roleArn = nil + self.sourceDatasetArn = nil self.status = nil self.statusDetail = nil } @@ -2167,6 +2246,8 @@ public struct DescribeDataIngestionJobOutputResponse: Swift.Equatable { public var jobId: Swift.String? /// The Amazon Resource Name (ARN) of an IAM role with permission to access the data source being ingested. public var roleArn: Swift.String? + /// The Amazon Resource Name (ARN) of the source dataset from which the data used for the data ingestion job was imported from. + public var sourceDatasetArn: Swift.String? /// Indicates the status of the DataIngestionJob operation. public var status: LookoutEquipmentClientTypes.IngestionJobStatus? /// Provides details about status of the ingestion job that is currently in progress. @@ -2184,6 +2265,7 @@ public struct DescribeDataIngestionJobOutputResponse: Swift.Equatable { ingestionInputConfiguration: LookoutEquipmentClientTypes.IngestionInputConfiguration? = nil, jobId: Swift.String? = nil, roleArn: Swift.String? = nil, + sourceDatasetArn: Swift.String? = nil, status: LookoutEquipmentClientTypes.IngestionJobStatus? = nil, statusDetail: Swift.String? = nil ) @@ -2199,6 +2281,7 @@ public struct DescribeDataIngestionJobOutputResponse: Swift.Equatable { self.ingestionInputConfiguration = ingestionInputConfiguration self.jobId = jobId self.roleArn = roleArn + self.sourceDatasetArn = sourceDatasetArn self.status = status self.statusDetail = statusDetail } @@ -2218,6 +2301,7 @@ struct DescribeDataIngestionJobOutputResponseBody: Swift.Equatable { let ingestedDataSize: Swift.Int? let dataStartTime: ClientRuntime.Date? let dataEndTime: ClientRuntime.Date? + let sourceDatasetArn: Swift.String? } extension DescribeDataIngestionJobOutputResponseBody: Swift.Decodable { @@ -2233,6 +2317,7 @@ extension DescribeDataIngestionJobOutputResponseBody: Swift.Decodable { case ingestionInputConfiguration = "IngestionInputConfiguration" case jobId = "JobId" case roleArn = "RoleArn" + case sourceDatasetArn = "SourceDatasetArn" case status = "Status" case statusDetail = "StatusDetail" } @@ -2265,6 +2350,8 @@ extension DescribeDataIngestionJobOutputResponseBody: Swift.Decodable { dataStartTime = dataStartTimeDecoded let dataEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .dataEndTime) dataEndTime = dataEndTimeDecoded + let sourceDatasetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceDatasetArn) + sourceDatasetArn = sourceDatasetArnDecoded } } @@ -2348,6 +2435,7 @@ extension DescribeDatasetOutputResponse: ClientRuntime.HttpResponseBinding { self.roleArn = output.roleArn self.schema = output.schema self.serverSideKmsKeyId = output.serverSideKmsKeyId + self.sourceDatasetArn = output.sourceDatasetArn self.status = output.status } else { self.createdAt = nil @@ -2362,6 +2450,7 @@ extension DescribeDatasetOutputResponse: ClientRuntime.HttpResponseBinding { self.roleArn = nil self.schema = nil self.serverSideKmsKeyId = nil + self.sourceDatasetArn = nil self.status = nil } } @@ -2392,6 +2481,8 @@ public struct DescribeDatasetOutputResponse: Swift.Equatable { public var schema: Swift.String? /// Provides the identifier of the KMS key used to encrypt dataset data by Amazon Lookout for Equipment. public var serverSideKmsKeyId: Swift.String? + /// The Amazon Resource Name (ARN) of the source dataset from which the current data being described was imported from. + public var sourceDatasetArn: Swift.String? /// Indicates the status of the dataset. public var status: LookoutEquipmentClientTypes.DatasetStatus? @@ -2408,6 +2499,7 @@ public struct DescribeDatasetOutputResponse: Swift.Equatable { roleArn: Swift.String? = nil, schema: Swift.String? = nil, serverSideKmsKeyId: Swift.String? = nil, + sourceDatasetArn: Swift.String? = nil, status: LookoutEquipmentClientTypes.DatasetStatus? = nil ) { @@ -2423,6 +2515,7 @@ public struct DescribeDatasetOutputResponse: Swift.Equatable { self.roleArn = roleArn self.schema = schema self.serverSideKmsKeyId = serverSideKmsKeyId + self.sourceDatasetArn = sourceDatasetArn self.status = status } } @@ -2441,6 +2534,7 @@ struct DescribeDatasetOutputResponseBody: Swift.Equatable { let roleArn: Swift.String? let dataStartTime: ClientRuntime.Date? let dataEndTime: ClientRuntime.Date? + let sourceDatasetArn: Swift.String? } extension DescribeDatasetOutputResponseBody: Swift.Decodable { @@ -2457,6 +2551,7 @@ extension DescribeDatasetOutputResponseBody: Swift.Decodable { case roleArn = "RoleArn" case schema = "Schema" case serverSideKmsKeyId = "ServerSideKmsKeyId" + case sourceDatasetArn = "SourceDatasetArn" case status = "Status" } @@ -2488,6 +2583,8 @@ extension DescribeDatasetOutputResponseBody: Swift.Decodable { dataStartTime = dataStartTimeDecoded let dataEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .dataEndTime) dataEndTime = dataEndTimeDecoded + let sourceDatasetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceDatasetArn) + sourceDatasetArn = sourceDatasetArnDecoded } } @@ -2812,7 +2909,7 @@ public struct DescribeLabelGroupOutputResponse: Swift.Equatable { public var createdAt: ClientRuntime.Date? /// Codes indicating the type of anomaly associated with the labels in the lagbel group. public var faultCodes: [Swift.String]? - /// The ARN of the label group. + /// The Amazon Resource Name (ARN) of the label group. public var labelGroupArn: Swift.String? /// The name of the label group. public var labelGroupName: Swift.String? @@ -2991,7 +3088,7 @@ public struct DescribeLabelOutputResponse: Swift.Equatable { public var equipment: Swift.String? /// Indicates the type of anomaly associated with the label. Data in this field will be retained for service usage. Follow best practices for the security of your data. public var faultCode: Swift.String? - /// The ARN of the requested label group. + /// The Amazon Resource Name (ARN) of the requested label group. public var labelGroupArn: Swift.String? /// The name of the requested label group. public var labelGroupName: Swift.String? @@ -3150,6 +3247,8 @@ extension DescribeModelOutputResponse: ClientRuntime.HttpResponseBinding { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { let output: DescribeModelOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.activeModelVersion = output.activeModelVersion + self.activeModelVersionArn = output.activeModelVersionArn self.createdAt = output.createdAt self.dataPreProcessingConfiguration = output.dataPreProcessingConfiguration self.datasetArn = output.datasetArn @@ -3157,21 +3256,30 @@ extension DescribeModelOutputResponse: ClientRuntime.HttpResponseBinding { self.evaluationDataEndTime = output.evaluationDataEndTime self.evaluationDataStartTime = output.evaluationDataStartTime self.failedReason = output.failedReason + self.importJobEndTime = output.importJobEndTime + self.importJobStartTime = output.importJobStartTime self.labelsInputConfiguration = output.labelsInputConfiguration self.lastUpdatedTime = output.lastUpdatedTime self.modelArn = output.modelArn self.modelMetrics = output.modelMetrics self.modelName = output.modelName + self.modelVersionActivatedAt = output.modelVersionActivatedAt self.offCondition = output.offCondition + self.previousActiveModelVersion = output.previousActiveModelVersion + self.previousActiveModelVersionArn = output.previousActiveModelVersionArn + self.previousModelVersionActivatedAt = output.previousModelVersionActivatedAt self.roleArn = output.roleArn self.schema = output.schema self.serverSideKmsKeyId = output.serverSideKmsKeyId + self.sourceModelVersionArn = output.sourceModelVersionArn self.status = output.status self.trainingDataEndTime = output.trainingDataEndTime self.trainingDataStartTime = output.trainingDataStartTime self.trainingExecutionEndTime = output.trainingExecutionEndTime self.trainingExecutionStartTime = output.trainingExecutionStartTime } else { + self.activeModelVersion = nil + self.activeModelVersionArn = nil self.createdAt = nil self.dataPreProcessingConfiguration = nil self.datasetArn = nil @@ -3179,15 +3287,22 @@ extension DescribeModelOutputResponse: ClientRuntime.HttpResponseBinding { self.evaluationDataEndTime = nil self.evaluationDataStartTime = nil self.failedReason = nil + self.importJobEndTime = nil + self.importJobStartTime = nil self.labelsInputConfiguration = nil self.lastUpdatedTime = nil self.modelArn = nil self.modelMetrics = nil self.modelName = nil + self.modelVersionActivatedAt = nil self.offCondition = nil + self.previousActiveModelVersion = nil + self.previousActiveModelVersionArn = nil + self.previousModelVersionActivatedAt = nil self.roleArn = nil self.schema = nil self.serverSideKmsKeyId = nil + self.sourceModelVersionArn = nil self.status = nil self.trainingDataEndTime = nil self.trainingDataStartTime = nil @@ -3198,6 +3313,10 @@ extension DescribeModelOutputResponse: ClientRuntime.HttpResponseBinding { } public struct DescribeModelOutputResponse: Swift.Equatable { + /// The name of the model version used by the inference schedular when running a scheduled inference execution. + public var activeModelVersion: Swift.Int? + /// The Amazon Resource Name (ARN) of the model version used by the inference scheduler when running a scheduled inference execution. + public var activeModelVersionArn: Swift.String? /// Indicates the time and date at which the ML model was created. public var createdAt: ClientRuntime.Date? /// The configuration is the TargetSamplingRate, which is the sampling rate of the data after post processing by Amazon Lookout for Equipment. For example, if you provide data that has been collected at a 1 second level and you want the system to resample the data at a 1 minute rate before training, the TargetSamplingRate is 1 minute. When providing a value for the TargetSamplingRate, you must attach the prefix "PT" to the rate you want. The value for a 1 second rate is therefore PT1S, the value for a 15 minute rate is PT15M, and the value for a 1 hour rate is PT1H @@ -3212,6 +3331,10 @@ public struct DescribeModelOutputResponse: Swift.Equatable { public var evaluationDataStartTime: ClientRuntime.Date? /// If the training of the ML model failed, this indicates the reason for that failure. public var failedReason: Swift.String? + /// The date and time when the import job was completed. This field appears if the active model version was imported. + public var importJobEndTime: ClientRuntime.Date? + /// The date and time when the import job was started. This field appears if the active model version was imported. + public var importJobStartTime: ClientRuntime.Date? /// Specifies configuration information about the labels input, including its S3 location. public var labelsInputConfiguration: LookoutEquipmentClientTypes.LabelsInputConfiguration? /// Indicates the last time the ML model was updated. The type of update is not specified. @@ -3222,14 +3345,24 @@ public struct DescribeModelOutputResponse: Swift.Equatable { public var modelMetrics: Swift.String? /// The name of the ML model being described. public var modelName: Swift.String? + /// The date the active model version was activated. + public var modelVersionActivatedAt: ClientRuntime.Date? /// Indicates that the asset associated with this sensor has been shut off. As long as this condition is met, Lookout for Equipment will not use data from this asset for training, evaluation, or inference. public var offCondition: Swift.String? + /// The model version that was set as the active model version prior to the current active model version. + public var previousActiveModelVersion: Swift.Int? + /// The ARN of the model version that was set as the active model version prior to the current active model version. + public var previousActiveModelVersionArn: Swift.String? + /// The date and time when the previous active model version was activated. + public var previousModelVersionActivatedAt: ClientRuntime.Date? /// The Amazon Resource Name (ARN) of a role with permission to access the data source for the ML model being described. public var roleArn: Swift.String? /// A JSON description of the data that is in each time series dataset, including names, column names, and data types. public var schema: Swift.String? /// Provides the identifier of the KMS key used to encrypt model data by Amazon Lookout for Equipment. public var serverSideKmsKeyId: Swift.String? + /// The Amazon Resource Name (ARN) of the source model version. This field appears if the active model version was imported. + public var sourceModelVersionArn: Swift.String? /// Specifies the current status of the model being described. Status describes the status of the most recent action of the model. public var status: LookoutEquipmentClientTypes.ModelStatus? /// Indicates the time reference in the dataset that was used to end the subset of training data for the ML model. @@ -3242,6 +3375,8 @@ public struct DescribeModelOutputResponse: Swift.Equatable { public var trainingExecutionStartTime: ClientRuntime.Date? public init( + activeModelVersion: Swift.Int? = nil, + activeModelVersionArn: Swift.String? = nil, createdAt: ClientRuntime.Date? = nil, dataPreProcessingConfiguration: LookoutEquipmentClientTypes.DataPreProcessingConfiguration? = nil, datasetArn: Swift.String? = nil, @@ -3249,15 +3384,22 @@ public struct DescribeModelOutputResponse: Swift.Equatable { evaluationDataEndTime: ClientRuntime.Date? = nil, evaluationDataStartTime: ClientRuntime.Date? = nil, failedReason: Swift.String? = nil, + importJobEndTime: ClientRuntime.Date? = nil, + importJobStartTime: ClientRuntime.Date? = nil, labelsInputConfiguration: LookoutEquipmentClientTypes.LabelsInputConfiguration? = nil, lastUpdatedTime: ClientRuntime.Date? = nil, modelArn: Swift.String? = nil, modelMetrics: Swift.String? = nil, modelName: Swift.String? = nil, + modelVersionActivatedAt: ClientRuntime.Date? = nil, offCondition: Swift.String? = nil, + previousActiveModelVersion: Swift.Int? = nil, + previousActiveModelVersionArn: Swift.String? = nil, + previousModelVersionActivatedAt: ClientRuntime.Date? = nil, roleArn: Swift.String? = nil, schema: Swift.String? = nil, serverSideKmsKeyId: Swift.String? = nil, + sourceModelVersionArn: Swift.String? = nil, status: LookoutEquipmentClientTypes.ModelStatus? = nil, trainingDataEndTime: ClientRuntime.Date? = nil, trainingDataStartTime: ClientRuntime.Date? = nil, @@ -3265,6 +3407,8 @@ public struct DescribeModelOutputResponse: Swift.Equatable { trainingExecutionStartTime: ClientRuntime.Date? = nil ) { + self.activeModelVersion = activeModelVersion + self.activeModelVersionArn = activeModelVersionArn self.createdAt = createdAt self.dataPreProcessingConfiguration = dataPreProcessingConfiguration self.datasetArn = datasetArn @@ -3272,15 +3416,22 @@ public struct DescribeModelOutputResponse: Swift.Equatable { self.evaluationDataEndTime = evaluationDataEndTime self.evaluationDataStartTime = evaluationDataStartTime self.failedReason = failedReason + self.importJobEndTime = importJobEndTime + self.importJobStartTime = importJobStartTime self.labelsInputConfiguration = labelsInputConfiguration self.lastUpdatedTime = lastUpdatedTime self.modelArn = modelArn self.modelMetrics = modelMetrics self.modelName = modelName + self.modelVersionActivatedAt = modelVersionActivatedAt self.offCondition = offCondition + self.previousActiveModelVersion = previousActiveModelVersion + self.previousActiveModelVersionArn = previousActiveModelVersionArn + self.previousModelVersionActivatedAt = previousModelVersionActivatedAt self.roleArn = roleArn self.schema = schema self.serverSideKmsKeyId = serverSideKmsKeyId + self.sourceModelVersionArn = sourceModelVersionArn self.status = status self.trainingDataEndTime = trainingDataEndTime self.trainingDataStartTime = trainingDataStartTime @@ -3311,10 +3462,21 @@ struct DescribeModelOutputResponseBody: Swift.Equatable { let createdAt: ClientRuntime.Date? let serverSideKmsKeyId: Swift.String? let offCondition: Swift.String? + let sourceModelVersionArn: Swift.String? + let importJobStartTime: ClientRuntime.Date? + let importJobEndTime: ClientRuntime.Date? + let activeModelVersion: Swift.Int? + let activeModelVersionArn: Swift.String? + let modelVersionActivatedAt: ClientRuntime.Date? + let previousActiveModelVersion: Swift.Int? + let previousActiveModelVersionArn: Swift.String? + let previousModelVersionActivatedAt: ClientRuntime.Date? } extension DescribeModelOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case activeModelVersion = "ActiveModelVersion" + case activeModelVersionArn = "ActiveModelVersionArn" case createdAt = "CreatedAt" case dataPreProcessingConfiguration = "DataPreProcessingConfiguration" case datasetArn = "DatasetArn" @@ -3322,15 +3484,22 @@ extension DescribeModelOutputResponseBody: Swift.Decodable { case evaluationDataEndTime = "EvaluationDataEndTime" case evaluationDataStartTime = "EvaluationDataStartTime" case failedReason = "FailedReason" + case importJobEndTime = "ImportJobEndTime" + case importJobStartTime = "ImportJobStartTime" case labelsInputConfiguration = "LabelsInputConfiguration" case lastUpdatedTime = "LastUpdatedTime" case modelArn = "ModelArn" case modelMetrics = "ModelMetrics" case modelName = "ModelName" + case modelVersionActivatedAt = "ModelVersionActivatedAt" case offCondition = "OffCondition" + case previousActiveModelVersion = "PreviousActiveModelVersion" + case previousActiveModelVersionArn = "PreviousActiveModelVersionArn" + case previousModelVersionActivatedAt = "PreviousModelVersionActivatedAt" case roleArn = "RoleArn" case schema = "Schema" case serverSideKmsKeyId = "ServerSideKmsKeyId" + case sourceModelVersionArn = "SourceModelVersionArn" case status = "Status" case trainingDataEndTime = "TrainingDataEndTime" case trainingDataStartTime = "TrainingDataStartTime" @@ -3382,150 +3551,1126 @@ extension DescribeModelOutputResponseBody: Swift.Decodable { serverSideKmsKeyId = serverSideKmsKeyIdDecoded let offConditionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .offCondition) offCondition = offConditionDecoded - } -} - -extension LookoutEquipmentClientTypes.DuplicateTimestamps: Swift.Codable { + let sourceModelVersionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceModelVersionArn) + sourceModelVersionArn = sourceModelVersionArnDecoded + let importJobStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .importJobStartTime) + importJobStartTime = importJobStartTimeDecoded + let importJobEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .importJobEndTime) + importJobEndTime = importJobEndTimeDecoded + let activeModelVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .activeModelVersion) + activeModelVersion = activeModelVersionDecoded + let activeModelVersionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .activeModelVersionArn) + activeModelVersionArn = activeModelVersionArnDecoded + let modelVersionActivatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .modelVersionActivatedAt) + modelVersionActivatedAt = modelVersionActivatedAtDecoded + let previousActiveModelVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .previousActiveModelVersion) + previousActiveModelVersion = previousActiveModelVersionDecoded + let previousActiveModelVersionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .previousActiveModelVersionArn) + previousActiveModelVersionArn = previousActiveModelVersionArnDecoded + let previousModelVersionActivatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .previousModelVersionActivatedAt) + previousModelVersionActivatedAt = previousModelVersionActivatedAtDecoded + } +} + +extension DescribeModelVersionInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case totalNumberOfDuplicateTimestamps = "TotalNumberOfDuplicateTimestamps" + case modelName = "ModelName" + case modelVersion = "ModelVersion" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let totalNumberOfDuplicateTimestamps = self.totalNumberOfDuplicateTimestamps { - try encodeContainer.encode(totalNumberOfDuplicateTimestamps, forKey: .totalNumberOfDuplicateTimestamps) + if let modelName = self.modelName { + try encodeContainer.encode(modelName, forKey: .modelName) + } + if let modelVersion = self.modelVersion { + try encodeContainer.encode(modelVersion, forKey: .modelVersion) } } +} - public init(from decoder: Swift.Decoder) throws { - let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let totalNumberOfDuplicateTimestampsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .totalNumberOfDuplicateTimestamps) - totalNumberOfDuplicateTimestamps = totalNumberOfDuplicateTimestampsDecoded +extension DescribeModelVersionInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" } } -extension LookoutEquipmentClientTypes { - /// Entity that comprises information abount duplicate timestamps in the dataset. - public struct DuplicateTimestamps: Swift.Equatable { - /// Indicates the total number of duplicate timestamps. - /// This member is required. - public var totalNumberOfDuplicateTimestamps: Swift.Int? +public struct DescribeModelVersionInput: Swift.Equatable { + /// The name of the machine learning model that this version belongs to. + /// This member is required. + public var modelName: Swift.String? + /// The version of the machine learning model. + /// This member is required. + public var modelVersion: Swift.Int? - public init( - totalNumberOfDuplicateTimestamps: Swift.Int? = nil - ) - { - self.totalNumberOfDuplicateTimestamps = totalNumberOfDuplicateTimestamps - } + public init( + modelName: Swift.String? = nil, + modelVersion: Swift.Int? = nil + ) + { + self.modelName = modelName + self.modelVersion = modelVersion } +} +struct DescribeModelVersionInputBody: Swift.Equatable { + let modelName: Swift.String? + let modelVersion: Swift.Int? } -extension LookoutEquipmentClientTypes.InferenceEventSummary: Swift.Codable { +extension DescribeModelVersionInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case diagnostics = "Diagnostics" - case eventDurationInSeconds = "EventDurationInSeconds" - case eventEndTime = "EventEndTime" - case eventStartTime = "EventStartTime" - case inferenceSchedulerArn = "InferenceSchedulerArn" - case inferenceSchedulerName = "InferenceSchedulerName" - } - - public func encode(to encoder: Swift.Encoder) throws { - var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let diagnostics = self.diagnostics { - try encodeContainer.encode(diagnostics, forKey: .diagnostics) - } - if let eventDurationInSeconds = self.eventDurationInSeconds { - try encodeContainer.encode(eventDurationInSeconds, forKey: .eventDurationInSeconds) - } - if let eventEndTime = self.eventEndTime { - try encodeContainer.encodeTimestamp(eventEndTime, format: .epochSeconds, forKey: .eventEndTime) - } - if let eventStartTime = self.eventStartTime { - try encodeContainer.encodeTimestamp(eventStartTime, format: .epochSeconds, forKey: .eventStartTime) - } - if let inferenceSchedulerArn = self.inferenceSchedulerArn { - try encodeContainer.encode(inferenceSchedulerArn, forKey: .inferenceSchedulerArn) - } - if let inferenceSchedulerName = self.inferenceSchedulerName { - try encodeContainer.encode(inferenceSchedulerName, forKey: .inferenceSchedulerName) - } + case modelName = "ModelName" + case modelVersion = "ModelVersion" } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let inferenceSchedulerArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inferenceSchedulerArn) - inferenceSchedulerArn = inferenceSchedulerArnDecoded - let inferenceSchedulerNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inferenceSchedulerName) - inferenceSchedulerName = inferenceSchedulerNameDecoded - let eventStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .eventStartTime) - eventStartTime = eventStartTimeDecoded - let eventEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .eventEndTime) - eventEndTime = eventEndTimeDecoded - let diagnosticsDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .diagnostics) - diagnostics = diagnosticsDecoded - let eventDurationInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .eventDurationInSeconds) - eventDurationInSeconds = eventDurationInSecondsDecoded + let modelNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelName) + modelName = modelNameDecoded + let modelVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .modelVersion) + modelVersion = modelVersionDecoded } } -extension LookoutEquipmentClientTypes { - /// Contains information about the specific inference event, including start and end time, diagnostics information, event duration and so on. - public struct InferenceEventSummary: Swift.Equatable { - /// An array which specifies the names and values of all sensors contributing to an inference event. - public var diagnostics: Swift.String? - /// Indicates the size of an inference event in seconds. - public var eventDurationInSeconds: Swift.Int? - /// Indicates the ending time of an inference event. - public var eventEndTime: ClientRuntime.Date? - /// Indicates the starting time of an inference event. - public var eventStartTime: ClientRuntime.Date? - /// The Amazon Resource Name (ARN) of the inference scheduler being used for the inference event. - public var inferenceSchedulerArn: Swift.String? - /// The name of the inference scheduler being used for the inference events. - public var inferenceSchedulerName: Swift.String? - - public init( - diagnostics: Swift.String? = nil, - eventDurationInSeconds: Swift.Int? = nil, - eventEndTime: ClientRuntime.Date? = nil, - eventStartTime: ClientRuntime.Date? = nil, - inferenceSchedulerArn: Swift.String? = nil, - inferenceSchedulerName: Swift.String? = nil - ) - { - self.diagnostics = diagnostics - self.eventDurationInSeconds = eventDurationInSeconds - self.eventEndTime = eventEndTime - self.eventStartTime = eventStartTime - self.inferenceSchedulerArn = inferenceSchedulerArn - self.inferenceSchedulerName = inferenceSchedulerName +public enum DescribeModelVersionOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) } } - } -extension LookoutEquipmentClientTypes { - public enum InferenceExecutionStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case failed - case inProgress - case success - case sdkUnknown(Swift.String) - - public static var allCases: [InferenceExecutionStatus] { - return [ - .failed, - .inProgress, - .success, - .sdkUnknown("") - ] - } - public init?(rawValue: Swift.String) { - let value = Self.allCases.first(where: { $0.rawValue == rawValue }) - self = value ?? Self.sdkUnknown(rawValue) +extension DescribeModelVersionOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeModelVersionOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.createdAt = output.createdAt + self.dataPreProcessingConfiguration = output.dataPreProcessingConfiguration + self.datasetArn = output.datasetArn + self.datasetName = output.datasetName + self.evaluationDataEndTime = output.evaluationDataEndTime + self.evaluationDataStartTime = output.evaluationDataStartTime + self.failedReason = output.failedReason + self.importJobEndTime = output.importJobEndTime + self.importJobStartTime = output.importJobStartTime + self.importedDataSizeInBytes = output.importedDataSizeInBytes + self.labelsInputConfiguration = output.labelsInputConfiguration + self.lastUpdatedTime = output.lastUpdatedTime + self.modelArn = output.modelArn + self.modelMetrics = output.modelMetrics + self.modelName = output.modelName + self.modelVersion = output.modelVersion + self.modelVersionArn = output.modelVersionArn + self.offCondition = output.offCondition + self.roleArn = output.roleArn + self.schema = output.schema + self.serverSideKmsKeyId = output.serverSideKmsKeyId + self.sourceModelVersionArn = output.sourceModelVersionArn + self.sourceType = output.sourceType + self.status = output.status + self.trainingDataEndTime = output.trainingDataEndTime + self.trainingDataStartTime = output.trainingDataStartTime + self.trainingExecutionEndTime = output.trainingExecutionEndTime + self.trainingExecutionStartTime = output.trainingExecutionStartTime + } else { + self.createdAt = nil + self.dataPreProcessingConfiguration = nil + self.datasetArn = nil + self.datasetName = nil + self.evaluationDataEndTime = nil + self.evaluationDataStartTime = nil + self.failedReason = nil + self.importJobEndTime = nil + self.importJobStartTime = nil + self.importedDataSizeInBytes = nil + self.labelsInputConfiguration = nil + self.lastUpdatedTime = nil + self.modelArn = nil + self.modelMetrics = nil + self.modelName = nil + self.modelVersion = nil + self.modelVersionArn = nil + self.offCondition = nil + self.roleArn = nil + self.schema = nil + self.serverSideKmsKeyId = nil + self.sourceModelVersionArn = nil + self.sourceType = nil + self.status = nil + self.trainingDataEndTime = nil + self.trainingDataStartTime = nil + self.trainingExecutionEndTime = nil + self.trainingExecutionStartTime = nil } - public var rawValue: Swift.String { + } +} + +public struct DescribeModelVersionOutputResponse: Swift.Equatable { + /// Indicates the time and date at which the machine learning model version was created. + public var createdAt: ClientRuntime.Date? + /// The configuration is the TargetSamplingRate, which is the sampling rate of the data after post processing by Amazon Lookout for Equipment. For example, if you provide data that has been collected at a 1 second level and you want the system to resample the data at a 1 minute rate before training, the TargetSamplingRate is 1 minute. When providing a value for the TargetSamplingRate, you must attach the prefix "PT" to the rate you want. The value for a 1 second rate is therefore PT1S, the value for a 15 minute rate is PT15M, and the value for a 1 hour rate is PT1H + public var dataPreProcessingConfiguration: LookoutEquipmentClientTypes.DataPreProcessingConfiguration? + /// The Amazon Resource Name (ARN) of the dataset used to train the model version. + public var datasetArn: Swift.String? + /// The name of the dataset used to train the model version. + public var datasetName: Swift.String? + /// The date on which the data in the evaluation set began being gathered. If you imported the version, this is the date that the evaluation set data in the source version finished being gathered. + public var evaluationDataEndTime: ClientRuntime.Date? + /// The date on which the data in the evaluation set began being gathered. If you imported the version, this is the date that the evaluation set data in the source version began being gathered. + public var evaluationDataStartTime: ClientRuntime.Date? + /// The failure message if the training of the model version failed. + public var failedReason: Swift.String? + /// The date and time when the import job completed. This field appears if the model version was imported. + public var importJobEndTime: ClientRuntime.Date? + /// The date and time when the import job began. This field appears if the model version was imported. + public var importJobStartTime: ClientRuntime.Date? + /// The size in bytes of the imported data. This field appears if the model version was imported. + public var importedDataSizeInBytes: Swift.Int? + /// Contains the configuration information for the S3 location being used to hold label data. + public var labelsInputConfiguration: LookoutEquipmentClientTypes.LabelsInputConfiguration? + /// Indicates the last time the machine learning model version was updated. + public var lastUpdatedTime: ClientRuntime.Date? + /// The Amazon Resource Name (ARN) of the parent machine learning model that this version belong to. + public var modelArn: Swift.String? + /// Shows an aggregated summary, in JSON format, of the model's performance within the evaluation time range. These metrics are created when evaluating the model. + public var modelMetrics: Swift.String? + /// The name of the machine learning model that this version belongs to. + public var modelName: Swift.String? + /// The version of the machine learning model. + public var modelVersion: Swift.Int? + /// The Amazon Resource Name (ARN) of the model version. + public var modelVersionArn: Swift.String? + /// Indicates that the asset associated with this sensor has been shut off. As long as this condition is met, Lookout for Equipment will not use data from this asset for training, evaluation, or inference. + public var offCondition: Swift.String? + /// The Amazon Resource Name (ARN) of the role that was used to train the model version. + public var roleArn: Swift.String? + /// The schema of the data used to train the model version. + public var schema: Swift.String? + /// The identifier of the KMS key key used to encrypt model version data by Amazon Lookout for Equipment. + public var serverSideKmsKeyId: Swift.String? + /// If model version was imported, then this field is the arn of the source model version. + public var sourceModelVersionArn: Swift.String? + /// Indicates whether this model version was created by training or by importing. + public var sourceType: LookoutEquipmentClientTypes.ModelVersionSourceType? + /// The current status of the model version. + public var status: LookoutEquipmentClientTypes.ModelVersionStatus? + /// The date on which the training data finished being gathered. If you imported the version, this is the date that the training data in the source version finished being gathered. + public var trainingDataEndTime: ClientRuntime.Date? + /// The date on which the training data began being gathered. If you imported the version, this is the date that the training data in the source version began being gathered. + public var trainingDataStartTime: ClientRuntime.Date? + /// The time when the training of the version completed. + public var trainingExecutionEndTime: ClientRuntime.Date? + /// The time when the training of the version began. + public var trainingExecutionStartTime: ClientRuntime.Date? + + public init( + createdAt: ClientRuntime.Date? = nil, + dataPreProcessingConfiguration: LookoutEquipmentClientTypes.DataPreProcessingConfiguration? = nil, + datasetArn: Swift.String? = nil, + datasetName: Swift.String? = nil, + evaluationDataEndTime: ClientRuntime.Date? = nil, + evaluationDataStartTime: ClientRuntime.Date? = nil, + failedReason: Swift.String? = nil, + importJobEndTime: ClientRuntime.Date? = nil, + importJobStartTime: ClientRuntime.Date? = nil, + importedDataSizeInBytes: Swift.Int? = nil, + labelsInputConfiguration: LookoutEquipmentClientTypes.LabelsInputConfiguration? = nil, + lastUpdatedTime: ClientRuntime.Date? = nil, + modelArn: Swift.String? = nil, + modelMetrics: Swift.String? = nil, + modelName: Swift.String? = nil, + modelVersion: Swift.Int? = nil, + modelVersionArn: Swift.String? = nil, + offCondition: Swift.String? = nil, + roleArn: Swift.String? = nil, + schema: Swift.String? = nil, + serverSideKmsKeyId: Swift.String? = nil, + sourceModelVersionArn: Swift.String? = nil, + sourceType: LookoutEquipmentClientTypes.ModelVersionSourceType? = nil, + status: LookoutEquipmentClientTypes.ModelVersionStatus? = nil, + trainingDataEndTime: ClientRuntime.Date? = nil, + trainingDataStartTime: ClientRuntime.Date? = nil, + trainingExecutionEndTime: ClientRuntime.Date? = nil, + trainingExecutionStartTime: ClientRuntime.Date? = nil + ) + { + self.createdAt = createdAt + self.dataPreProcessingConfiguration = dataPreProcessingConfiguration + self.datasetArn = datasetArn + self.datasetName = datasetName + self.evaluationDataEndTime = evaluationDataEndTime + self.evaluationDataStartTime = evaluationDataStartTime + self.failedReason = failedReason + self.importJobEndTime = importJobEndTime + self.importJobStartTime = importJobStartTime + self.importedDataSizeInBytes = importedDataSizeInBytes + self.labelsInputConfiguration = labelsInputConfiguration + self.lastUpdatedTime = lastUpdatedTime + self.modelArn = modelArn + self.modelMetrics = modelMetrics + self.modelName = modelName + self.modelVersion = modelVersion + self.modelVersionArn = modelVersionArn + self.offCondition = offCondition + self.roleArn = roleArn + self.schema = schema + self.serverSideKmsKeyId = serverSideKmsKeyId + self.sourceModelVersionArn = sourceModelVersionArn + self.sourceType = sourceType + self.status = status + self.trainingDataEndTime = trainingDataEndTime + self.trainingDataStartTime = trainingDataStartTime + self.trainingExecutionEndTime = trainingExecutionEndTime + self.trainingExecutionStartTime = trainingExecutionStartTime + } +} + +struct DescribeModelVersionOutputResponseBody: Swift.Equatable { + let modelName: Swift.String? + let modelArn: Swift.String? + let modelVersion: Swift.Int? + let modelVersionArn: Swift.String? + let status: LookoutEquipmentClientTypes.ModelVersionStatus? + let sourceType: LookoutEquipmentClientTypes.ModelVersionSourceType? + let datasetName: Swift.String? + let datasetArn: Swift.String? + let schema: Swift.String? + let labelsInputConfiguration: LookoutEquipmentClientTypes.LabelsInputConfiguration? + let trainingDataStartTime: ClientRuntime.Date? + let trainingDataEndTime: ClientRuntime.Date? + let evaluationDataStartTime: ClientRuntime.Date? + let evaluationDataEndTime: ClientRuntime.Date? + let roleArn: Swift.String? + let dataPreProcessingConfiguration: LookoutEquipmentClientTypes.DataPreProcessingConfiguration? + let trainingExecutionStartTime: ClientRuntime.Date? + let trainingExecutionEndTime: ClientRuntime.Date? + let failedReason: Swift.String? + let modelMetrics: Swift.String? + let lastUpdatedTime: ClientRuntime.Date? + let createdAt: ClientRuntime.Date? + let serverSideKmsKeyId: Swift.String? + let offCondition: Swift.String? + let sourceModelVersionArn: Swift.String? + let importJobStartTime: ClientRuntime.Date? + let importJobEndTime: ClientRuntime.Date? + let importedDataSizeInBytes: Swift.Int? +} + +extension DescribeModelVersionOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdAt = "CreatedAt" + case dataPreProcessingConfiguration = "DataPreProcessingConfiguration" + case datasetArn = "DatasetArn" + case datasetName = "DatasetName" + case evaluationDataEndTime = "EvaluationDataEndTime" + case evaluationDataStartTime = "EvaluationDataStartTime" + case failedReason = "FailedReason" + case importJobEndTime = "ImportJobEndTime" + case importJobStartTime = "ImportJobStartTime" + case importedDataSizeInBytes = "ImportedDataSizeInBytes" + case labelsInputConfiguration = "LabelsInputConfiguration" + case lastUpdatedTime = "LastUpdatedTime" + case modelArn = "ModelArn" + case modelMetrics = "ModelMetrics" + case modelName = "ModelName" + case modelVersion = "ModelVersion" + case modelVersionArn = "ModelVersionArn" + case offCondition = "OffCondition" + case roleArn = "RoleArn" + case schema = "Schema" + case serverSideKmsKeyId = "ServerSideKmsKeyId" + case sourceModelVersionArn = "SourceModelVersionArn" + case sourceType = "SourceType" + case status = "Status" + case trainingDataEndTime = "TrainingDataEndTime" + case trainingDataStartTime = "TrainingDataStartTime" + case trainingExecutionEndTime = "TrainingExecutionEndTime" + case trainingExecutionStartTime = "TrainingExecutionStartTime" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let modelNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelName) + modelName = modelNameDecoded + let modelArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelArn) + modelArn = modelArnDecoded + let modelVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .modelVersion) + modelVersion = modelVersionDecoded + let modelVersionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelVersionArn) + modelVersionArn = modelVersionArnDecoded + let statusDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.ModelVersionStatus.self, forKey: .status) + status = statusDecoded + let sourceTypeDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.ModelVersionSourceType.self, forKey: .sourceType) + sourceType = sourceTypeDecoded + let datasetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetName) + datasetName = datasetNameDecoded + let datasetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetArn) + datasetArn = datasetArnDecoded + let schemaDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schema) + schema = schemaDecoded + let labelsInputConfigurationDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.LabelsInputConfiguration.self, forKey: .labelsInputConfiguration) + labelsInputConfiguration = labelsInputConfigurationDecoded + let trainingDataStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .trainingDataStartTime) + trainingDataStartTime = trainingDataStartTimeDecoded + let trainingDataEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .trainingDataEndTime) + trainingDataEndTime = trainingDataEndTimeDecoded + let evaluationDataStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .evaluationDataStartTime) + evaluationDataStartTime = evaluationDataStartTimeDecoded + let evaluationDataEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .evaluationDataEndTime) + evaluationDataEndTime = evaluationDataEndTimeDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + let dataPreProcessingConfigurationDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.DataPreProcessingConfiguration.self, forKey: .dataPreProcessingConfiguration) + dataPreProcessingConfiguration = dataPreProcessingConfigurationDecoded + let trainingExecutionStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .trainingExecutionStartTime) + trainingExecutionStartTime = trainingExecutionStartTimeDecoded + let trainingExecutionEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .trainingExecutionEndTime) + trainingExecutionEndTime = trainingExecutionEndTimeDecoded + let failedReasonDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .failedReason) + failedReason = failedReasonDecoded + let modelMetricsDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelMetrics) + modelMetrics = modelMetricsDecoded + let lastUpdatedTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedTime) + lastUpdatedTime = lastUpdatedTimeDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let serverSideKmsKeyIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serverSideKmsKeyId) + serverSideKmsKeyId = serverSideKmsKeyIdDecoded + let offConditionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .offCondition) + offCondition = offConditionDecoded + let sourceModelVersionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceModelVersionArn) + sourceModelVersionArn = sourceModelVersionArnDecoded + let importJobStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .importJobStartTime) + importJobStartTime = importJobStartTimeDecoded + let importJobEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .importJobEndTime) + importJobEndTime = importJobEndTimeDecoded + let importedDataSizeInBytesDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .importedDataSizeInBytes) + importedDataSizeInBytes = importedDataSizeInBytesDecoded + } +} + +extension DescribeResourcePolicyInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case resourceArn = "ResourceArn" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let resourceArn = self.resourceArn { + try encodeContainer.encode(resourceArn, forKey: .resourceArn) + } + } +} + +extension DescribeResourcePolicyInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct DescribeResourcePolicyInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the resource that is associated with the resource policy. + /// This member is required. + public var resourceArn: Swift.String? + + public init( + resourceArn: Swift.String? = nil + ) + { + self.resourceArn = resourceArn + } +} + +struct DescribeResourcePolicyInputBody: Swift.Equatable { + let resourceArn: Swift.String? +} + +extension DescribeResourcePolicyInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case resourceArn = "ResourceArn" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) + resourceArn = resourceArnDecoded + } +} + +public enum DescribeResourcePolicyOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DescribeResourcePolicyOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeResourcePolicyOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.creationTime = output.creationTime + self.lastModifiedTime = output.lastModifiedTime + self.policyRevisionId = output.policyRevisionId + self.resourcePolicy = output.resourcePolicy + } else { + self.creationTime = nil + self.lastModifiedTime = nil + self.policyRevisionId = nil + self.resourcePolicy = nil + } + } +} + +public struct DescribeResourcePolicyOutputResponse: Swift.Equatable { + /// The time when the resource policy was created. + public var creationTime: ClientRuntime.Date? + /// The time when the resource policy was last modified. + public var lastModifiedTime: ClientRuntime.Date? + /// A unique identifier for a revision of the resource policy. + public var policyRevisionId: Swift.String? + /// The resource policy in a JSON-formatted string. + public var resourcePolicy: Swift.String? + + public init( + creationTime: ClientRuntime.Date? = nil, + lastModifiedTime: ClientRuntime.Date? = nil, + policyRevisionId: Swift.String? = nil, + resourcePolicy: Swift.String? = nil + ) + { + self.creationTime = creationTime + self.lastModifiedTime = lastModifiedTime + self.policyRevisionId = policyRevisionId + self.resourcePolicy = resourcePolicy + } +} + +struct DescribeResourcePolicyOutputResponseBody: Swift.Equatable { + let policyRevisionId: Swift.String? + let resourcePolicy: Swift.String? + let creationTime: ClientRuntime.Date? + let lastModifiedTime: ClientRuntime.Date? +} + +extension DescribeResourcePolicyOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationTime = "CreationTime" + case lastModifiedTime = "LastModifiedTime" + case policyRevisionId = "PolicyRevisionId" + case resourcePolicy = "ResourcePolicy" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let policyRevisionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .policyRevisionId) + policyRevisionId = policyRevisionIdDecoded + let resourcePolicyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourcePolicy) + resourcePolicy = resourcePolicyDecoded + let creationTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationTime) + creationTime = creationTimeDecoded + let lastModifiedTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastModifiedTime) + lastModifiedTime = lastModifiedTimeDecoded + } +} + +extension LookoutEquipmentClientTypes.DuplicateTimestamps: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case totalNumberOfDuplicateTimestamps = "TotalNumberOfDuplicateTimestamps" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let totalNumberOfDuplicateTimestamps = self.totalNumberOfDuplicateTimestamps { + try encodeContainer.encode(totalNumberOfDuplicateTimestamps, forKey: .totalNumberOfDuplicateTimestamps) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let totalNumberOfDuplicateTimestampsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .totalNumberOfDuplicateTimestamps) + totalNumberOfDuplicateTimestamps = totalNumberOfDuplicateTimestampsDecoded + } +} + +extension LookoutEquipmentClientTypes { + /// Entity that comprises information abount duplicate timestamps in the dataset. + public struct DuplicateTimestamps: Swift.Equatable { + /// Indicates the total number of duplicate timestamps. + /// This member is required. + public var totalNumberOfDuplicateTimestamps: Swift.Int? + + public init( + totalNumberOfDuplicateTimestamps: Swift.Int? = nil + ) + { + self.totalNumberOfDuplicateTimestamps = totalNumberOfDuplicateTimestamps + } + } + +} + +extension ImportDatasetInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken = "ClientToken" + case datasetName = "DatasetName" + case serverSideKmsKeyId = "ServerSideKmsKeyId" + case sourceDatasetArn = "SourceDatasetArn" + case tags = "Tags" + } + + 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 datasetName = self.datasetName { + try encodeContainer.encode(datasetName, forKey: .datasetName) + } + if let serverSideKmsKeyId = self.serverSideKmsKeyId { + try encodeContainer.encode(serverSideKmsKeyId, forKey: .serverSideKmsKeyId) + } + if let sourceDatasetArn = self.sourceDatasetArn { + try encodeContainer.encode(sourceDatasetArn, forKey: .sourceDatasetArn) + } + if let tags = tags { + var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) + for tag0 in tags { + try tagsContainer.encode(tag0) + } + } + } +} + +extension ImportDatasetInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct ImportDatasetInput: Swift.Equatable { + /// A unique identifier for the request. If you do not set the client request token, Amazon Lookout for Equipment generates one. + /// This member is required. + public var clientToken: Swift.String? + /// The name of the machine learning dataset to be created. If the dataset already exists, Amazon Lookout for Equipment overwrites the existing dataset. If you don't specify this field, it is filled with the name of the source dataset. + public var datasetName: Swift.String? + /// Provides the identifier of the KMS key key used to encrypt model data by Amazon Lookout for Equipment. + public var serverSideKmsKeyId: Swift.String? + /// The Amazon Resource Name (ARN) of the dataset to import. + /// This member is required. + public var sourceDatasetArn: Swift.String? + /// Any tags associated with the dataset to be created. + public var tags: [LookoutEquipmentClientTypes.Tag]? + + public init( + clientToken: Swift.String? = nil, + datasetName: Swift.String? = nil, + serverSideKmsKeyId: Swift.String? = nil, + sourceDatasetArn: Swift.String? = nil, + tags: [LookoutEquipmentClientTypes.Tag]? = nil + ) + { + self.clientToken = clientToken + self.datasetName = datasetName + self.serverSideKmsKeyId = serverSideKmsKeyId + self.sourceDatasetArn = sourceDatasetArn + self.tags = tags + } +} + +struct ImportDatasetInputBody: Swift.Equatable { + let sourceDatasetArn: Swift.String? + let datasetName: Swift.String? + let clientToken: Swift.String? + let serverSideKmsKeyId: Swift.String? + let tags: [LookoutEquipmentClientTypes.Tag]? +} + +extension ImportDatasetInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken = "ClientToken" + case datasetName = "DatasetName" + case serverSideKmsKeyId = "ServerSideKmsKeyId" + case sourceDatasetArn = "SourceDatasetArn" + case tags = "Tags" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sourceDatasetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceDatasetArn) + sourceDatasetArn = sourceDatasetArnDecoded + let datasetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetName) + datasetName = datasetNameDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded + let serverSideKmsKeyIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serverSideKmsKeyId) + serverSideKmsKeyId = serverSideKmsKeyIdDecoded + let tagsContainer = try containerValues.decodeIfPresent([LookoutEquipmentClientTypes.Tag?].self, forKey: .tags) + var tagsDecoded0:[LookoutEquipmentClientTypes.Tag]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [LookoutEquipmentClientTypes.Tag]() + for structure0 in tagsContainer { + if let structure0 = structure0 { + tagsDecoded0?.append(structure0) + } + } + } + tags = tagsDecoded0 + } +} + +public enum ImportDatasetOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ImportDatasetOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ImportDatasetOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.datasetArn = output.datasetArn + self.datasetName = output.datasetName + self.jobId = output.jobId + self.status = output.status + } else { + self.datasetArn = nil + self.datasetName = nil + self.jobId = nil + self.status = nil + } + } +} + +public struct ImportDatasetOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the dataset that was imported. + public var datasetArn: Swift.String? + /// The name of the created machine learning dataset. + public var datasetName: Swift.String? + /// A unique identifier for the job of importing the dataset. + public var jobId: Swift.String? + /// The status of the ImportDataset operation. + public var status: LookoutEquipmentClientTypes.DatasetStatus? + + public init( + datasetArn: Swift.String? = nil, + datasetName: Swift.String? = nil, + jobId: Swift.String? = nil, + status: LookoutEquipmentClientTypes.DatasetStatus? = nil + ) + { + self.datasetArn = datasetArn + self.datasetName = datasetName + self.jobId = jobId + self.status = status + } +} + +struct ImportDatasetOutputResponseBody: Swift.Equatable { + let datasetName: Swift.String? + let datasetArn: Swift.String? + let status: LookoutEquipmentClientTypes.DatasetStatus? + let jobId: Swift.String? +} + +extension ImportDatasetOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datasetArn = "DatasetArn" + case datasetName = "DatasetName" + case jobId = "JobId" + case status = "Status" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datasetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetName) + datasetName = datasetNameDecoded + let datasetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetArn) + datasetArn = datasetArnDecoded + let statusDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.DatasetStatus.self, forKey: .status) + status = statusDecoded + let jobIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .jobId) + jobId = jobIdDecoded + } +} + +extension ImportModelVersionInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken = "ClientToken" + case datasetName = "DatasetName" + case labelsInputConfiguration = "LabelsInputConfiguration" + case modelName = "ModelName" + case roleArn = "RoleArn" + case serverSideKmsKeyId = "ServerSideKmsKeyId" + case sourceModelVersionArn = "SourceModelVersionArn" + case tags = "Tags" + } + + 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 datasetName = self.datasetName { + try encodeContainer.encode(datasetName, forKey: .datasetName) + } + if let labelsInputConfiguration = self.labelsInputConfiguration { + try encodeContainer.encode(labelsInputConfiguration, forKey: .labelsInputConfiguration) + } + if let modelName = self.modelName { + try encodeContainer.encode(modelName, forKey: .modelName) + } + if let roleArn = self.roleArn { + try encodeContainer.encode(roleArn, forKey: .roleArn) + } + if let serverSideKmsKeyId = self.serverSideKmsKeyId { + try encodeContainer.encode(serverSideKmsKeyId, forKey: .serverSideKmsKeyId) + } + if let sourceModelVersionArn = self.sourceModelVersionArn { + try encodeContainer.encode(sourceModelVersionArn, forKey: .sourceModelVersionArn) + } + if let tags = tags { + var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) + for tag0 in tags { + try tagsContainer.encode(tag0) + } + } + } +} + +extension ImportModelVersionInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct ImportModelVersionInput: Swift.Equatable { + /// A unique identifier for the request. If you do not set the client request token, Amazon Lookout for Equipment generates one. + /// This member is required. + public var clientToken: Swift.String? + /// The name of the dataset for the machine learning model being imported. + /// This member is required. + public var datasetName: Swift.String? + /// Contains the configuration information for the S3 location being used to hold label data. + public var labelsInputConfiguration: LookoutEquipmentClientTypes.LabelsInputConfiguration? + /// The name for the machine learning model to be created. If the model already exists, Amazon Lookout for Equipment creates a new version. If you do not specify this field, it is filled with the name of the source model. + public var modelName: Swift.String? + /// The Amazon Resource Name (ARN) of a role with permission to access the data source being used to create the machine learning model. + public var roleArn: Swift.String? + /// Provides the identifier of the KMS key key used to encrypt model data by Amazon Lookout for Equipment. + public var serverSideKmsKeyId: Swift.String? + /// The Amazon Resource Name (ARN) of the model version to import. + /// This member is required. + public var sourceModelVersionArn: Swift.String? + /// The tags associated with the machine learning model to be created. + public var tags: [LookoutEquipmentClientTypes.Tag]? + + public init( + clientToken: Swift.String? = nil, + datasetName: Swift.String? = nil, + labelsInputConfiguration: LookoutEquipmentClientTypes.LabelsInputConfiguration? = nil, + modelName: Swift.String? = nil, + roleArn: Swift.String? = nil, + serverSideKmsKeyId: Swift.String? = nil, + sourceModelVersionArn: Swift.String? = nil, + tags: [LookoutEquipmentClientTypes.Tag]? = nil + ) + { + self.clientToken = clientToken + self.datasetName = datasetName + self.labelsInputConfiguration = labelsInputConfiguration + self.modelName = modelName + self.roleArn = roleArn + self.serverSideKmsKeyId = serverSideKmsKeyId + self.sourceModelVersionArn = sourceModelVersionArn + self.tags = tags + } +} + +struct ImportModelVersionInputBody: Swift.Equatable { + let sourceModelVersionArn: Swift.String? + let modelName: Swift.String? + let datasetName: Swift.String? + let labelsInputConfiguration: LookoutEquipmentClientTypes.LabelsInputConfiguration? + let clientToken: Swift.String? + let roleArn: Swift.String? + let serverSideKmsKeyId: Swift.String? + let tags: [LookoutEquipmentClientTypes.Tag]? +} + +extension ImportModelVersionInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken = "ClientToken" + case datasetName = "DatasetName" + case labelsInputConfiguration = "LabelsInputConfiguration" + case modelName = "ModelName" + case roleArn = "RoleArn" + case serverSideKmsKeyId = "ServerSideKmsKeyId" + case sourceModelVersionArn = "SourceModelVersionArn" + case tags = "Tags" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sourceModelVersionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceModelVersionArn) + sourceModelVersionArn = sourceModelVersionArnDecoded + let modelNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelName) + modelName = modelNameDecoded + let datasetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetName) + datasetName = datasetNameDecoded + let labelsInputConfigurationDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.LabelsInputConfiguration.self, forKey: .labelsInputConfiguration) + labelsInputConfiguration = labelsInputConfigurationDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded + let roleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .roleArn) + roleArn = roleArnDecoded + let serverSideKmsKeyIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serverSideKmsKeyId) + serverSideKmsKeyId = serverSideKmsKeyIdDecoded + let tagsContainer = try containerValues.decodeIfPresent([LookoutEquipmentClientTypes.Tag?].self, forKey: .tags) + var tagsDecoded0:[LookoutEquipmentClientTypes.Tag]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [LookoutEquipmentClientTypes.Tag]() + for structure0 in tagsContainer { + if let structure0 = structure0 { + tagsDecoded0?.append(structure0) + } + } + } + tags = tagsDecoded0 + } +} + +public enum ImportModelVersionOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ImportModelVersionOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ImportModelVersionOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.modelArn = output.modelArn + self.modelName = output.modelName + self.modelVersion = output.modelVersion + self.modelVersionArn = output.modelVersionArn + self.status = output.status + } else { + self.modelArn = nil + self.modelName = nil + self.modelVersion = nil + self.modelVersionArn = nil + self.status = nil + } + } +} + +public struct ImportModelVersionOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the model being created. + public var modelArn: Swift.String? + /// The name for the machine learning model. + public var modelName: Swift.String? + /// The version of the model being created. + public var modelVersion: Swift.Int? + /// The Amazon Resource Name (ARN) of the model version being created. + public var modelVersionArn: Swift.String? + /// The status of the ImportModelVersion operation. + public var status: LookoutEquipmentClientTypes.ModelVersionStatus? + + public init( + modelArn: Swift.String? = nil, + modelName: Swift.String? = nil, + modelVersion: Swift.Int? = nil, + modelVersionArn: Swift.String? = nil, + status: LookoutEquipmentClientTypes.ModelVersionStatus? = nil + ) + { + self.modelArn = modelArn + self.modelName = modelName + self.modelVersion = modelVersion + self.modelVersionArn = modelVersionArn + self.status = status + } +} + +struct ImportModelVersionOutputResponseBody: Swift.Equatable { + let modelName: Swift.String? + let modelArn: Swift.String? + let modelVersionArn: Swift.String? + let modelVersion: Swift.Int? + let status: LookoutEquipmentClientTypes.ModelVersionStatus? +} + +extension ImportModelVersionOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case modelArn = "ModelArn" + case modelName = "ModelName" + case modelVersion = "ModelVersion" + case modelVersionArn = "ModelVersionArn" + case status = "Status" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let modelNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelName) + modelName = modelNameDecoded + let modelArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelArn) + modelArn = modelArnDecoded + let modelVersionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelVersionArn) + modelVersionArn = modelVersionArnDecoded + let modelVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .modelVersion) + modelVersion = modelVersionDecoded + let statusDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.ModelVersionStatus.self, forKey: .status) + status = statusDecoded + } +} + +extension LookoutEquipmentClientTypes.InferenceEventSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case diagnostics = "Diagnostics" + case eventDurationInSeconds = "EventDurationInSeconds" + case eventEndTime = "EventEndTime" + case eventStartTime = "EventStartTime" + case inferenceSchedulerArn = "InferenceSchedulerArn" + case inferenceSchedulerName = "InferenceSchedulerName" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let diagnostics = self.diagnostics { + try encodeContainer.encode(diagnostics, forKey: .diagnostics) + } + if let eventDurationInSeconds = self.eventDurationInSeconds { + try encodeContainer.encode(eventDurationInSeconds, forKey: .eventDurationInSeconds) + } + if let eventEndTime = self.eventEndTime { + try encodeContainer.encodeTimestamp(eventEndTime, format: .epochSeconds, forKey: .eventEndTime) + } + if let eventStartTime = self.eventStartTime { + try encodeContainer.encodeTimestamp(eventStartTime, format: .epochSeconds, forKey: .eventStartTime) + } + if let inferenceSchedulerArn = self.inferenceSchedulerArn { + try encodeContainer.encode(inferenceSchedulerArn, forKey: .inferenceSchedulerArn) + } + if let inferenceSchedulerName = self.inferenceSchedulerName { + try encodeContainer.encode(inferenceSchedulerName, forKey: .inferenceSchedulerName) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let inferenceSchedulerArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inferenceSchedulerArn) + inferenceSchedulerArn = inferenceSchedulerArnDecoded + let inferenceSchedulerNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inferenceSchedulerName) + inferenceSchedulerName = inferenceSchedulerNameDecoded + let eventStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .eventStartTime) + eventStartTime = eventStartTimeDecoded + let eventEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .eventEndTime) + eventEndTime = eventEndTimeDecoded + let diagnosticsDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .diagnostics) + diagnostics = diagnosticsDecoded + let eventDurationInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .eventDurationInSeconds) + eventDurationInSeconds = eventDurationInSecondsDecoded + } +} + +extension LookoutEquipmentClientTypes { + /// Contains information about the specific inference event, including start and end time, diagnostics information, event duration and so on. + public struct InferenceEventSummary: Swift.Equatable { + /// An array which specifies the names and values of all sensors contributing to an inference event. + public var diagnostics: Swift.String? + /// Indicates the size of an inference event in seconds. + public var eventDurationInSeconds: Swift.Int? + /// Indicates the ending time of an inference event. + public var eventEndTime: ClientRuntime.Date? + /// Indicates the starting time of an inference event. + public var eventStartTime: ClientRuntime.Date? + /// The Amazon Resource Name (ARN) of the inference scheduler being used for the inference event. + public var inferenceSchedulerArn: Swift.String? + /// The name of the inference scheduler being used for the inference events. + public var inferenceSchedulerName: Swift.String? + + public init( + diagnostics: Swift.String? = nil, + eventDurationInSeconds: Swift.Int? = nil, + eventEndTime: ClientRuntime.Date? = nil, + eventStartTime: ClientRuntime.Date? = nil, + inferenceSchedulerArn: Swift.String? = nil, + inferenceSchedulerName: Swift.String? = nil + ) + { + self.diagnostics = diagnostics + self.eventDurationInSeconds = eventDurationInSeconds + self.eventEndTime = eventEndTime + self.eventStartTime = eventStartTime + self.inferenceSchedulerArn = inferenceSchedulerArn + self.inferenceSchedulerName = inferenceSchedulerName + } + } + +} + +extension LookoutEquipmentClientTypes { + public enum InferenceExecutionStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case failed + case inProgress + case success + case sdkUnknown(Swift.String) + + public static var allCases: [InferenceExecutionStatus] { + return [ + .failed, + .inProgress, + .success, + .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 .failed: return "FAILED" case .inProgress: return "IN_PROGRESS" @@ -3814,7 +4959,7 @@ extension LookoutEquipmentClientTypes.InferenceOutputConfiguration: Swift.Codabl extension LookoutEquipmentClientTypes { /// Specifies configuration information for the output results from for the inference, including KMS key ID and output S3 location. public struct InferenceOutputConfiguration: Swift.Equatable { - /// The ID number for the AWS KMS key used to encrypt the inference output. + /// The ID number for the KMS key key used to encrypt the inference output. public var kmsKeyId: Swift.String? /// Specifies configuration information for the output results from for the inference, output S3 location. /// This member is required. @@ -4175,6 +5320,7 @@ extension LookoutEquipmentClientTypes { extension LookoutEquipmentClientTypes { public enum IngestionJobStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case failed + case importInProgress case inProgress case success case sdkUnknown(Swift.String) @@ -4182,6 +5328,7 @@ extension LookoutEquipmentClientTypes { public static var allCases: [IngestionJobStatus] { return [ .failed, + .importInProgress, .inProgress, .success, .sdkUnknown("") @@ -4194,6 +5341,7 @@ extension LookoutEquipmentClientTypes { public var rawValue: Swift.String { switch self { case .failed: return "FAILED" + case .importInProgress: return "IMPORT_IN_PROGRESS" case .inProgress: return "IN_PROGRESS" case .success: return "SUCCESS" case let .sdkUnknown(s): return s @@ -4244,7 +5392,7 @@ extension LookoutEquipmentClientTypes { /// The name of the S3 bucket used for the input data for the data ingestion. /// This member is required. public var bucket: Swift.String? - /// Pattern for matching the Amazon S3 files which will be used for ingestion. If no KeyPattern is provided, we will use the default hierarchy file structure, which is same as KeyPattern {prefix}/{component_name}/* + /// The pattern for matching the Amazon S3 files that will be used for ingestion. If the schema was created previously without any KeyPattern, then the default KeyPattern {prefix}/{component_name}/* is used to download files from Amazon S3 according to the schema. This field is required when ingestion is being done for the first time. Valid Values: {prefix}/{component_name}_* | {prefix}/{component_name}/* | {prefix}/{component_name}[DELIMITER]* (Allowed delimiters : space, dot, underscore, hyphen) public var keyPattern: Swift.String? /// The prefix for the S3 location being used for the input data for the data ingestion. public var `prefix`: Swift.String? @@ -4455,7 +5603,7 @@ extension LookoutEquipmentClientTypes { public struct LabelGroupSummary: Swift.Equatable { /// The time at which the label group was created. public var createdAt: ClientRuntime.Date? - /// The ARN of the label group. + /// The Amazon Resource Name (ARN) of the label group. public var labelGroupArn: Swift.String? /// The name of the label group. public var labelGroupName: Swift.String? @@ -4591,7 +5739,7 @@ extension LookoutEquipmentClientTypes { public var equipment: Swift.String? /// Indicates the type of anomaly associated with the label. Data in this field will be retained for service usage. Follow best practices for the security of your data. public var faultCode: Swift.String? - /// The ARN of the label group. + /// The Amazon Resource Name (ARN) of the label group. public var labelGroupArn: Swift.String? /// The name of the label group. public var labelGroupName: Swift.String? @@ -5146,7 +6294,7 @@ public struct ListInferenceEventsInput: Swift.Equatable { /// The name of the inference scheduler for the inference events listed. /// This member is required. public var inferenceSchedulerName: Swift.String? - /// Returns all the inference events with an end start time equal to or greater than less than the end time given + /// Returns all the inference events with an end start time equal to or greater than less than the end time given. /// This member is required. public var intervalEndTime: ClientRuntime.Date? /// Lookout for Equipment will return all the inference events with an end time equal to or greater than the start time given. @@ -5505,7 +6653,7 @@ public struct ListInferenceSchedulersInput: Swift.Equatable { public var modelName: Swift.String? /// An opaque pagination token indicating where to continue the listing of inference schedulers. public var nextToken: Swift.String? - /// Specifies the current status of the inference schedulers to list. + /// Specifies the current status of the inference schedulers. public var status: LookoutEquipmentClientTypes.InferenceSchedulerStatus? public init( @@ -5765,141 +6913,359 @@ extension ListLabelGroupsOutputResponseBody: Swift.Decodable { labelGroupSummariesDecoded0 = [LookoutEquipmentClientTypes.LabelGroupSummary]() for structure0 in labelGroupSummariesContainer { if let structure0 = structure0 { - labelGroupSummariesDecoded0?.append(structure0) + labelGroupSummariesDecoded0?.append(structure0) + } + } + } + labelGroupSummaries = labelGroupSummariesDecoded0 + } +} + +extension ListLabelsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case equipment = "Equipment" + case faultCode = "FaultCode" + case intervalEndTime = "IntervalEndTime" + case intervalStartTime = "IntervalStartTime" + case labelGroupName = "LabelGroupName" + case maxResults = "MaxResults" + case nextToken = "NextToken" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let equipment = self.equipment { + try encodeContainer.encode(equipment, forKey: .equipment) + } + if let faultCode = self.faultCode { + try encodeContainer.encode(faultCode, forKey: .faultCode) + } + if let intervalEndTime = self.intervalEndTime { + try encodeContainer.encodeTimestamp(intervalEndTime, format: .epochSeconds, forKey: .intervalEndTime) + } + if let intervalStartTime = self.intervalStartTime { + try encodeContainer.encodeTimestamp(intervalStartTime, format: .epochSeconds, forKey: .intervalStartTime) + } + if let labelGroupName = self.labelGroupName { + try encodeContainer.encode(labelGroupName, forKey: .labelGroupName) + } + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + } +} + +extension ListLabelsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct ListLabelsInput: Swift.Equatable { + /// Lists the labels that pertain to a particular piece of equipment. + public var equipment: Swift.String? + /// Returns labels with a particular fault code. + public var faultCode: Swift.String? + /// Returns all labels with a start time earlier than the end time given. + public var intervalEndTime: ClientRuntime.Date? + /// Returns all the labels with a end time equal to or later than the start time given. + public var intervalStartTime: ClientRuntime.Date? + /// Retruns the name of the label group. + /// This member is required. + public var labelGroupName: Swift.String? + /// Specifies the maximum number of labels to list. + public var maxResults: Swift.Int? + /// An opaque pagination token indicating where to continue the listing of label groups. + public var nextToken: Swift.String? + + public init( + equipment: Swift.String? = nil, + faultCode: Swift.String? = nil, + intervalEndTime: ClientRuntime.Date? = nil, + intervalStartTime: ClientRuntime.Date? = nil, + labelGroupName: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.equipment = equipment + self.faultCode = faultCode + self.intervalEndTime = intervalEndTime + self.intervalStartTime = intervalStartTime + self.labelGroupName = labelGroupName + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListLabelsInputBody: Swift.Equatable { + let labelGroupName: Swift.String? + let intervalStartTime: ClientRuntime.Date? + let intervalEndTime: ClientRuntime.Date? + let faultCode: Swift.String? + let equipment: Swift.String? + let nextToken: Swift.String? + let maxResults: Swift.Int? +} + +extension ListLabelsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case equipment = "Equipment" + case faultCode = "FaultCode" + case intervalEndTime = "IntervalEndTime" + case intervalStartTime = "IntervalStartTime" + case labelGroupName = "LabelGroupName" + case maxResults = "MaxResults" + case nextToken = "NextToken" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let labelGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .labelGroupName) + labelGroupName = labelGroupNameDecoded + let intervalStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .intervalStartTime) + intervalStartTime = intervalStartTimeDecoded + let intervalEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .intervalEndTime) + intervalEndTime = intervalEndTimeDecoded + let faultCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .faultCode) + faultCode = faultCodeDecoded + let equipmentDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .equipment) + equipment = equipmentDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + } +} + +public enum ListLabelsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListLabelsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListLabelsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.labelSummaries = output.labelSummaries + self.nextToken = output.nextToken + } else { + self.labelSummaries = nil + self.nextToken = nil + } + } +} + +public struct ListLabelsOutputResponse: Swift.Equatable { + /// A summary of the items in the label group. + public var labelSummaries: [LookoutEquipmentClientTypes.LabelSummary]? + /// An opaque pagination token indicating where to continue the listing of datasets. + public var nextToken: Swift.String? + + public init( + labelSummaries: [LookoutEquipmentClientTypes.LabelSummary]? = nil, + nextToken: Swift.String? = nil + ) + { + self.labelSummaries = labelSummaries + self.nextToken = nextToken + } +} + +struct ListLabelsOutputResponseBody: Swift.Equatable { + let nextToken: Swift.String? + let labelSummaries: [LookoutEquipmentClientTypes.LabelSummary]? +} + +extension ListLabelsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case labelSummaries = "LabelSummaries" + case nextToken = "NextToken" + } + + 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 labelSummariesContainer = try containerValues.decodeIfPresent([LookoutEquipmentClientTypes.LabelSummary?].self, forKey: .labelSummaries) + var labelSummariesDecoded0:[LookoutEquipmentClientTypes.LabelSummary]? = nil + if let labelSummariesContainer = labelSummariesContainer { + labelSummariesDecoded0 = [LookoutEquipmentClientTypes.LabelSummary]() + for structure0 in labelSummariesContainer { + if let structure0 = structure0 { + labelSummariesDecoded0?.append(structure0) } } } - labelGroupSummaries = labelGroupSummariesDecoded0 + labelSummaries = labelSummariesDecoded0 } } -extension ListLabelsInput: Swift.Encodable { +extension ListModelVersionsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case equipment = "Equipment" - case faultCode = "FaultCode" - case intervalEndTime = "IntervalEndTime" - case intervalStartTime = "IntervalStartTime" - case labelGroupName = "LabelGroupName" + case createdAtEndTime = "CreatedAtEndTime" + case createdAtStartTime = "CreatedAtStartTime" + case maxModelVersion = "MaxModelVersion" case maxResults = "MaxResults" + case minModelVersion = "MinModelVersion" + case modelName = "ModelName" case nextToken = "NextToken" + case sourceType = "SourceType" + case status = "Status" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let equipment = self.equipment { - try encodeContainer.encode(equipment, forKey: .equipment) - } - if let faultCode = self.faultCode { - try encodeContainer.encode(faultCode, forKey: .faultCode) - } - if let intervalEndTime = self.intervalEndTime { - try encodeContainer.encodeTimestamp(intervalEndTime, format: .epochSeconds, forKey: .intervalEndTime) + if let createdAtEndTime = self.createdAtEndTime { + try encodeContainer.encodeTimestamp(createdAtEndTime, format: .epochSeconds, forKey: .createdAtEndTime) } - if let intervalStartTime = self.intervalStartTime { - try encodeContainer.encodeTimestamp(intervalStartTime, format: .epochSeconds, forKey: .intervalStartTime) + if let createdAtStartTime = self.createdAtStartTime { + try encodeContainer.encodeTimestamp(createdAtStartTime, format: .epochSeconds, forKey: .createdAtStartTime) } - if let labelGroupName = self.labelGroupName { - try encodeContainer.encode(labelGroupName, forKey: .labelGroupName) + if let maxModelVersion = self.maxModelVersion { + try encodeContainer.encode(maxModelVersion, forKey: .maxModelVersion) } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } + if let minModelVersion = self.minModelVersion { + try encodeContainer.encode(minModelVersion, forKey: .minModelVersion) + } + if let modelName = self.modelName { + try encodeContainer.encode(modelName, forKey: .modelName) + } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } + if let sourceType = self.sourceType { + try encodeContainer.encode(sourceType.rawValue, forKey: .sourceType) + } + if let status = self.status { + try encodeContainer.encode(status.rawValue, forKey: .status) + } } } -extension ListLabelsInput: ClientRuntime.URLPathProvider { +extension ListModelVersionsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { return "/" } } -public struct ListLabelsInput: Swift.Equatable { - /// Lists the labels that pertain to a particular piece of equipment. - public var equipment: Swift.String? - /// Returns labels with a particular fault code. - public var faultCode: Swift.String? - /// Returns all labels with a start time earlier than the end time given. - public var intervalEndTime: ClientRuntime.Date? - /// Returns all the labels with a end time equal to or later than the start time given. - public var intervalStartTime: ClientRuntime.Date? - /// Retruns the name of the label group. - /// This member is required. - public var labelGroupName: Swift.String? - /// Specifies the maximum number of labels to list. +public struct ListModelVersionsInput: Swift.Equatable { + /// Filter results to return all the model versions created before this time. + public var createdAtEndTime: ClientRuntime.Date? + /// Filter results to return all the model versions created after this time. + public var createdAtStartTime: ClientRuntime.Date? + /// Specifies the highest version of the model to return in the list. + public var maxModelVersion: Swift.Int? + /// Specifies the maximum number of machine learning model versions to list. public var maxResults: Swift.Int? - /// An opaque pagination token indicating where to continue the listing of label groups. + /// Specifies the lowest version of the model to return in the list. + public var minModelVersion: Swift.Int? + /// Then name of the machine learning model for which the model versions are to be listed. + /// This member is required. + public var modelName: Swift.String? + /// If the total number of results exceeds the limit that the response can display, the response returns an opaque pagination token indicating where to continue the listing of machine learning model versions. Use this token in the NextToken field in the request to list the next page of results. public var nextToken: Swift.String? + /// Filter the results based on the way the model version was generated. + public var sourceType: LookoutEquipmentClientTypes.ModelVersionSourceType? + /// Filter the results based on the current status of the model version. + public var status: LookoutEquipmentClientTypes.ModelVersionStatus? public init( - equipment: Swift.String? = nil, - faultCode: Swift.String? = nil, - intervalEndTime: ClientRuntime.Date? = nil, - intervalStartTime: ClientRuntime.Date? = nil, - labelGroupName: Swift.String? = nil, + createdAtEndTime: ClientRuntime.Date? = nil, + createdAtStartTime: ClientRuntime.Date? = nil, + maxModelVersion: Swift.Int? = nil, maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil + minModelVersion: Swift.Int? = nil, + modelName: Swift.String? = nil, + nextToken: Swift.String? = nil, + sourceType: LookoutEquipmentClientTypes.ModelVersionSourceType? = nil, + status: LookoutEquipmentClientTypes.ModelVersionStatus? = nil ) { - self.equipment = equipment - self.faultCode = faultCode - self.intervalEndTime = intervalEndTime - self.intervalStartTime = intervalStartTime - self.labelGroupName = labelGroupName + self.createdAtEndTime = createdAtEndTime + self.createdAtStartTime = createdAtStartTime + self.maxModelVersion = maxModelVersion self.maxResults = maxResults + self.minModelVersion = minModelVersion + self.modelName = modelName self.nextToken = nextToken + self.sourceType = sourceType + self.status = status } } -struct ListLabelsInputBody: Swift.Equatable { - let labelGroupName: Swift.String? - let intervalStartTime: ClientRuntime.Date? - let intervalEndTime: ClientRuntime.Date? - let faultCode: Swift.String? - let equipment: Swift.String? +struct ListModelVersionsInputBody: Swift.Equatable { + let modelName: Swift.String? let nextToken: Swift.String? let maxResults: Swift.Int? + let status: LookoutEquipmentClientTypes.ModelVersionStatus? + let sourceType: LookoutEquipmentClientTypes.ModelVersionSourceType? + let createdAtEndTime: ClientRuntime.Date? + let createdAtStartTime: ClientRuntime.Date? + let maxModelVersion: Swift.Int? + let minModelVersion: Swift.Int? } -extension ListLabelsInputBody: Swift.Decodable { +extension ListModelVersionsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case equipment = "Equipment" - case faultCode = "FaultCode" - case intervalEndTime = "IntervalEndTime" - case intervalStartTime = "IntervalStartTime" - case labelGroupName = "LabelGroupName" + case createdAtEndTime = "CreatedAtEndTime" + case createdAtStartTime = "CreatedAtStartTime" + case maxModelVersion = "MaxModelVersion" case maxResults = "MaxResults" + case minModelVersion = "MinModelVersion" + case modelName = "ModelName" case nextToken = "NextToken" + case sourceType = "SourceType" + case status = "Status" } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let labelGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .labelGroupName) - labelGroupName = labelGroupNameDecoded - let intervalStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .intervalStartTime) - intervalStartTime = intervalStartTimeDecoded - let intervalEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .intervalEndTime) - intervalEndTime = intervalEndTimeDecoded - let faultCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .faultCode) - faultCode = faultCodeDecoded - let equipmentDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .equipment) - equipment = equipmentDecoded + let modelNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelName) + modelName = modelNameDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded + let statusDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.ModelVersionStatus.self, forKey: .status) + status = statusDecoded + let sourceTypeDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.ModelVersionSourceType.self, forKey: .sourceType) + sourceType = sourceTypeDecoded + let createdAtEndTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAtEndTime) + createdAtEndTime = createdAtEndTimeDecoded + let createdAtStartTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAtStartTime) + createdAtStartTime = createdAtStartTimeDecoded + let maxModelVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxModelVersion) + maxModelVersion = maxModelVersionDecoded + let minModelVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .minModelVersion) + minModelVersion = minModelVersionDecoded } } -public enum ListLabelsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListModelVersionsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -5907,44 +7273,44 @@ public enum ListLabelsOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListLabelsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListModelVersionsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListLabelsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.labelSummaries = output.labelSummaries + let output: ListModelVersionsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.modelVersionSummaries = output.modelVersionSummaries self.nextToken = output.nextToken } else { - self.labelSummaries = nil + self.modelVersionSummaries = nil self.nextToken = nil } } } -public struct ListLabelsOutputResponse: Swift.Equatable { - /// A summary of the items in the label group. - public var labelSummaries: [LookoutEquipmentClientTypes.LabelSummary]? - /// An opaque pagination token indicating where to continue the listing of datasets. +public struct ListModelVersionsOutputResponse: Swift.Equatable { + /// Provides information on the specified model version, including the created time, model and dataset ARNs, and status. + public var modelVersionSummaries: [LookoutEquipmentClientTypes.ModelVersionSummary]? + /// If the total number of results exceeds the limit that the response can display, the response returns an opaque pagination token indicating where to continue the listing of machine learning model versions. Use this token in the NextToken field in the request to list the next page of results. public var nextToken: Swift.String? public init( - labelSummaries: [LookoutEquipmentClientTypes.LabelSummary]? = nil, + modelVersionSummaries: [LookoutEquipmentClientTypes.ModelVersionSummary]? = nil, nextToken: Swift.String? = nil ) { - self.labelSummaries = labelSummaries + self.modelVersionSummaries = modelVersionSummaries self.nextToken = nextToken } } -struct ListLabelsOutputResponseBody: Swift.Equatable { +struct ListModelVersionsOutputResponseBody: Swift.Equatable { let nextToken: Swift.String? - let labelSummaries: [LookoutEquipmentClientTypes.LabelSummary]? + let modelVersionSummaries: [LookoutEquipmentClientTypes.ModelVersionSummary]? } -extension ListLabelsOutputResponseBody: Swift.Decodable { +extension ListModelVersionsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case labelSummaries = "LabelSummaries" + case modelVersionSummaries = "ModelVersionSummaries" case nextToken = "NextToken" } @@ -5952,17 +7318,17 @@ extension ListLabelsOutputResponseBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded - let labelSummariesContainer = try containerValues.decodeIfPresent([LookoutEquipmentClientTypes.LabelSummary?].self, forKey: .labelSummaries) - var labelSummariesDecoded0:[LookoutEquipmentClientTypes.LabelSummary]? = nil - if let labelSummariesContainer = labelSummariesContainer { - labelSummariesDecoded0 = [LookoutEquipmentClientTypes.LabelSummary]() - for structure0 in labelSummariesContainer { + let modelVersionSummariesContainer = try containerValues.decodeIfPresent([LookoutEquipmentClientTypes.ModelVersionSummary?].self, forKey: .modelVersionSummaries) + var modelVersionSummariesDecoded0:[LookoutEquipmentClientTypes.ModelVersionSummary]? = nil + if let modelVersionSummariesContainer = modelVersionSummariesContainer { + modelVersionSummariesDecoded0 = [LookoutEquipmentClientTypes.ModelVersionSummary]() + for structure0 in modelVersionSummariesContainer { if let structure0 = structure0 { - labelSummariesDecoded0?.append(structure0) + modelVersionSummariesDecoded0?.append(structure0) } } } - labelSummaries = labelSummariesDecoded0 + modelVersionSummaries = modelVersionSummariesDecoded0 } } @@ -6484,19 +7850,201 @@ extension LookoutEquipmentClientTypes { self.totalNumberOfMissingValues = totalNumberOfMissingValues } } - + +} + +extension LookoutEquipmentClientTypes { + public enum ModelStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case failed + case importInProgress + case inProgress + case success + case sdkUnknown(Swift.String) + + public static var allCases: [ModelStatus] { + return [ + .failed, + .importInProgress, + .inProgress, + .success, + .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 .failed: return "FAILED" + case .importInProgress: return "IMPORT_IN_PROGRESS" + case .inProgress: return "IN_PROGRESS" + case .success: return "SUCCESS" + 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 = ModelStatus(rawValue: rawValue) ?? ModelStatus.sdkUnknown(rawValue) + } + } +} + +extension LookoutEquipmentClientTypes.ModelSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case activeModelVersion = "ActiveModelVersion" + case activeModelVersionArn = "ActiveModelVersionArn" + case createdAt = "CreatedAt" + case datasetArn = "DatasetArn" + case datasetName = "DatasetName" + case modelArn = "ModelArn" + case modelName = "ModelName" + case status = "Status" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let activeModelVersion = self.activeModelVersion { + try encodeContainer.encode(activeModelVersion, forKey: .activeModelVersion) + } + if let activeModelVersionArn = self.activeModelVersionArn { + try encodeContainer.encode(activeModelVersionArn, forKey: .activeModelVersionArn) + } + if let createdAt = self.createdAt { + try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) + } + if let datasetArn = self.datasetArn { + try encodeContainer.encode(datasetArn, forKey: .datasetArn) + } + if let datasetName = self.datasetName { + try encodeContainer.encode(datasetName, forKey: .datasetName) + } + if let modelArn = self.modelArn { + try encodeContainer.encode(modelArn, forKey: .modelArn) + } + if let modelName = self.modelName { + try encodeContainer.encode(modelName, forKey: .modelName) + } + 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 modelNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelName) + modelName = modelNameDecoded + let modelArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelArn) + modelArn = modelArnDecoded + let datasetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetName) + datasetName = datasetNameDecoded + let datasetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetArn) + datasetArn = datasetArnDecoded + let statusDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.ModelStatus.self, forKey: .status) + status = statusDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let activeModelVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .activeModelVersion) + activeModelVersion = activeModelVersionDecoded + let activeModelVersionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .activeModelVersionArn) + activeModelVersionArn = activeModelVersionArnDecoded + } +} + +extension LookoutEquipmentClientTypes { + /// Provides information about the specified ML model, including dataset and model names and ARNs, as well as status. + public struct ModelSummary: Swift.Equatable { + /// The model version that the inference scheduler uses to run an inference execution. + public var activeModelVersion: Swift.Int? + /// The Amazon Resource Name (ARN) of the model version that is set as active. The active model version is the model version that the inference scheduler uses to run an inference execution. + public var activeModelVersionArn: Swift.String? + /// The time at which the specific model was created. + public var createdAt: ClientRuntime.Date? + /// The Amazon Resource Name (ARN) of the dataset used to create the model. + public var datasetArn: Swift.String? + /// The name of the dataset being used for the ML model. + public var datasetName: Swift.String? + /// The Amazon Resource Name (ARN) of the ML model. + public var modelArn: Swift.String? + /// The name of the ML model. + public var modelName: Swift.String? + /// Indicates the status of the ML model. + public var status: LookoutEquipmentClientTypes.ModelStatus? + + public init( + activeModelVersion: Swift.Int? = nil, + activeModelVersionArn: Swift.String? = nil, + createdAt: ClientRuntime.Date? = nil, + datasetArn: Swift.String? = nil, + datasetName: Swift.String? = nil, + modelArn: Swift.String? = nil, + modelName: Swift.String? = nil, + status: LookoutEquipmentClientTypes.ModelStatus? = nil + ) + { + self.activeModelVersion = activeModelVersion + self.activeModelVersionArn = activeModelVersionArn + self.createdAt = createdAt + self.datasetArn = datasetArn + self.datasetName = datasetName + self.modelArn = modelArn + self.modelName = modelName + self.status = status + } + } + +} + +extension LookoutEquipmentClientTypes { + public enum ModelVersionSourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case `import` + case retraining + case training + case sdkUnknown(Swift.String) + + public static var allCases: [ModelVersionSourceType] { + return [ + .import, + .retraining, + .training, + .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 .import: return "IMPORT" + case .retraining: return "RETRAINING" + case .training: return "TRAINING" + 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 = ModelVersionSourceType(rawValue: rawValue) ?? ModelVersionSourceType.sdkUnknown(rawValue) + } + } } extension LookoutEquipmentClientTypes { - public enum ModelStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + public enum ModelVersionStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case canceled case failed + case importInProgress case inProgress case success case sdkUnknown(Swift.String) - public static var allCases: [ModelStatus] { + public static var allCases: [ModelVersionStatus] { return [ + .canceled, .failed, + .importInProgress, .inProgress, .success, .sdkUnknown("") @@ -6508,7 +8056,9 @@ extension LookoutEquipmentClientTypes { } public var rawValue: Swift.String { switch self { + case .canceled: return "CANCELED" case .failed: return "FAILED" + case .importInProgress: return "IMPORT_IN_PROGRESS" case .inProgress: return "IN_PROGRESS" case .success: return "SUCCESS" case let .sdkUnknown(s): return s @@ -6517,18 +8067,19 @@ extension LookoutEquipmentClientTypes { public init(from decoder: Swift.Decoder) throws { let container = try decoder.singleValueContainer() let rawValue = try container.decode(RawValue.self) - self = ModelStatus(rawValue: rawValue) ?? ModelStatus.sdkUnknown(rawValue) + self = ModelVersionStatus(rawValue: rawValue) ?? ModelVersionStatus.sdkUnknown(rawValue) } } } -extension LookoutEquipmentClientTypes.ModelSummary: Swift.Codable { +extension LookoutEquipmentClientTypes.ModelVersionSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case createdAt = "CreatedAt" - case datasetArn = "DatasetArn" - case datasetName = "DatasetName" case modelArn = "ModelArn" case modelName = "ModelName" + case modelVersion = "ModelVersion" + case modelVersionArn = "ModelVersionArn" + case sourceType = "SourceType" case status = "Status" } @@ -6537,18 +8088,21 @@ extension LookoutEquipmentClientTypes.ModelSummary: Swift.Codable { if let createdAt = self.createdAt { try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) } - if let datasetArn = self.datasetArn { - try encodeContainer.encode(datasetArn, forKey: .datasetArn) - } - if let datasetName = self.datasetName { - try encodeContainer.encode(datasetName, forKey: .datasetName) - } if let modelArn = self.modelArn { try encodeContainer.encode(modelArn, forKey: .modelArn) } if let modelName = self.modelName { try encodeContainer.encode(modelName, forKey: .modelName) } + if let modelVersion = self.modelVersion { + try encodeContainer.encode(modelVersion, forKey: .modelVersion) + } + if let modelVersionArn = self.modelVersionArn { + try encodeContainer.encode(modelVersionArn, forKey: .modelVersionArn) + } + if let sourceType = self.sourceType { + try encodeContainer.encode(sourceType.rawValue, forKey: .sourceType) + } if let status = self.status { try encodeContainer.encode(status.rawValue, forKey: .status) } @@ -6560,47 +8114,53 @@ extension LookoutEquipmentClientTypes.ModelSummary: Swift.Codable { modelName = modelNameDecoded let modelArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelArn) modelArn = modelArnDecoded - let datasetNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetName) - datasetName = datasetNameDecoded - let datasetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetArn) - datasetArn = datasetArnDecoded - let statusDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.ModelStatus.self, forKey: .status) - status = statusDecoded + let modelVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .modelVersion) + modelVersion = modelVersionDecoded + let modelVersionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelVersionArn) + modelVersionArn = modelVersionArnDecoded let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) createdAt = createdAtDecoded + let statusDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.ModelVersionStatus.self, forKey: .status) + status = statusDecoded + let sourceTypeDecoded = try containerValues.decodeIfPresent(LookoutEquipmentClientTypes.ModelVersionSourceType.self, forKey: .sourceType) + sourceType = sourceTypeDecoded } } extension LookoutEquipmentClientTypes { - /// Provides information about the specified ML model, including dataset and model names and ARNs, as well as status. - public struct ModelSummary: Swift.Equatable { - /// The time at which the specific model was created. + /// Contains information about the specific model version. + public struct ModelVersionSummary: Swift.Equatable { + /// The time when this model version was created. public var createdAt: ClientRuntime.Date? - /// The Amazon Resource Name (ARN) of the dataset used to create the model. - public var datasetArn: Swift.String? - /// The name of the dataset being used for the ML model. - public var datasetName: Swift.String? - /// The Amazon Resource Name (ARN) of the ML model. + /// The Amazon Resource Name (ARN) of the model that this model version is a version of. public var modelArn: Swift.String? - /// The name of the ML model. + /// The name of the model that this model version is a version of. public var modelName: Swift.String? - /// Indicates the status of the ML model. - public var status: LookoutEquipmentClientTypes.ModelStatus? + /// The version of the model. + public var modelVersion: Swift.Int? + /// The Amazon Resource Name (ARN) of the model version. + public var modelVersionArn: Swift.String? + /// Indicates how this model version was generated. + public var sourceType: LookoutEquipmentClientTypes.ModelVersionSourceType? + /// The current status of the model version. + public var status: LookoutEquipmentClientTypes.ModelVersionStatus? public init( createdAt: ClientRuntime.Date? = nil, - datasetArn: Swift.String? = nil, - datasetName: Swift.String? = nil, modelArn: Swift.String? = nil, modelName: Swift.String? = nil, - status: LookoutEquipmentClientTypes.ModelStatus? = nil + modelVersion: Swift.Int? = nil, + modelVersionArn: Swift.String? = nil, + sourceType: LookoutEquipmentClientTypes.ModelVersionSourceType? = nil, + status: LookoutEquipmentClientTypes.ModelVersionStatus? = nil ) { self.createdAt = createdAt - self.datasetArn = datasetArn - self.datasetName = datasetName self.modelArn = modelArn self.modelName = modelName + self.modelVersion = modelVersion + self.modelVersionArn = modelVersionArn + self.sourceType = sourceType self.status = status } } @@ -6724,6 +8284,159 @@ extension LookoutEquipmentClientTypes { } +extension PutResourcePolicyInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken = "ClientToken" + case policyRevisionId = "PolicyRevisionId" + case resourceArn = "ResourceArn" + case resourcePolicy = "ResourcePolicy" + } + + 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 policyRevisionId = self.policyRevisionId { + try encodeContainer.encode(policyRevisionId, forKey: .policyRevisionId) + } + if let resourceArn = self.resourceArn { + try encodeContainer.encode(resourceArn, forKey: .resourceArn) + } + if let resourcePolicy = self.resourcePolicy { + try encodeContainer.encode(resourcePolicy, forKey: .resourcePolicy) + } + } +} + +extension PutResourcePolicyInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct PutResourcePolicyInput: Swift.Equatable { + /// A unique identifier for the request. If you do not set the client request token, Amazon Lookout for Equipment generates one. + /// This member is required. + public var clientToken: Swift.String? + /// A unique identifier for a revision of the resource policy. + public var policyRevisionId: Swift.String? + /// The Amazon Resource Name (ARN) of the resource for which the policy is being created. + /// This member is required. + public var resourceArn: Swift.String? + /// The JSON-formatted resource policy to create. + /// This member is required. + public var resourcePolicy: Swift.String? + + public init( + clientToken: Swift.String? = nil, + policyRevisionId: Swift.String? = nil, + resourceArn: Swift.String? = nil, + resourcePolicy: Swift.String? = nil + ) + { + self.clientToken = clientToken + self.policyRevisionId = policyRevisionId + self.resourceArn = resourceArn + self.resourcePolicy = resourcePolicy + } +} + +struct PutResourcePolicyInputBody: Swift.Equatable { + let resourceArn: Swift.String? + let resourcePolicy: Swift.String? + let policyRevisionId: Swift.String? + let clientToken: Swift.String? +} + +extension PutResourcePolicyInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken = "ClientToken" + case policyRevisionId = "PolicyRevisionId" + case resourceArn = "ResourceArn" + case resourcePolicy = "ResourcePolicy" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) + resourceArn = resourceArnDecoded + let resourcePolicyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourcePolicy) + resourcePolicy = resourcePolicyDecoded + let policyRevisionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .policyRevisionId) + policyRevisionId = policyRevisionIdDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded + } +} + +public enum PutResourcePolicyOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension PutResourcePolicyOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: PutResourcePolicyOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.policyRevisionId = output.policyRevisionId + self.resourceArn = output.resourceArn + } else { + self.policyRevisionId = nil + self.resourceArn = nil + } + } +} + +public struct PutResourcePolicyOutputResponse: Swift.Equatable { + /// A unique identifier for a revision of the resource policy. + public var policyRevisionId: Swift.String? + /// The Amazon Resource Name (ARN) of the resource for which the policy was created. + public var resourceArn: Swift.String? + + public init( + policyRevisionId: Swift.String? = nil, + resourceArn: Swift.String? = nil + ) + { + self.policyRevisionId = policyRevisionId + self.resourceArn = resourceArn + } +} + +struct PutResourcePolicyOutputResponseBody: Swift.Equatable { + let resourceArn: Swift.String? + let policyRevisionId: Swift.String? +} + +extension PutResourcePolicyOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case policyRevisionId = "PolicyRevisionId" + case resourceArn = "ResourceArn" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) + resourceArn = resourceArnDecoded + let policyRevisionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .policyRevisionId) + policyRevisionId = policyRevisionIdDecoded + } +} + extension ResourceNotFoundException { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -6811,7 +8524,7 @@ extension LookoutEquipmentClientTypes { /// The name of the specific S3 bucket. /// This member is required. public var bucket: Swift.String? - /// The AWS Key Management Service (AWS KMS) key being used to encrypt the S3 object. Without this key, data in the bucket is not accessible. + /// The Amazon Web Services Key Management Service (KMS key) key being used to encrypt the S3 object. Without this key, data in the bucket is not accessible. /// This member is required. public var key: Swift.String? @@ -7943,6 +9656,173 @@ public struct UntagResourceOutputResponse: Swift.Equatable { public init() { } } +extension UpdateActiveModelVersionInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case modelName = "ModelName" + case modelVersion = "ModelVersion" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let modelName = self.modelName { + try encodeContainer.encode(modelName, forKey: .modelName) + } + if let modelVersion = self.modelVersion { + try encodeContainer.encode(modelVersion, forKey: .modelVersion) + } + } +} + +extension UpdateActiveModelVersionInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct UpdateActiveModelVersionInput: Swift.Equatable { + /// The name of the machine learning model for which the active model version is being set. + /// This member is required. + public var modelName: Swift.String? + /// The version of the machine learning model for which the active model version is being set. + /// This member is required. + public var modelVersion: Swift.Int? + + public init( + modelName: Swift.String? = nil, + modelVersion: Swift.Int? = nil + ) + { + self.modelName = modelName + self.modelVersion = modelVersion + } +} + +struct UpdateActiveModelVersionInputBody: Swift.Equatable { + let modelName: Swift.String? + let modelVersion: Swift.Int? +} + +extension UpdateActiveModelVersionInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case modelName = "ModelName" + case modelVersion = "ModelVersion" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let modelNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelName) + modelName = modelNameDecoded + let modelVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .modelVersion) + modelVersion = modelVersionDecoded + } +} + +public enum UpdateActiveModelVersionOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UpdateActiveModelVersionOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: UpdateActiveModelVersionOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.currentActiveVersion = output.currentActiveVersion + self.currentActiveVersionArn = output.currentActiveVersionArn + self.modelArn = output.modelArn + self.modelName = output.modelName + self.previousActiveVersion = output.previousActiveVersion + self.previousActiveVersionArn = output.previousActiveVersionArn + } else { + self.currentActiveVersion = nil + self.currentActiveVersionArn = nil + self.modelArn = nil + self.modelName = nil + self.previousActiveVersion = nil + self.previousActiveVersionArn = nil + } + } +} + +public struct UpdateActiveModelVersionOutputResponse: Swift.Equatable { + /// The version that is currently active of the machine learning model for which the active model version was set. + public var currentActiveVersion: Swift.Int? + /// The Amazon Resource Name (ARN) of the machine learning model version that is the current active model version. + public var currentActiveVersionArn: Swift.String? + /// The Amazon Resource Name (ARN) of the machine learning model for which the active model version was set. + public var modelArn: Swift.String? + /// The name of the machine learning model for which the active model version was set. + public var modelName: Swift.String? + /// The previous version that was active of the machine learning model for which the active model version was set. + public var previousActiveVersion: Swift.Int? + /// The Amazon Resource Name (ARN) of the machine learning model version that was the previous active model version. + public var previousActiveVersionArn: Swift.String? + + public init( + currentActiveVersion: Swift.Int? = nil, + currentActiveVersionArn: Swift.String? = nil, + modelArn: Swift.String? = nil, + modelName: Swift.String? = nil, + previousActiveVersion: Swift.Int? = nil, + previousActiveVersionArn: Swift.String? = nil + ) + { + self.currentActiveVersion = currentActiveVersion + self.currentActiveVersionArn = currentActiveVersionArn + self.modelArn = modelArn + self.modelName = modelName + self.previousActiveVersion = previousActiveVersion + self.previousActiveVersionArn = previousActiveVersionArn + } +} + +struct UpdateActiveModelVersionOutputResponseBody: Swift.Equatable { + let modelName: Swift.String? + let modelArn: Swift.String? + let currentActiveVersion: Swift.Int? + let previousActiveVersion: Swift.Int? + let currentActiveVersionArn: Swift.String? + let previousActiveVersionArn: Swift.String? +} + +extension UpdateActiveModelVersionOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case currentActiveVersion = "CurrentActiveVersion" + case currentActiveVersionArn = "CurrentActiveVersionArn" + case modelArn = "ModelArn" + case modelName = "ModelName" + case previousActiveVersion = "PreviousActiveVersion" + case previousActiveVersionArn = "PreviousActiveVersionArn" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let modelNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelName) + modelName = modelNameDecoded + let modelArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modelArn) + modelArn = modelArnDecoded + let currentActiveVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .currentActiveVersion) + currentActiveVersion = currentActiveVersionDecoded + let previousActiveVersionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .previousActiveVersion) + previousActiveVersion = previousActiveVersionDecoded + let currentActiveVersionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .currentActiveVersionArn) + currentActiveVersionArn = currentActiveVersionArnDecoded + let previousActiveVersionArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .previousActiveVersionArn) + previousActiveVersionArn = previousActiveVersionArnDecoded + } +} + extension UpdateInferenceSchedulerInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case dataDelayOffsetInMinutes = "DataDelayOffsetInMinutes" @@ -8190,7 +10070,7 @@ extension ValidationException { } } -/// The input fails to satisfy constraints specified by Amazon Lookout for Equipment or a related AWS service that's being utilized. +/// The input fails to satisfy constraints specified by Amazon Lookout for Equipment or a related Amazon Web Services service that's being utilized. public struct ValidationException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { diff --git a/Sources/Services/AWSM2/M2Client.swift b/Sources/Services/AWSM2/M2Client.swift index ee12ea0a14f..2b14aeffb0f 100644 --- a/Sources/Services/AWSM2/M2Client.swift +++ b/Sources/Services/AWSM2/M2Client.swift @@ -606,6 +606,39 @@ extension M2Client: M2ClientProtocol { return result } + /// Gets a single sign-on URL that can be used to connect to AWS Blu Insights. + public func getSignedBluinsightsUrl(input: GetSignedBluinsightsUrlInput) async throws -> GetSignedBluinsightsUrlOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getSignedBluinsightsUrl") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "m2") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getSignedBluinsightsUrl") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Returns a list of the application versions for a specific application. public func listApplicationVersions(input: ListApplicationVersionsInput) async throws -> ListApplicationVersionsOutputResponse { diff --git a/Sources/Services/AWSM2/M2ClientProtocol.swift b/Sources/Services/AWSM2/M2ClientProtocol.swift index 8ad13528b83..af6ed1b1632 100644 --- a/Sources/Services/AWSM2/M2ClientProtocol.swift +++ b/Sources/Services/AWSM2/M2ClientProtocol.swift @@ -34,6 +34,8 @@ public protocol M2ClientProtocol { func getDeployment(input: GetDeploymentInput) async throws -> GetDeploymentOutputResponse /// Describes a specific runtime environment. func getEnvironment(input: GetEnvironmentInput) async throws -> GetEnvironmentOutputResponse + /// Gets a single sign-on URL that can be used to connect to AWS Blu Insights. + func getSignedBluinsightsUrl(input: GetSignedBluinsightsUrlInput) async throws -> GetSignedBluinsightsUrlOutputResponse /// Lists the applications associated with a specific Amazon Web Services account. You can provide the unique identifier of a specific runtime environment in a query parameter to see all applications associated with that environment. func listApplications(input: ListApplicationsInput) async throws -> ListApplicationsOutputResponse /// Returns a list of the application versions for a specific application. diff --git a/Sources/Services/AWSM2/models/Models.swift b/Sources/Services/AWSM2/models/Models.swift index ed4719bf922..fd78778341a 100644 --- a/Sources/Services/AWSM2/models/Models.swift +++ b/Sources/Services/AWSM2/models/Models.swift @@ -999,7 +999,7 @@ public struct CreateApplicationInput: Swift.Equatable { /// The unique identifier of the application. /// This member is required. public var name: Swift.String? - /// The Amazon Resource Name (ARN) of the role associated with the application. + /// The Amazon Resource Name (ARN) that identifies a role that the application uses to access Amazon Web Services resources that are not part of the application or are in a different Amazon Web Services account. public var roleArn: Swift.String? /// A list of tags to apply to the application. public var tags: [Swift.String:Swift.String]? @@ -4753,6 +4753,80 @@ extension GetEnvironmentOutputResponseBody: Swift.Decodable { } } +extension GetSignedBluinsightsUrlInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/signed-bi-url" + } +} + +public struct GetSignedBluinsightsUrlInput: Swift.Equatable { + + public init() { } +} + +struct GetSignedBluinsightsUrlInputBody: Swift.Equatable { +} + +extension GetSignedBluinsightsUrlInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum GetSignedBluinsightsUrlOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetSignedBluinsightsUrlOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetSignedBluinsightsUrlOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.signedBiUrl = output.signedBiUrl + } else { + self.signedBiUrl = nil + } + } +} + +public struct GetSignedBluinsightsUrlOutputResponse: Swift.Equatable { + /// Single sign-on AWS Blu Insights URL. + /// This member is required. + public var signedBiUrl: Swift.String? + + public init( + signedBiUrl: Swift.String? = nil + ) + { + self.signedBiUrl = signedBiUrl + } +} + +struct GetSignedBluinsightsUrlOutputResponseBody: Swift.Equatable { + let signedBiUrl: Swift.String? +} + +extension GetSignedBluinsightsUrlOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case signedBiUrl + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let signedBiUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .signedBiUrl) + signedBiUrl = signedBiUrlDecoded + } +} + extension M2ClientTypes.HighAvailabilityConfig: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case desiredCapacity @@ -4775,7 +4849,7 @@ extension M2ClientTypes.HighAvailabilityConfig: Swift.Codable { extension M2ClientTypes { /// Defines the details of a high availability configuration. public struct HighAvailabilityConfig: Swift.Equatable { - /// The number of instances in a high availability configuration. + /// The number of instances in a high availability configuration. The minimum possible value is 1 and the maximum is 100. /// This member is required. public var desiredCapacity: Swift.Int? @@ -7655,7 +7729,7 @@ extension UpdateEnvironmentInput: ClientRuntime.URLPathProvider { public struct UpdateEnvironmentInput: Swift.Equatable { /// Indicates whether to update the runtime environment during the maintenance window. The default is false. Currently, Amazon Web Services Mainframe Modernization accepts the engineVersion parameter only if applyDuringMaintenanceWindow is true. If any parameter other than engineVersion is provided in UpdateEnvironmentRequest, it will fail if applyDuringMaintenanceWindow is set to true. public var applyDuringMaintenanceWindow: Swift.Bool - /// The desired capacity for the runtime environment to update. + /// The desired capacity for the runtime environment to update. The minimum possible value is 0 and the maximum is 100. public var desiredCapacity: Swift.Int? /// The version of the runtime engine for the runtime environment. public var engineVersion: Swift.String? diff --git a/Sources/Services/AWSManagedBlockchainQuery/EndpointResolver.swift b/Sources/Services/AWSManagedBlockchainQuery/EndpointResolver.swift new file mode 100644 index 00000000000..9cf67b377da --- /dev/null +++ b/Sources/Services/AWSManagedBlockchainQuery/EndpointResolver.swift @@ -0,0 +1,154 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import AWSClientRuntime +import ClientRuntime + +public struct EndpointParams { + /// Override the endpoint used to send this request + public let endpoint: Swift.String? + /// The AWS region used to dispatch the request. + public let region: Swift.String? + /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error. + public let useDualStack: Swift.Bool + /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error. + public let useFIPS: Swift.Bool + + public init( + endpoint: Swift.String? = nil, + region: Swift.String? = nil, + useDualStack: Swift.Bool = false, + useFIPS: Swift.Bool = false + ) + { + self.endpoint = endpoint + self.region = region + self.useDualStack = useDualStack + self.useFIPS = useFIPS + } +} + +public protocol EndpointResolver { + func resolve(params: EndpointParams) throws -> ClientRuntime.Endpoint +} + +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://managedblockchain-query-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://managedblockchain-query-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://managedblockchain-query.{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://managedblockchain-query.{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) + } + + public func resolve(params: EndpointParams) throws -> ClientRuntime.Endpoint { + let context = try AWSClientRuntime.AWSEndpointsRequestContext() + try context.add(name: "Endpoint", value: params.endpoint) + try context.add(name: "Region", value: params.region) + try context.add(name: "UseDualStack", value: params.useDualStack) + try context.add(name: "UseFIPS", value: params.useFIPS) + + guard let crtResolvedEndpoint = try engine.resolve(context: context) else { + throw EndpointError.unresolved("Failed to resolved endpoint") + } + + if crtResolvedEndpoint.getType() == .error { + let error = crtResolvedEndpoint.getError() + throw EndpointError.unresolved(error) + } + + guard let url = crtResolvedEndpoint.getURL() else { + assertionFailure("This must be a bug in either CRT or the rule engine, if the endpoint is not an error, it must have a url") + throw EndpointError.unresolved("Failed to resolved endpoint") + } + + let headers = crtResolvedEndpoint.getHeaders() ?? [:] + let properties = crtResolvedEndpoint.getProperties() ?? [:] + return try Endpoint(urlString: url, headers: Headers(headers), properties: properties) + } +} + +public struct EndpointResolverMiddleware: ClientRuntime.Middleware { + public let id: Swift.String = "EndpointResolverMiddleware" + + let endpointResolver: EndpointResolver + + let endpointParams: EndpointParams + + let authSchemeResolver: AWSClientRuntime.AuthSchemeResolver + + public init(endpointResolver: EndpointResolver, endpointParams: EndpointParams, authSchemeResolver: AWSClientRuntime.AuthSchemeResolver = AWSClientRuntime.DefaultAuthSchemeResolver()) { + self.endpointResolver = endpointResolver + self.endpointParams = endpointParams + self.authSchemeResolver = authSchemeResolver + } + + public func handle(context: Context, + input: ClientRuntime.SdkHttpRequestBuilder, + next: H) async throws -> ClientRuntime.OperationOutput + where H: Handler, + Self.MInput == H.Input, + Self.MOutput == H.Output, + Self.Context == H.Context + { + let endpoint = try endpointResolver.resolve(params: endpointParams) + + var signingName: String? = nil + var signingRegion: String? = nil + var signingAlgorithm: String? = nil + if let authSchemes = endpoint.authSchemes() { + let schemes = try authSchemes.map { try AuthScheme(from: $0) } + let authScheme = try authSchemeResolver.resolve(authSchemes: schemes) + signingAlgorithm = authScheme.name + switch authScheme { + case .sigV4(let param): + signingName = param.signingName + signingRegion = param.signingRegion + case .sigV4A(let param): + signingName = param.signingName + signingRegion = param.signingRegionSet?.first + case .none: + break + } + } + + let awsEndpoint = AWSEndpoint(endpoint: endpoint, signingName: signingName, signingRegion: signingRegion) + + var host = "" + if let hostOverride = context.getHost() { + host = hostOverride + } else { + host = "\(context.getHostPrefix() ?? "")\(awsEndpoint.endpoint.host)" + } + + if let protocolType = awsEndpoint.endpoint.protocolType { + input.withProtocol(protocolType) + } + + if let signingRegion = signingRegion { + context.attributes.set(key: HttpContext.signingRegion, value: signingRegion) + } + if let signingName = signingName { + context.attributes.set(key: HttpContext.signingName, value: signingName) + } + if let signingAlgorithm = signingAlgorithm { + context.attributes.set(key: HttpContext.signingAlgorithm, value: signingAlgorithm) + } + + if let headers = endpoint.headers { + input.withHeaders(headers) + } + + input.withMethod(context.getMethod()) + .withHost(host) + .withPort(awsEndpoint.endpoint.port) + .withPath(awsEndpoint.endpoint.path.appendingPathComponent(context.getPath())) + .withHeader(name: "Host", value: host) + + return try await next.handle(context: context, input: input) + } + + public typealias MInput = ClientRuntime.SdkHttpRequestBuilder + public typealias MOutput = ClientRuntime.OperationOutput + public typealias Context = ClientRuntime.HttpContext +} diff --git a/Sources/Services/AWSManagedBlockchainQuery/ManagedBlockchainQueryClient.swift b/Sources/Services/AWSManagedBlockchainQuery/ManagedBlockchainQueryClient.swift new file mode 100644 index 00000000000..9206f4ab6d6 --- /dev/null +++ b/Sources/Services/AWSManagedBlockchainQuery/ManagedBlockchainQueryClient.swift @@ -0,0 +1,295 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +@_spi(FileBasedConfig) import AWSClientRuntime +import ClientRuntime +import Foundation +import Logging + +public class ManagedBlockchainQueryClient { + public static let clientName = "ManagedBlockchainQueryClient" + let client: ClientRuntime.SdkHttpClient + let config: ManagedBlockchainQueryClient.ManagedBlockchainQueryClientConfiguration + let serviceName = "ManagedBlockchain Query" + let encoder: ClientRuntime.RequestEncoder + let decoder: ClientRuntime.ResponseDecoder + + public init(config: ManagedBlockchainQueryClient.ManagedBlockchainQueryClientConfiguration) { + client = ClientRuntime.SdkHttpClient(engine: config.httpClientEngine, config: config.httpClientConfiguration) + let encoder = ClientRuntime.JSONEncoder() + encoder.dateEncodingStrategy = .secondsSince1970 + encoder.nonConformingFloatEncodingStrategy = .convertToString(positiveInfinity: "Infinity", negativeInfinity: "-Infinity", nan: "NaN") + self.encoder = config.encoder ?? encoder + let decoder = ClientRuntime.JSONDecoder() + decoder.dateDecodingStrategy = .secondsSince1970 + decoder.nonConformingFloatDecodingStrategy = .convertFromString(positiveInfinity: "Infinity", negativeInfinity: "-Infinity", nan: "NaN") + self.decoder = config.decoder ?? decoder + self.config = config + } + + public convenience init(region: Swift.String) throws { + let config = try ManagedBlockchainQueryClient.ManagedBlockchainQueryClientConfiguration(region: region) + self.init(config: config) + } + + public convenience init() async throws { + let config = try await ManagedBlockchainQueryClient.ManagedBlockchainQueryClientConfiguration() + self.init(config: config) + } +} + +extension ManagedBlockchainQueryClient { + public typealias ManagedBlockchainQueryClientConfiguration = AWSClientConfiguration + + public struct ServiceSpecificConfiguration: AWSServiceSpecificConfiguration { + public typealias AWSServiceEndpointResolver = EndpointResolver + + public var serviceName: String { "ManagedBlockchain Query" } + public var clientName: String { "ManagedBlockchainQueryClient" } + public var endpointResolver: EndpointResolver + + public init(endpointResolver: EndpointResolver? = nil) throws { + self.endpointResolver = try endpointResolver ?? DefaultEndpointResolver() + } + } +} + +public struct ManagedBlockchainQueryClientLogHandlerFactory: ClientRuntime.SDKLogHandlerFactory { + public var label = "ManagedBlockchainQueryClient" + let logLevel: ClientRuntime.SDKLogLevel + public func construct(label: String) -> LogHandler { + var handler = StreamLogHandler.standardOutput(label: label) + handler.logLevel = logLevel.toLoggerType() + return handler + } + public init(logLevel: ClientRuntime.SDKLogLevel) { + self.logLevel = logLevel + } +} + +extension ManagedBlockchainQueryClient: ManagedBlockchainQueryClientProtocol { + /// Gets the token balance for a batch of tokens by using the GetTokenBalance action for every token in the request. Only the native tokens BTC,ETH, and the ERC-20, ERC-721, and ERC 1155 token standards are supported. + public func batchGetTokenBalance(input: BatchGetTokenBalanceInput) async throws -> BatchGetTokenBalanceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "batchGetTokenBalance") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "managedblockchain-query") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "batchGetTokenBalance") + 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.serviceSpecific.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: "BatchGetTokenBalanceInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Gets the balance of a specific token, including native tokens, for a given address (wallet or contract) on the blockchain. Only the native tokens BTC,ETH, and the ERC-20, ERC-721, and ERC 1155 token standards are supported. + public func getTokenBalance(input: GetTokenBalanceInput) async throws -> GetTokenBalanceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getTokenBalance") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "managedblockchain-query") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getTokenBalance") + 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.serviceSpecific.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: "GetTokenBalanceInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Get the details of a transaction. + public func getTransaction(input: GetTransactionInput) async throws -> GetTransactionOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getTransaction") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "managedblockchain-query") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getTransaction") + 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.serviceSpecific.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: "GetTransactionInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// This action returns the following for a given a blockchain network: + /// + /// * Lists all token balances owned by an address (either a contact address or a wallet address). + /// + /// * Lists all token balances for all tokens created by a contract. + /// + /// * Lists all token balances for a given token. + /// + /// + /// You must always specify the network property of the tokenFilter when using this operation. + public func listTokenBalances(input: ListTokenBalancesInput) async throws -> ListTokenBalancesOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listTokenBalances") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "managedblockchain-query") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTokenBalances") + 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.serviceSpecific.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: "ListTokenBalancesInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// An array of TransactionEvent objects. Each object contains details about the transaction event. + public func listTransactionEvents(input: ListTransactionEventsInput) async throws -> ListTransactionEventsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listTransactionEvents") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "managedblockchain-query") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTransactionEvents") + 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.serviceSpecific.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: "ListTransactionEventsInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Lists all of the transactions on a given wallet address or to a specific contract. + public func listTransactions(input: ListTransactionsInput) async throws -> ListTransactionsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listTransactions") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "managedblockchain-query") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTransactions") + 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.serviceSpecific.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: "ListTransactionsInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + +} diff --git a/Sources/Services/AWSManagedBlockchainQuery/ManagedBlockchainQueryClientProtocol.swift b/Sources/Services/AWSManagedBlockchainQuery/ManagedBlockchainQueryClientProtocol.swift new file mode 100644 index 00000000000..d70fbf9a6b5 --- /dev/null +++ b/Sources/Services/AWSManagedBlockchainQuery/ManagedBlockchainQueryClientProtocol.swift @@ -0,0 +1,30 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import ClientRuntime + +/// Amazon Managed Blockchain (AMB) Query provides you with convenient access to multi-blockchain network data, which makes it easier for you to extract contextual data related to blockchain activity. You can use AMB Query to read data from public blockchain networks, such as Bitcoin Mainnet and Ethereum Mainnet. You can also get information such as the current and historical balances of addresses, or you can get a list of blockchain transactions for a given time period. Additionally, you can get details of a given transaction, such as transaction events, which you can further analyze or use in business logic for your applications. +public protocol ManagedBlockchainQueryClientProtocol { + /// Gets the token balance for a batch of tokens by using the GetTokenBalance action for every token in the request. Only the native tokens BTC,ETH, and the ERC-20, ERC-721, and ERC 1155 token standards are supported. + func batchGetTokenBalance(input: BatchGetTokenBalanceInput) async throws -> BatchGetTokenBalanceOutputResponse + /// Gets the balance of a specific token, including native tokens, for a given address (wallet or contract) on the blockchain. Only the native tokens BTC,ETH, and the ERC-20, ERC-721, and ERC 1155 token standards are supported. + func getTokenBalance(input: GetTokenBalanceInput) async throws -> GetTokenBalanceOutputResponse + /// Get the details of a transaction. + func getTransaction(input: GetTransactionInput) async throws -> GetTransactionOutputResponse + /// This action returns the following for a given a blockchain network: + /// + /// * Lists all token balances owned by an address (either a contact address or a wallet address). + /// + /// * Lists all token balances for all tokens created by a contract. + /// + /// * Lists all token balances for a given token. + /// + /// + /// You must always specify the network property of the tokenFilter when using this operation. + func listTokenBalances(input: ListTokenBalancesInput) async throws -> ListTokenBalancesOutputResponse + /// An array of TransactionEvent objects. Each object contains details about the transaction event. + func listTransactionEvents(input: ListTransactionEventsInput) async throws -> ListTransactionEventsOutputResponse + /// Lists all of the transactions on a given wallet address or to a specific contract. + func listTransactions(input: ListTransactionsInput) async throws -> ListTransactionsOutputResponse +} + +public enum ManagedBlockchainQueryClientTypes {} diff --git a/Sources/Services/AWSManagedBlockchainQuery/Paginators.swift b/Sources/Services/AWSManagedBlockchainQuery/Paginators.swift new file mode 100644 index 00000000000..b8ece64707d --- /dev/null +++ b/Sources/Services/AWSManagedBlockchainQuery/Paginators.swift @@ -0,0 +1,103 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import ClientRuntime + +extension ManagedBlockchainQueryClient { + /// Paginate over `[ListTokenBalancesOutputResponse]` 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 `[ListTokenBalancesInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListTokenBalancesOutputResponse` + public func listTokenBalancesPaginated(input: ListTokenBalancesInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListTokenBalancesInput.nextToken, outputKey: \ListTokenBalancesOutputResponse.nextToken, paginationFunction: self.listTokenBalances(input:)) + } +} + +extension ListTokenBalancesInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListTokenBalancesInput { + return ListTokenBalancesInput( + maxResults: self.maxResults, + nextToken: token, + ownerFilter: self.ownerFilter, + tokenFilter: self.tokenFilter + )} +} + +extension PaginatorSequence where Input == ListTokenBalancesInput, Output == ListTokenBalancesOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listTokenBalancesPaginated` + /// to access the nested member `[ManagedBlockchainQueryClientTypes.TokenBalance]` + /// - Returns: `[ManagedBlockchainQueryClientTypes.TokenBalance]` + public func tokenBalances() async throws -> [ManagedBlockchainQueryClientTypes.TokenBalance] { + return try await self.asyncCompactMap { item in item.tokenBalances } + } +} +extension ManagedBlockchainQueryClient { + /// Paginate over `[ListTransactionEventsOutputResponse]` 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 `[ListTransactionEventsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListTransactionEventsOutputResponse` + public func listTransactionEventsPaginated(input: ListTransactionEventsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListTransactionEventsInput.nextToken, outputKey: \ListTransactionEventsOutputResponse.nextToken, paginationFunction: self.listTransactionEvents(input:)) + } +} + +extension ListTransactionEventsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListTransactionEventsInput { + return ListTransactionEventsInput( + maxResults: self.maxResults, + network: self.network, + nextToken: token, + transactionHash: self.transactionHash + )} +} + +extension PaginatorSequence where Input == ListTransactionEventsInput, Output == ListTransactionEventsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listTransactionEventsPaginated` + /// to access the nested member `[ManagedBlockchainQueryClientTypes.TransactionEvent]` + /// - Returns: `[ManagedBlockchainQueryClientTypes.TransactionEvent]` + public func events() async throws -> [ManagedBlockchainQueryClientTypes.TransactionEvent] { + return try await self.asyncCompactMap { item in item.events } + } +} +extension ManagedBlockchainQueryClient { + /// Paginate over `[ListTransactionsOutputResponse]` 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 `[ListTransactionsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListTransactionsOutputResponse` + public func listTransactionsPaginated(input: ListTransactionsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListTransactionsInput.nextToken, outputKey: \ListTransactionsOutputResponse.nextToken, paginationFunction: self.listTransactions(input:)) + } +} + +extension ListTransactionsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListTransactionsInput { + return ListTransactionsInput( + address: self.address, + fromBlockchainInstant: self.fromBlockchainInstant, + maxResults: self.maxResults, + network: self.network, + nextToken: token, + sort: self.sort, + toBlockchainInstant: self.toBlockchainInstant + )} +} + +extension PaginatorSequence where Input == ListTransactionsInput, Output == ListTransactionsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listTransactionsPaginated` + /// to access the nested member `[ManagedBlockchainQueryClientTypes.TransactionOutputItem]` + /// - Returns: `[ManagedBlockchainQueryClientTypes.TransactionOutputItem]` + public func transactions() async throws -> [ManagedBlockchainQueryClientTypes.TransactionOutputItem] { + return try await self.asyncCompactMap { item in item.transactions } + } +} diff --git a/Sources/Services/AWSManagedBlockchainQuery/models/Models.swift b/Sources/Services/AWSManagedBlockchainQuery/models/Models.swift new file mode 100644 index 00000000000..4d589eff8bd --- /dev/null +++ b/Sources/Services/AWSManagedBlockchainQuery/models/Models.swift @@ -0,0 +1,2755 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! +import AWSClientRuntime +import ClientRuntime + +extension AccessDeniedException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: AccessDeniedExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The Amazon Web Services account doesn’t have access to this resource. +public struct AccessDeniedException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// The container for the exception message. + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "AccessDeniedException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct AccessDeniedExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension AccessDeniedExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceErrorItem: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case atBlockchainInstant + case errorCode + case errorMessage + case errorType + case ownerIdentifier + case tokenIdentifier + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let atBlockchainInstant = self.atBlockchainInstant { + try encodeContainer.encode(atBlockchainInstant, forKey: .atBlockchainInstant) + } + if let errorCode = self.errorCode { + try encodeContainer.encode(errorCode, forKey: .errorCode) + } + if let errorMessage = self.errorMessage { + try encodeContainer.encode(errorMessage, forKey: .errorMessage) + } + if let errorType = self.errorType { + try encodeContainer.encode(errorType.rawValue, forKey: .errorType) + } + if let ownerIdentifier = self.ownerIdentifier { + try encodeContainer.encode(ownerIdentifier, forKey: .ownerIdentifier) + } + if let tokenIdentifier = self.tokenIdentifier { + try encodeContainer.encode(tokenIdentifier, forKey: .tokenIdentifier) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tokenIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.TokenIdentifier.self, forKey: .tokenIdentifier) + tokenIdentifier = tokenIdentifierDecoded + let ownerIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.OwnerIdentifier.self, forKey: .ownerIdentifier) + ownerIdentifier = ownerIdentifierDecoded + let atBlockchainInstantDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.BlockchainInstant.self, forKey: .atBlockchainInstant) + atBlockchainInstant = atBlockchainInstantDecoded + let errorCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorCode) + errorCode = errorCodeDecoded + let errorMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorMessage) + errorMessage = errorMessageDecoded + let errorTypeDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.ErrorType.self, forKey: .errorType) + errorType = errorTypeDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// Error generated from a failed BatchGetTokenBalance request. + public struct BatchGetTokenBalanceErrorItem: Swift.Equatable { + /// The container for time. + public var atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? + /// The error code associated with the error. + /// This member is required. + public var errorCode: Swift.String? + /// The message associated with the error. + /// This member is required. + public var errorMessage: Swift.String? + /// The type of error. + /// This member is required. + public var errorType: ManagedBlockchainQueryClientTypes.ErrorType? + /// The container for the identifier of the owner. + public var ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? + /// The container for the identifier for the token including the unique token ID and its blockchain network. Only the native tokens BTC,ETH, and the ERC-20, ERC-721, and ERC 1155 token standards are supported. + public var tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? + + public init( + atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? = nil, + errorCode: Swift.String? = nil, + errorMessage: Swift.String? = nil, + errorType: ManagedBlockchainQueryClientTypes.ErrorType? = nil, + ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? = nil, + tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? = nil + ) + { + self.atBlockchainInstant = atBlockchainInstant + self.errorCode = errorCode + self.errorMessage = errorMessage + self.errorType = errorType + self.ownerIdentifier = ownerIdentifier + self.tokenIdentifier = tokenIdentifier + } + } + +} + +extension BatchGetTokenBalanceInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case getTokenBalanceInputs + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let getTokenBalanceInputs = getTokenBalanceInputs { + var getTokenBalanceInputsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .getTokenBalanceInputs) + for batchgettokenbalanceinputitem0 in getTokenBalanceInputs { + try getTokenBalanceInputsContainer.encode(batchgettokenbalanceinputitem0) + } + } + } +} + +extension BatchGetTokenBalanceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/batch-get-token-balance" + } +} + +public struct BatchGetTokenBalanceInput: Swift.Equatable { + /// An array of GetTokenBalanceInput objects whose balance is being requested. + public var getTokenBalanceInputs: [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceInputItem]? + + public init( + getTokenBalanceInputs: [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceInputItem]? = nil + ) + { + self.getTokenBalanceInputs = getTokenBalanceInputs + } +} + +struct BatchGetTokenBalanceInputBody: Swift.Equatable { + let getTokenBalanceInputs: [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceInputItem]? +} + +extension BatchGetTokenBalanceInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case getTokenBalanceInputs + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let getTokenBalanceInputsContainer = try containerValues.decodeIfPresent([ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceInputItem?].self, forKey: .getTokenBalanceInputs) + var getTokenBalanceInputsDecoded0:[ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceInputItem]? = nil + if let getTokenBalanceInputsContainer = getTokenBalanceInputsContainer { + getTokenBalanceInputsDecoded0 = [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceInputItem]() + for structure0 in getTokenBalanceInputsContainer { + if let structure0 = structure0 { + getTokenBalanceInputsDecoded0?.append(structure0) + } + } + } + getTokenBalanceInputs = getTokenBalanceInputsDecoded0 + } +} + +extension ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceInputItem: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case atBlockchainInstant + case ownerIdentifier + case tokenIdentifier + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let atBlockchainInstant = self.atBlockchainInstant { + try encodeContainer.encode(atBlockchainInstant, forKey: .atBlockchainInstant) + } + if let ownerIdentifier = self.ownerIdentifier { + try encodeContainer.encode(ownerIdentifier, forKey: .ownerIdentifier) + } + if let tokenIdentifier = self.tokenIdentifier { + try encodeContainer.encode(tokenIdentifier, forKey: .tokenIdentifier) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tokenIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.TokenIdentifier.self, forKey: .tokenIdentifier) + tokenIdentifier = tokenIdentifierDecoded + let ownerIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.OwnerIdentifier.self, forKey: .ownerIdentifier) + ownerIdentifier = ownerIdentifierDecoded + let atBlockchainInstantDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.BlockchainInstant.self, forKey: .atBlockchainInstant) + atBlockchainInstant = atBlockchainInstantDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The container for the input for getting a token balance. + public struct BatchGetTokenBalanceInputItem: Swift.Equatable { + /// The container for time. + public var atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? + /// The container for the identifier of the owner. + /// This member is required. + public var ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? + /// The container for the identifier for the token including the unique token ID and its blockchain network. Only the native tokens BTC,ETH, and the ERC-20, ERC-721, and ERC 1155 token standards are supported. + /// This member is required. + public var tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? + + public init( + atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? = nil, + ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? = nil, + tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? = nil + ) + { + self.atBlockchainInstant = atBlockchainInstant + self.ownerIdentifier = ownerIdentifier + self.tokenIdentifier = tokenIdentifier + } + } + +} + +public enum BatchGetTokenBalanceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceOutputItem: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case atBlockchainInstant + case balance + case lastUpdatedTime + case ownerIdentifier + case tokenIdentifier + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let atBlockchainInstant = self.atBlockchainInstant { + try encodeContainer.encode(atBlockchainInstant, forKey: .atBlockchainInstant) + } + if let balance = self.balance { + try encodeContainer.encode(balance, forKey: .balance) + } + if let lastUpdatedTime = self.lastUpdatedTime { + try encodeContainer.encode(lastUpdatedTime, forKey: .lastUpdatedTime) + } + if let ownerIdentifier = self.ownerIdentifier { + try encodeContainer.encode(ownerIdentifier, forKey: .ownerIdentifier) + } + if let tokenIdentifier = self.tokenIdentifier { + try encodeContainer.encode(tokenIdentifier, forKey: .tokenIdentifier) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let ownerIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.OwnerIdentifier.self, forKey: .ownerIdentifier) + ownerIdentifier = ownerIdentifierDecoded + let tokenIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.TokenIdentifier.self, forKey: .tokenIdentifier) + tokenIdentifier = tokenIdentifierDecoded + let balanceDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .balance) + balance = balanceDecoded + let atBlockchainInstantDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.BlockchainInstant.self, forKey: .atBlockchainInstant) + atBlockchainInstant = atBlockchainInstantDecoded + let lastUpdatedTimeDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.BlockchainInstant.self, forKey: .lastUpdatedTime) + lastUpdatedTime = lastUpdatedTimeDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The container for the properties of a token balance output. + public struct BatchGetTokenBalanceOutputItem: Swift.Equatable { + /// The container for time. + /// This member is required. + public var atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? + /// The container for the token balance. + /// This member is required. + public var balance: Swift.String? + /// The container for time. + public var lastUpdatedTime: ManagedBlockchainQueryClientTypes.BlockchainInstant? + /// The container for the identifier of the owner. + public var ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? + /// The container for the identifier for the token including the unique token ID and its blockchain network. Only the native tokens BTC,ETH, and the ERC-20, ERC-721, and ERC 1155 token standards are supported. + public var tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? + + public init( + atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? = nil, + balance: Swift.String? = nil, + lastUpdatedTime: ManagedBlockchainQueryClientTypes.BlockchainInstant? = nil, + ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? = nil, + tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? = nil + ) + { + self.atBlockchainInstant = atBlockchainInstant + self.balance = balance + self.lastUpdatedTime = lastUpdatedTime + self.ownerIdentifier = ownerIdentifier + self.tokenIdentifier = tokenIdentifier + } + } + +} + +extension BatchGetTokenBalanceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: BatchGetTokenBalanceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.errors = output.errors + self.tokenBalances = output.tokenBalances + } else { + self.errors = nil + self.tokenBalances = nil + } + } +} + +public struct BatchGetTokenBalanceOutputResponse: Swift.Equatable { + /// An array of BatchGetTokenBalanceErrorItem objects returned from the request. + /// This member is required. + public var errors: [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceErrorItem]? + /// An array of BatchGetTokenBalanceOutputItem objects returned by the response. + /// This member is required. + public var tokenBalances: [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceOutputItem]? + + public init( + errors: [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceErrorItem]? = nil, + tokenBalances: [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceOutputItem]? = nil + ) + { + self.errors = errors + self.tokenBalances = tokenBalances + } +} + +struct BatchGetTokenBalanceOutputResponseBody: Swift.Equatable { + let tokenBalances: [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceOutputItem]? + let errors: [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceErrorItem]? +} + +extension BatchGetTokenBalanceOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case errors + case tokenBalances + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tokenBalancesContainer = try containerValues.decodeIfPresent([ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceOutputItem?].self, forKey: .tokenBalances) + var tokenBalancesDecoded0:[ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceOutputItem]? = nil + if let tokenBalancesContainer = tokenBalancesContainer { + tokenBalancesDecoded0 = [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceOutputItem]() + for structure0 in tokenBalancesContainer { + if let structure0 = structure0 { + tokenBalancesDecoded0?.append(structure0) + } + } + } + tokenBalances = tokenBalancesDecoded0 + let errorsContainer = try containerValues.decodeIfPresent([ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceErrorItem?].self, forKey: .errors) + var errorsDecoded0:[ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceErrorItem]? = nil + if let errorsContainer = errorsContainer { + errorsDecoded0 = [ManagedBlockchainQueryClientTypes.BatchGetTokenBalanceErrorItem]() + for structure0 in errorsContainer { + if let structure0 = structure0 { + errorsDecoded0?.append(structure0) + } + } + } + errors = errorsDecoded0 + } +} + +extension ManagedBlockchainQueryClientTypes.BlockchainInstant: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case time + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let time = self.time { + try encodeContainer.encodeTimestamp(time, format: .epochSeconds, forKey: .time) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let timeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .time) + time = timeDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The container for time. + public struct BlockchainInstant: Swift.Equatable { + /// The container of the Timestamp of the blockchain instant. This timestamp will only be recorded up to the second. + public var time: ClientRuntime.Date? + + public init( + time: ClientRuntime.Date? = nil + ) + { + self.time = time + } + } + +} + +extension ManagedBlockchainQueryClientTypes { + public enum ErrorType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + /// An API request retrieving an item that can't be found + case resourceNotFoundException + /// An API request validation exception + case validationException + case sdkUnknown(Swift.String) + + public static var allCases: [ErrorType] { + return [ + .resourceNotFoundException, + .validationException, + .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 .resourceNotFoundException: return "RESOURCE_NOT_FOUND_EXCEPTION" + case .validationException: return "VALIDATION_EXCEPTION" + 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 = ErrorType(rawValue: rawValue) ?? ErrorType.sdkUnknown(rawValue) + } + } +} + +extension GetTokenBalanceInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case atBlockchainInstant + case ownerIdentifier + case tokenIdentifier + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let atBlockchainInstant = self.atBlockchainInstant { + try encodeContainer.encode(atBlockchainInstant, forKey: .atBlockchainInstant) + } + if let ownerIdentifier = self.ownerIdentifier { + try encodeContainer.encode(ownerIdentifier, forKey: .ownerIdentifier) + } + if let tokenIdentifier = self.tokenIdentifier { + try encodeContainer.encode(tokenIdentifier, forKey: .tokenIdentifier) + } + } +} + +extension GetTokenBalanceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/get-token-balance" + } +} + +public struct GetTokenBalanceInput: Swift.Equatable { + /// The time for when the TokenBalance is requested or the current time if a time is not provided in the request. This time will only be recorded up to the second. + public var atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? + /// The container for the identifier for the owner. + /// This member is required. + public var ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? + /// The container for the identifier for the token, including the unique token ID and its blockchain network. + /// This member is required. + public var tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? + + public init( + atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? = nil, + ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? = nil, + tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? = nil + ) + { + self.atBlockchainInstant = atBlockchainInstant + self.ownerIdentifier = ownerIdentifier + self.tokenIdentifier = tokenIdentifier + } +} + +struct GetTokenBalanceInputBody: Swift.Equatable { + let tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? + let ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? + let atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? +} + +extension GetTokenBalanceInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case atBlockchainInstant + case ownerIdentifier + case tokenIdentifier + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tokenIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.TokenIdentifier.self, forKey: .tokenIdentifier) + tokenIdentifier = tokenIdentifierDecoded + let ownerIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.OwnerIdentifier.self, forKey: .ownerIdentifier) + ownerIdentifier = ownerIdentifierDecoded + let atBlockchainInstantDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.BlockchainInstant.self, forKey: .atBlockchainInstant) + atBlockchainInstant = atBlockchainInstantDecoded + } +} + +public enum GetTokenBalanceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetTokenBalanceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetTokenBalanceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.atBlockchainInstant = output.atBlockchainInstant + self.balance = output.balance + self.lastUpdatedTime = output.lastUpdatedTime + self.ownerIdentifier = output.ownerIdentifier + self.tokenIdentifier = output.tokenIdentifier + } else { + self.atBlockchainInstant = nil + self.balance = nil + self.lastUpdatedTime = nil + self.ownerIdentifier = nil + self.tokenIdentifier = nil + } + } +} + +public struct GetTokenBalanceOutputResponse: Swift.Equatable { + /// The container for time. + /// This member is required. + public var atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? + /// The container for the token balance. + /// This member is required. + public var balance: Swift.String? + /// The container for time. + public var lastUpdatedTime: ManagedBlockchainQueryClientTypes.BlockchainInstant? + /// The container for the identifier of the owner. + public var ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? + /// The container for the identifier for the token including the unique token ID and its blockchain network. Only the native tokens BTC,ETH, and the ERC-20, ERC-721, and ERC 1155 token standards are supported. + public var tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? + + public init( + atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? = nil, + balance: Swift.String? = nil, + lastUpdatedTime: ManagedBlockchainQueryClientTypes.BlockchainInstant? = nil, + ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? = nil, + tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? = nil + ) + { + self.atBlockchainInstant = atBlockchainInstant + self.balance = balance + self.lastUpdatedTime = lastUpdatedTime + self.ownerIdentifier = ownerIdentifier + self.tokenIdentifier = tokenIdentifier + } +} + +struct GetTokenBalanceOutputResponseBody: Swift.Equatable { + let ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? + let tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? + let balance: Swift.String? + let atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? + let lastUpdatedTime: ManagedBlockchainQueryClientTypes.BlockchainInstant? +} + +extension GetTokenBalanceOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case atBlockchainInstant + case balance + case lastUpdatedTime + case ownerIdentifier + case tokenIdentifier + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let ownerIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.OwnerIdentifier.self, forKey: .ownerIdentifier) + ownerIdentifier = ownerIdentifierDecoded + let tokenIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.TokenIdentifier.self, forKey: .tokenIdentifier) + tokenIdentifier = tokenIdentifierDecoded + let balanceDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .balance) + balance = balanceDecoded + let atBlockchainInstantDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.BlockchainInstant.self, forKey: .atBlockchainInstant) + atBlockchainInstant = atBlockchainInstantDecoded + let lastUpdatedTimeDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.BlockchainInstant.self, forKey: .lastUpdatedTime) + lastUpdatedTime = lastUpdatedTimeDecoded + } +} + +extension GetTransactionInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case network + case transactionHash + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let network = self.network { + try encodeContainer.encode(network.rawValue, forKey: .network) + } + if let transactionHash = self.transactionHash { + try encodeContainer.encode(transactionHash, forKey: .transactionHash) + } + } +} + +extension GetTransactionInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/get-transaction" + } +} + +public struct GetTransactionInput: Swift.Equatable { + /// The blockchain network where the transaction occurred. + /// This member is required. + public var network: ManagedBlockchainQueryClientTypes.QueryNetwork? + /// The hash of the transaction. It is generated whenever a transaction is verified and added to the blockchain. + /// This member is required. + public var transactionHash: Swift.String? + + public init( + network: ManagedBlockchainQueryClientTypes.QueryNetwork? = nil, + transactionHash: Swift.String? = nil + ) + { + self.network = network + self.transactionHash = transactionHash + } +} + +struct GetTransactionInputBody: Swift.Equatable { + let transactionHash: Swift.String? + let network: ManagedBlockchainQueryClientTypes.QueryNetwork? +} + +extension GetTransactionInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case network + case transactionHash + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let transactionHashDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .transactionHash) + transactionHash = transactionHashDecoded + let networkDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.QueryNetwork.self, forKey: .network) + network = networkDecoded + } +} + +public enum GetTransactionOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetTransactionOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetTransactionOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.transaction = output.transaction + } else { + self.transaction = nil + } + } +} + +public struct GetTransactionOutputResponse: Swift.Equatable { + /// Contains the details of the transaction. + /// This member is required. + public var transaction: ManagedBlockchainQueryClientTypes.Transaction? + + public init( + transaction: ManagedBlockchainQueryClientTypes.Transaction? = nil + ) + { + self.transaction = transaction + } +} + +struct GetTransactionOutputResponseBody: Swift.Equatable { + let transaction: ManagedBlockchainQueryClientTypes.Transaction? +} + +extension GetTransactionOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case transaction + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let transactionDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.Transaction.self, forKey: .transaction) + transaction = transactionDecoded + } +} + +extension InternalServerException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let retryAfterSecondsHeaderValue = httpResponse.headers.value(for: "Retry-After") { + self.properties.retryAfterSeconds = Swift.Int(retryAfterSecondsHeaderValue) ?? 0 + } else { + self.properties.retryAfterSeconds = nil + } + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: InternalServerExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The request processing has failed because of an internal error in the service. +public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// The container for the exception message. + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The container of the retryAfterSeconds value. + public internal(set) var retryAfterSeconds: Swift.Int? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "InternalServerException" } + public static var fault: ErrorFault { .server } + public static var isRetryable: Swift.Bool { true } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + retryAfterSeconds: Swift.Int? = nil + ) + { + self.properties.message = message + self.properties.retryAfterSeconds = retryAfterSeconds + } +} + +struct InternalServerExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension InternalServerExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 ListTokenBalancesInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults + case nextToken + case ownerFilter + case tokenFilter + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + if let ownerFilter = self.ownerFilter { + try encodeContainer.encode(ownerFilter, forKey: .ownerFilter) + } + if let tokenFilter = self.tokenFilter { + try encodeContainer.encode(tokenFilter, forKey: .tokenFilter) + } + } +} + +extension ListTokenBalancesInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/list-token-balances" + } +} + +public struct ListTokenBalancesInput: Swift.Equatable { + /// The maximum number of token balances to return. + public var maxResults: Swift.Int? + /// The pagination token that indicates the next set of results to retrieve. + public var nextToken: Swift.String? + /// The contract or wallet address on the blockchain network by which to filter the request. You must specify the address property of the ownerFilter when listing balances of tokens owned by the address. + public var ownerFilter: ManagedBlockchainQueryClientTypes.OwnerFilter? + /// The contract address or a token identifier on the blockchain network by which to filter the request. You must specify the contractAddress property of this container when listing tokens minted by a contract. You must always specify the network property of this container when using this operation. + /// This member is required. + public var tokenFilter: ManagedBlockchainQueryClientTypes.TokenFilter? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + ownerFilter: ManagedBlockchainQueryClientTypes.OwnerFilter? = nil, + tokenFilter: ManagedBlockchainQueryClientTypes.TokenFilter? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + self.ownerFilter = ownerFilter + self.tokenFilter = tokenFilter + } +} + +struct ListTokenBalancesInputBody: Swift.Equatable { + let ownerFilter: ManagedBlockchainQueryClientTypes.OwnerFilter? + let tokenFilter: ManagedBlockchainQueryClientTypes.TokenFilter? + let nextToken: Swift.String? + let maxResults: Swift.Int? +} + +extension ListTokenBalancesInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults + case nextToken + case ownerFilter + case tokenFilter + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let ownerFilterDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.OwnerFilter.self, forKey: .ownerFilter) + ownerFilter = ownerFilterDecoded + let tokenFilterDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.TokenFilter.self, forKey: .tokenFilter) + tokenFilter = tokenFilterDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + } +} + +public enum ListTokenBalancesOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListTokenBalancesOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListTokenBalancesOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nextToken = output.nextToken + self.tokenBalances = output.tokenBalances + } else { + self.nextToken = nil + self.tokenBalances = nil + } + } +} + +public struct ListTokenBalancesOutputResponse: Swift.Equatable { + /// The pagination token that indicates the next set of results to retrieve. + public var nextToken: Swift.String? + /// An array of TokenBalance objects. Each object contains details about the token balance. + /// This member is required. + public var tokenBalances: [ManagedBlockchainQueryClientTypes.TokenBalance]? + + public init( + nextToken: Swift.String? = nil, + tokenBalances: [ManagedBlockchainQueryClientTypes.TokenBalance]? = nil + ) + { + self.nextToken = nextToken + self.tokenBalances = tokenBalances + } +} + +struct ListTokenBalancesOutputResponseBody: Swift.Equatable { + let tokenBalances: [ManagedBlockchainQueryClientTypes.TokenBalance]? + let nextToken: Swift.String? +} + +extension ListTokenBalancesOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextToken + case tokenBalances + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tokenBalancesContainer = try containerValues.decodeIfPresent([ManagedBlockchainQueryClientTypes.TokenBalance?].self, forKey: .tokenBalances) + var tokenBalancesDecoded0:[ManagedBlockchainQueryClientTypes.TokenBalance]? = nil + if let tokenBalancesContainer = tokenBalancesContainer { + tokenBalancesDecoded0 = [ManagedBlockchainQueryClientTypes.TokenBalance]() + for structure0 in tokenBalancesContainer { + if let structure0 = structure0 { + tokenBalancesDecoded0?.append(structure0) + } + } + } + tokenBalances = tokenBalancesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ListTransactionEventsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults + case network + case nextToken + case transactionHash + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let network = self.network { + try encodeContainer.encode(network.rawValue, forKey: .network) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + if let transactionHash = self.transactionHash { + try encodeContainer.encode(transactionHash, forKey: .transactionHash) + } + } +} + +extension ListTransactionEventsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/list-transaction-events" + } +} + +public struct ListTransactionEventsInput: Swift.Equatable { + /// The maximum number of transaction events to list. Even if additional results can be retrieved, the request can return less results than maxResults or an empty array of results. To retrieve the next set of results, make another request with the returned nextToken value. The value of nextToken is null when there are no more results to return + public var maxResults: Swift.Int? + /// The blockchain network where the transaction events occurred. + /// This member is required. + public var network: ManagedBlockchainQueryClientTypes.QueryNetwork? + /// The pagination token that indicates the next set of results to retrieve. + public var nextToken: Swift.String? + /// The hash of the transaction. It is generated whenever a transaction is verified and added to the blockchain. + /// This member is required. + public var transactionHash: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + network: ManagedBlockchainQueryClientTypes.QueryNetwork? = nil, + nextToken: Swift.String? = nil, + transactionHash: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.network = network + self.nextToken = nextToken + self.transactionHash = transactionHash + } +} + +struct ListTransactionEventsInputBody: Swift.Equatable { + let transactionHash: Swift.String? + let network: ManagedBlockchainQueryClientTypes.QueryNetwork? + let nextToken: Swift.String? + let maxResults: Swift.Int? +} + +extension ListTransactionEventsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults + case network + case nextToken + case transactionHash + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let transactionHashDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .transactionHash) + transactionHash = transactionHashDecoded + let networkDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.QueryNetwork.self, forKey: .network) + network = networkDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + } +} + +public enum ListTransactionEventsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListTransactionEventsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListTransactionEventsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.events = output.events + self.nextToken = output.nextToken + } else { + self.events = nil + self.nextToken = nil + } + } +} + +public struct ListTransactionEventsOutputResponse: Swift.Equatable { + /// An array of TransactionEvent objects. Each object contains details about the transaction events. + /// This member is required. + public var events: [ManagedBlockchainQueryClientTypes.TransactionEvent]? + /// The pagination token that indicates the next set of results to retrieve. + public var nextToken: Swift.String? + + public init( + events: [ManagedBlockchainQueryClientTypes.TransactionEvent]? = nil, + nextToken: Swift.String? = nil + ) + { + self.events = events + self.nextToken = nextToken + } +} + +struct ListTransactionEventsOutputResponseBody: Swift.Equatable { + let events: [ManagedBlockchainQueryClientTypes.TransactionEvent]? + let nextToken: Swift.String? +} + +extension ListTransactionEventsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case events + case nextToken + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let eventsContainer = try containerValues.decodeIfPresent([ManagedBlockchainQueryClientTypes.TransactionEvent?].self, forKey: .events) + var eventsDecoded0:[ManagedBlockchainQueryClientTypes.TransactionEvent]? = nil + if let eventsContainer = eventsContainer { + eventsDecoded0 = [ManagedBlockchainQueryClientTypes.TransactionEvent]() + for structure0 in eventsContainer { + if let structure0 = structure0 { + eventsDecoded0?.append(structure0) + } + } + } + events = eventsDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ListTransactionsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case address + case fromBlockchainInstant + case maxResults + case network + case nextToken + case sort + case toBlockchainInstant + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let address = self.address { + try encodeContainer.encode(address, forKey: .address) + } + if let fromBlockchainInstant = self.fromBlockchainInstant { + try encodeContainer.encode(fromBlockchainInstant, forKey: .fromBlockchainInstant) + } + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let network = self.network { + try encodeContainer.encode(network.rawValue, forKey: .network) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + if let sort = self.sort { + try encodeContainer.encode(sort, forKey: .sort) + } + if let toBlockchainInstant = self.toBlockchainInstant { + try encodeContainer.encode(toBlockchainInstant, forKey: .toBlockchainInstant) + } + } +} + +extension ListTransactionsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/list-transactions" + } +} + +public struct ListTransactionsInput: Swift.Equatable { + /// The address (either a contract or wallet), whose transactions are being requested. + /// This member is required. + public var address: Swift.String? + /// The container for time. + public var fromBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? + /// The maximum number of transactions to list. Even if additional results can be retrieved, the request can return less results than maxResults or an empty array of results. To retrieve the next set of results, make another request with the returned nextToken value. The value of nextToken is null when there are no more results to return + public var maxResults: Swift.Int? + /// The blockchain network where the transactions occurred. + /// This member is required. + public var network: ManagedBlockchainQueryClientTypes.QueryNetwork? + /// The pagination token that indicates the next set of results to retrieve. + public var nextToken: Swift.String? + /// Sorts items in an ascending order if the first page starts at fromTime. Sorts items in a descending order if the first page starts at toTime. + public var sort: ManagedBlockchainQueryClientTypes.ListTransactionsSort? + /// The container for time. + public var toBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? + + public init( + address: Swift.String? = nil, + fromBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? = nil, + maxResults: Swift.Int? = nil, + network: ManagedBlockchainQueryClientTypes.QueryNetwork? = nil, + nextToken: Swift.String? = nil, + sort: ManagedBlockchainQueryClientTypes.ListTransactionsSort? = nil, + toBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? = nil + ) + { + self.address = address + self.fromBlockchainInstant = fromBlockchainInstant + self.maxResults = maxResults + self.network = network + self.nextToken = nextToken + self.sort = sort + self.toBlockchainInstant = toBlockchainInstant + } +} + +struct ListTransactionsInputBody: Swift.Equatable { + let address: Swift.String? + let network: ManagedBlockchainQueryClientTypes.QueryNetwork? + let fromBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? + let toBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? + let sort: ManagedBlockchainQueryClientTypes.ListTransactionsSort? + let nextToken: Swift.String? + let maxResults: Swift.Int? +} + +extension ListTransactionsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case address + case fromBlockchainInstant + case maxResults + case network + case nextToken + case sort + case toBlockchainInstant + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let addressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .address) + address = addressDecoded + let networkDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.QueryNetwork.self, forKey: .network) + network = networkDecoded + let fromBlockchainInstantDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.BlockchainInstant.self, forKey: .fromBlockchainInstant) + fromBlockchainInstant = fromBlockchainInstantDecoded + let toBlockchainInstantDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.BlockchainInstant.self, forKey: .toBlockchainInstant) + toBlockchainInstant = toBlockchainInstantDecoded + let sortDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.ListTransactionsSort.self, forKey: .sort) + sort = sortDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + } +} + +public enum ListTransactionsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListTransactionsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListTransactionsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nextToken = output.nextToken + self.transactions = output.transactions + } else { + self.nextToken = nil + self.transactions = nil + } + } +} + +public struct ListTransactionsOutputResponse: Swift.Equatable { + /// The pagination token that indicates the next set of results to retrieve. + public var nextToken: Swift.String? + /// The array of transactions returned by the request. + /// This member is required. + public var transactions: [ManagedBlockchainQueryClientTypes.TransactionOutputItem]? + + public init( + nextToken: Swift.String? = nil, + transactions: [ManagedBlockchainQueryClientTypes.TransactionOutputItem]? = nil + ) + { + self.nextToken = nextToken + self.transactions = transactions + } +} + +struct ListTransactionsOutputResponseBody: Swift.Equatable { + let transactions: [ManagedBlockchainQueryClientTypes.TransactionOutputItem]? + let nextToken: Swift.String? +} + +extension ListTransactionsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextToken + case transactions + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let transactionsContainer = try containerValues.decodeIfPresent([ManagedBlockchainQueryClientTypes.TransactionOutputItem?].self, forKey: .transactions) + var transactionsDecoded0:[ManagedBlockchainQueryClientTypes.TransactionOutputItem]? = nil + if let transactionsContainer = transactionsContainer { + transactionsDecoded0 = [ManagedBlockchainQueryClientTypes.TransactionOutputItem]() + for structure0 in transactionsContainer { + if let structure0 = structure0 { + transactionsDecoded0?.append(structure0) + } + } + } + transactions = transactionsDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ManagedBlockchainQueryClientTypes.ListTransactionsSort: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case sortBy + case sortOrder + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy.rawValue, forKey: .sortBy) + } + if let sortOrder = self.sortOrder { + try encodeContainer.encode(sortOrder.rawValue, forKey: .sortOrder) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sortByDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.ListTransactionsSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded + let sortOrderDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.SortOrder.self, forKey: .sortOrder) + sortOrder = sortOrderDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The container for determining how the list transaction result will be sorted. + public struct ListTransactionsSort: Swift.Equatable { + /// Defaults to the value TRANSACTION_TIMESTAMP. + public var sortBy: ManagedBlockchainQueryClientTypes.ListTransactionsSortBy? + /// The container for the sort order for ListTransactions. The SortOrder field only accepts the values ASCENDING and DESCENDING. Not providing SortOrder will default to ASCENDING. + public var sortOrder: ManagedBlockchainQueryClientTypes.SortOrder? + + public init( + sortBy: ManagedBlockchainQueryClientTypes.ListTransactionsSortBy? = nil, + sortOrder: ManagedBlockchainQueryClientTypes.SortOrder? = nil + ) + { + self.sortBy = sortBy + self.sortOrder = sortOrder + } + } + +} + +extension ManagedBlockchainQueryClientTypes { + public enum ListTransactionsSortBy: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + /// Timestamp of a transaction + case transactionTimestamp + case sdkUnknown(Swift.String) + + public static var allCases: [ListTransactionsSortBy] { + return [ + .transactionTimestamp, + .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 .transactionTimestamp: return "TRANSACTION_TIMESTAMP" + 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 = ListTransactionsSortBy(rawValue: rawValue) ?? ListTransactionsSortBy.sdkUnknown(rawValue) + } + } +} + +extension ManagedBlockchainQueryClientTypes.OwnerFilter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case address + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let address = self.address { + try encodeContainer.encode(address, forKey: .address) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let addressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .address) + address = addressDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The container for the owner information to filter by. + public struct OwnerFilter: Swift.Equatable { + /// The contract or wallet address. + /// This member is required. + public var address: Swift.String? + + public init( + address: Swift.String? = nil + ) + { + self.address = address + } + } + +} + +extension ManagedBlockchainQueryClientTypes.OwnerIdentifier: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case address + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let address = self.address { + try encodeContainer.encode(address, forKey: .address) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let addressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .address) + address = addressDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The container for the identifier of the owner. + public struct OwnerIdentifier: Swift.Equatable { + /// The contract or wallet address for the owner. + /// This member is required. + public var address: Swift.String? + + public init( + address: Swift.String? = nil + ) + { + self.address = address + } + } + +} + +extension ManagedBlockchainQueryClientTypes { + public enum QueryNetwork: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + /// Bitcoin main network + case bitcoinMainnet + /// Ethereum main network + case ethereumMainnet + case sdkUnknown(Swift.String) + + public static var allCases: [QueryNetwork] { + return [ + .bitcoinMainnet, + .ethereumMainnet, + .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 .bitcoinMainnet: return "BITCOIN_MAINNET" + case .ethereumMainnet: return "ETHEREUM_MAINNET" + 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 = QueryNetwork(rawValue: rawValue) ?? QueryNetwork.sdkUnknown(rawValue) + } + } +} + +extension ManagedBlockchainQueryClientTypes { + public enum QueryTransactionEventType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + /// A Bitcoin Vin transfer type + case bitcoinVin + /// A Bitcoin Vout transfer type + case bitcoinVout + /// An ERC1155 transfer type + case erc1155Transfer + /// An ERC20_BURN transfer type + case erc20Burn + /// An ERC20_DEPOSIT transfer type + case erc20Deposit + /// An ERC20_MINT transfer type + case erc20Mint + /// An ERC20 transfer type + case erc20Transfer + /// An ERC20_WITHDRAWAL transfer type + case erc20Withdrawal + /// An ERC721 transfer type + case erc721Transfer + /// An ETH transfer type + case ethTransfer + /// An internal ETH transfer type + case internalEthTransfer + case sdkUnknown(Swift.String) + + public static var allCases: [QueryTransactionEventType] { + return [ + .bitcoinVin, + .bitcoinVout, + .erc1155Transfer, + .erc20Burn, + .erc20Deposit, + .erc20Mint, + .erc20Transfer, + .erc20Withdrawal, + .erc721Transfer, + .ethTransfer, + .internalEthTransfer, + .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 .bitcoinVin: return "BITCOIN_VIN" + case .bitcoinVout: return "BITCOIN_VOUT" + case .erc1155Transfer: return "ERC1155_TRANSFER" + case .erc20Burn: return "ERC20_BURN" + case .erc20Deposit: return "ERC20_DEPOSIT" + case .erc20Mint: return "ERC20_MINT" + case .erc20Transfer: return "ERC20_TRANSFER" + case .erc20Withdrawal: return "ERC20_WITHDRAWAL" + case .erc721Transfer: return "ERC721_TRANSFER" + case .ethTransfer: return "ETH_TRANSFER" + case .internalEthTransfer: return "INTERNAL_ETH_TRANSFER" + 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 = QueryTransactionEventType(rawValue: rawValue) ?? QueryTransactionEventType.sdkUnknown(rawValue) + } + } +} + +extension ManagedBlockchainQueryClientTypes { + public enum QueryTransactionStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + /// The transaction completed on the blockchain, but failed + case failed + /// The transaction has been confirmed and is final in the blockchain + case `final` + case sdkUnknown(Swift.String) + + public static var allCases: [QueryTransactionStatus] { + return [ + .failed, + .final, + .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 .failed: return "FAILED" + case .final: return "FINAL" + 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 = QueryTransactionStatus(rawValue: rawValue) ?? QueryTransactionStatus.sdkUnknown(rawValue) + } + } +} + +extension ResourceNotFoundException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ResourceNotFoundExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + self.properties.resourceId = output.resourceId + self.properties.resourceType = output.resourceType + } else { + self.properties.message = nil + self.properties.resourceId = nil + self.properties.resourceType = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The resource was not found. +public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// The container for the exception message. + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The resourceId of the resource that caused the exception. + /// This member is required. + public internal(set) var resourceId: Swift.String? = nil + /// The resourceType of the resource that caused the exception. + /// This member is required. + public internal(set) var resourceType: ManagedBlockchainQueryClientTypes.ResourceType? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ResourceNotFoundException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + resourceId: Swift.String? = nil, + resourceType: ManagedBlockchainQueryClientTypes.ResourceType? = nil + ) + { + self.properties.message = message + self.properties.resourceId = resourceId + self.properties.resourceType = resourceType + } +} + +struct ResourceNotFoundExceptionBody: Swift.Equatable { + let message: Swift.String? + let resourceId: Swift.String? + let resourceType: ManagedBlockchainQueryClientTypes.ResourceType? +} + +extension ResourceNotFoundExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case message + case resourceId + case resourceType + } + + 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 resourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceId) + resourceId = resourceIdDecoded + let resourceTypeDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.ResourceType.self, forKey: .resourceType) + resourceType = resourceTypeDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + public enum ResourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case collection + case sdkUnknown(Swift.String) + + public static var allCases: [ResourceType] { + return [ + .collection, + .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 .collection: return "collection" + 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 ServiceQuotaExceededException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ServiceQuotaExceededExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + self.properties.quotaCode = output.quotaCode + self.properties.resourceId = output.resourceId + self.properties.resourceType = output.resourceType + self.properties.serviceCode = output.serviceCode + } else { + self.properties.message = nil + self.properties.quotaCode = nil + self.properties.resourceId = nil + self.properties.resourceType = nil + self.properties.serviceCode = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The service quota has been exceeded for this resource. +public struct ServiceQuotaExceededException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// The container for the exception message. + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The container for the quotaCode. + /// This member is required. + public internal(set) var quotaCode: Swift.String? = nil + /// The resourceId of the resource that caused the exception. + /// This member is required. + public internal(set) var resourceId: Swift.String? = nil + /// The resourceType of the resource that caused the exception. + /// This member is required. + public internal(set) var resourceType: ManagedBlockchainQueryClientTypes.ResourceType? = nil + /// The container for the serviceCode. + /// This member is required. + public internal(set) var serviceCode: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ServiceQuotaExceededException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + quotaCode: Swift.String? = nil, + resourceId: Swift.String? = nil, + resourceType: ManagedBlockchainQueryClientTypes.ResourceType? = nil, + serviceCode: Swift.String? = nil + ) + { + self.properties.message = message + self.properties.quotaCode = quotaCode + self.properties.resourceId = resourceId + self.properties.resourceType = resourceType + self.properties.serviceCode = serviceCode + } +} + +struct ServiceQuotaExceededExceptionBody: Swift.Equatable { + let message: Swift.String? + let resourceId: Swift.String? + let resourceType: ManagedBlockchainQueryClientTypes.ResourceType? + let serviceCode: Swift.String? + let quotaCode: Swift.String? +} + +extension ServiceQuotaExceededExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case message + case quotaCode + case resourceId + case resourceType + case serviceCode + } + + 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 resourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceId) + resourceId = resourceIdDecoded + let resourceTypeDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.ResourceType.self, forKey: .resourceType) + resourceType = resourceTypeDecoded + let serviceCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceCode) + serviceCode = serviceCodeDecoded + let quotaCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .quotaCode) + quotaCode = quotaCodeDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + public enum SortOrder: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + /// Result sorted in ascending order + case ascending + /// Result sorted in descending order + case descending + case sdkUnknown(Swift.String) + + public static var allCases: [SortOrder] { + return [ + .ascending, + .descending, + .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 .ascending: return "ASCENDING" + case .descending: return "DESCENDING" + 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 = SortOrder(rawValue: rawValue) ?? SortOrder.sdkUnknown(rawValue) + } + } +} + +extension ThrottlingException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let retryAfterSecondsHeaderValue = httpResponse.headers.value(for: "Retry-After") { + self.properties.retryAfterSeconds = Swift.Int(retryAfterSecondsHeaderValue) ?? 0 + } else { + self.properties.retryAfterSeconds = nil + } + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ThrottlingExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + self.properties.quotaCode = output.quotaCode + self.properties.serviceCode = output.serviceCode + } else { + self.properties.message = nil + self.properties.quotaCode = nil + self.properties.serviceCode = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The request or operation couldn't be performed because a service is throttling requests. The most common source of throttling errors is when you create resources that exceed your service limit for this resource type. Request a limit increase or delete unused resources, if possible. +public struct ThrottlingException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// The container for the exception message. + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The container for the quotaCode. + /// This member is required. + public internal(set) var quotaCode: Swift.String? = nil + /// The container of the retryAfterSeconds value. + public internal(set) var retryAfterSeconds: Swift.Int? = nil + /// The container for the serviceCode. + /// This member is required. + public internal(set) var serviceCode: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ThrottlingException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { true } + public static var isThrottling: Swift.Bool { true } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil, + quotaCode: Swift.String? = nil, + retryAfterSeconds: Swift.Int? = nil, + serviceCode: Swift.String? = nil + ) + { + self.properties.message = message + self.properties.quotaCode = quotaCode + self.properties.retryAfterSeconds = retryAfterSeconds + self.properties.serviceCode = serviceCode + } +} + +struct ThrottlingExceptionBody: Swift.Equatable { + let message: Swift.String? + let serviceCode: Swift.String? + let quotaCode: Swift.String? +} + +extension ThrottlingExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case message + case quotaCode + case serviceCode + } + + 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 serviceCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceCode) + serviceCode = serviceCodeDecoded + let quotaCodeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .quotaCode) + quotaCode = quotaCodeDecoded + } +} + +extension ManagedBlockchainQueryClientTypes.TokenBalance: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case atBlockchainInstant + case balance + case lastUpdatedTime + case ownerIdentifier + case tokenIdentifier + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let atBlockchainInstant = self.atBlockchainInstant { + try encodeContainer.encode(atBlockchainInstant, forKey: .atBlockchainInstant) + } + if let balance = self.balance { + try encodeContainer.encode(balance, forKey: .balance) + } + if let lastUpdatedTime = self.lastUpdatedTime { + try encodeContainer.encode(lastUpdatedTime, forKey: .lastUpdatedTime) + } + if let ownerIdentifier = self.ownerIdentifier { + try encodeContainer.encode(ownerIdentifier, forKey: .ownerIdentifier) + } + if let tokenIdentifier = self.tokenIdentifier { + try encodeContainer.encode(tokenIdentifier, forKey: .tokenIdentifier) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let ownerIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.OwnerIdentifier.self, forKey: .ownerIdentifier) + ownerIdentifier = ownerIdentifierDecoded + let tokenIdentifierDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.TokenIdentifier.self, forKey: .tokenIdentifier) + tokenIdentifier = tokenIdentifierDecoded + let balanceDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .balance) + balance = balanceDecoded + let atBlockchainInstantDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.BlockchainInstant.self, forKey: .atBlockchainInstant) + atBlockchainInstant = atBlockchainInstantDecoded + let lastUpdatedTimeDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.BlockchainInstant.self, forKey: .lastUpdatedTime) + lastUpdatedTime = lastUpdatedTimeDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The balance of the token. + public struct TokenBalance: Swift.Equatable { + /// The time for when the TokenBalance is requested or the current time if a time is not provided in the request. This time will only be recorded up to the second. + /// This member is required. + public var atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? + /// The container of the token balance. + /// This member is required. + public var balance: Swift.String? + /// The timestamp of the last transaction at which the balance for the token in the wallet was updated. + public var lastUpdatedTime: ManagedBlockchainQueryClientTypes.BlockchainInstant? + /// The container for the identifier of the owner. + public var ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? + /// The identifier for the token, including the unique token ID and its blockchain network. + public var tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? + + public init( + atBlockchainInstant: ManagedBlockchainQueryClientTypes.BlockchainInstant? = nil, + balance: Swift.String? = nil, + lastUpdatedTime: ManagedBlockchainQueryClientTypes.BlockchainInstant? = nil, + ownerIdentifier: ManagedBlockchainQueryClientTypes.OwnerIdentifier? = nil, + tokenIdentifier: ManagedBlockchainQueryClientTypes.TokenIdentifier? = nil + ) + { + self.atBlockchainInstant = atBlockchainInstant + self.balance = balance + self.lastUpdatedTime = lastUpdatedTime + self.ownerIdentifier = ownerIdentifier + self.tokenIdentifier = tokenIdentifier + } + } + +} + +extension ManagedBlockchainQueryClientTypes.TokenFilter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case contractAddress + case network + case tokenId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let contractAddress = self.contractAddress { + try encodeContainer.encode(contractAddress, forKey: .contractAddress) + } + if let network = self.network { + try encodeContainer.encode(network.rawValue, forKey: .network) + } + if let tokenId = self.tokenId { + try encodeContainer.encode(tokenId, forKey: .tokenId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let networkDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.QueryNetwork.self, forKey: .network) + network = networkDecoded + let contractAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .contractAddress) + contractAddress = contractAddressDecoded + let tokenIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .tokenId) + tokenId = tokenIdDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The container of the token filter like the contract address on a given blockchain network or a unique token identifier on a given blockchain network. You must always specify the network property of this container when using this operation. + public struct TokenFilter: Swift.Equatable { + /// This is the address of the contract. + public var contractAddress: Swift.String? + /// The blockchain network of the token. + /// This member is required. + public var network: ManagedBlockchainQueryClientTypes.QueryNetwork? + /// The unique identifier of the token. + public var tokenId: Swift.String? + + public init( + contractAddress: Swift.String? = nil, + network: ManagedBlockchainQueryClientTypes.QueryNetwork? = nil, + tokenId: Swift.String? = nil + ) + { + self.contractAddress = contractAddress + self.network = network + self.tokenId = tokenId + } + } + +} + +extension ManagedBlockchainQueryClientTypes.TokenIdentifier: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case contractAddress + case network + case tokenId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let contractAddress = self.contractAddress { + try encodeContainer.encode(contractAddress, forKey: .contractAddress) + } + if let network = self.network { + try encodeContainer.encode(network.rawValue, forKey: .network) + } + if let tokenId = self.tokenId { + try encodeContainer.encode(tokenId, forKey: .tokenId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let networkDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.QueryNetwork.self, forKey: .network) + network = networkDecoded + let contractAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .contractAddress) + contractAddress = contractAddressDecoded + let tokenIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .tokenId) + tokenId = tokenIdDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The container for the identifier for the token including the unique token ID and its blockchain network. Only the native tokens BTC,ETH, and the ERC-20, ERC-721, and ERC 1155 token standards are supported. + public struct TokenIdentifier: Swift.Equatable { + /// This is the token's contract address. + public var contractAddress: Swift.String? + /// The blockchain network of the token. + /// This member is required. + public var network: ManagedBlockchainQueryClientTypes.QueryNetwork? + /// The unique identifier of the token. + public var tokenId: Swift.String? + + public init( + contractAddress: Swift.String? = nil, + network: ManagedBlockchainQueryClientTypes.QueryNetwork? = nil, + tokenId: Swift.String? = nil + ) + { + self.contractAddress = contractAddress + self.network = network + self.tokenId = tokenId + } + } + +} + +extension ManagedBlockchainQueryClientTypes.Transaction: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case blockHash + case blockNumber + case contractAddress + case cumulativeGasUsed + case effectiveGasPrice + case from + case gasUsed + case network + case numberOfTransactions + case signaturer = "signatureR" + case signatures = "signatureS" + case signaturev = "signatureV" + case status + case to + case transactionFee + case transactionHash + case transactionId + case transactionIndex + case transactionTimestamp + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let blockHash = self.blockHash { + try encodeContainer.encode(blockHash, forKey: .blockHash) + } + if let blockNumber = self.blockNumber { + try encodeContainer.encode(blockNumber, forKey: .blockNumber) + } + if let contractAddress = self.contractAddress { + try encodeContainer.encode(contractAddress, forKey: .contractAddress) + } + if let cumulativeGasUsed = self.cumulativeGasUsed { + try encodeContainer.encode(cumulativeGasUsed, forKey: .cumulativeGasUsed) + } + if let effectiveGasPrice = self.effectiveGasPrice { + try encodeContainer.encode(effectiveGasPrice, forKey: .effectiveGasPrice) + } + if let from = self.from { + try encodeContainer.encode(from, forKey: .from) + } + if let gasUsed = self.gasUsed { + try encodeContainer.encode(gasUsed, forKey: .gasUsed) + } + if let network = self.network { + try encodeContainer.encode(network.rawValue, forKey: .network) + } + if let numberOfTransactions = self.numberOfTransactions { + try encodeContainer.encode(numberOfTransactions, forKey: .numberOfTransactions) + } + if let signaturer = self.signaturer { + try encodeContainer.encode(signaturer, forKey: .signaturer) + } + if let signatures = self.signatures { + try encodeContainer.encode(signatures, forKey: .signatures) + } + if let signaturev = self.signaturev { + try encodeContainer.encode(signaturev, forKey: .signaturev) + } + if let status = self.status { + try encodeContainer.encode(status.rawValue, forKey: .status) + } + if let to = self.to { + try encodeContainer.encode(to, forKey: .to) + } + if let transactionFee = self.transactionFee { + try encodeContainer.encode(transactionFee, forKey: .transactionFee) + } + if let transactionHash = self.transactionHash { + try encodeContainer.encode(transactionHash, forKey: .transactionHash) + } + if let transactionId = self.transactionId { + try encodeContainer.encode(transactionId, forKey: .transactionId) + } + if let transactionIndex = self.transactionIndex { + try encodeContainer.encode(transactionIndex, forKey: .transactionIndex) + } + if let transactionTimestamp = self.transactionTimestamp { + try encodeContainer.encodeTimestamp(transactionTimestamp, format: .epochSeconds, forKey: .transactionTimestamp) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let networkDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.QueryNetwork.self, forKey: .network) + network = networkDecoded + let blockHashDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .blockHash) + blockHash = blockHashDecoded + let transactionHashDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .transactionHash) + transactionHash = transactionHashDecoded + let blockNumberDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .blockNumber) + blockNumber = blockNumberDecoded + let transactionTimestampDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .transactionTimestamp) + transactionTimestamp = transactionTimestampDecoded + let transactionIndexDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .transactionIndex) + transactionIndex = transactionIndexDecoded + let numberOfTransactionsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .numberOfTransactions) + numberOfTransactions = numberOfTransactionsDecoded + let statusDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.QueryTransactionStatus.self, forKey: .status) + status = statusDecoded + let toDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .to) + to = toDecoded + let fromDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .from) + from = fromDecoded + let contractAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .contractAddress) + contractAddress = contractAddressDecoded + let gasUsedDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .gasUsed) + gasUsed = gasUsedDecoded + let cumulativeGasUsedDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .cumulativeGasUsed) + cumulativeGasUsed = cumulativeGasUsedDecoded + let effectiveGasPriceDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .effectiveGasPrice) + effectiveGasPrice = effectiveGasPriceDecoded + let signaturevDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .signaturev) + signaturev = signaturevDecoded + let signaturerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .signaturer) + signaturer = signaturerDecoded + let signaturesDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .signatures) + signatures = signaturesDecoded + let transactionFeeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .transactionFee) + transactionFee = transactionFeeDecoded + let transactionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .transactionId) + transactionId = transactionIdDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// There are two possible types of transactions used for this data type: + /// + /// * A Bitcoin transaction is a movement of BTC from one address to another. + /// + /// * An Ethereum transaction refers to an action initiated by an externally owned account, which is an account managed by a human, not a contract. For example, if Bob sends Alice 1 ETH, Bob's account must be debited and Alice's must be credited. This state-changing action occurs within a transaction. + public struct Transaction: Swift.Equatable { + /// The block hash is a unique identifier for a block. It is a fixed-size string that is calculated by using the information in the block. The block hash is used to verify the integrity of the data in the block. + public var blockHash: Swift.String? + /// The block number in which the transaction is recorded. + public var blockNumber: Swift.String? + /// The blockchain address for the contract. + public var contractAddress: Swift.String? + /// The amount of gas used up to the specified point in the block. + public var cumulativeGasUsed: Swift.String? + /// The effective gas price. + public var effectiveGasPrice: Swift.String? + /// The initiator of the transaction. It is either in the form a public key or a contract address. + public var from: Swift.String? + /// The amount of gas used for the transaction. + public var gasUsed: Swift.String? + /// The blockchain network where the transaction occured. + /// This member is required. + public var network: ManagedBlockchainQueryClientTypes.QueryNetwork? + /// The number of transactions in the block. + /// This member is required. + public var numberOfTransactions: Swift.Int? + /// The signature of the transaction. The X coordinate of a point R. + public var signaturer: Swift.String? + /// The signature of the transaction. The Y coordinate of a point S. + public var signatures: Swift.String? + /// The signature of the transaction. The Z coordinate of a point V. + public var signaturev: Swift.Int? + /// The status of the transaction. + /// This member is required. + public var status: ManagedBlockchainQueryClientTypes.QueryTransactionStatus? + /// The identifier of the transaction. It is generated whenever a transaction is verified and added to the blockchain. + /// This member is required. + public var to: Swift.String? + /// The transaction fee. + public var transactionFee: Swift.String? + /// The hash of the transaction. It is generated whenever a transaction is verified and added to the blockchain. + /// This member is required. + public var transactionHash: Swift.String? + /// The unique identifier of the transaction. It is generated whenever a transaction is verified and added to the blockchain. + public var transactionId: Swift.String? + /// The index of the transaction within a blockchain. + /// This member is required. + public var transactionIndex: Swift.Int? + /// The Timestamp of the transaction. + /// This member is required. + public var transactionTimestamp: ClientRuntime.Date? + + public init( + blockHash: Swift.String? = nil, + blockNumber: Swift.String? = nil, + contractAddress: Swift.String? = nil, + cumulativeGasUsed: Swift.String? = nil, + effectiveGasPrice: Swift.String? = nil, + from: Swift.String? = nil, + gasUsed: Swift.String? = nil, + network: ManagedBlockchainQueryClientTypes.QueryNetwork? = nil, + numberOfTransactions: Swift.Int? = nil, + signaturer: Swift.String? = nil, + signatures: Swift.String? = nil, + signaturev: Swift.Int? = nil, + status: ManagedBlockchainQueryClientTypes.QueryTransactionStatus? = nil, + to: Swift.String? = nil, + transactionFee: Swift.String? = nil, + transactionHash: Swift.String? = nil, + transactionId: Swift.String? = nil, + transactionIndex: Swift.Int? = nil, + transactionTimestamp: ClientRuntime.Date? = nil + ) + { + self.blockHash = blockHash + self.blockNumber = blockNumber + self.contractAddress = contractAddress + self.cumulativeGasUsed = cumulativeGasUsed + self.effectiveGasPrice = effectiveGasPrice + self.from = from + self.gasUsed = gasUsed + self.network = network + self.numberOfTransactions = numberOfTransactions + self.signaturer = signaturer + self.signatures = signatures + self.signaturev = signaturev + self.status = status + self.to = to + self.transactionFee = transactionFee + self.transactionHash = transactionHash + self.transactionId = transactionId + self.transactionIndex = transactionIndex + self.transactionTimestamp = transactionTimestamp + } + } + +} + +extension ManagedBlockchainQueryClientTypes.TransactionEvent: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case contractAddress + case eventType + case from + case network + case to + case tokenId + case transactionHash + case transactionId + case value + case voutIndex + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let contractAddress = self.contractAddress { + try encodeContainer.encode(contractAddress, forKey: .contractAddress) + } + if let eventType = self.eventType { + try encodeContainer.encode(eventType.rawValue, forKey: .eventType) + } + if let from = self.from { + try encodeContainer.encode(from, forKey: .from) + } + if let network = self.network { + try encodeContainer.encode(network.rawValue, forKey: .network) + } + if let to = self.to { + try encodeContainer.encode(to, forKey: .to) + } + if let tokenId = self.tokenId { + try encodeContainer.encode(tokenId, forKey: .tokenId) + } + if let transactionHash = self.transactionHash { + try encodeContainer.encode(transactionHash, forKey: .transactionHash) + } + if let transactionId = self.transactionId { + try encodeContainer.encode(transactionId, forKey: .transactionId) + } + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) + } + if let voutIndex = self.voutIndex { + try encodeContainer.encode(voutIndex, forKey: .voutIndex) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let networkDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.QueryNetwork.self, forKey: .network) + network = networkDecoded + let transactionHashDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .transactionHash) + transactionHash = transactionHashDecoded + let eventTypeDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.QueryTransactionEventType.self, forKey: .eventType) + eventType = eventTypeDecoded + let fromDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .from) + from = fromDecoded + let toDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .to) + to = toDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .value) + value = valueDecoded + let contractAddressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .contractAddress) + contractAddress = contractAddressDecoded + let tokenIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .tokenId) + tokenId = tokenIdDecoded + let transactionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .transactionId) + transactionId = transactionIdDecoded + let voutIndexDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .voutIndex) + voutIndex = voutIndexDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The container for the properties of a transaction event. + public struct TransactionEvent: Swift.Equatable { + /// The blockchain address. for the contract + public var contractAddress: Swift.String? + /// The type of transaction event. + /// This member is required. + public var eventType: ManagedBlockchainQueryClientTypes.QueryTransactionEventType? + /// The wallet address initiating the transaction. It can either be a public key or a contract. + public var from: Swift.String? + /// The blockchain network where the transaction occurred. + /// This member is required. + public var network: ManagedBlockchainQueryClientTypes.QueryNetwork? + /// The wallet address receiving the transaction. It can either be a public key or a contract. + public var to: Swift.String? + /// The unique identifier for the token involved in the transaction. + public var tokenId: Swift.String? + /// The hash of the transaction. It is generated whenever a transaction is verified and added to the blockchain. + /// This member is required. + public var transactionHash: Swift.String? + /// The unique identifier of the transaction. It is generated whenever a transaction is verified and added to the blockchain. + public var transactionId: Swift.String? + /// The value that was transacted. + public var value: Swift.String? + /// The position of the vout in the transaction output list. + public var voutIndex: Swift.Int? + + public init( + contractAddress: Swift.String? = nil, + eventType: ManagedBlockchainQueryClientTypes.QueryTransactionEventType? = nil, + from: Swift.String? = nil, + network: ManagedBlockchainQueryClientTypes.QueryNetwork? = nil, + to: Swift.String? = nil, + tokenId: Swift.String? = nil, + transactionHash: Swift.String? = nil, + transactionId: Swift.String? = nil, + value: Swift.String? = nil, + voutIndex: Swift.Int? = nil + ) + { + self.contractAddress = contractAddress + self.eventType = eventType + self.from = from + self.network = network + self.to = to + self.tokenId = tokenId + self.transactionHash = transactionHash + self.transactionId = transactionId + self.value = value + self.voutIndex = voutIndex + } + } + +} + +extension ManagedBlockchainQueryClientTypes.TransactionOutputItem: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case network + case transactionHash + case transactionTimestamp + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let network = self.network { + try encodeContainer.encode(network.rawValue, forKey: .network) + } + if let transactionHash = self.transactionHash { + try encodeContainer.encode(transactionHash, forKey: .transactionHash) + } + if let transactionTimestamp = self.transactionTimestamp { + try encodeContainer.encodeTimestamp(transactionTimestamp, format: .epochSeconds, forKey: .transactionTimestamp) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let transactionHashDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .transactionHash) + transactionHash = transactionHashDecoded + let networkDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.QueryNetwork.self, forKey: .network) + network = networkDecoded + let transactionTimestampDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .transactionTimestamp) + transactionTimestamp = transactionTimestampDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The container of the transaction output. + public struct TransactionOutputItem: Swift.Equatable { + /// The blockchain network where the transaction occurred. + /// This member is required. + public var network: ManagedBlockchainQueryClientTypes.QueryNetwork? + /// The hash of the transaction. It is generated whenever a transaction is verified and added to the blockchain. + /// This member is required. + public var transactionHash: Swift.String? + /// The time when the transaction occurred. + /// This member is required. + public var transactionTimestamp: ClientRuntime.Date? + + public init( + network: ManagedBlockchainQueryClientTypes.QueryNetwork? = nil, + transactionHash: Swift.String? = nil, + transactionTimestamp: ClientRuntime.Date? = nil + ) + { + self.network = network + self.transactionHash = transactionHash + self.transactionTimestamp = transactionTimestamp + } + } + +} + +extension ValidationException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ValidationExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.fieldList = output.fieldList + self.properties.message = output.message + self.properties.reason = output.reason + } else { + self.properties.fieldList = nil + self.properties.message = nil + self.properties.reason = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The resource passed is invalid. +public struct ValidationException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// The container for the fieldList of the exception. + public internal(set) var fieldList: [ManagedBlockchainQueryClientTypes.ValidationExceptionField]? = nil + /// The container for the exception message. + /// This member is required. + public internal(set) var message: Swift.String? = nil + /// The container for the reason for the exception + /// This member is required. + public internal(set) var reason: ManagedBlockchainQueryClientTypes.ValidationExceptionReason? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ValidationException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + fieldList: [ManagedBlockchainQueryClientTypes.ValidationExceptionField]? = nil, + message: Swift.String? = nil, + reason: ManagedBlockchainQueryClientTypes.ValidationExceptionReason? = nil + ) + { + self.properties.fieldList = fieldList + self.properties.message = message + self.properties.reason = reason + } +} + +struct ValidationExceptionBody: Swift.Equatable { + let message: Swift.String? + let reason: ManagedBlockchainQueryClientTypes.ValidationExceptionReason? + let fieldList: [ManagedBlockchainQueryClientTypes.ValidationExceptionField]? +} + +extension ValidationExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case fieldList + case message + case reason + } + + 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 reasonDecoded = try containerValues.decodeIfPresent(ManagedBlockchainQueryClientTypes.ValidationExceptionReason.self, forKey: .reason) + reason = reasonDecoded + let fieldListContainer = try containerValues.decodeIfPresent([ManagedBlockchainQueryClientTypes.ValidationExceptionField?].self, forKey: .fieldList) + var fieldListDecoded0:[ManagedBlockchainQueryClientTypes.ValidationExceptionField]? = nil + if let fieldListContainer = fieldListContainer { + fieldListDecoded0 = [ManagedBlockchainQueryClientTypes.ValidationExceptionField]() + for structure0 in fieldListContainer { + if let structure0 = structure0 { + fieldListDecoded0?.append(structure0) + } + } + } + fieldList = fieldListDecoded0 + } +} + +extension ManagedBlockchainQueryClientTypes.ValidationExceptionField: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case message + case name + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let message = self.message { + try encodeContainer.encode(message, forKey: .message) + } + 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 nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension ManagedBlockchainQueryClientTypes { + /// The resource passed is invalid. + public struct ValidationExceptionField: Swift.Equatable { + /// The ValidationException message. + /// This member is required. + public var message: Swift.String? + /// The name of the field that triggered the ValidationException. + /// This member is required. + public var name: Swift.String? + + public init( + message: Swift.String? = nil, + name: Swift.String? = nil + ) + { + self.message = message + self.name = name + } + } + +} + +extension ManagedBlockchainQueryClientTypes { + public enum ValidationExceptionReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case cannotParse + case fieldValidationFailed + case other + case unknownOperation + case sdkUnknown(Swift.String) + + public static var allCases: [ValidationExceptionReason] { + return [ + .cannotParse, + .fieldValidationFailed, + .other, + .unknownOperation, + .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 .cannotParse: return "cannotParse" + case .fieldValidationFailed: return "fieldValidationFailed" + case .other: return "other" + case .unknownOperation: return "unknownOperation" + 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 = ValidationExceptionReason(rawValue: rawValue) ?? ValidationExceptionReason.sdkUnknown(rawValue) + } + } +} diff --git a/Sources/Services/AWSMediaConvert/models/Models.swift b/Sources/Services/AWSMediaConvert/models/Models.swift index 0a949433e10..925e20e10bc 100644 --- a/Sources/Services/AWSMediaConvert/models/Models.swift +++ b/Sources/Services/AWSMediaConvert/models/Models.swift @@ -247,11 +247,11 @@ extension MediaConvertClientTypes.AacSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value AAC. The service accepts one of two mutually exclusive groups of AAC settings--VBR and CBR. To select one of these modes, set the value of Bitrate control mode (rateControlMode) to "VBR" or "CBR". In VBR mode, you control the audio quality with the setting VBR quality (vbrQuality). In CBR mode, you use the setting Bitrate (bitrate). Defaults and valid values depend on the rate control mode. + /// Required when you set Codec to the value AAC. The service accepts one of two mutually exclusive groups of AAC settings--VBR and CBR. To select one of these modes, set the value of Bitrate control mode to "VBR" or "CBR". In VBR mode, you control the audio quality with the setting VBR quality. In CBR mode, you use the setting Bitrate. Defaults and valid values depend on the rate control mode. public struct AacSettings: Swift.Equatable { /// Choose BROADCASTER_MIXED_AD when the input contains pre-mixed main audio + audio description (AD) as a stereo pair. The value for AudioType will be set to 3, which signals to downstream systems that this stream contains "broadcaster mixed AD". Note that the input received by the encoder must contain pre-mixed audio; the encoder does not perform the mixing. When you choose BROADCASTER_MIXED_AD, the encoder ignores any values you provide in AudioType and FollowInputAudioType. Choose NORMAL when the input does not contain pre-mixed audio + audio description (AD). In this case, the encoder will use any values you provide for AudioType and FollowInputAudioType. public var audioDescriptionBroadcasterMix: MediaConvertClientTypes.AacAudioDescriptionBroadcasterMix? - /// Specify the average bitrate in bits per second. The set of valid values for this setting is: 6000, 8000, 10000, 12000, 14000, 16000, 20000, 24000, 28000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 288000, 320000, 384000, 448000, 512000, 576000, 640000, 768000, 896000, 1024000. The value you set is also constrained by the values that you choose for Profile (codecProfile), Bitrate control mode (codingMode), and Sample rate (sampleRate). Default values depend on Bitrate control mode and Profile. + /// Specify the average bitrate in bits per second. The set of valid values for this setting is: 6000, 8000, 10000, 12000, 14000, 16000, 20000, 24000, 28000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 160000, 192000, 224000, 256000, 288000, 320000, 384000, 448000, 512000, 576000, 640000, 768000, 896000, 1024000. The value you set is also constrained by the values that you choose for Profile, Bitrate control mode, and Sample rate. Default values depend on Bitrate control mode and Profile. public var bitrate: Swift.Int? /// AAC Profile. public var codecProfile: MediaConvertClientTypes.AacCodecProfile? @@ -457,7 +457,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the line operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile (DynamicRangeCompressionProfile). For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the line operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile. For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public enum Ac3DynamicRangeCompressionLine: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case filmLight case filmStandard @@ -502,7 +502,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you want to add Dolby dynamic range compression (DRC) signaling to your output stream, we recommend that you use the mode-specific settings instead of Dynamic range compression profile (DynamicRangeCompressionProfile). The mode-specific settings are Dynamic range compression profile, line mode (dynamicRangeCompressionLine) and Dynamic range compression profile, RF mode (dynamicRangeCompressionRf). Note that when you specify values for all three settings, MediaConvert ignores the value of this setting in favor of the mode-specific settings. If you do use this setting instead of the mode-specific settings, choose None (NONE) to leave out DRC signaling. Keep the default Film standard (FILM_STANDARD) to set the profile to Dolby's film standard profile for all operating modes. + /// When you want to add Dolby dynamic range compression (DRC) signaling to your output stream, we recommend that you use the mode-specific settings instead of Dynamic range compression profile. The mode-specific settings are Dynamic range compression profile, line mode and Dynamic range compression profile, RF mode. Note that when you specify values for all three settings, MediaConvert ignores the value of this setting in favor of the mode-specific settings. If you do use this setting instead of the mode-specific settings, choose None to leave out DRC signaling. Keep the default Film standard to set the profile to Dolby's film standard profile for all operating modes. public enum Ac3DynamicRangeCompressionProfile: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case filmStandard case `none` @@ -535,7 +535,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the RF operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile (DynamicRangeCompressionProfile). For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the RF operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile. For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public enum Ac3DynamicRangeCompressionRf: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case filmLight case filmStandard @@ -719,7 +719,7 @@ extension MediaConvertClientTypes.Ac3Settings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value AC3. + /// Required when you set Codec to the value AC3. public struct Ac3Settings: Swift.Equatable { /// Specify the average bitrate in bits per second. The bitrate that you specify must be a multiple of 8000 within the allowed minimum and maximum values. Leave blank to use the default bitrate for the coding mode you select according ETSI TS 102 366. Valid bitrates for coding mode 1/0: Default: 96000. Minimum: 64000. Maximum: 128000. Valid bitrates for coding mode 1/1: Default: 192000. Minimum: 128000. Maximum: 384000. Valid bitrates for coding mode 2/0: Default: 192000. Minimum: 128000. Maximum: 384000. Valid bitrates for coding mode 3/2 with FLE: Default: 384000. Minimum: 384000. Maximum: 640000. public var bitrate: Swift.Int? @@ -729,11 +729,11 @@ extension MediaConvertClientTypes { public var codingMode: MediaConvertClientTypes.Ac3CodingMode? /// Sets the dialnorm for the output. If blank and input audio is Dolby Digital, dialnorm will be passed through. public var dialnorm: Swift.Int? - /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the line operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile (DynamicRangeCompressionProfile). For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the line operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile. For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public var dynamicRangeCompressionLine: MediaConvertClientTypes.Ac3DynamicRangeCompressionLine? - /// When you want to add Dolby dynamic range compression (DRC) signaling to your output stream, we recommend that you use the mode-specific settings instead of Dynamic range compression profile (DynamicRangeCompressionProfile). The mode-specific settings are Dynamic range compression profile, line mode (dynamicRangeCompressionLine) and Dynamic range compression profile, RF mode (dynamicRangeCompressionRf). Note that when you specify values for all three settings, MediaConvert ignores the value of this setting in favor of the mode-specific settings. If you do use this setting instead of the mode-specific settings, choose None (NONE) to leave out DRC signaling. Keep the default Film standard (FILM_STANDARD) to set the profile to Dolby's film standard profile for all operating modes. + /// When you want to add Dolby dynamic range compression (DRC) signaling to your output stream, we recommend that you use the mode-specific settings instead of Dynamic range compression profile. The mode-specific settings are Dynamic range compression profile, line mode and Dynamic range compression profile, RF mode. Note that when you specify values for all three settings, MediaConvert ignores the value of this setting in favor of the mode-specific settings. If you do use this setting instead of the mode-specific settings, choose None to leave out DRC signaling. Keep the default Film standard to set the profile to Dolby's film standard profile for all operating modes. public var dynamicRangeCompressionProfile: MediaConvertClientTypes.Ac3DynamicRangeCompressionProfile? - /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the RF operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile (DynamicRangeCompressionProfile). For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the RF operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile. For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public var dynamicRangeCompressionRf: MediaConvertClientTypes.Ac3DynamicRangeCompressionRf? /// Applies a 120Hz lowpass filter to the LFE channel prior to encoding. Only valid with 3_2_LFE coding mode. public var lfeFilter: MediaConvertClientTypes.Ac3LfeFilter? @@ -1029,7 +1029,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// This setting only applies to H.264, H.265, and MPEG2 outputs. Use Insert AFD signaling (AfdSignaling) to specify whether the service includes AFD values in the output video data and what those values are. * Choose None to remove all AFD values from this output. * Choose Fixed to ignore input AFD values and instead encode the value specified in the job. * Choose Auto to calculate output AFD values based on the input AFD scaler data. + /// This setting only applies to H.264, H.265, and MPEG2 outputs. Use Insert AFD signaling to specify whether the service includes AFD values in the output video data and what those values are. * Choose None to remove all AFD values from this output. * Choose Fixed to ignore input AFD values and instead encode the value specified in the job. * Choose Auto to calculate output AFD values based on the input AFD scaler data. public enum AfdSignaling: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case fixed @@ -1096,9 +1096,9 @@ extension MediaConvertClientTypes.AiffSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value AIFF. + /// Required when you set Codec to the value AIFF. public struct AiffSettings: Swift.Equatable { - /// Specify Bit depth (BitDepth), in bits per sample, to choose the encoding quality for this audio track. + /// Specify Bit depth, in bits per sample, to choose the encoding quality for this audio track. public var bitDepth: Swift.Int? /// Specify the number of channels in this output audio track. Valid values are 1 and even numbers up to 64. For example, 1, 2, 4, 6, and so on, up to 64. public var channels: Swift.Int? @@ -1208,7 +1208,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert (UPCONVERT), MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. + /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert, MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. public enum AncillaryConvert608To708: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case upconvert @@ -1274,7 +1274,7 @@ extension MediaConvertClientTypes.AncillarySourceSettings: Swift.Codable { extension MediaConvertClientTypes { /// Settings for ancillary captions source. public struct AncillarySourceSettings: Swift.Equatable { - /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert (UPCONVERT), MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. + /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert, MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. public var convert608To708: MediaConvertClientTypes.AncillaryConvert608To708? /// Specifies the 608 channel number in the ancillary data track from which to extract captions. Unused for passthrough. public var sourceAncillaryChannelNumber: Swift.Int? @@ -1543,7 +1543,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the audio codec for this output. Note that the option Dolby Digital passthrough (PASSTHROUGH) applies only to Dolby Digital and Dolby Digital Plus audio inputs. Make sure that you choose a codec that's supported with your output container: https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers.html#reference-codecs-containers-output-audio For audio-only outputs, make sure that both your input audio codec and your output audio codec are supported for audio-only workflows. For more information, see: https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers-input.html#reference-codecs-containers-input-audio-only and https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers.html#audio-only-output + /// Choose the audio codec for this output. Note that the option Dolby Digital passthrough applies only to Dolby Digital and Dolby Digital Plus audio inputs. Make sure that you choose a codec that's supported with your output container: https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers.html#reference-codecs-containers-output-audio For audio-only outputs, make sure that both your input audio codec and your output audio codec are supported for audio-only workflows. For more information, see: https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers-input.html#reference-codecs-containers-input-audio-only and https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers.html#audio-only-output public enum AudioCodec: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case aac case ac3 @@ -1684,19 +1684,19 @@ extension MediaConvertClientTypes.AudioCodecSettings: Swift.Codable { extension MediaConvertClientTypes { /// Settings related to audio encoding. The settings in this group vary depending on the value that you choose for your audio codec. public struct AudioCodecSettings: Swift.Equatable { - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value AAC. The service accepts one of two mutually exclusive groups of AAC settings--VBR and CBR. To select one of these modes, set the value of Bitrate control mode (rateControlMode) to "VBR" or "CBR". In VBR mode, you control the audio quality with the setting VBR quality (vbrQuality). In CBR mode, you use the setting Bitrate (bitrate). Defaults and valid values depend on the rate control mode. + /// Required when you set Codec to the value AAC. The service accepts one of two mutually exclusive groups of AAC settings--VBR and CBR. To select one of these modes, set the value of Bitrate control mode to "VBR" or "CBR". In VBR mode, you control the audio quality with the setting VBR quality. In CBR mode, you use the setting Bitrate. Defaults and valid values depend on the rate control mode. public var aacSettings: MediaConvertClientTypes.AacSettings? - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value AC3. + /// Required when you set Codec to the value AC3. public var ac3Settings: MediaConvertClientTypes.Ac3Settings? - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value AIFF. + /// Required when you set Codec to the value AIFF. public var aiffSettings: MediaConvertClientTypes.AiffSettings? - /// Choose the audio codec for this output. Note that the option Dolby Digital passthrough (PASSTHROUGH) applies only to Dolby Digital and Dolby Digital Plus audio inputs. Make sure that you choose a codec that's supported with your output container: https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers.html#reference-codecs-containers-output-audio For audio-only outputs, make sure that both your input audio codec and your output audio codec are supported for audio-only workflows. For more information, see: https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers-input.html#reference-codecs-containers-input-audio-only and https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers.html#audio-only-output + /// Choose the audio codec for this output. Note that the option Dolby Digital passthrough applies only to Dolby Digital and Dolby Digital Plus audio inputs. Make sure that you choose a codec that's supported with your output container: https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers.html#reference-codecs-containers-output-audio For audio-only outputs, make sure that both your input audio codec and your output audio codec are supported for audio-only workflows. For more information, see: https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers-input.html#reference-codecs-containers-input-audio-only and https://docs.aws.amazon.com/mediaconvert/latest/ug/reference-codecs-containers.html#audio-only-output public var codec: MediaConvertClientTypes.AudioCodec? - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value EAC3_ATMOS. + /// Required when you set Codec to the value EAC3_ATMOS. public var eac3AtmosSettings: MediaConvertClientTypes.Eac3AtmosSettings? - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value EAC3. + /// Required when you set Codec to the value EAC3. public var eac3Settings: MediaConvertClientTypes.Eac3Settings? - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value MP2. + /// Required when you set Codec to the value MP2. public var mp2Settings: MediaConvertClientTypes.Mp2Settings? /// Required when you set Codec, under AudioDescriptions>CodecSettings, to the value MP3. public var mp3Settings: MediaConvertClientTypes.Mp3Settings? @@ -1704,7 +1704,7 @@ extension MediaConvertClientTypes { public var opusSettings: MediaConvertClientTypes.OpusSettings? /// Required when you set Codec, under AudioDescriptions>CodecSettings, to the value Vorbis. public var vorbisSettings: MediaConvertClientTypes.VorbisSettings? - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value WAV. + /// Required when you set Codec to the value WAV. public var wavSettings: MediaConvertClientTypes.WavSettings? public init( @@ -1864,11 +1864,11 @@ extension MediaConvertClientTypes { public var audioTypeControl: MediaConvertClientTypes.AudioTypeControl? /// Settings related to audio encoding. The settings in this group vary depending on the value that you choose for your audio codec. public var codecSettings: MediaConvertClientTypes.AudioCodecSettings? - /// Specify the language for this audio output track. The service puts this language code into your output audio track when you set Language code control (AudioLanguageCodeControl) to Use configured (USE_CONFIGURED). The service also uses your specified custom language code when you set Language code control (AudioLanguageCodeControl) to Follow input (FOLLOW_INPUT), but your input file doesn't specify a language code. For all outputs, you can use an ISO 639-2 or ISO 639-3 code. For streaming outputs, you can also use any other code in the full RFC-5646 specification. Streaming outputs are those that are in one of the following output groups: CMAF, DASH ISO, Apple HLS, or Microsoft Smooth Streaming. + /// Specify the language for this audio output track. The service puts this language code into your output audio track when you set Language code control to Use configured. The service also uses your specified custom language code when you set Language code control to Follow input, but your input file doesn't specify a language code. For all outputs, you can use an ISO 639-2 or ISO 639-3 code. For streaming outputs, you can also use any other code in the full RFC-5646 specification. Streaming outputs are those that are in one of the following output groups: CMAF, DASH ISO, Apple HLS, or Microsoft Smooth Streaming. public var customLanguageCode: Swift.String? /// Indicates the language of the audio output track. The ISO 639 language specified in the 'Language Code' drop down will be used when 'Follow Input Language Code' is not selected or when 'Follow Input Language Code' is selected but there is no ISO 639 language code specified by the input. public var languageCode: MediaConvertClientTypes.LanguageCode? - /// Specify which source for language code takes precedence for this audio track. When you choose Follow input (FOLLOW_INPUT), the service uses the language code from the input track if it's present. If there's no languge code on the input track, the service uses the code that you specify in the setting Language code (languageCode or customLanguageCode). When you choose Use configured (USE_CONFIGURED), the service uses the language code that you specify. + /// Specify which source for language code takes precedence for this audio track. When you choose Follow input, the service uses the language code from the input track if it's present. If there's no languge code on the input track, the service uses the code that you specify in the setting Language code. When you choose Use configured, the service uses the language code that you specify. public var languageCodeControl: MediaConvertClientTypes.AudioLanguageCodeControl? /// Advanced audio remixing settings. public var remixSettings: MediaConvertClientTypes.RemixSettings? @@ -1945,7 +1945,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify which source for language code takes precedence for this audio track. When you choose Follow input (FOLLOW_INPUT), the service uses the language code from the input track if it's present. If there's no languge code on the input track, the service uses the code that you specify in the setting Language code (languageCode or customLanguageCode). When you choose Use configured (USE_CONFIGURED), the service uses the language code that you specify. + /// Specify which source for language code takes precedence for this audio track. When you choose Follow input, the service uses the language code from the input track if it's present. If there's no languge code on the input track, the service uses the code that you specify in the setting Language code. When you choose Use configured, the service uses the language code that you specify. public enum AudioLanguageCodeControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case followInput case useConfigured @@ -2183,7 +2183,7 @@ extension MediaConvertClientTypes { public var loudnessLogging: MediaConvertClientTypes.AudioNormalizationLoudnessLogging? /// If set to TRUE_PEAK, calculate and log the TruePeak for each output's audio track loudness. public var peakCalculation: MediaConvertClientTypes.AudioNormalizationPeakCalculation? - /// When you use Audio normalization (AudioNormalizationSettings), optionally use this setting to specify a target loudness. If you don't specify a value here, the encoder chooses a value for you, based on the algorithm that you choose for Algorithm (algorithm). If you choose algorithm 1770-1, the encoder will choose -24 LKFS; otherwise, the encoder will choose -23 LKFS. + /// When you use Audio normalization, optionally use this setting to specify a target loudness. If you don't specify a value here, the encoder chooses a value for you, based on the algorithm that you choose for Algorithm. If you choose algorithm 1770-1, the encoder will choose -24 LKFS; otherwise, the encoder will choose -23 LKFS. public var targetLkfs: Swift.Double? /// Specify the True-peak limiter threshold in decibels relative to full scale (dBFS). The peak inter-audio sample loudness in your output will be limited to the value that you specify, without affecting the overall target LKFS. Enter a value from 0 to -8. Leave blank to use the default value 0. public var truePeakLimiterThreshold: Swift.Double? @@ -2320,7 +2320,7 @@ extension MediaConvertClientTypes.AudioSelector: Swift.Codable { } extension MediaConvertClientTypes { - /// Use Audio selectors (AudioSelectors) to specify a track or set of tracks from the input that you will use in your outputs. You can use multiple Audio selectors per input. + /// Use Audio selectors to specify a track or set of tracks from the input that you will use in your outputs. You can use multiple Audio selectors per input. public struct AudioSelector: Swift.Equatable { /// Apply audio timing corrections to help synchronize audio and video in your output. To apply timing corrections, your input must meet the following requirements: * Container: MP4, or MOV, with an accurate time-to-sample (STTS) table. * Audio track: AAC. Choose from the following audio timing correction settings: * Disabled (Default): Apply no correction. * Auto: Recommended for most inputs. MediaConvert analyzes the audio timing in your input and determines which correction setting to use, if needed. * Track: Adjust the duration of each audio frame by a constant amount to align the audio track length with STTS duration. Track-level correction does not affect pitch, and is recommended for tonal audio content such as music. * Frame: Adjust the duration of each audio frame by a variable amount to align audio frames with STTS timestamps. No corrections are made to already-aligned frames. Frame-level correction may affect the pitch of corrected frames, and is recommended for atonal audio content such as speech or percussion. public var audioDurationCorrection: MediaConvertClientTypes.AudioDurationCorrection? @@ -2338,13 +2338,13 @@ extension MediaConvertClientTypes { public var offset: Swift.Int? /// Selects a specific PID from within an audio source (e.g. 257 selects PID 0x101). public var pids: [Swift.Int]? - /// Use this setting for input streams that contain Dolby E, to have the service extract specific program data from the track. To select multiple programs, create multiple selectors with the same Track and different Program numbers. In the console, this setting is visible when you set Selector type to Track. Choose the program number from the dropdown list. If you are sending a JSON file, provide the program ID, which is part of the audio metadata. If your input file has incorrect metadata, you can choose All channels instead of a program number to have the service ignore the program IDs and include all the programs in the track. + /// Use this setting for input streams that contain Dolby E, to have the service extract specific program data from the track. To select multiple programs, create multiple selectors with the same Track and different Program numbers. In the console, this setting is visible when you set Selector type to Track. Choose the program number from the dropdown list. If your input file has incorrect metadata, you can choose All channels instead of a program number to have the service ignore the program IDs and include all the programs in the track. public var programSelection: Swift.Int? /// Use these settings to reorder the audio channels of one input to match those of another input. This allows you to combine the two files into a single output, one after the other. public var remixSettings: MediaConvertClientTypes.RemixSettings? /// Specifies the type of the audio selector. public var selectorType: MediaConvertClientTypes.AudioSelectorType? - /// Identify a track from the input audio to include in this selector by entering the track index number. To include several tracks in a single audio selector, specify multiple tracks as follows. Using the console, enter a comma-separated list. For examle, type "1,2,3" to include tracks 1 through 3. Specifying directly in your JSON job file, provide the track numbers in an array. For example, "tracks": [1,2,3]. + /// Identify a track from the input audio to include in this selector by entering the track index number. To include several tracks in a single audio selector, specify multiple tracks as follows. Using the console, enter a comma-separated list. For example, type "1,2,3" to include tracks 1 through 3. public var tracks: [Swift.Int]? public init( @@ -2411,7 +2411,7 @@ extension MediaConvertClientTypes.AudioSelectorGroup: Swift.Codable { } extension MediaConvertClientTypes { - /// Use audio selector groups to combine multiple sidecar audio inputs so that you can assign them to a single output audio tab (AudioDescription). Note that, if you're working with embedded audio, it's simpler to assign multiple input tracks into a single audio selector rather than use an audio selector group. + /// Use audio selector groups to combine multiple sidecar audio inputs so that you can assign them to a single output audio tab. Note that, if you're working with embedded audio, it's simpler to assign multiple input tracks into a single audio selector rather than use an audio selector group. public struct AudioSelectorGroup: Swift.Equatable { /// Name of an Audio Selector within the same input to include in the group. Audio selector names are standardized, based on their order within the input (e.g., "Audio Selector 1"). The audio selector name parameter can be repeated to add any number of audio selectors to the group. public var audioSelectorNames: [Swift.String]? @@ -2710,7 +2710,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the strength of any adaptive quantization filters that you enable. The value that you choose here applies to Spatial adaptive quantization (spatialAdaptiveQuantization). + /// Specify the strength of any adaptive quantization filters that you enable. The value that you choose here applies to Spatial adaptive quantization. public enum Av1AdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case high case higher @@ -2755,7 +2755,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the Bit depth (Av1BitDepth). You can choose 8-bit (BIT_8) or 10-bit (BIT_10). + /// Specify the Bit depth. You can choose 8-bit or 10-bit. public enum Av1BitDepth: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bit10 case bit8 @@ -2788,7 +2788,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// Use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public enum Av1FramerateControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -2882,9 +2882,9 @@ extension MediaConvertClientTypes.Av1QvbrSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings for quality-defined variable bitrate encoding with the AV1 codec. Use these settings only when you set QVBR for Rate control mode (RateControlMode). + /// Settings for quality-defined variable bitrate encoding with the AV1 codec. Use these settings only when you set QVBR for Rate control mode. public struct Av1QvbrSettings: Swift.Equatable { - /// Use this setting only when you set Rate control mode (RateControlMode) to QVBR. Specify the target quality level for this output. MediaConvert determines the right number of bits to use for each part of the video to maintain the video quality that you specify. When you keep the default value, AUTO, MediaConvert picks a quality level for you, based on characteristics of your input video. If you prefer to specify a quality level, specify a number from 1 through 10. Use higher numbers for greater quality. Level 10 results in nearly lossless compression. The quality level for most broadcast-quality transcodes is between 6 and 9. Optionally, to specify a value between whole numbers, also provide a value for the setting qvbrQualityLevelFineTune. For example, if you want your QVBR quality level to be 7.33, set qvbrQualityLevel to 7 and set qvbrQualityLevelFineTune to .33. + /// Use this setting only when you set Rate control mode to QVBR. Specify the target quality level for this output. MediaConvert determines the right number of bits to use for each part of the video to maintain the video quality that you specify. When you keep the default value, AUTO, MediaConvert picks a quality level for you, based on characteristics of your input video. If you prefer to specify a quality level, specify a number from 1 through 10. Use higher numbers for greater quality. Level 10 results in nearly lossless compression. The quality level for most broadcast-quality transcodes is between 6 and 9. Optionally, to specify a value between whole numbers, also provide a value for the setting qvbrQualityLevelFineTune. For example, if you want your QVBR quality level to be 7.33, set qvbrQualityLevel to 7 and set qvbrQualityLevelFineTune to .33. public var qvbrQualityLevel: Swift.Int? /// Optional. Specify a value here to set the QVBR quality to a level that is between whole numbers. For example, if you want your QVBR quality level to be 7.33, set qvbrQualityLevel to 7 and set qvbrQualityLevelFineTune to .33. MediaConvert rounds your QVBR quality level to the nearest third of a whole number. For example, if you set qvbrQualityLevel to 7 and you set qvbrQualityLevelFineTune to .25, your actual QVBR quality level is 7.33. public var qvbrQualityLevelFineTune: Swift.Double? @@ -3025,11 +3025,11 @@ extension MediaConvertClientTypes.Av1Settings: Swift.Codable { extension MediaConvertClientTypes { /// Required when you set Codec, under VideoDescription>CodecSettings to the value AV1. public struct Av1Settings: Swift.Equatable { - /// Specify the strength of any adaptive quantization filters that you enable. The value that you choose here applies to Spatial adaptive quantization (spatialAdaptiveQuantization). + /// Specify the strength of any adaptive quantization filters that you enable. The value that you choose here applies to Spatial adaptive quantization. public var adaptiveQuantization: MediaConvertClientTypes.Av1AdaptiveQuantization? - /// Specify the Bit depth (Av1BitDepth). You can choose 8-bit (BIT_8) or 10-bit (BIT_10). + /// Specify the Bit depth. You can choose 8-bit or 10-bit. public var bitDepth: MediaConvertClientTypes.Av1BitDepth? - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// Use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public var framerateControl: MediaConvertClientTypes.Av1FramerateControl? /// Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. public var framerateConversionAlgorithm: MediaConvertClientTypes.Av1FramerateConversionAlgorithm? @@ -3043,13 +3043,13 @@ extension MediaConvertClientTypes { public var maxBitrate: Swift.Int? /// Specify from the number of B-frames, in the range of 0-15. For AV1 encoding, we recommend using 7 or 15. Choose a larger number for a lower bitrate and smaller file size; choose a smaller number for better video quality. public var numberBFramesBetweenReferenceFrames: Swift.Int? - /// Settings for quality-defined variable bitrate encoding with the H.265 codec. Use these settings only when you set QVBR for Rate control mode (RateControlMode). + /// Settings for quality-defined variable bitrate encoding with the H.265 codec. Use these settings only when you set QVBR for Rate control mode. public var qvbrSettings: MediaConvertClientTypes.Av1QvbrSettings? /// 'With AV1 outputs, for rate control mode, MediaConvert supports only quality-defined variable bitrate (QVBR). You can''t use CBR or VBR.' public var rateControlMode: MediaConvertClientTypes.Av1RateControlMode? /// Specify the number of slices per picture. This value must be 1, 2, 4, 8, 16, or 32. For progressive pictures, this value must be less than or equal to the number of macroblock rows. For interlaced pictures, this value must be less than or equal to half the number of macroblock rows. public var slices: Swift.Int? - /// Keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization (adaptiveQuantization) depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. + /// Keep the default value, Enabled, to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. public var spatialAdaptiveQuantization: MediaConvertClientTypes.Av1SpatialAdaptiveQuantization? public init( @@ -3087,7 +3087,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization (adaptiveQuantization) depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. + /// Keep the default value, Enabled, to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. public enum Av1SpatialAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -3194,7 +3194,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public enum AvcIntraFramerateControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -3263,7 +3263,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public enum AvcIntraInterlaceMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bottomField case followBottomField @@ -3305,7 +3305,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public enum AvcIntraScanTypeConversionMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case interlaced case interlacedOptimize @@ -3415,9 +3415,9 @@ extension MediaConvertClientTypes { public struct AvcIntraSettings: Swift.Equatable { /// Specify the AVC-Intra class of your output. The AVC-Intra class selection determines the output video bit rate depending on the frame rate of the output. Outputs with higher class values have higher bitrates and improved image quality. Note that for Class 4K/2K, MediaConvert supports only 4:2:2 chroma subsampling. public var avcIntraClass: MediaConvertClientTypes.AvcIntraClass? - /// Optional when you set AVC-Intra class (avcIntraClass) to Class 4K/2K (CLASS_4K_2K). When you set AVC-Intra class to a different value, this object isn't allowed. + /// Optional when you set AVC-Intra class to Class 4K/2K. When you set AVC-Intra class to a different value, this object isn't allowed. public var avcIntraUhdSettings: MediaConvertClientTypes.AvcIntraUhdSettings? - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public var framerateControl: MediaConvertClientTypes.AvcIntraFramerateControl? /// Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. public var framerateConversionAlgorithm: MediaConvertClientTypes.AvcIntraFramerateConversionAlgorithm? @@ -3425,13 +3425,13 @@ extension MediaConvertClientTypes { public var framerateDenominator: Swift.Int? /// When you use the API for transcode jobs that use frame rate conversion, specify the frame rate as a fraction. For example, 24000 / 1001 = 23.976 fps. Use FramerateNumerator to specify the numerator of this fraction. In this example, use 24000 for the value of FramerateNumerator. When you use the console for transcode jobs that use frame rate conversion, provide the value as a decimal number for Framerate. In this example, specify 23.976. public var framerateNumerator: Swift.Int? - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public var interlaceMode: MediaConvertClientTypes.AvcIntraInterlaceMode? - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public var scanTypeConversionMode: MediaConvertClientTypes.AvcIntraScanTypeConversionMode? - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. public var slowPal: MediaConvertClientTypes.AvcIntraSlowPal? - /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine (HARD) to create a smoother picture. When you keep the default value, None (NONE), MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. + /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine to create a smoother picture. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. public var telecine: MediaConvertClientTypes.AvcIntraTelecine? public init( @@ -3463,7 +3463,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. public enum AvcIntraSlowPal: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -3496,7 +3496,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine (HARD) to create a smoother picture. When you keep the default value, None (NONE), MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. + /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine to create a smoother picture. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. public enum AvcIntraTelecine: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case hard case `none` @@ -3529,7 +3529,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how many transcoding passes MediaConvert does with your video. When you choose Multi-pass (MULTI_PASS), your video quality is better and your output bitrate is more accurate. That is, the actual bitrate of your output is closer to the target bitrate defined in the specification. When you choose Single-pass (SINGLE_PASS), your encoding time is faster. The default behavior is Single-pass (SINGLE_PASS). + /// Optional. Use Quality tuning level to choose how many transcoding passes MediaConvert does with your video. When you choose Multi-pass, your video quality is better and your output bitrate is more accurate. That is, the actual bitrate of your output is closer to the target bitrate defined in the specification. When you choose Single-pass, your encoding time is faster. The default behavior is Single-pass. public enum AvcIntraUhdQualityTuningLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case multiPass case singlePass @@ -3581,9 +3581,9 @@ extension MediaConvertClientTypes.AvcIntraUhdSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Optional when you set AVC-Intra class (avcIntraClass) to Class 4K/2K (CLASS_4K_2K). When you set AVC-Intra class to a different value, this object isn't allowed. + /// Optional when you set AVC-Intra class to Class 4K/2K. When you set AVC-Intra class to a different value, this object isn't allowed. public struct AvcIntraUhdSettings: Swift.Equatable { - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how many transcoding passes MediaConvert does with your video. When you choose Multi-pass (MULTI_PASS), your video quality is better and your output bitrate is more accurate. That is, the actual bitrate of your output is closer to the target bitrate defined in the specification. When you choose Single-pass (SINGLE_PASS), your encoding time is faster. The default behavior is Single-pass (SINGLE_PASS). + /// Optional. Use Quality tuning level to choose how many transcoding passes MediaConvert does with your video. When you choose Multi-pass, your video quality is better and your output bitrate is more accurate. That is, the actual bitrate of your output is closer to the target bitrate defined in the specification. When you choose Single-pass, your encoding time is faster. The default behavior is Single-pass. public var qualityTuningLevel: MediaConvertClientTypes.AvcIntraUhdQualityTuningLevel? public init( @@ -3817,7 +3817,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Set Style passthrough (StylePassthrough) to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use default settings: white text with black outlining, bottom-center positioning, and automatic sizing. Whether you set Style passthrough to enabled or not, you can also choose to manually override any of the individual style and position settings. + /// Set Style passthrough to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use default settings: white text with black outlining, bottom-center positioning, and automatic sizing. Whether you set Style passthrough to enabled or not, you can also choose to manually override any of the individual style and position settings. public enum BurnInSubtitleStylePassthrough: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -3989,49 +3989,49 @@ extension MediaConvertClientTypes.BurninDestinationSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Burn-in is a captions delivery method, rather than a captions format. Burn-in writes the captions directly on your video frames, replacing pixels of video content with the captions. Set up burn-in captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/burn-in-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to BURN_IN. + /// Burn-in is a captions delivery method, rather than a captions format. Burn-in writes the captions directly on your video frames, replacing pixels of video content with the captions. Set up burn-in captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/burn-in-output-captions.html. public struct BurninDestinationSettings: Swift.Equatable { /// Specify the alignment of your captions. If no explicit x_position is provided, setting alignment to centered will placethe captions at the bottom center of the output. Similarly, setting a left alignment willalign captions to the bottom left of the output. If x and y positions are given in conjunction with the alignment parameter, the font will be justified (either left or centered) relative to those coordinates. public var alignment: MediaConvertClientTypes.BurninSubtitleAlignment? - /// Ignore this setting unless Style passthrough (StylePassthrough) is set to Enabled and Font color (FontColor) set to Black, Yellow, Red, Green, Blue, or Hex. Use Apply font color (ApplyFontColor) for additional font color controls. When you choose White text only (WHITE_TEXT_ONLY), or leave blank, your font color setting only applies to white text in your input captions. For example, if your font color setting is Yellow, and your input captions have red and white text, your output captions will have red and yellow text. When you choose ALL_TEXT, your font color setting applies to all of your output captions text. + /// Ignore this setting unless Style passthrough is set to Enabled and Font color set to Black, Yellow, Red, Green, Blue, or Hex. Use Apply font color for additional font color controls. When you choose White text only, or leave blank, your font color setting only applies to white text in your input captions. For example, if your font color setting is Yellow, and your input captions have red and white text, your output captions will have red and yellow text. When you choose ALL_TEXT, your font color setting applies to all of your output captions text. public var applyFontColor: MediaConvertClientTypes.BurninSubtitleApplyFontColor? - /// Specify the color of the rectangle behind the captions. Leave background color (BackgroundColor) blank and set Style passthrough (StylePassthrough) to enabled to use the background color data from your input captions, if present. + /// Specify the color of the rectangle behind the captions. Leave background color blank and set Style passthrough to enabled to use the background color data from your input captions, if present. public var backgroundColor: MediaConvertClientTypes.BurninSubtitleBackgroundColor? - /// Specify the opacity of the background rectangle. Enter a value from 0 to 255, where 0 is transparent and 255 is opaque. If Style passthrough (StylePassthrough) is set to enabled, leave blank to pass through the background style information in your input captions to your output captions. If Style passthrough is set to disabled, leave blank to use a value of 0 and remove all backgrounds from your output captions. + /// Specify the opacity of the background rectangle. Enter a value from 0 to 255, where 0 is transparent and 255 is opaque. If Style passthrough is set to enabled, leave blank to pass through the background style information in your input captions to your output captions. If Style passthrough is set to disabled, leave blank to use a value of 0 and remove all backgrounds from your output captions. public var backgroundOpacity: Swift.Int? - /// Specify the font that you want the service to use for your burn in captions when your input captions specify a font that MediaConvert doesn't support. When you set Fallback font (FallbackFont) to best match (BEST_MATCH), or leave blank, MediaConvert uses a supported font that most closely matches the font that your input captions specify. When there are multiple unsupported fonts in your input captions, MediaConvert matches each font with the supported font that matches best. When you explicitly choose a replacement font, MediaConvert uses that font to replace all unsupported fonts from your input. + /// Specify the font that you want the service to use for your burn in captions when your input captions specify a font that MediaConvert doesn't support. When you set Fallback font to best match, or leave blank, MediaConvert uses a supported font that most closely matches the font that your input captions specify. When there are multiple unsupported fonts in your input captions, MediaConvert matches each font with the supported font that matches best. When you explicitly choose a replacement font, MediaConvert uses that font to replace all unsupported fonts from your input. public var fallbackFont: MediaConvertClientTypes.BurninSubtitleFallbackFont? - /// Specify the color of the burned-in captions text. Leave Font color (FontColor) blank and set Style passthrough (StylePassthrough) to enabled to use the font color data from your input captions, if present. + /// Specify the color of the burned-in captions text. Leave Font color blank and set Style passthrough to enabled to use the font color data from your input captions, if present. public var fontColor: MediaConvertClientTypes.BurninSubtitleFontColor? /// Specify the opacity of the burned-in captions. 255 is opaque; 0 is transparent. public var fontOpacity: Swift.Int? - /// Specify the Font resolution (FontResolution) in DPI (dots per inch). + /// Specify the Font resolution in DPI (dots per inch). public var fontResolution: Swift.Int? - /// Set Font script (FontScript) to Automatically determined (AUTOMATIC), or leave blank, to automatically determine the font script in your input captions. Otherwise, set to Simplified Chinese (HANS) or Traditional Chinese (HANT) if your input font script uses Simplified or Traditional Chinese. + /// Set Font script to Automatically determined, or leave blank, to automatically determine the font script in your input captions. Otherwise, set to Simplified Chinese (HANS) or Traditional Chinese (HANT) if your input font script uses Simplified or Traditional Chinese. public var fontScript: MediaConvertClientTypes.FontScript? - /// Specify the Font size (FontSize) in pixels. Must be a positive integer. Set to 0, or leave blank, for automatic font size. + /// Specify the Font size in pixels. Must be a positive integer. Set to 0, or leave blank, for automatic font size. public var fontSize: Swift.Int? /// Ignore this setting unless your Font color is set to Hex. Enter either six or eight hexidecimal digits, representing red, green, and blue, with two optional extra digits for alpha. For example a value of 1122AABB is a red value of 0x11, a green value of 0x22, a blue value of 0xAA, and an alpha value of 0xBB. public var hexFontColor: Swift.String? - /// Specify font outline color. Leave Outline color (OutlineColor) blank and set Style passthrough (StylePassthrough) to enabled to use the font outline color data from your input captions, if present. + /// Specify font outline color. Leave Outline color blank and set Style passthrough to enabled to use the font outline color data from your input captions, if present. public var outlineColor: MediaConvertClientTypes.BurninSubtitleOutlineColor? - /// Specify the Outline size (OutlineSize) of the caption text, in pixels. Leave Outline size blank and set Style passthrough (StylePassthrough) to enabled to use the outline size data from your input captions, if present. + /// Specify the Outline size of the caption text, in pixels. Leave Outline size blank and set Style passthrough to enabled to use the outline size data from your input captions, if present. public var outlineSize: Swift.Int? - /// Specify the color of the shadow cast by the captions. Leave Shadow color (ShadowColor) blank and set Style passthrough (StylePassthrough) to enabled to use the shadow color data from your input captions, if present. + /// Specify the color of the shadow cast by the captions. Leave Shadow color blank and set Style passthrough to enabled to use the shadow color data from your input captions, if present. public var shadowColor: MediaConvertClientTypes.BurninSubtitleShadowColor? - /// Specify the opacity of the shadow. Enter a value from 0 to 255, where 0 is transparent and 255 is opaque. If Style passthrough (StylePassthrough) is set to Enabled, leave Shadow opacity (ShadowOpacity) blank to pass through the shadow style information in your input captions to your output captions. If Style passthrough is set to disabled, leave blank to use a value of 0 and remove all shadows from your output captions. + /// Specify the opacity of the shadow. Enter a value from 0 to 255, where 0 is transparent and 255 is opaque. If Style passthrough is set to Enabled, leave Shadow opacity blank to pass through the shadow style information in your input captions to your output captions. If Style passthrough is set to disabled, leave blank to use a value of 0 and remove all shadows from your output captions. public var shadowOpacity: Swift.Int? /// Specify the horizontal offset of the shadow, relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels to the left. public var shadowXOffset: Swift.Int? - /// Specify the vertical offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels above the text. Leave Shadow y-offset (ShadowYOffset) blank and set Style passthrough (StylePassthrough) to enabled to use the shadow y-offset data from your input captions, if present. + /// Specify the vertical offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels above the text. Leave Shadow y-offset blank and set Style passthrough to enabled to use the shadow y-offset data from your input captions, if present. public var shadowYOffset: Swift.Int? - /// Set Style passthrough (StylePassthrough) to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use default settings: white text with black outlining, bottom-center positioning, and automatic sizing. Whether you set Style passthrough to enabled or not, you can also choose to manually override any of the individual style and position settings. + /// Set Style passthrough to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use default settings: white text with black outlining, bottom-center positioning, and automatic sizing. Whether you set Style passthrough to enabled or not, you can also choose to manually override any of the individual style and position settings. public var stylePassthrough: MediaConvertClientTypes.BurnInSubtitleStylePassthrough? - /// Specify whether the text spacing (TeletextSpacing) in your captions is set by the captions grid, or varies depending on letter width. Choose fixed grid (FIXED_GRID) to conform to the spacing specified in the captions file more accurately. Choose proportional (PROPORTIONAL) to make the text easier to read for closed captions. + /// Specify whether the text spacing in your captions is set by the captions grid, or varies depending on letter width. Choose fixed grid to conform to the spacing specified in the captions file more accurately. Choose proportional to make the text easier to read for closed captions. public var teletextSpacing: MediaConvertClientTypes.BurninSubtitleTeletextSpacing? - /// Specify the horizontal position (XPosition) of the captions, relative to the left side of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the left of the output. If no explicit x_position is provided, the horizontal caption position will be determined by the alignment parameter. + /// Specify the horizontal position of the captions, relative to the left side of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the left of the output. If no explicit x_position is provided, the horizontal caption position will be determined by the alignment parameter. public var xPosition: Swift.Int? - /// Specify the vertical position (YPosition) of the captions, relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit y_position is provided, the caption will be positioned towards the bottom of the output. + /// Specify the vertical position of the captions, relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit y_position is provided, the caption will be positioned towards the bottom of the output. public var yPosition: Swift.Int? public init( @@ -4121,7 +4121,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless Style passthrough (StylePassthrough) is set to Enabled and Font color (FontColor) set to Black, Yellow, Red, Green, Blue, or Hex. Use Apply font color (ApplyFontColor) for additional font color controls. When you choose White text only (WHITE_TEXT_ONLY), or leave blank, your font color setting only applies to white text in your input captions. For example, if your font color setting is Yellow, and your input captions have red and white text, your output captions will have red and yellow text. When you choose ALL_TEXT, your font color setting applies to all of your output captions text. + /// Ignore this setting unless Style passthrough is set to Enabled and Font color set to Black, Yellow, Red, Green, Blue, or Hex. Use Apply font color for additional font color controls. When you choose White text only, or leave blank, your font color setting only applies to white text in your input captions. For example, if your font color setting is Yellow, and your input captions have red and white text, your output captions will have red and yellow text. When you choose ALL_TEXT, your font color setting applies to all of your output captions text. public enum BurninSubtitleApplyFontColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case allText case whiteTextOnly @@ -4154,7 +4154,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the color of the rectangle behind the captions. Leave background color (BackgroundColor) blank and set Style passthrough (StylePassthrough) to enabled to use the background color data from your input captions, if present. + /// Specify the color of the rectangle behind the captions. Leave background color blank and set Style passthrough to enabled to use the background color data from your input captions, if present. public enum BurninSubtitleBackgroundColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case black @@ -4193,7 +4193,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the font that you want the service to use for your burn in captions when your input captions specify a font that MediaConvert doesn't support. When you set Fallback font (FallbackFont) to best match (BEST_MATCH), or leave blank, MediaConvert uses a supported font that most closely matches the font that your input captions specify. When there are multiple unsupported fonts in your input captions, MediaConvert matches each font with the supported font that matches best. When you explicitly choose a replacement font, MediaConvert uses that font to replace all unsupported fonts from your input. + /// Specify the font that you want the service to use for your burn in captions when your input captions specify a font that MediaConvert doesn't support. When you set Fallback font to best match, or leave blank, MediaConvert uses a supported font that most closely matches the font that your input captions specify. When there are multiple unsupported fonts in your input captions, MediaConvert matches each font with the supported font that matches best. When you explicitly choose a replacement font, MediaConvert uses that font to replace all unsupported fonts from your input. public enum BurninSubtitleFallbackFont: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bestMatch case monospacedSansserif @@ -4235,7 +4235,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the color of the burned-in captions text. Leave Font color (FontColor) blank and set Style passthrough (StylePassthrough) to enabled to use the font color data from your input captions, if present. + /// Specify the color of the burned-in captions text. Leave Font color blank and set Style passthrough to enabled to use the font color data from your input captions, if present. public enum BurninSubtitleFontColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case black @@ -4286,7 +4286,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify font outline color. Leave Outline color (OutlineColor) blank and set Style passthrough (StylePassthrough) to enabled to use the font outline color data from your input captions, if present. + /// Specify font outline color. Leave Outline color blank and set Style passthrough to enabled to use the font outline color data from your input captions, if present. public enum BurninSubtitleOutlineColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case black @@ -4334,7 +4334,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the color of the shadow cast by the captions. Leave Shadow color (ShadowColor) blank and set Style passthrough (StylePassthrough) to enabled to use the shadow color data from your input captions, if present. + /// Specify the color of the shadow cast by the captions. Leave Shadow color blank and set Style passthrough to enabled to use the shadow color data from your input captions, if present. public enum BurninSubtitleShadowColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case black @@ -4373,7 +4373,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether the text spacing (TeletextSpacing) in your captions is set by the captions grid, or varies depending on letter width. Choose fixed grid (FIXED_GRID) to conform to the spacing specified in the captions file more accurately. Choose proportional (PROPORTIONAL) to make the text easier to read for closed captions. + /// Specify whether the text spacing in your captions is set by the captions grid, or varies depending on letter width. Choose fixed grid to conform to the spacing specified in the captions file more accurately. Choose proportional to make the text easier to read for closed captions. public enum BurninSubtitleTeletextSpacing: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case fixedGrid @@ -4515,7 +4515,7 @@ extension MediaConvertClientTypes { public var captionSelectorName: Swift.String? /// Specify the language for this captions output track. For most captions output formats, the encoder puts this language information in the output captions metadata. If your output captions format is DVB-Sub or Burn in, the encoder uses this language information when automatically selecting the font script for rendering the captions text. For all outputs, you can use an ISO 639-2 or ISO 639-3 code. For streaming outputs, you can also use any other code in the full RFC-5646 specification. Streaming outputs are those that are in one of the following output groups: CMAF, DASH ISO, Apple HLS, or Microsoft Smooth Streaming. public var customLanguageCode: Swift.String? - /// Settings related to one captions tab on the MediaConvert console. In your job JSON, an instance of captions DestinationSettings is equivalent to one captions tab in the console. Usually, one captions tab corresponds to one output captions track. Depending on your output captions format, one tab might correspond to a set of output captions tracks. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/including-captions.html. + /// Settings related to one captions tab on the MediaConvert console. Usually, one captions tab corresponds to one output captions track. Depending on your output captions format, one tab might correspond to a set of output captions tracks. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/including-captions.html. public var destinationSettings: MediaConvertClientTypes.CaptionDestinationSettings? /// Specify the language of this captions output track. For most captions output formats, the encoder puts this language information in the output captions metadata. If your output captions format is DVB-Sub or Burn in, the encoder uses this language information to choose the font language for rendering the captions text. public var languageCode: MediaConvertClientTypes.LanguageCode? @@ -4582,7 +4582,7 @@ extension MediaConvertClientTypes { public struct CaptionDescriptionPreset: Swift.Equatable { /// Specify the language for this captions output track. For most captions output formats, the encoder puts this language information in the output captions metadata. If your output captions format is DVB-Sub or Burn in, the encoder uses this language information when automatically selecting the font script for rendering the captions text. For all outputs, you can use an ISO 639-2 or ISO 639-3 code. For streaming outputs, you can also use any other code in the full RFC-5646 specification. Streaming outputs are those that are in one of the following output groups: CMAF, DASH ISO, Apple HLS, or Microsoft Smooth Streaming. public var customLanguageCode: Swift.String? - /// Settings related to one captions tab on the MediaConvert console. In your job JSON, an instance of captions DestinationSettings is equivalent to one captions tab in the console. Usually, one captions tab corresponds to one output captions track. Depending on your output captions format, one tab might correspond to a set of output captions tracks. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/including-captions.html. + /// Settings related to one captions tab on the MediaConvert console. Usually, one captions tab corresponds to one output captions track. Depending on your output captions format, one tab might correspond to a set of output captions tracks. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/including-captions.html. public var destinationSettings: MediaConvertClientTypes.CaptionDestinationSettings? /// Specify the language of this captions output track. For most captions output formats, the encoder puts this language information in the output captions metadata. If your output captions format is DVB-Sub or Burn in, the encoder uses this language information to choose the font language for rendering the captions text. public var languageCode: MediaConvertClientTypes.LanguageCode? @@ -4679,27 +4679,27 @@ extension MediaConvertClientTypes.CaptionDestinationSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to one captions tab on the MediaConvert console. In your job JSON, an instance of captions DestinationSettings is equivalent to one captions tab in the console. Usually, one captions tab corresponds to one output captions track. Depending on your output captions format, one tab might correspond to a set of output captions tracks. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/including-captions.html. + /// Settings related to one captions tab on the MediaConvert console. Usually, one captions tab corresponds to one output captions track. Depending on your output captions format, one tab might correspond to a set of output captions tracks. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/including-captions.html. public struct CaptionDestinationSettings: Swift.Equatable { - /// Burn-in is a captions delivery method, rather than a captions format. Burn-in writes the captions directly on your video frames, replacing pixels of video content with the captions. Set up burn-in captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/burn-in-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to BURN_IN. + /// Burn-in is a captions delivery method, rather than a captions format. Burn-in writes the captions directly on your video frames, replacing pixels of video content with the captions. Set up burn-in captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/burn-in-output-captions.html. public var burninDestinationSettings: MediaConvertClientTypes.BurninDestinationSettings? - /// Specify the format for this set of captions on this output. The default format is embedded without SCTE-20. Note that your choice of video output container constrains your choice of output captions format. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/captions-support-tables.html. If you are using SCTE-20 and you want to create an output that complies with the SCTE-43 spec, choose SCTE-20 plus embedded (SCTE20_PLUS_EMBEDDED). To create a non-compliant output where the embedded captions come first, choose Embedded plus SCTE-20 (EMBEDDED_PLUS_SCTE20). + /// Specify the format for this set of captions on this output. The default format is embedded without SCTE-20. Note that your choice of video output container constrains your choice of output captions format. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/captions-support-tables.html. If you are using SCTE-20 and you want to create an output that complies with the SCTE-43 spec, choose SCTE-20 plus embedded. To create a non-compliant output where the embedded captions come first, choose Embedded plus SCTE-20. public var destinationType: MediaConvertClientTypes.CaptionDestinationType? - /// Settings related to DVB-Sub captions. Set up DVB-Sub captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/dvb-sub-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to DVB_SUB. + /// Settings related to DVB-Sub captions. Set up DVB-Sub captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/dvb-sub-output-captions.html. public var dvbSubDestinationSettings: MediaConvertClientTypes.DvbSubDestinationSettings? - /// Settings related to CEA/EIA-608 and CEA/EIA-708 (also called embedded or ancillary) captions. Set up embedded captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/embedded-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to EMBEDDED, EMBEDDED_PLUS_SCTE20, or SCTE20_PLUS_EMBEDDED. + /// Settings related to CEA/EIA-608 and CEA/EIA-708 (also called embedded or ancillary) captions. Set up embedded captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/embedded-output-captions.html. public var embeddedDestinationSettings: MediaConvertClientTypes.EmbeddedDestinationSettings? - /// Settings related to IMSC captions. IMSC is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to IMSC. + /// Settings related to IMSC captions. IMSC is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. public var imscDestinationSettings: MediaConvertClientTypes.ImscDestinationSettings? - /// Settings related to SCC captions. SCC is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/scc-srt-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to SCC. + /// Settings related to SCC captions. SCC is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/scc-srt-output-captions.html. public var sccDestinationSettings: MediaConvertClientTypes.SccDestinationSettings? - /// Settings related to SRT captions. SRT is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to SRT. + /// Settings related to SRT captions. SRT is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. public var srtDestinationSettings: MediaConvertClientTypes.SrtDestinationSettings? - /// Settings related to teletext captions. Set up teletext captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/teletext-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to TELETEXT. + /// Settings related to teletext captions. Set up teletext captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/teletext-output-captions.html. public var teletextDestinationSettings: MediaConvertClientTypes.TeletextDestinationSettings? - /// Settings related to TTML captions. TTML is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to TTML. + /// Settings related to TTML captions. TTML is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. public var ttmlDestinationSettings: MediaConvertClientTypes.TtmlDestinationSettings? - /// Settings related to WebVTT captions. WebVTT is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to WebVTT. + /// Settings related to WebVTT captions. WebVTT is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. public var webvttDestinationSettings: MediaConvertClientTypes.WebvttDestinationSettings? public init( @@ -4731,7 +4731,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the format for this set of captions on this output. The default format is embedded without SCTE-20. Note that your choice of video output container constrains your choice of output captions format. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/captions-support-tables.html. If you are using SCTE-20 and you want to create an output that complies with the SCTE-43 spec, choose SCTE-20 plus embedded (SCTE20_PLUS_EMBEDDED). To create a non-compliant output where the embedded captions come first, choose Embedded plus SCTE-20 (EMBEDDED_PLUS_SCTE20). + /// Specify the format for this set of captions on this output. The default format is embedded without SCTE-20. Note that your choice of video output container constrains your choice of output captions format. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/captions-support-tables.html. If you are using SCTE-20 and you want to create an output that complies with the SCTE-43 spec, choose SCTE-20 plus embedded. To create a non-compliant output where the embedded captions come first, choose Embedded plus SCTE-20. public enum CaptionDestinationType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case burnIn case dvbSub @@ -4907,11 +4907,11 @@ extension MediaConvertClientTypes.CaptionSourceFramerate: Swift.Codable { } extension MediaConvertClientTypes { - /// Ignore this setting unless your input captions format is SCC. To have the service compensate for differing frame rates between your input captions and input video, specify the frame rate of the captions file. Specify this value as a fraction. When you work directly in your JSON job specification, use the settings framerateNumerator and framerateDenominator. For example, you might specify 24 / 1 for 24 fps, 25 / 1 for 25 fps, 24000 / 1001 for 23.976 fps, or 30000 / 1001 for 29.97 fps. + /// Ignore this setting unless your input captions format is SCC. To have the service compensate for differing frame rates between your input captions and input video, specify the frame rate of the captions file. Specify this value as a fraction. For example, you might specify 24 / 1 for 24 fps, 25 / 1 for 25 fps, 24000 / 1001 for 23.976 fps, or 30000 / 1001 for 29.97 fps. public struct CaptionSourceFramerate: Swift.Equatable { - /// Specify the denominator of the fraction that represents the frame rate for the setting Caption source frame rate (CaptionSourceFramerate). Use this setting along with the setting Framerate numerator (framerateNumerator). + /// Specify the denominator of the fraction that represents the frame rate for the setting Caption source frame rate. Use this setting along with the setting Framerate numerator. public var framerateDenominator: Swift.Int? - /// Specify the numerator of the fraction that represents the frame rate for the setting Caption source frame rate (CaptionSourceFramerate). Use this setting along with the setting Framerate denominator (framerateDenominator). + /// Specify the numerator of the fraction that represents the frame rate for the setting Caption source frame rate. Use this setting along with the setting Framerate denominator. public var framerateNumerator: Swift.Int? public init( @@ -4998,7 +4998,7 @@ extension MediaConvertClientTypes { public var embeddedSourceSettings: MediaConvertClientTypes.EmbeddedSourceSettings? /// If your input captions are SCC, SMI, SRT, STL, TTML, WebVTT, or IMSC 1.1 in an xml file, specify the URI of the input caption source file. If your caption source is IMSC in an IMF package, use TrackSourceSettings instead of FileSoureSettings. public var fileSourceSettings: MediaConvertClientTypes.FileSourceSettings? - /// Use Source (SourceType) to identify the format of your input captions. The service cannot auto-detect caption format. + /// Use Source to identify the format of your input captions. The service cannot auto-detect caption format. public var sourceType: MediaConvertClientTypes.CaptionSourceType? /// Settings specific to Teletext caption sources, including Page number. public var teletextSourceSettings: MediaConvertClientTypes.TeletextSourceSettings? @@ -5032,7 +5032,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Source (SourceType) to identify the format of your input captions. The service cannot auto-detect caption format. + /// Use Source to identify the format of your input captions. The service cannot auto-detect caption format. public enum CaptionSourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case ancillary case dvbSub @@ -5132,7 +5132,7 @@ extension MediaConvertClientTypes.ChannelMapping: Swift.Codable { } extension MediaConvertClientTypes { - /// Channel mapping (ChannelMapping) contains the group of fields that hold the remixing value for each channel, in dB. Specify remix values to indicate how much of the content from your input audio channel you want in your output audio channels. Each instance of the InputChannels or InputChannelsFineTune array specifies these values for one output channel. Use one instance of this array for each output channel. In the console, each array corresponds to a column in the graphical depiction of the mapping matrix. The rows of the graphical matrix correspond to input channels. Valid values are within the range from -60 (mute) through 6. A setting of 0 passes the input channel unchanged to the output channel (no attenuation or amplification). Use InputChannels or InputChannelsFineTune to specify your remix values. Don't use both. + /// Channel mapping contains the group of fields that hold the remixing value for each channel, in dB. Specify remix values to indicate how much of the content from your input audio channel you want in your output audio channels. Each instance of the InputChannels or InputChannelsFineTune array specifies these values for one output channel. Use one instance of this array for each output channel. In the console, each array corresponds to a column in the graphical depiction of the mapping matrix. The rows of the graphical matrix correspond to input channels. Valid values are within the range from -60 (mute) through 6. A setting of 0 passes the input channel unchanged to the output channel (no attenuation or amplification). Use InputChannels or InputChannelsFineTune to specify your remix values. Don't use both. public struct ChannelMapping: Swift.Equatable { /// In your JSON job specification, include one child of OutputChannels for each audio channel that you want in your output. Each child should contain one instance of InputChannels or InputChannelsFineTune. public var outputChannels: [MediaConvertClientTypes.OutputChannelMapping]? @@ -5270,7 +5270,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Disable this setting only when your workflow requires the #EXT-X-ALLOW-CACHE:no tag. Otherwise, keep the default value Enabled (ENABLED) and control caching in your video distribution set up. For example, use the Cache-Control http header. + /// Disable this setting only when your workflow requires the #EXT-X-ALLOW-CACHE:no tag. Otherwise, keep the default value Enabled and control caching in your video distribution set up. For example, use the Cache-Control http header. public enum CmafClientCache: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -5389,7 +5389,7 @@ extension MediaConvertClientTypes { public struct CmafEncryptionSettings: Swift.Equatable { /// This is a 128-bit, 16-byte hex value represented by a 32-character text string. If this parameter is not set then the Initialization Vector will follow the segment number by default. public var constantInitializationVector: Swift.String? - /// Specify the encryption scheme that you want the service to use when encrypting your CMAF segments. Choose AES-CBC subsample (SAMPLE-AES) or AES_CTR (AES-CTR). + /// Specify the encryption scheme that you want the service to use when encrypting your CMAF segments. Choose AES-CBC subsample or AES_CTR. public var encryptionMethod: MediaConvertClientTypes.CmafEncryptionType? /// When you use DRM with CMAF outputs, choose whether the service writes the 128-bit encryption initialization vector in the HLS and DASH manifests. public var initializationVectorInManifest: MediaConvertClientTypes.CmafInitializationVectorInManifest? @@ -5421,7 +5421,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the encryption scheme that you want the service to use when encrypting your CMAF segments. Choose AES-CBC subsample (SAMPLE-AES) or AES_CTR (AES-CTR). + /// Specify the encryption scheme that you want the service to use when encrypting your CMAF segments. Choose AES-CBC subsample or AES_CTR. public enum CmafEncryptionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case aesCtr case sampleAes @@ -5641,27 +5641,27 @@ extension MediaConvertClientTypes.CmafGroupSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to your CMAF output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. When you work directly in your JSON job specification, include this object and any required children when you set Type, under OutputGroupSettings, to CMAF_GROUP_SETTINGS. + /// Settings related to your CMAF output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. public struct CmafGroupSettings: Swift.Equatable { /// By default, the service creates one top-level .m3u8 HLS manifest and one top -level .mpd DASH manifest for each CMAF output group in your job. These default manifests reference every output in the output group. To create additional top-level manifests that reference a subset of the outputs in the output group, specify a list of them here. For each additional manifest that you specify, the service creates one HLS manifest and one DASH manifest. public var additionalManifests: [MediaConvertClientTypes.CmafAdditionalManifest]? /// A partial URI prefix that will be put in the manifest file at the top level BaseURL element. Can be used if streams are delivered from a different URL than the manifest file. public var baseUrl: Swift.String? - /// Disable this setting only when your workflow requires the #EXT-X-ALLOW-CACHE:no tag. Otherwise, keep the default value Enabled (ENABLED) and control caching in your video distribution set up. For example, use the Cache-Control http header. + /// Disable this setting only when your workflow requires the #EXT-X-ALLOW-CACHE:no tag. Otherwise, keep the default value Enabled and control caching in your video distribution set up. For example, use the Cache-Control http header. public var clientCache: MediaConvertClientTypes.CmafClientCache? /// Specification to use (RFC-6381 or the default RFC-4281) during m3u8 playlist generation. public var codecSpecification: MediaConvertClientTypes.CmafCodecSpecification? /// Specify how MediaConvert writes SegmentTimeline in your output DASH manifest. To write a SegmentTimeline in each video Representation: Keep the default value, Basic. To write a common SegmentTimeline in the video AdaptationSet: Choose Compact. Note that MediaConvert will still write a SegmentTimeline in any Representation that does not share a common timeline. To write a video AdaptationSet for each different output framerate, and a common SegmentTimeline in each AdaptationSet: Choose Distinct. public var dashManifestStyle: MediaConvertClientTypes.DashManifestStyle? - /// Use Destination (Destination) to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. + /// Use Destination to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. public var destination: Swift.String? /// Settings associated with the destination. Will vary based on the type of destination public var destinationSettings: MediaConvertClientTypes.DestinationSettings? /// DRM settings. public var encryption: MediaConvertClientTypes.CmafEncryptionSettings? - /// Specify the length, in whole seconds, of the mp4 fragments. When you don't specify a value, MediaConvert defaults to 2. Related setting: Use Fragment length control (FragmentLengthControl) to specify whether the encoder enforces this value strictly. + /// Specify the length, in whole seconds, of the mp4 fragments. When you don't specify a value, MediaConvert defaults to 2. Related setting: Use Fragment length control to specify whether the encoder enforces this value strictly. public var fragmentLength: Swift.Int? - /// Specify whether MediaConvert generates images for trick play. Keep the default value, None (NONE), to not generate any images. Choose Thumbnail (THUMBNAIL) to generate tiled thumbnails. Choose Thumbnail and full frame (THUMBNAIL_AND_FULLFRAME) to generate tiled thumbnails and full-resolution images of single frames. When you enable Write HLS manifest (WriteHlsManifest), MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. When you enable Write DASH manifest (WriteDashManifest), MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md + /// Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. When you enable Write HLS manifest, MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. When you enable Write DASH manifest, MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md public var imageBasedTrickPlay: MediaConvertClientTypes.CmafImageBasedTrickPlay? /// Tile and thumbnail settings applicable when imageBasedTrickPlay is ADVANCED public var imageBasedTrickPlaySettings: MediaConvertClientTypes.CmafImageBasedTrickPlaySettings? @@ -5675,15 +5675,15 @@ extension MediaConvertClientTypes { public var minFinalSegmentLength: Swift.Double? /// Specify how the value for bandwidth is determined for each video Representation in your output MPD manifest. We recommend that you choose a MPD manifest bandwidth type that is compatible with your downstream player configuration. Max: Use the same value that you specify for Max bitrate in the video output, in bits per second. Average: Use the calculated average bitrate of the encoded video output, in bits per second. public var mpdManifestBandwidthType: MediaConvertClientTypes.CmafMpdManifestBandwidthType? - /// Specify whether your DASH profile is on-demand or main. When you choose Main profile (MAIN_PROFILE), the service signals urn:mpeg:dash:profile:isoff-main:2011 in your .mpd DASH manifest. When you choose On-demand (ON_DEMAND_PROFILE), the service signals urn:mpeg:dash:profile:isoff-on-demand:2011 in your .mpd. When you choose On-demand, you must also set the output group setting Segment control (SegmentControl) to Single file (SINGLE_FILE). + /// Specify whether your DASH profile is on-demand or main. When you choose Main profile, the service signals urn:mpeg:dash:profile:isoff-main:2011 in your .mpd DASH manifest. When you choose On-demand, the service signals urn:mpeg:dash:profile:isoff-on-demand:2011 in your .mpd. When you choose On-demand, you must also set the output group setting Segment control to Single file. public var mpdProfile: MediaConvertClientTypes.CmafMpdProfile? - /// Use this setting only when your output video stream has B-frames, which causes the initial presentation time stamp (PTS) to be offset from the initial decode time stamp (DTS). Specify how MediaConvert handles PTS when writing time stamps in output DASH manifests. Choose Match initial PTS (MATCH_INITIAL_PTS) when you want MediaConvert to use the initial PTS as the first time stamp in the manifest. Choose Zero-based (ZERO_BASED) to have MediaConvert ignore the initial PTS in the video stream and instead write the initial time stamp as zero in the manifest. For outputs that don't have B-frames, the time stamps in your DASH manifests start at zero regardless of your choice here. + /// Use this setting only when your output video stream has B-frames, which causes the initial presentation time stamp (PTS) to be offset from the initial decode time stamp (DTS). Specify how MediaConvert handles PTS when writing time stamps in output DASH manifests. Choose Match initial PTS when you want MediaConvert to use the initial PTS as the first time stamp in the manifest. Choose Zero-based to have MediaConvert ignore the initial PTS in the video stream and instead write the initial time stamp as zero in the manifest. For outputs that don't have B-frames, the time stamps in your DASH manifests start at zero regardless of your choice here. public var ptsOffsetHandlingForBFrames: MediaConvertClientTypes.CmafPtsOffsetHandlingForBFrames? /// When set to SINGLE_FILE, a single output file is generated, which is internally segmented using the Fragment Length and Segment Length. When set to SEGMENTED_FILES, separate segment files will be created. public var segmentControl: MediaConvertClientTypes.CmafSegmentControl? - /// Specify the length, in whole seconds, of each segment. When you don't specify a value, MediaConvert defaults to 10. Related settings: Use Segment length control (SegmentLengthControl) to specify whether the encoder enforces this value strictly. Use Segment control (CmafSegmentControl) to specify whether MediaConvert creates separate segment files or one content file that has metadata to mark the segment boundaries. + /// Specify the length, in whole seconds, of each segment. When you don't specify a value, MediaConvert defaults to 10. Related settings: Use Segment length control to specify whether the encoder enforces this value strictly. Use Segment control to specify whether MediaConvert creates separate segment files or one content file that has metadata to mark the segment boundaries. public var segmentLength: Swift.Int? - /// Specify how you want MediaConvert to determine the segment length. Choose Exact (EXACT) to have the encoder use the exact length that you specify with the setting Segment length (SegmentLength). This might result in extra I-frames. Choose Multiple of GOP (GOP_MULTIPLE) to have the encoder round up the segment lengths to match the next GOP boundary. + /// Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary. public var segmentLengthControl: MediaConvertClientTypes.CmafSegmentLengthControl? /// Include or exclude RESOLUTION attribute for video in EXT-X-STREAM-INF tag of variant manifest. public var streamInfResolution: MediaConvertClientTypes.CmafStreamInfResolution? @@ -5695,7 +5695,7 @@ extension MediaConvertClientTypes { public var writeDashManifest: MediaConvertClientTypes.CmafWriteDASHManifest? /// When set to ENABLED, an Apple HLS manifest will be generated for this output. public var writeHlsManifest: MediaConvertClientTypes.CmafWriteHLSManifest? - /// When you enable Precise segment duration in DASH manifests (writeSegmentTimelineInRepresentation), your DASH manifest shows precise segment durations. The segment duration information appears inside the SegmentTimeline element, inside SegmentTemplate at the Representation level. When this feature isn't enabled, the segment durations in your DASH manifest are approximate. The segment duration information appears in the duration attribute of the SegmentTemplate element. + /// When you enable Precise segment duration in DASH manifests, your DASH manifest shows precise segment durations. The segment duration information appears inside the SegmentTimeline element, inside SegmentTemplate at the Representation level. When this feature isn't enabled, the segment durations in your DASH manifest are approximate. The segment duration information appears in the duration attribute of the SegmentTemplate element. public var writeSegmentTimelineInRepresentation: MediaConvertClientTypes.CmafWriteSegmentTimelineInRepresentation? public init( @@ -5761,7 +5761,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether MediaConvert generates images for trick play. Keep the default value, None (NONE), to not generate any images. Choose Thumbnail (THUMBNAIL) to generate tiled thumbnails. Choose Thumbnail and full frame (THUMBNAIL_AND_FULLFRAME) to generate tiled thumbnails and full-resolution images of single frames. When you enable Write HLS manifest (WriteHlsManifest), MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. When you enable Write DASH manifest (WriteDashManifest), MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md + /// Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. When you enable Write HLS manifest, MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. When you enable Write DASH manifest, MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md public enum CmafImageBasedTrickPlay: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case advanced case `none` @@ -6083,7 +6083,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether your DASH profile is on-demand or main. When you choose Main profile (MAIN_PROFILE), the service signals urn:mpeg:dash:profile:isoff-main:2011 in your .mpd DASH manifest. When you choose On-demand (ON_DEMAND_PROFILE), the service signals urn:mpeg:dash:profile:isoff-on-demand:2011 in your .mpd. When you choose On-demand, you must also set the output group setting Segment control (SegmentControl) to Single file (SINGLE_FILE). + /// Specify whether your DASH profile is on-demand or main. When you choose Main profile, the service signals urn:mpeg:dash:profile:isoff-main:2011 in your .mpd DASH manifest. When you choose On-demand, the service signals urn:mpeg:dash:profile:isoff-on-demand:2011 in your .mpd. When you choose On-demand, you must also set the output group setting Segment control to Single file. public enum CmafMpdProfile: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case mainProfile case onDemandProfile @@ -6116,7 +6116,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting only when your output video stream has B-frames, which causes the initial presentation time stamp (PTS) to be offset from the initial decode time stamp (DTS). Specify how MediaConvert handles PTS when writing time stamps in output DASH manifests. Choose Match initial PTS (MATCH_INITIAL_PTS) when you want MediaConvert to use the initial PTS as the first time stamp in the manifest. Choose Zero-based (ZERO_BASED) to have MediaConvert ignore the initial PTS in the video stream and instead write the initial time stamp as zero in the manifest. For outputs that don't have B-frames, the time stamps in your DASH manifests start at zero regardless of your choice here. + /// Use this setting only when your output video stream has B-frames, which causes the initial presentation time stamp (PTS) to be offset from the initial decode time stamp (DTS). Specify how MediaConvert handles PTS when writing time stamps in output DASH manifests. Choose Match initial PTS when you want MediaConvert to use the initial PTS as the first time stamp in the manifest. Choose Zero-based to have MediaConvert ignore the initial PTS in the video stream and instead write the initial time stamp as zero in the manifest. For outputs that don't have B-frames, the time stamps in your DASH manifests start at zero regardless of your choice here. public enum CmafPtsOffsetHandlingForBFrames: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case matchInitialPts case zeroBased @@ -6182,7 +6182,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify how you want MediaConvert to determine the segment length. Choose Exact (EXACT) to have the encoder use the exact length that you specify with the setting Segment length (SegmentLength). This might result in extra I-frames. Choose Multiple of GOP (GOP_MULTIPLE) to have the encoder round up the segment lengths to match the next GOP boundary. + /// Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary. public enum CmafSegmentLengthControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case exact case gopMultiple @@ -6380,7 +6380,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you enable Precise segment duration in DASH manifests (writeSegmentTimelineInRepresentation), your DASH manifest shows precise segment durations. The segment duration information appears inside the SegmentTimeline element, inside SegmentTemplate at the Representation level. When this feature isn't enabled, the segment durations in your DASH manifest are approximate. The segment duration information appears in the duration attribute of the SegmentTemplate element. + /// When you enable Precise segment duration in DASH manifests, your DASH manifest shows precise segment durations. The segment duration information appears inside the SegmentTimeline element, inside SegmentTemplate at the Representation level. When this feature isn't enabled, the segment durations in your DASH manifest are approximate. The segment duration information appears in the duration attribute of the SegmentTemplate element. public enum CmafWriteSegmentTimelineInRepresentation: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -6413,7 +6413,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration (MATCH_VIDEO_DURATION). In all other cases, keep the default value, Default codec duration (DEFAULT_CODEC_DURATION). When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. + /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration. In all other cases, keep the default value, Default codec duration. When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. public enum CmfcAudioDuration: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case defaultCodecDuration case matchVideoDuration @@ -6446,7 +6446,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting to control the values that MediaConvert puts in your HLS parent playlist to control how the client player selects which audio track to play. The other options for this setting determine the values that MediaConvert writes for the DEFAULT and AUTOSELECT attributes of the EXT-X-MEDIA entry for the audio variant. For more information about these attributes, see the Apple documentation article https://developer.apple.com/documentation/http_live_streaming/example_playlists_for_http_live_streaming/adding_alternate_media_to_a_playlist. Choose Alternate audio, auto select, default (ALTERNATE_AUDIO_AUTO_SELECT_DEFAULT) to set DEFAULT=YES and AUTOSELECT=YES. Choose this value for only one variant in your output group. Choose Alternate audio, auto select, not default (ALTERNATE_AUDIO_AUTO_SELECT) to set DEFAULT=NO and AUTOSELECT=YES. Choose Alternate Audio, Not Auto Select to set DEFAULT=NO and AUTOSELECT=NO. When you don't specify a value for this setting, MediaConvert defaults to Alternate audio, auto select, default. When there is more than one variant in your output group, you must explicitly choose a value for this setting. + /// Use this setting to control the values that MediaConvert puts in your HLS parent playlist to control how the client player selects which audio track to play. The other options for this setting determine the values that MediaConvert writes for the DEFAULT and AUTOSELECT attributes of the EXT-X-MEDIA entry for the audio variant. For more information about these attributes, see the Apple documentation article https://developer.apple.com/documentation/http_live_streaming/example_playlists_for_http_live_streaming/adding_alternate_media_to_a_playlist. Choose Alternate audio, auto select, default to set DEFAULT=YES and AUTOSELECT=YES. Choose this value for only one variant in your output group. Choose Alternate audio, auto select, not default to set DEFAULT=NO and AUTOSELECT=YES. Choose Alternate Audio, Not Auto Select to set DEFAULT=NO and AUTOSELECT=NO. When you don't specify a value for this setting, MediaConvert defaults to Alternate audio, auto select, default. When there is more than one variant in your output group, you must explicitly choose a value for this setting. public enum CmfcAudioTrackType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case alternateAudioAutoSelect case alternateAudioAutoSelectDefault @@ -6482,7 +6482,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether to flag this audio track as descriptive video service (DVS) in your HLS parent manifest. When you choose Flag (FLAG), MediaConvert includes the parameter CHARACTERISTICS="public.accessibility.describes-video" in the EXT-X-MEDIA entry for this track. When you keep the default choice, Don't flag (DONT_FLAG), MediaConvert leaves this parameter out. The DVS flag can help with accessibility on Apple devices. For more information, see the Apple documentation. + /// Specify whether to flag this audio track as descriptive video service (DVS) in your HLS parent manifest. When you choose Flag, MediaConvert includes the parameter CHARACTERISTICS="public.accessibility.describes-video" in the EXT-X-MEDIA entry for this track. When you keep the default choice, Don't flag, MediaConvert leaves this parameter out. The DVS flag can help with accessibility on Apple devices. For more information, see the Apple documentation. public enum CmfcDescriptiveVideoServiceFlag: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case dontFlag case flag @@ -6515,7 +6515,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose Include (INCLUDE) to have MediaConvert generate an HLS child manifest that lists only the I-frames for this rendition, in addition to your regular manifest for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only child manifest and the regular child manifest to the parent manifest. When you don't need the I-frame only child manifest, keep the default value Exclude (EXCLUDE). + /// Choose Include to have MediaConvert generate an HLS child manifest that lists only the I-frames for this rendition, in addition to your regular manifest for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only child manifest and the regular child manifest to the parent manifest. When you don't need the I-frame only child manifest, keep the default value Exclude. public enum CmfcIFrameOnlyManifest: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case exclude case include @@ -6581,7 +6581,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// To add an InbandEventStream element in your output MPD manifest for each type of event message, set Manifest metadata signaling to Enabled. For ID3 event messages, the InbandEventStream element schemeIdUri will be same value that you specify for ID3 metadata scheme ID URI. For SCTE35 event messages, the InbandEventStream element schemeIdUri will be "urn:scte:scte35:2013:bin". To leave these elements out of your output MPD manifest, set Manifest metadata signaling to Disabled. To enable Manifest metadata signaling, you must also set SCTE-35 source to Passthrough, ESAM SCTE-35 to insert, or ID3 metadata (TimedMetadata) to Passthrough. + /// To add an InbandEventStream element in your output MPD manifest for each type of event message, set Manifest metadata signaling to Enabled. For ID3 event messages, the InbandEventStream element schemeIdUri will be same value that you specify for ID3 metadata scheme ID URI. For SCTE35 event messages, the InbandEventStream element schemeIdUri will be "urn:scte:scte35:2013:bin". To leave these elements out of your output MPD manifest, set Manifest metadata signaling to Disabled. To enable Manifest metadata signaling, you must also set SCTE-35 source to Passthrough, ESAM SCTE-35 to insert, or ID3 metadata to Passthrough. public enum CmfcManifestMetadataSignaling: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -6614,7 +6614,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting only when you specify SCTE-35 markers from ESAM. Choose INSERT to put SCTE-35 markers in this output at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML (sccXml). + /// Use this setting only when you specify SCTE-35 markers from ESAM. Choose INSERT to put SCTE-35 markers in this output at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML. public enum CmfcScte35Esam: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case insert case `none` @@ -6647,7 +6647,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless you have SCTE-35 markers in your input video file. Choose Passthrough (PASSTHROUGH) if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None (NONE) if you don't want those SCTE-35 markers in this output. + /// Ignore this setting unless you have SCTE-35 markers in your input video file. Choose Passthrough if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None if you don't want those SCTE-35 markers in this output. public enum CmfcScte35Source: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `none` case passthrough @@ -6779,33 +6779,33 @@ extension MediaConvertClientTypes.CmfcSettings: Swift.Codable { extension MediaConvertClientTypes { /// These settings relate to the fragmented MP4 container for the segments in your CMAF outputs. public struct CmfcSettings: Swift.Equatable { - /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration (MATCH_VIDEO_DURATION). In all other cases, keep the default value, Default codec duration (DEFAULT_CODEC_DURATION). When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. + /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration. In all other cases, keep the default value, Default codec duration. When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. public var audioDuration: MediaConvertClientTypes.CmfcAudioDuration? - /// Specify the audio rendition group for this audio rendition. Specify up to one value for each audio output in your output group. This value appears in your HLS parent manifest in the EXT-X-MEDIA tag of TYPE=AUDIO, as the value for the GROUP-ID attribute. For example, if you specify "audio_aac_1" for Audio group ID, it appears in your manifest like this: #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio_aac_1". Related setting: To associate the rendition group that this audio track belongs to with a video rendition, include the same value that you provide here for that video output's setting Audio rendition sets (audioRenditionSets). + /// Specify the audio rendition group for this audio rendition. Specify up to one value for each audio output in your output group. This value appears in your HLS parent manifest in the EXT-X-MEDIA tag of TYPE=AUDIO, as the value for the GROUP-ID attribute. For example, if you specify "audio_aac_1" for Audio group ID, it appears in your manifest like this: #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio_aac_1". Related setting: To associate the rendition group that this audio track belongs to with a video rendition, include the same value that you provide here for that video output's setting Audio rendition sets. public var audioGroupId: Swift.String? - /// List the audio rendition groups that you want included with this video rendition. Use a comma-separated list. For example, say you want to include the audio rendition groups that have the audio group IDs "audio_aac_1" and "audio_dolby". Then you would specify this value: "audio_aac_1,audio_dolby". Related setting: The rendition groups that you include in your comma-separated list should all match values that you specify in the setting Audio group ID (AudioGroupId) for audio renditions in the same output group as this video rendition. Default behavior: If you don't specify anything here and for Audio group ID, MediaConvert puts each audio variant in its own audio rendition group and associates it with every video variant. Each value in your list appears in your HLS parent manifest in the EXT-X-STREAM-INF tag as the value for the AUDIO attribute. To continue the previous example, say that the file name for the child manifest for your video rendition is "amazing_video_1.m3u8". Then, in your parent manifest, each value will appear on separate lines, like this: #EXT-X-STREAM-INF:AUDIO="audio_aac_1"... amazing_video_1.m3u8 #EXT-X-STREAM-INF:AUDIO="audio_dolby"... amazing_video_1.m3u8 + /// List the audio rendition groups that you want included with this video rendition. Use a comma-separated list. For example, say you want to include the audio rendition groups that have the audio group IDs "audio_aac_1" and "audio_dolby". Then you would specify this value: "audio_aac_1,audio_dolby". Related setting: The rendition groups that you include in your comma-separated list should all match values that you specify in the setting Audio group ID for audio renditions in the same output group as this video rendition. Default behavior: If you don't specify anything here and for Audio group ID, MediaConvert puts each audio variant in its own audio rendition group and associates it with every video variant. Each value in your list appears in your HLS parent manifest in the EXT-X-STREAM-INF tag as the value for the AUDIO attribute. To continue the previous example, say that the file name for the child manifest for your video rendition is "amazing_video_1.m3u8". Then, in your parent manifest, each value will appear on separate lines, like this: #EXT-X-STREAM-INF:AUDIO="audio_aac_1"... amazing_video_1.m3u8 #EXT-X-STREAM-INF:AUDIO="audio_dolby"... amazing_video_1.m3u8 public var audioRenditionSets: Swift.String? - /// Use this setting to control the values that MediaConvert puts in your HLS parent playlist to control how the client player selects which audio track to play. The other options for this setting determine the values that MediaConvert writes for the DEFAULT and AUTOSELECT attributes of the EXT-X-MEDIA entry for the audio variant. For more information about these attributes, see the Apple documentation article https://developer.apple.com/documentation/http_live_streaming/example_playlists_for_http_live_streaming/adding_alternate_media_to_a_playlist. Choose Alternate audio, auto select, default (ALTERNATE_AUDIO_AUTO_SELECT_DEFAULT) to set DEFAULT=YES and AUTOSELECT=YES. Choose this value for only one variant in your output group. Choose Alternate audio, auto select, not default (ALTERNATE_AUDIO_AUTO_SELECT) to set DEFAULT=NO and AUTOSELECT=YES. Choose Alternate Audio, Not Auto Select to set DEFAULT=NO and AUTOSELECT=NO. When you don't specify a value for this setting, MediaConvert defaults to Alternate audio, auto select, default. When there is more than one variant in your output group, you must explicitly choose a value for this setting. + /// Use this setting to control the values that MediaConvert puts in your HLS parent playlist to control how the client player selects which audio track to play. The other options for this setting determine the values that MediaConvert writes for the DEFAULT and AUTOSELECT attributes of the EXT-X-MEDIA entry for the audio variant. For more information about these attributes, see the Apple documentation article https://developer.apple.com/documentation/http_live_streaming/example_playlists_for_http_live_streaming/adding_alternate_media_to_a_playlist. Choose Alternate audio, auto select, default to set DEFAULT=YES and AUTOSELECT=YES. Choose this value for only one variant in your output group. Choose Alternate audio, auto select, not default to set DEFAULT=NO and AUTOSELECT=YES. Choose Alternate Audio, Not Auto Select to set DEFAULT=NO and AUTOSELECT=NO. When you don't specify a value for this setting, MediaConvert defaults to Alternate audio, auto select, default. When there is more than one variant in your output group, you must explicitly choose a value for this setting. public var audioTrackType: MediaConvertClientTypes.CmfcAudioTrackType? - /// Specify whether to flag this audio track as descriptive video service (DVS) in your HLS parent manifest. When you choose Flag (FLAG), MediaConvert includes the parameter CHARACTERISTICS="public.accessibility.describes-video" in the EXT-X-MEDIA entry for this track. When you keep the default choice, Don't flag (DONT_FLAG), MediaConvert leaves this parameter out. The DVS flag can help with accessibility on Apple devices. For more information, see the Apple documentation. + /// Specify whether to flag this audio track as descriptive video service (DVS) in your HLS parent manifest. When you choose Flag, MediaConvert includes the parameter CHARACTERISTICS="public.accessibility.describes-video" in the EXT-X-MEDIA entry for this track. When you keep the default choice, Don't flag, MediaConvert leaves this parameter out. The DVS flag can help with accessibility on Apple devices. For more information, see the Apple documentation. public var descriptiveVideoServiceFlag: MediaConvertClientTypes.CmfcDescriptiveVideoServiceFlag? - /// Choose Include (INCLUDE) to have MediaConvert generate an HLS child manifest that lists only the I-frames for this rendition, in addition to your regular manifest for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only child manifest and the regular child manifest to the parent manifest. When you don't need the I-frame only child manifest, keep the default value Exclude (EXCLUDE). + /// Choose Include to have MediaConvert generate an HLS child manifest that lists only the I-frames for this rendition, in addition to your regular manifest for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only child manifest and the regular child manifest to the parent manifest. When you don't need the I-frame only child manifest, keep the default value Exclude. public var iFrameOnlyManifest: MediaConvertClientTypes.CmfcIFrameOnlyManifest? /// To include key-length-value metadata in this output: Set KLV metadata insertion to Passthrough. MediaConvert reads KLV metadata present in your input and writes each instance to a separate event message box in the output, according to MISB ST1910.1. To exclude this KLV metadata: Set KLV metadata insertion to None or leave blank. public var klvMetadata: MediaConvertClientTypes.CmfcKlvMetadata? - /// To add an InbandEventStream element in your output MPD manifest for each type of event message, set Manifest metadata signaling to Enabled. For ID3 event messages, the InbandEventStream element schemeIdUri will be same value that you specify for ID3 metadata scheme ID URI. For SCTE35 event messages, the InbandEventStream element schemeIdUri will be "urn:scte:scte35:2013:bin". To leave these elements out of your output MPD manifest, set Manifest metadata signaling to Disabled. To enable Manifest metadata signaling, you must also set SCTE-35 source to Passthrough, ESAM SCTE-35 to insert, or ID3 metadata (TimedMetadata) to Passthrough. + /// To add an InbandEventStream element in your output MPD manifest for each type of event message, set Manifest metadata signaling to Enabled. For ID3 event messages, the InbandEventStream element schemeIdUri will be same value that you specify for ID3 metadata scheme ID URI. For SCTE35 event messages, the InbandEventStream element schemeIdUri will be "urn:scte:scte35:2013:bin". To leave these elements out of your output MPD manifest, set Manifest metadata signaling to Disabled. To enable Manifest metadata signaling, you must also set SCTE-35 source to Passthrough, ESAM SCTE-35 to insert, or ID3 metadata to Passthrough. public var manifestMetadataSignaling: MediaConvertClientTypes.CmfcManifestMetadataSignaling? - /// Use this setting only when you specify SCTE-35 markers from ESAM. Choose INSERT to put SCTE-35 markers in this output at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML (sccXml). + /// Use this setting only when you specify SCTE-35 markers from ESAM. Choose INSERT to put SCTE-35 markers in this output at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML. public var scte35Esam: MediaConvertClientTypes.CmfcScte35Esam? - /// Ignore this setting unless you have SCTE-35 markers in your input video file. Choose Passthrough (PASSTHROUGH) if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None (NONE) if you don't want those SCTE-35 markers in this output. + /// Ignore this setting unless you have SCTE-35 markers in your input video file. Choose Passthrough if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None if you don't want those SCTE-35 markers in this output. public var scte35Source: MediaConvertClientTypes.CmfcScte35Source? - /// To include ID3 metadata in this output: Set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH). Specify this ID3 metadata in Custom ID3 metadata inserter (timedMetadataInsertion). MediaConvert writes each instance of ID3 metadata in a separate Event Message (eMSG) box. To exclude this ID3 metadata: Set ID3 metadata to None (NONE) or leave blank. + /// To include ID3 metadata in this output: Set ID3 metadata to Passthrough. Specify this ID3 metadata in Custom ID3 metadata inserter. MediaConvert writes each instance of ID3 metadata in a separate Event Message (eMSG) box. To exclude this ID3 metadata: Set ID3 metadata to None or leave blank. public var timedMetadata: MediaConvertClientTypes.CmfcTimedMetadata? - /// Specify the event message box (eMSG) version for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.3 Syntax. Leave blank to use the default value Version 0. When you specify Version 1, you must also set ID3 metadata (timedMetadata) to Passthrough. + /// Specify the event message box (eMSG) version for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.3 Syntax. Leave blank to use the default value Version 0. When you specify Version 1, you must also set ID3 metadata to Passthrough. public var timedMetadataBoxVersion: MediaConvertClientTypes.CmfcTimedMetadataBoxVersion? - /// Specify the event message box (eMSG) scheme ID URI (scheme_id_uri) for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.4 Semantics. Leave blank to use the default value: https://aomedia.org/emsg/ID3 When you specify a value for ID3 metadata scheme ID URI, you must also set ID3 metadata (timedMetadata) to Passthrough. + /// Specify the event message box (eMSG) scheme ID URI for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.4 Semantics. Leave blank to use the default value: https://aomedia.org/emsg/ID3 When you specify a value for ID3 metadata scheme ID URI, you must also set ID3 metadata to Passthrough. public var timedMetadataSchemeIdUri: Swift.String? - /// Specify the event message box (eMSG) value for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.4 Semantics. When you specify a value for ID3 Metadata Value, you must also set ID3 metadata (timedMetadata) to Passthrough. + /// Specify the event message box (eMSG) value for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.4 Semantics. When you specify a value for ID3 Metadata Value, you must also set ID3 metadata to Passthrough. public var timedMetadataValue: Swift.String? public init( @@ -6845,7 +6845,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// To include ID3 metadata in this output: Set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH). Specify this ID3 metadata in Custom ID3 metadata inserter (timedMetadataInsertion). MediaConvert writes each instance of ID3 metadata in a separate Event Message (eMSG) box. To exclude this ID3 metadata: Set ID3 metadata to None (NONE) or leave blank. + /// To include ID3 metadata in this output: Set ID3 metadata to Passthrough. Specify this ID3 metadata in Custom ID3 metadata inserter. MediaConvert writes each instance of ID3 metadata in a separate Event Message (eMSG) box. To exclude this ID3 metadata: Set ID3 metadata to None or leave blank. public enum CmfcTimedMetadata: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `none` case passthrough @@ -6878,7 +6878,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the event message box (eMSG) version for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.3 Syntax. Leave blank to use the default value Version 0. When you specify Version 1, you must also set ID3 metadata (timedMetadata) to Passthrough. + /// Specify the event message box (eMSG) version for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.3 Syntax. Leave blank to use the default value Version 0. When you specify Version 1, you must also set ID3 metadata to Passthrough. public enum CmfcTimedMetadataBoxVersion: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case version0 case version1 @@ -7004,7 +7004,7 @@ extension MediaConvertClientTypes { public var colorSpaceConversion: MediaConvertClientTypes.ColorSpaceConversion? /// Contrast level. public var contrast: Swift.Int? - /// Use these settings when you convert to the HDR 10 color space. Specify the SMPTE ST 2086 Mastering Display Color Volume static metadata that you want signaled in the output. These values don't affect the pixel values that are encoded in the video stream. They are intended to help the downstream video player display content in a way that reflects the intentions of the the content creator. When you set Color space conversion (ColorSpaceConversion) to HDR 10 (FORCE_HDR10), these settings are required. You must set values for Max frame average light level (maxFrameAverageLightLevel) and Max content light level (maxContentLightLevel); these settings don't have a default value. The default values for the other HDR 10 metadata settings are defined by the P3D65 color space. For more information about MediaConvert HDR jobs, see https://docs.aws.amazon.com/console/mediaconvert/hdr. + /// Use these settings when you convert to the HDR 10 color space. Specify the SMPTE ST 2086 Mastering Display Color Volume static metadata that you want signaled in the output. These values don't affect the pixel values that are encoded in the video stream. They are intended to help the downstream video player display content in a way that reflects the intentions of the the content creator. When you set Color space conversion to HDR 10, these settings are required. You must set values for Max frame average light level and Max content light level; these settings don't have a default value. The default values for the other HDR 10 metadata settings are defined by the P3D65 color space. For more information about MediaConvert HDR jobs, see https://docs.aws.amazon.com/console/mediaconvert/hdr. public var hdr10Metadata: MediaConvertClientTypes.Hdr10Metadata? /// Specify how MediaConvert maps brightness and colors from your HDR input to your SDR output. The mode that you select represents a creative choice, with different tradeoffs in the details and tones of your output. To maintain details in bright or saturated areas of your output: Choose Preserve details. For some sources, your SDR output may look less bright and less saturated when compared to your HDR source. MediaConvert automatically applies this mode for HLG sources, regardless of your choice. For a bright and saturated output: Choose Vibrant. We recommend that you choose this mode when any of your source content is HDR10, and for the best results when it is mastered for 1000 nits. You may notice loss of details in bright or saturated areas of your output. HDR to SDR tone mapping has no effect when your input is SDR. public var hdrToSdrToneMapper: MediaConvertClientTypes.HDRToSDRToneMapper? @@ -7046,7 +7046,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose Insert (INSERT) for this setting to include color metadata in this output. Choose Ignore (IGNORE) to exclude color metadata from this output. If you don't specify a value, the service sets this to Insert by default. + /// Choose Insert for this setting to include color metadata in this output. Choose Ignore to exclude color metadata from this output. If you don't specify a value, the service sets this to Insert by default. public enum ColorMetadata: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case ignore case insert @@ -7201,7 +7201,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// There are two sources for color metadata, the input file and the job input settings Color space (ColorSpace) and HDR master display information settings(Hdr10Metadata). The Color space usage setting determines which takes precedence. Choose Force (FORCE) to use color metadata from the input job settings. If you don't specify values for those settings, the service defaults to using metadata from your input. FALLBACK - Choose Fallback (FALLBACK) to use color metadata from the source when it is present. If there's no color metadata in your input file, the service defaults to using values you specify in the input settings. + /// There are two sources for color metadata, the input file and the job input settings Color space and HDR master display information settings. The Color space usage setting determines which takes precedence. Choose Force to use color metadata from the input job settings. If you don't specify values for those settings, the service defaults to using metadata from your input. FALLBACK - Choose Fallback to use color metadata from the source when it is present. If there's no color metadata in your input file, the service defaults to using values you specify in the input settings. public enum ColorSpaceUsage: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case fallback case force @@ -7394,7 +7394,7 @@ extension MediaConvertClientTypes { public var container: MediaConvertClientTypes.ContainerType? /// Settings for F4v container public var f4vSettings: MediaConvertClientTypes.F4vSettings? - /// MPEG-2 TS container settings. These apply to outputs in a File output group when the output's container (ContainerType) is MPEG-2 Transport Stream (M2TS). In these assets, data is organized by the program map table (PMT). Each transport stream program contains subsets of data, including audio, video, and metadata. Each of these subsets of data has a numerical label called a packet identifier (PID). Each transport stream program corresponds to one MediaConvert output. The PMT lists the types of data in a program along with their PID. Downstream systems and players use the program map table to look up the PID for each type of data it accesses and then uses the PIDs to locate specific data within the asset. + /// MPEG-2 TS container settings. These apply to outputs in a File output group when the output's container is MPEG-2 Transport Stream (M2TS). In these assets, data is organized by the program map table (PMT). Each transport stream program contains subsets of data, including audio, video, and metadata. Each of these subsets of data has a numerical label called a packet identifier (PID). Each transport stream program corresponds to one MediaConvert output. The PMT lists the types of data in a program along with their PID. Downstream systems and players use the program map table to look up the PID for each type of data it accesses and then uses the PIDs to locate specific data within the asset. public var m2tsSettings: MediaConvertClientTypes.M2tsSettings? /// These settings relate to the MPEG-2 transport stream (MPEG2-TS) container for the MPEG2-TS segments in your HLS outputs. public var m3u8Settings: MediaConvertClientTypes.M3u8Settings? @@ -8474,7 +8474,7 @@ extension MediaConvertClientTypes.DashIsoEncryptionSettings: Swift.Codable { extension MediaConvertClientTypes { /// Specifies DRM settings for DASH outputs. public struct DashIsoEncryptionSettings: Swift.Equatable { - /// This setting can improve the compatibility of your output with video players on obsolete devices. It applies only to DASH H.264 outputs with DRM encryption. Choose Unencrypted SEI (UNENCRYPTED_SEI) only to correct problems with playback on older devices. Otherwise, keep the default setting CENC v1 (CENC_V1). If you choose Unencrypted SEI, for that output, the service will exclude the access unit delimiter and will leave the SEI NAL units unencrypted. + /// This setting can improve the compatibility of your output with video players on obsolete devices. It applies only to DASH H.264 outputs with DRM encryption. Choose Unencrypted SEI only to correct problems with playback on older devices. Otherwise, keep the default setting CENC v1. If you choose Unencrypted SEI, for that output, the service will exclude the access unit delimiter and will leave the SEI NAL units unencrypted. public var playbackDeviceCompatibility: MediaConvertClientTypes.DashIsoPlaybackDeviceCompatibility? /// If your output group type is HLS, DASH, or Microsoft Smooth, use these settings when doing DRM encryption with a SPEKE-compliant key provider. If your output group type is CMAF, use the SpekeKeyProviderCmaf settings instead. public var spekeKeyProvider: MediaConvertClientTypes.SpekeKeyProvider? @@ -8492,7 +8492,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting only when your audio codec is a Dolby one (AC3, EAC3, or Atmos) and your downstream workflow requires that your DASH manifest use the Dolby channel configuration tag, rather than the MPEG one. For example, you might need to use this to make dynamic ad insertion work. Specify which audio channel configuration scheme ID URI MediaConvert writes in your DASH manifest. Keep the default value, MPEG channel configuration (MPEG_CHANNEL_CONFIGURATION), to have MediaConvert write this: urn:mpeg:mpegB:cicp:ChannelConfiguration. Choose Dolby channel configuration (DOLBY_CHANNEL_CONFIGURATION) to have MediaConvert write this instead: tag:dolby.com,2014:dash:audio_channel_configuration:2011. + /// Use this setting only when your audio codec is a Dolby one (AC3, EAC3, or Atmos) and your downstream workflow requires that your DASH manifest use the Dolby channel configuration tag, rather than the MPEG one. For example, you might need to use this to make dynamic ad insertion work. Specify which audio channel configuration scheme ID URI MediaConvert writes in your DASH manifest. Keep the default value, MPEG channel configuration, to have MediaConvert write this: urn:mpeg:mpegB:cicp:ChannelConfiguration. Choose Dolby channel configuration to have MediaConvert write this instead: tag:dolby.com,2014:dash:audio_channel_configuration:2011. public enum DashIsoGroupAudioChannelConfigSchemeIdUri: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case dolbyChannelConfiguration case mpegChannelConfiguration @@ -8676,17 +8676,17 @@ extension MediaConvertClientTypes.DashIsoGroupSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to your DASH output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. When you work directly in your JSON job specification, include this object and any required children when you set Type, under OutputGroupSettings, to DASH_ISO_GROUP_SETTINGS. + /// Settings related to your DASH output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. public struct DashIsoGroupSettings: Swift.Equatable { /// By default, the service creates one .mpd DASH manifest for each DASH ISO output group in your job. This default manifest references every output in the output group. To create additional DASH manifests that reference a subset of the outputs in the output group, specify a list of them here. public var additionalManifests: [MediaConvertClientTypes.DashAdditionalManifest]? - /// Use this setting only when your audio codec is a Dolby one (AC3, EAC3, or Atmos) and your downstream workflow requires that your DASH manifest use the Dolby channel configuration tag, rather than the MPEG one. For example, you might need to use this to make dynamic ad insertion work. Specify which audio channel configuration scheme ID URI MediaConvert writes in your DASH manifest. Keep the default value, MPEG channel configuration (MPEG_CHANNEL_CONFIGURATION), to have MediaConvert write this: urn:mpeg:mpegB:cicp:ChannelConfiguration. Choose Dolby channel configuration (DOLBY_CHANNEL_CONFIGURATION) to have MediaConvert write this instead: tag:dolby.com,2014:dash:audio_channel_configuration:2011. + /// Use this setting only when your audio codec is a Dolby one (AC3, EAC3, or Atmos) and your downstream workflow requires that your DASH manifest use the Dolby channel configuration tag, rather than the MPEG one. For example, you might need to use this to make dynamic ad insertion work. Specify which audio channel configuration scheme ID URI MediaConvert writes in your DASH manifest. Keep the default value, MPEG channel configuration, to have MediaConvert write this: urn:mpeg:mpegB:cicp:ChannelConfiguration. Choose Dolby channel configuration to have MediaConvert write this instead: tag:dolby.com,2014:dash:audio_channel_configuration:2011. public var audioChannelConfigSchemeIdUri: MediaConvertClientTypes.DashIsoGroupAudioChannelConfigSchemeIdUri? /// A partial URI prefix that will be put in the manifest (.mpd) file at the top level BaseURL element. Can be used if streams are delivered from a different URL than the manifest file. public var baseUrl: Swift.String? /// Specify how MediaConvert writes SegmentTimeline in your output DASH manifest. To write a SegmentTimeline in each video Representation: Keep the default value, Basic. To write a common SegmentTimeline in the video AdaptationSet: Choose Compact. Note that MediaConvert will still write a SegmentTimeline in any Representation that does not share a common timeline. To write a video AdaptationSet for each different output framerate, and a common SegmentTimeline in each AdaptationSet: Choose Distinct. public var dashManifestStyle: MediaConvertClientTypes.DashManifestStyle? - /// Use Destination (Destination) to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. + /// Use Destination to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. public var destination: Swift.String? /// Settings associated with the destination. Will vary based on the type of destination public var destinationSettings: MediaConvertClientTypes.DestinationSettings? @@ -8696,7 +8696,7 @@ extension MediaConvertClientTypes { public var fragmentLength: Swift.Int? /// Supports HbbTV specification as indicated public var hbbtvCompliance: MediaConvertClientTypes.DashIsoHbbtvCompliance? - /// Specify whether MediaConvert generates images for trick play. Keep the default value, None (NONE), to not generate any images. Choose Thumbnail (THUMBNAIL) to generate tiled thumbnails. Choose Thumbnail and full frame (THUMBNAIL_AND_FULLFRAME) to generate tiled thumbnails and full-resolution images of single frames. MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md + /// Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md public var imageBasedTrickPlay: MediaConvertClientTypes.DashIsoImageBasedTrickPlay? /// Tile and thumbnail settings applicable when imageBasedTrickPlay is ADVANCED public var imageBasedTrickPlaySettings: MediaConvertClientTypes.DashIsoImageBasedTrickPlaySettings? @@ -8706,15 +8706,15 @@ extension MediaConvertClientTypes { public var minFinalSegmentLength: Swift.Double? /// Specify how the value for bandwidth is determined for each video Representation in your output MPD manifest. We recommend that you choose a MPD manifest bandwidth type that is compatible with your downstream player configuration. Max: Use the same value that you specify for Max bitrate in the video output, in bits per second. Average: Use the calculated average bitrate of the encoded video output, in bits per second. public var mpdManifestBandwidthType: MediaConvertClientTypes.DashIsoMpdManifestBandwidthType? - /// Specify whether your DASH profile is on-demand or main. When you choose Main profile (MAIN_PROFILE), the service signals urn:mpeg:dash:profile:isoff-main:2011 in your .mpd DASH manifest. When you choose On-demand (ON_DEMAND_PROFILE), the service signals urn:mpeg:dash:profile:isoff-on-demand:2011 in your .mpd. When you choose On-demand, you must also set the output group setting Segment control (SegmentControl) to Single file (SINGLE_FILE). + /// Specify whether your DASH profile is on-demand or main. When you choose Main profile, the service signals urn:mpeg:dash:profile:isoff-main:2011 in your .mpd DASH manifest. When you choose On-demand, the service signals urn:mpeg:dash:profile:isoff-on-demand:2011 in your .mpd. When you choose On-demand, you must also set the output group setting Segment control to Single file. public var mpdProfile: MediaConvertClientTypes.DashIsoMpdProfile? - /// Use this setting only when your output video stream has B-frames, which causes the initial presentation time stamp (PTS) to be offset from the initial decode time stamp (DTS). Specify how MediaConvert handles PTS when writing time stamps in output DASH manifests. Choose Match initial PTS (MATCH_INITIAL_PTS) when you want MediaConvert to use the initial PTS as the first time stamp in the manifest. Choose Zero-based (ZERO_BASED) to have MediaConvert ignore the initial PTS in the video stream and instead write the initial time stamp as zero in the manifest. For outputs that don't have B-frames, the time stamps in your DASH manifests start at zero regardless of your choice here. + /// Use this setting only when your output video stream has B-frames, which causes the initial presentation time stamp (PTS) to be offset from the initial decode time stamp (DTS). Specify how MediaConvert handles PTS when writing time stamps in output DASH manifests. Choose Match initial PTS when you want MediaConvert to use the initial PTS as the first time stamp in the manifest. Choose Zero-based to have MediaConvert ignore the initial PTS in the video stream and instead write the initial time stamp as zero in the manifest. For outputs that don't have B-frames, the time stamps in your DASH manifests start at zero regardless of your choice here. public var ptsOffsetHandlingForBFrames: MediaConvertClientTypes.DashIsoPtsOffsetHandlingForBFrames? /// When set to SINGLE_FILE, a single output file is generated, which is internally segmented using the Fragment Length and Segment Length. When set to SEGMENTED_FILES, separate segment files will be created. public var segmentControl: MediaConvertClientTypes.DashIsoSegmentControl? - /// Specify the length, in whole seconds, of each segment. When you don't specify a value, MediaConvert defaults to 30. Related settings: Use Segment length control (SegmentLengthControl) to specify whether the encoder enforces this value strictly. Use Segment control (DashIsoSegmentControl) to specify whether MediaConvert creates separate segment files or one content file that has metadata to mark the segment boundaries. + /// Specify the length, in whole seconds, of each segment. When you don't specify a value, MediaConvert defaults to 30. Related settings: Use Segment length control to specify whether the encoder enforces this value strictly. Use Segment control to specify whether MediaConvert creates separate segment files or one content file that has metadata to mark the segment boundaries. public var segmentLength: Swift.Int? - /// Specify how you want MediaConvert to determine the segment length. Choose Exact (EXACT) to have the encoder use the exact length that you specify with the setting Segment length (SegmentLength). This might result in extra I-frames. Choose Multiple of GOP (GOP_MULTIPLE) to have the encoder round up the segment lengths to match the next GOP boundary. + /// Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary. public var segmentLengthControl: MediaConvertClientTypes.DashIsoSegmentLengthControl? /// Specify the video sample composition time offset mode in the output fMP4 TRUN box. For wider player compatibility, set Video composition offsets to Unsigned or leave blank. The earliest presentation time may be greater than zero, and sample composition time offsets will increment using unsigned integers. For strict fMP4 video and audio timing, set Video composition offsets to Signed. The earliest presentation time will be equal to zero, and sample composition time offsets will increment using signed integers. public var videoCompositionOffsets: MediaConvertClientTypes.DashIsoVideoCompositionOffsets? @@ -8805,7 +8805,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether MediaConvert generates images for trick play. Keep the default value, None (NONE), to not generate any images. Choose Thumbnail (THUMBNAIL) to generate tiled thumbnails. Choose Thumbnail and full frame (THUMBNAIL_AND_FULLFRAME) to generate tiled thumbnails and full-resolution images of single frames. MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md + /// Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. MediaConvert adds an entry in the .mpd manifest for each set of images that you generate. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md public enum DashIsoImageBasedTrickPlay: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case advanced case `none` @@ -8995,7 +8995,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether your DASH profile is on-demand or main. When you choose Main profile (MAIN_PROFILE), the service signals urn:mpeg:dash:profile:isoff-main:2011 in your .mpd DASH manifest. When you choose On-demand (ON_DEMAND_PROFILE), the service signals urn:mpeg:dash:profile:isoff-on-demand:2011 in your .mpd. When you choose On-demand, you must also set the output group setting Segment control (SegmentControl) to Single file (SINGLE_FILE). + /// Specify whether your DASH profile is on-demand or main. When you choose Main profile, the service signals urn:mpeg:dash:profile:isoff-main:2011 in your .mpd DASH manifest. When you choose On-demand, the service signals urn:mpeg:dash:profile:isoff-on-demand:2011 in your .mpd. When you choose On-demand, you must also set the output group setting Segment control to Single file. public enum DashIsoMpdProfile: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case mainProfile case onDemandProfile @@ -9028,7 +9028,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// This setting can improve the compatibility of your output with video players on obsolete devices. It applies only to DASH H.264 outputs with DRM encryption. Choose Unencrypted SEI (UNENCRYPTED_SEI) only to correct problems with playback on older devices. Otherwise, keep the default setting CENC v1 (CENC_V1). If you choose Unencrypted SEI, for that output, the service will exclude the access unit delimiter and will leave the SEI NAL units unencrypted. + /// This setting can improve the compatibility of your output with video players on obsolete devices. It applies only to DASH H.264 outputs with DRM encryption. Choose Unencrypted SEI only to correct problems with playback on older devices. Otherwise, keep the default setting CENC v1. If you choose Unencrypted SEI, for that output, the service will exclude the access unit delimiter and will leave the SEI NAL units unencrypted. public enum DashIsoPlaybackDeviceCompatibility: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case cencV1 case unencryptedSei @@ -9061,7 +9061,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting only when your output video stream has B-frames, which causes the initial presentation time stamp (PTS) to be offset from the initial decode time stamp (DTS). Specify how MediaConvert handles PTS when writing time stamps in output DASH manifests. Choose Match initial PTS (MATCH_INITIAL_PTS) when you want MediaConvert to use the initial PTS as the first time stamp in the manifest. Choose Zero-based (ZERO_BASED) to have MediaConvert ignore the initial PTS in the video stream and instead write the initial time stamp as zero in the manifest. For outputs that don't have B-frames, the time stamps in your DASH manifests start at zero regardless of your choice here. + /// Use this setting only when your output video stream has B-frames, which causes the initial presentation time stamp (PTS) to be offset from the initial decode time stamp (DTS). Specify how MediaConvert handles PTS when writing time stamps in output DASH manifests. Choose Match initial PTS when you want MediaConvert to use the initial PTS as the first time stamp in the manifest. Choose Zero-based to have MediaConvert ignore the initial PTS in the video stream and instead write the initial time stamp as zero in the manifest. For outputs that don't have B-frames, the time stamps in your DASH manifests start at zero regardless of your choice here. public enum DashIsoPtsOffsetHandlingForBFrames: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case matchInitialPts case zeroBased @@ -9127,7 +9127,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify how you want MediaConvert to determine the segment length. Choose Exact (EXACT) to have the encoder use the exact length that you specify with the setting Segment length (SegmentLength). This might result in extra I-frames. Choose Multiple of GOP (GOP_MULTIPLE) to have the encoder round up the segment lengths to match the next GOP boundary. + /// Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary. public enum DashIsoSegmentLengthControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case exact case gopMultiple @@ -9193,7 +9193,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you enable Precise segment duration in manifests (writeSegmentTimelineInRepresentation), your DASH manifest shows precise segment durations. The segment duration information appears inside the SegmentTimeline element, inside SegmentTemplate at the Representation level. When this feature isn't enabled, the segment durations in your DASH manifest are approximate. The segment duration information appears in the duration attribute of the SegmentTemplate element. + /// When you enable Precise segment duration in manifests, your DASH manifest shows precise segment durations. The segment duration information appears inside the SegmentTimeline element, inside SegmentTemplate at the Representation level. When this feature isn't enabled, the segment durations in your DASH manifest are approximate. The segment duration information appears in the duration attribute of the SegmentTemplate element. public enum DashIsoWriteSegmentTimelineInRepresentation: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -9377,7 +9377,13 @@ extension MediaConvertClientTypes { public var algorithm: MediaConvertClientTypes.DeinterlaceAlgorithm? /// * When set to NORMAL (default), the deinterlacer does not convert frames that are tagged in metadata as progressive. It will only convert those that are tagged as some other type. - When set to FORCE_ALL_FRAMES, the deinterlacer converts every frame to progressive - even those that are already tagged as progressive. Turn Force mode on only if there is a good chance that the metadata has tagged frames as progressive when they are not progressive. Do not turn on otherwise; processing frames that are already progressive into progressive will probably result in lower quality video. public var control: MediaConvertClientTypes.DeinterlacerControl? - /// Use Deinterlacer (DeinterlaceMode) to choose how the service will do deinterlacing. Default is Deinterlace. - Deinterlace converts interlaced to progressive. - Inverse telecine converts Hard Telecine 29.97i to progressive 23.976p. - Adaptive auto-detects and converts to progressive. + /// Use Deinterlacer to choose how the service will do deinterlacing. Default is Deinterlace. + /// + /// * Deinterlace converts interlaced to progressive. + /// + /// * Inverse telecine converts Hard Telecine 29.97i to progressive 23.976p. + /// + /// * Adaptive auto-detects and converts to progressive. public var mode: MediaConvertClientTypes.DeinterlacerMode? public init( @@ -9428,7 +9434,13 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Deinterlacer (DeinterlaceMode) to choose how the service will do deinterlacing. Default is Deinterlace. - Deinterlace converts interlaced to progressive. - Inverse telecine converts Hard Telecine 29.97i to progressive 23.976p. - Adaptive auto-detects and converts to progressive. + /// Use Deinterlacer to choose how the service will do deinterlacing. Default is Deinterlace. + /// + /// * Deinterlace converts interlaced to progressive. + /// + /// * Inverse telecine converts Hard Telecine 29.97i to progressive 23.976p. + /// + /// * Adaptive auto-detects and converts to progressive. public enum DeinterlacerMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case adaptive case deinterlace @@ -10165,7 +10177,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Applies only to 29.97 fps outputs. When this feature is enabled, the service will use drop-frame timecode on outputs. If it is not possible to use drop-frame timecode, the system will fall back to non-drop-frame. This setting is enabled by default when Timecode insertion (TimecodeInsertion) is enabled. + /// Applies only to 29.97 fps outputs. When this feature is enabled, the service will use drop-frame timecode on outputs. If it is not possible to use drop-frame timecode, the system will fall back to non-drop-frame. This setting is enabled by default when Timecode insertion is enabled. public enum DropFrameTimecode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -10229,7 +10241,7 @@ extension MediaConvertClientTypes.DvbNitSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Use these settings to insert a DVB Network Information Table (NIT) in the transport stream of this output. When you work directly in your JSON job specification, include this object only when your job has a transport stream output and the container settings contain the object M2tsSettings. + /// Use these settings to insert a DVB Network Information Table (NIT) in the transport stream of this output. public struct DvbNitSettings: Swift.Equatable { /// The numeric value placed in the Network Information Table (NIT). public var networkId: Swift.Int? @@ -10290,7 +10302,7 @@ extension MediaConvertClientTypes.DvbSdtSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Use these settings to insert a DVB Service Description Table (SDT) in the transport stream of this output. When you work directly in your JSON job specification, include this object only when your job has a transport stream output and the container settings contain the object M2tsSettings. + /// Use these settings to insert a DVB Service Description Table (SDT) in the transport stream of this output. public struct DvbSdtSettings: Swift.Equatable { /// Selects method of inserting SDT information into output stream. "Follow input SDT" copies SDT information from input stream to output stream. "Follow input SDT if present" copies SDT information from input stream to output stream if SDT information is present in the input, otherwise it will fall back on the user-defined values. Enter "SDT Manually" means user will enter the SDT information. "No SDT" means output stream will not contain SDT information. public var outputSdt: MediaConvertClientTypes.OutputSdt? @@ -10493,61 +10505,61 @@ extension MediaConvertClientTypes.DvbSubDestinationSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to DVB-Sub captions. Set up DVB-Sub captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/dvb-sub-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to DVB_SUB. + /// Settings related to DVB-Sub captions. Set up DVB-Sub captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/dvb-sub-output-captions.html. public struct DvbSubDestinationSettings: Swift.Equatable { /// Specify the alignment of your captions. If no explicit x_position is provided, setting alignment to centered will placethe captions at the bottom center of the output. Similarly, setting a left alignment willalign captions to the bottom left of the output. If x and y positions are given in conjunction with the alignment parameter, the font will be justified (either left or centered) relative to those coordinates. Within your job settings, all of your DVB-Sub settings must be identical. public var alignment: MediaConvertClientTypes.DvbSubtitleAlignment? - /// Ignore this setting unless Style Passthrough (StylePassthrough) is set to Enabled and Font color (FontColor) set to Black, Yellow, Red, Green, Blue, or Hex. Use Apply font color (ApplyFontColor) for additional font color controls. When you choose White text only (WHITE_TEXT_ONLY), or leave blank, your font color setting only applies to white text in your input captions. For example, if your font color setting is Yellow, and your input captions have red and white text, your output captions will have red and yellow text. When you choose ALL_TEXT, your font color setting applies to all of your output captions text. + /// Ignore this setting unless Style Passthrough is set to Enabled and Font color set to Black, Yellow, Red, Green, Blue, or Hex. Use Apply font color for additional font color controls. When you choose White text only, or leave blank, your font color setting only applies to white text in your input captions. For example, if your font color setting is Yellow, and your input captions have red and white text, your output captions will have red and yellow text. When you choose ALL_TEXT, your font color setting applies to all of your output captions text. public var applyFontColor: MediaConvertClientTypes.DvbSubtitleApplyFontColor? - /// Specify the color of the rectangle behind the captions. Leave background color (BackgroundColor) blank and set Style passthrough (StylePassthrough) to enabled to use the background color data from your input captions, if present. + /// Specify the color of the rectangle behind the captions. Leave background color blank and set Style passthrough to enabled to use the background color data from your input captions, if present. public var backgroundColor: MediaConvertClientTypes.DvbSubtitleBackgroundColor? - /// Specify the opacity of the background rectangle. Enter a value from 0 to 255, where 0 is transparent and 255 is opaque. If Style passthrough (StylePassthrough) is set to enabled, leave blank to pass through the background style information in your input captions to your output captions. If Style passthrough is set to disabled, leave blank to use a value of 0 and remove all backgrounds from your output captions. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the opacity of the background rectangle. Enter a value from 0 to 255, where 0 is transparent and 255 is opaque. If Style passthrough is set to enabled, leave blank to pass through the background style information in your input captions to your output captions. If Style passthrough is set to disabled, leave blank to use a value of 0 and remove all backgrounds from your output captions. Within your job settings, all of your DVB-Sub settings must be identical. public var backgroundOpacity: Swift.Int? /// Specify how MediaConvert handles the display definition segment (DDS). To exclude the DDS from this set of captions: Keep the default, None. To include the DDS: Choose Specified. When you do, also specify the offset coordinates of the display window with DDS x-coordinate and DDS y-coordinate. To include the DDS, but not include display window data: Choose No display window. When you do, you can write position metadata to the page composition segment (PCS) with DDS x-coordinate and DDS y-coordinate. For video resolutions with a height of 576 pixels or less, MediaConvert doesn't include the DDS, regardless of the value you choose for DDS handling. All burn-in and DVB-Sub font settings must match. public var ddsHandling: MediaConvertClientTypes.DvbddsHandling? - /// Use this setting, along with DDS y-coordinate (ddsYCoordinate), to specify the upper left corner of the display definition segment (DDS) display window. With this setting, specify the distance, in pixels, between the left side of the frame and the left side of the DDS display window. Keep the default value, 0, to have MediaConvert automatically choose this offset. Related setting: When you use this setting, you must set DDS handling (ddsHandling) to a value other than None (NONE). MediaConvert uses these values to determine whether to write page position data to the DDS or to the page composition segment (PCS). All burn-in and DVB-Sub font settings must match. + /// Use this setting, along with DDS y-coordinate, to specify the upper left corner of the display definition segment (DDS) display window. With this setting, specify the distance, in pixels, between the left side of the frame and the left side of the DDS display window. Keep the default value, 0, to have MediaConvert automatically choose this offset. Related setting: When you use this setting, you must set DDS handling to a value other than None. MediaConvert uses these values to determine whether to write page position data to the DDS or to the page composition segment. All burn-in and DVB-Sub font settings must match. public var ddsXCoordinate: Swift.Int? - /// Use this setting, along with DDS x-coordinate (ddsXCoordinate), to specify the upper left corner of the display definition segment (DDS) display window. With this setting, specify the distance, in pixels, between the top of the frame and the top of the DDS display window. Keep the default value, 0, to have MediaConvert automatically choose this offset. Related setting: When you use this setting, you must set DDS handling (ddsHandling) to a value other than None (NONE). MediaConvert uses these values to determine whether to write page position data to the DDS or to the page composition segment (PCS). All burn-in and DVB-Sub font settings must match. + /// Use this setting, along with DDS x-coordinate, to specify the upper left corner of the display definition segment (DDS) display window. With this setting, specify the distance, in pixels, between the top of the frame and the top of the DDS display window. Keep the default value, 0, to have MediaConvert automatically choose this offset. Related setting: When you use this setting, you must set DDS handling to a value other than None. MediaConvert uses these values to determine whether to write page position data to the DDS or to the page composition segment (PCS). All burn-in and DVB-Sub font settings must match. public var ddsYCoordinate: Swift.Int? - /// Specify the font that you want the service to use for your burn in captions when your input captions specify a font that MediaConvert doesn't support. When you set Fallback font (FallbackFont) to best match (BEST_MATCH), or leave blank, MediaConvert uses a supported font that most closely matches the font that your input captions specify. When there are multiple unsupported fonts in your input captions, MediaConvert matches each font with the supported font that matches best. When you explicitly choose a replacement font, MediaConvert uses that font to replace all unsupported fonts from your input. + /// Specify the font that you want the service to use for your burn in captions when your input captions specify a font that MediaConvert doesn't support. When you set Fallback font to best match, or leave blank, MediaConvert uses a supported font that most closely matches the font that your input captions specify. When there are multiple unsupported fonts in your input captions, MediaConvert matches each font with the supported font that matches best. When you explicitly choose a replacement font, MediaConvert uses that font to replace all unsupported fonts from your input. public var fallbackFont: MediaConvertClientTypes.DvbSubSubtitleFallbackFont? - /// Specify the color of the captions text. Leave Font color (FontColor) blank and set Style passthrough (StylePassthrough) to enabled to use the font color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the color of the captions text. Leave Font color blank and set Style passthrough to enabled to use the font color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. public var fontColor: MediaConvertClientTypes.DvbSubtitleFontColor? /// Specify the opacity of the burned-in captions. 255 is opaque; 0 is transparent. Within your job settings, all of your DVB-Sub settings must be identical. public var fontOpacity: Swift.Int? - /// Specify the Font resolution (FontResolution) in DPI (dots per inch). Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the Font resolution in DPI (dots per inch). Within your job settings, all of your DVB-Sub settings must be identical. public var fontResolution: Swift.Int? - /// Set Font script (FontScript) to Automatically determined (AUTOMATIC), or leave blank, to automatically determine the font script in your input captions. Otherwise, set to Simplified Chinese (HANS) or Traditional Chinese (HANT) if your input font script uses Simplified or Traditional Chinese. Within your job settings, all of your DVB-Sub settings must be identical. + /// Set Font script to Automatically determined, or leave blank, to automatically determine the font script in your input captions. Otherwise, set to Simplified Chinese (HANS) or Traditional Chinese (HANT) if your input font script uses Simplified or Traditional Chinese. Within your job settings, all of your DVB-Sub settings must be identical. public var fontScript: MediaConvertClientTypes.FontScript? - /// Specify the Font size (FontSize) in pixels. Must be a positive integer. Set to 0, or leave blank, for automatic font size. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the Font size in pixels. Must be a positive integer. Set to 0, or leave blank, for automatic font size. Within your job settings, all of your DVB-Sub settings must be identical. public var fontSize: Swift.Int? - /// Specify the height, in pixels, of this set of DVB-Sub captions. The default value is 576 pixels. Related setting: When you use this setting, you must set DDS handling (ddsHandling) to a value other than None (NONE). All burn-in and DVB-Sub font settings must match. + /// Specify the height, in pixels, of this set of DVB-Sub captions. The default value is 576 pixels. Related setting: When you use this setting, you must set DDS handling to a value other than None. All burn-in and DVB-Sub font settings must match. public var height: Swift.Int? /// Ignore this setting unless your Font color is set to Hex. Enter either six or eight hexidecimal digits, representing red, green, and blue, with two optional extra digits for alpha. For example a value of 1122AABB is a red value of 0x11, a green value of 0x22, a blue value of 0xAA, and an alpha value of 0xBB. public var hexFontColor: Swift.String? - /// Specify font outline color. Leave Outline color (OutlineColor) blank and set Style passthrough (StylePassthrough) to enabled to use the font outline color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify font outline color. Leave Outline color blank and set Style passthrough to enabled to use the font outline color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. public var outlineColor: MediaConvertClientTypes.DvbSubtitleOutlineColor? - /// Specify the Outline size (OutlineSize) of the caption text, in pixels. Leave Outline size blank and set Style passthrough (StylePassthrough) to enabled to use the outline size data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the Outline size of the caption text, in pixels. Leave Outline size blank and set Style passthrough to enabled to use the outline size data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. public var outlineSize: Swift.Int? - /// Specify the color of the shadow cast by the captions. Leave Shadow color (ShadowColor) blank and set Style passthrough (StylePassthrough) to enabled to use the shadow color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the color of the shadow cast by the captions. Leave Shadow color blank and set Style passthrough to enabled to use the shadow color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. public var shadowColor: MediaConvertClientTypes.DvbSubtitleShadowColor? - /// Specify the opacity of the shadow. Enter a value from 0 to 255, where 0 is transparent and 255 is opaque. If Style passthrough (StylePassthrough) is set to Enabled, leave Shadow opacity (ShadowOpacity) blank to pass through the shadow style information in your input captions to your output captions. If Style passthrough is set to disabled, leave blank to use a value of 0 and remove all shadows from your output captions. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the opacity of the shadow. Enter a value from 0 to 255, where 0 is transparent and 255 is opaque. If Style passthrough is set to Enabled, leave Shadow opacity blank to pass through the shadow style information in your input captions to your output captions. If Style passthrough is set to disabled, leave blank to use a value of 0 and remove all shadows from your output captions. Within your job settings, all of your DVB-Sub settings must be identical. public var shadowOpacity: Swift.Int? /// Specify the horizontal offset of the shadow, relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels to the left. Within your job settings, all of your DVB-Sub settings must be identical. public var shadowXOffset: Swift.Int? - /// Specify the vertical offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels above the text. Leave Shadow y-offset (ShadowYOffset) blank and set Style passthrough (StylePassthrough) to enabled to use the shadow y-offset data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the vertical offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels above the text. Leave Shadow y-offset blank and set Style passthrough to enabled to use the shadow y-offset data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. public var shadowYOffset: Swift.Int? - /// Set Style passthrough (StylePassthrough) to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use default settings: white text with black outlining, bottom-center positioning, and automatic sizing. Whether you set Style passthrough to enabled or not, you can also choose to manually override any of the individual style and position settings. + /// Set Style passthrough to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use default settings: white text with black outlining, bottom-center positioning, and automatic sizing. Whether you set Style passthrough to enabled or not, you can also choose to manually override any of the individual style and position settings. public var stylePassthrough: MediaConvertClientTypes.DvbSubtitleStylePassthrough? /// Specify whether your DVB subtitles are standard or for hearing impaired. Choose hearing impaired if your subtitles include audio descriptions and dialogue. Choose standard if your subtitles include only dialogue. public var subtitlingType: MediaConvertClientTypes.DvbSubtitlingType? - /// Specify whether the Text spacing (TeletextSpacing) in your captions is set by the captions grid, or varies depending on letter width. Choose fixed grid (FIXED_GRID) to conform to the spacing specified in the captions file more accurately. Choose proportional (PROPORTIONAL) to make the text easier to read for closed captions. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify whether the Text spacing in your captions is set by the captions grid, or varies depending on letter width. Choose fixed grid to conform to the spacing specified in the captions file more accurately. Choose proportional to make the text easier to read for closed captions. Within your job settings, all of your DVB-Sub settings must be identical. public var teletextSpacing: MediaConvertClientTypes.DvbSubtitleTeletextSpacing? - /// Specify the width, in pixels, of this set of DVB-Sub captions. The default value is 720 pixels. Related setting: When you use this setting, you must set DDS handling (ddsHandling) to a value other than None (NONE). All burn-in and DVB-Sub font settings must match. + /// Specify the width, in pixels, of this set of DVB-Sub captions. The default value is 720 pixels. Related setting: When you use this setting, you must set DDS handling to a value other than None. All burn-in and DVB-Sub font settings must match. public var width: Swift.Int? - /// Specify the horizontal position (XPosition) of the captions, relative to the left side of the outputin pixels. A value of 10 would result in the captions starting 10 pixels from the left ofthe output. If no explicit x_position is provided, the horizontal caption position will bedetermined by the alignment parameter. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the horizontal position of the captions, relative to the left side of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the left of the output. If no explicit x_position is provided, the horizontal caption position will be determined by the alignment parameter. Within your job settings, all of your DVB-Sub settings must be identical. public var xPosition: Swift.Int? - /// Specify the vertical position (YPosition) of the captions, relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit y_position is provided, the caption will be positioned towards the bottom of the output. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the vertical position of the captions, relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit y_position is provided, the caption will be positioned towards the bottom of the output. Within your job settings, all of your DVB-Sub settings must be identical. public var yPosition: Swift.Int? public init( @@ -10648,7 +10660,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the font that you want the service to use for your burn in captions when your input captions specify a font that MediaConvert doesn't support. When you set Fallback font (FallbackFont) to best match (BEST_MATCH), or leave blank, MediaConvert uses a supported font that most closely matches the font that your input captions specify. When there are multiple unsupported fonts in your input captions, MediaConvert matches each font with the supported font that matches best. When you explicitly choose a replacement font, MediaConvert uses that font to replace all unsupported fonts from your input. + /// Specify the font that you want the service to use for your burn in captions when your input captions specify a font that MediaConvert doesn't support. When you set Fallback font to best match, or leave blank, MediaConvert uses a supported font that most closely matches the font that your input captions specify. When there are multiple unsupported fonts in your input captions, MediaConvert matches each font with the supported font that matches best. When you explicitly choose a replacement font, MediaConvert uses that font to replace all unsupported fonts from your input. public enum DvbSubSubtitleFallbackFont: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bestMatch case monospacedSansserif @@ -10726,7 +10738,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless Style Passthrough (StylePassthrough) is set to Enabled and Font color (FontColor) set to Black, Yellow, Red, Green, Blue, or Hex. Use Apply font color (ApplyFontColor) for additional font color controls. When you choose White text only (WHITE_TEXT_ONLY), or leave blank, your font color setting only applies to white text in your input captions. For example, if your font color setting is Yellow, and your input captions have red and white text, your output captions will have red and yellow text. When you choose ALL_TEXT, your font color setting applies to all of your output captions text. + /// Ignore this setting unless Style Passthrough is set to Enabled and Font color set to Black, Yellow, Red, Green, Blue, or Hex. Use Apply font color for additional font color controls. When you choose White text only, or leave blank, your font color setting only applies to white text in your input captions. For example, if your font color setting is Yellow, and your input captions have red and white text, your output captions will have red and yellow text. When you choose ALL_TEXT, your font color setting applies to all of your output captions text. public enum DvbSubtitleApplyFontColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case allText case whiteTextOnly @@ -10759,7 +10771,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the color of the rectangle behind the captions. Leave background color (BackgroundColor) blank and set Style passthrough (StylePassthrough) to enabled to use the background color data from your input captions, if present. + /// Specify the color of the rectangle behind the captions. Leave background color blank and set Style passthrough to enabled to use the background color data from your input captions, if present. public enum DvbSubtitleBackgroundColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case black @@ -10798,7 +10810,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the color of the captions text. Leave Font color (FontColor) blank and set Style passthrough (StylePassthrough) to enabled to use the font color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the color of the captions text. Leave Font color blank and set Style passthrough to enabled to use the font color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. public enum DvbSubtitleFontColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case black @@ -10849,7 +10861,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify font outline color. Leave Outline color (OutlineColor) blank and set Style passthrough (StylePassthrough) to enabled to use the font outline color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify font outline color. Leave Outline color blank and set Style passthrough to enabled to use the font outline color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. public enum DvbSubtitleOutlineColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case black @@ -10897,7 +10909,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the color of the shadow cast by the captions. Leave Shadow color (ShadowColor) blank and set Style passthrough (StylePassthrough) to enabled to use the shadow color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify the color of the shadow cast by the captions. Leave Shadow color blank and set Style passthrough to enabled to use the shadow color data from your input captions, if present. Within your job settings, all of your DVB-Sub settings must be identical. public enum DvbSubtitleShadowColor: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case black @@ -10936,7 +10948,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Set Style passthrough (StylePassthrough) to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use default settings: white text with black outlining, bottom-center positioning, and automatic sizing. Whether you set Style passthrough to enabled or not, you can also choose to manually override any of the individual style and position settings. + /// Set Style passthrough to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use default settings: white text with black outlining, bottom-center positioning, and automatic sizing. Whether you set Style passthrough to enabled or not, you can also choose to manually override any of the individual style and position settings. public enum DvbSubtitleStylePassthrough: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -10969,7 +10981,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether the Text spacing (TeletextSpacing) in your captions is set by the captions grid, or varies depending on letter width. Choose fixed grid (FIXED_GRID) to conform to the spacing specified in the captions file more accurately. Choose proportional (PROPORTIONAL) to make the text easier to read for closed captions. Within your job settings, all of your DVB-Sub settings must be identical. + /// Specify whether the Text spacing in your captions is set by the captions grid, or varies depending on letter width. Choose fixed grid to conform to the spacing specified in the captions file more accurately. Choose proportional to make the text easier to read for closed captions. Within your job settings, all of your DVB-Sub settings must be identical. public enum DvbSubtitleTeletextSpacing: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case fixedGrid @@ -11057,7 +11069,7 @@ extension MediaConvertClientTypes.DvbTdtSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Use these settings to insert a DVB Time and Date Table (TDT) in the transport stream of this output. When you work directly in your JSON job specification, include this object only when your job has a transport stream output and the container settings contain the object M2tsSettings. + /// Use these settings to insert a DVB Time and Date Table (TDT) in the transport stream of this output. public struct DvbTdtSettings: Swift.Equatable { /// The number of milliseconds between instances of this table in the output transport stream. public var tdtInterval: Swift.Int? @@ -11211,7 +11223,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether MediaConvert should use any downmix metadata from your input file. Keep the default value, Custom (SPECIFIED) to provide downmix values in your job settings. Choose Follow source (INITIALIZE_FROM_SOURCE) to use the metadata from your input. Related settings--Use these settings to specify your downmix values: Left only/Right only surround (LoRoSurroundMixLevel), Left total/Right total surround (LtRtSurroundMixLevel), Left total/Right total center (LtRtCenterMixLevel), Left only/Right only center (LoRoCenterMixLevel), and Stereo downmix (StereoDownmix). When you keep Custom (SPECIFIED) for Downmix control (DownmixControl) and you don't specify values for the related settings, MediaConvert uses default values for those settings. + /// Specify whether MediaConvert should use any downmix metadata from your input file. Keep the default value, Custom to provide downmix values in your job settings. Choose Follow source to use the metadata from your input. Related settings--Use these settings to specify your downmix values: Left only/Right only surround, Left total/Right total surround, Left total/Right total center, Left only/Right only center, and Stereo downmix. When you keep Custom for Downmix control and you don't specify values for the related settings, MediaConvert uses default values for those settings. public enum Eac3AtmosDownmixControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -11244,7 +11256,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the Dolby dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby stream for the line operating mode. Default value: Film light (ATMOS_STORAGE_DDP_COMPR_FILM_LIGHT) Related setting: To have MediaConvert use the value you specify here, keep the default value, Custom (SPECIFIED) for the setting Dynamic range control (DynamicRangeControl). Otherwise, MediaConvert ignores Dynamic range compression line (DynamicRangeCompressionLine). For information about the Dolby DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby stream for the line operating mode. Default value: Film light Related setting: To have MediaConvert use the value you specify here, keep the default value, Custom for the setting Dynamic range control. Otherwise, MediaConvert ignores Dynamic range compression line. For information about the Dolby DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public enum Eac3AtmosDynamicRangeCompressionLine: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case filmLight case filmStandard @@ -11289,7 +11301,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the Dolby dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby stream for the RF operating mode. Default value: Film light (ATMOS_STORAGE_DDP_COMPR_FILM_LIGHT) Related setting: To have MediaConvert use the value you specify here, keep the default value, Custom (SPECIFIED) for the setting Dynamic range control (DynamicRangeControl). Otherwise, MediaConvert ignores Dynamic range compression RF (DynamicRangeCompressionRf). For information about the Dolby DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby stream for the RF operating mode. Default value: Film light Related setting: To have MediaConvert use the value you specify here, keep the default value, Custom for the setting Dynamic range control. Otherwise, MediaConvert ignores Dynamic range compression RF. For information about the Dolby DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public enum Eac3AtmosDynamicRangeCompressionRf: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case filmLight case filmStandard @@ -11334,7 +11346,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether MediaConvert should use any dynamic range control metadata from your input file. Keep the default value, Custom (SPECIFIED), to provide dynamic range control values in your job settings. Choose Follow source (INITIALIZE_FROM_SOURCE) to use the metadata from your input. Related settings--Use these settings to specify your dynamic range control values: Dynamic range compression line (DynamicRangeCompressionLine) and Dynamic range compression RF (DynamicRangeCompressionRf). When you keep the value Custom (SPECIFIED) for Dynamic range control (DynamicRangeControl) and you don't specify values for the related settings, MediaConvert uses default values for those settings. + /// Specify whether MediaConvert should use any dynamic range control metadata from your input file. Keep the default value, Custom, to provide dynamic range control values in your job settings. Choose Follow source to use the metadata from your input. Related settings--Use these settings to specify your dynamic range control values: Dynamic range compression line and Dynamic range compression RF. When you keep the value Custom for Dynamic range control and you don't specify values for the related settings, MediaConvert uses default values for those settings. public enum Eac3AtmosDynamicRangeControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -11524,7 +11536,7 @@ extension MediaConvertClientTypes.Eac3AtmosSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value EAC3_ATMOS. + /// Required when you set Codec to the value EAC3_ATMOS. public struct Eac3AtmosSettings: Swift.Equatable { /// Specify the average bitrate for this output in bits per second. Valid values: 384k, 448k, 576k, 640k, 768k, 1024k Default value: 448k Note that MediaConvert supports 384k only with channel-based immersive (CBI) 7.1.4 and 5.1.4 inputs. For CBI 9.1.6 and other input types, MediaConvert automatically increases your output bitrate to 448k. public var bitrate: Swift.Int? @@ -11534,21 +11546,21 @@ extension MediaConvertClientTypes { public var codingMode: MediaConvertClientTypes.Eac3AtmosCodingMode? /// Enable Dolby Dialogue Intelligence to adjust loudness based on dialogue analysis. public var dialogueIntelligence: MediaConvertClientTypes.Eac3AtmosDialogueIntelligence? - /// Specify whether MediaConvert should use any downmix metadata from your input file. Keep the default value, Custom (SPECIFIED) to provide downmix values in your job settings. Choose Follow source (INITIALIZE_FROM_SOURCE) to use the metadata from your input. Related settings--Use these settings to specify your downmix values: Left only/Right only surround (LoRoSurroundMixLevel), Left total/Right total surround (LtRtSurroundMixLevel), Left total/Right total center (LtRtCenterMixLevel), Left only/Right only center (LoRoCenterMixLevel), and Stereo downmix (StereoDownmix). When you keep Custom (SPECIFIED) for Downmix control (DownmixControl) and you don't specify values for the related settings, MediaConvert uses default values for those settings. + /// Specify whether MediaConvert should use any downmix metadata from your input file. Keep the default value, Custom to provide downmix values in your job settings. Choose Follow source to use the metadata from your input. Related settings--Use these settings to specify your downmix values: Left only/Right only surround, Left total/Right total surround, Left total/Right total center, Left only/Right only center, and Stereo downmix. When you keep Custom for Downmix control and you don't specify values for the related settings, MediaConvert uses default values for those settings. public var downmixControl: MediaConvertClientTypes.Eac3AtmosDownmixControl? - /// Choose the Dolby dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby stream for the line operating mode. Default value: Film light (ATMOS_STORAGE_DDP_COMPR_FILM_LIGHT) Related setting: To have MediaConvert use the value you specify here, keep the default value, Custom (SPECIFIED) for the setting Dynamic range control (DynamicRangeControl). Otherwise, MediaConvert ignores Dynamic range compression line (DynamicRangeCompressionLine). For information about the Dolby DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby stream for the line operating mode. Default value: Film light Related setting: To have MediaConvert use the value you specify here, keep the default value, Custom for the setting Dynamic range control. Otherwise, MediaConvert ignores Dynamic range compression line. For information about the Dolby DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public var dynamicRangeCompressionLine: MediaConvertClientTypes.Eac3AtmosDynamicRangeCompressionLine? - /// Choose the Dolby dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby stream for the RF operating mode. Default value: Film light (ATMOS_STORAGE_DDP_COMPR_FILM_LIGHT) Related setting: To have MediaConvert use the value you specify here, keep the default value, Custom (SPECIFIED) for the setting Dynamic range control (DynamicRangeControl). Otherwise, MediaConvert ignores Dynamic range compression RF (DynamicRangeCompressionRf). For information about the Dolby DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby stream for the RF operating mode. Default value: Film light Related setting: To have MediaConvert use the value you specify here, keep the default value, Custom for the setting Dynamic range control. Otherwise, MediaConvert ignores Dynamic range compression RF. For information about the Dolby DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public var dynamicRangeCompressionRf: MediaConvertClientTypes.Eac3AtmosDynamicRangeCompressionRf? - /// Specify whether MediaConvert should use any dynamic range control metadata from your input file. Keep the default value, Custom (SPECIFIED), to provide dynamic range control values in your job settings. Choose Follow source (INITIALIZE_FROM_SOURCE) to use the metadata from your input. Related settings--Use these settings to specify your dynamic range control values: Dynamic range compression line (DynamicRangeCompressionLine) and Dynamic range compression RF (DynamicRangeCompressionRf). When you keep the value Custom (SPECIFIED) for Dynamic range control (DynamicRangeControl) and you don't specify values for the related settings, MediaConvert uses default values for those settings. + /// Specify whether MediaConvert should use any dynamic range control metadata from your input file. Keep the default value, Custom, to provide dynamic range control values in your job settings. Choose Follow source to use the metadata from your input. Related settings--Use these settings to specify your dynamic range control values: Dynamic range compression line and Dynamic range compression RF. When you keep the value Custom for Dynamic range control and you don't specify values for the related settings, MediaConvert uses default values for those settings. public var dynamicRangeControl: MediaConvertClientTypes.Eac3AtmosDynamicRangeControl? - /// Specify a value for the following Dolby Atmos setting: Left only/Right only center mix (Lo/Ro center). MediaConvert uses this value for downmixing. Default value: -3 dB (ATMOS_STORAGE_DDP_MIXLEV_MINUS_3_DB). Valid values: 3.0, 1.5, 0.0, -1.5, -3.0, -4.5, and -6.0. Related setting: How the service uses this value depends on the value that you choose for Stereo downmix (Eac3AtmosStereoDownmix). Related setting: To have MediaConvert use this value, keep the default value, Custom (SPECIFIED) for the setting Downmix control (DownmixControl). Otherwise, MediaConvert ignores Left only/Right only center (LoRoCenterMixLevel). + /// Specify a value for the following Dolby Atmos setting: Left only/Right only center mix (Lo/Ro center). MediaConvert uses this value for downmixing. Default value: -3 dB. Valid values: 3.0, 1.5, 0.0, -1.5, -3.0, -4.5, and -6.0. Related setting: How the service uses this value depends on the value that you choose for Stereo downmix. Related setting: To have MediaConvert use this value, keep the default value, Custom for the setting Downmix control. Otherwise, MediaConvert ignores Left only/Right only center. public var loRoCenterMixLevel: Swift.Double? - /// Specify a value for the following Dolby Atmos setting: Left only/Right only (Lo/Ro surround). MediaConvert uses this value for downmixing. Default value: -3 dB (ATMOS_STORAGE_DDP_MIXLEV_MINUS_3_DB). Valid values: -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. Related setting: How the service uses this value depends on the value that you choose for Stereo downmix (Eac3AtmosStereoDownmix). Related setting: To have MediaConvert use this value, keep the default value, Custom (SPECIFIED) for the setting Downmix control (DownmixControl). Otherwise, MediaConvert ignores Left only/Right only surround (LoRoSurroundMixLevel). + /// Specify a value for the following Dolby Atmos setting: Left only/Right only. MediaConvert uses this value for downmixing. Default value: -3 dB. Valid values: -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. Related setting: How the service uses this value depends on the value that you choose for Stereo downmix. Related setting: To have MediaConvert use this value, keep the default value, Custom for the setting Downmix control. Otherwise, MediaConvert ignores Left only/Right only surround. public var loRoSurroundMixLevel: Swift.Double? - /// Specify a value for the following Dolby Atmos setting: Left total/Right total center mix (Lt/Rt center). MediaConvert uses this value for downmixing. Default value: -3 dB (ATMOS_STORAGE_DDP_MIXLEV_MINUS_3_DB) Valid values: 3.0, 1.5, 0.0, -1.5, -3.0, -4.5, and -6.0. Related setting: How the service uses this value depends on the value that you choose for Stereo downmix (Eac3AtmosStereoDownmix). Related setting: To have MediaConvert use this value, keep the default value, Custom (SPECIFIED) for the setting Downmix control (DownmixControl). Otherwise, MediaConvert ignores Left total/Right total center (LtRtCenterMixLevel). + /// Specify a value for the following Dolby Atmos setting: Left total/Right total center mix (Lt/Rt center). MediaConvert uses this value for downmixing. Default value: -3 dB Valid values: 3.0, 1.5, 0.0, -1.5, -3.0, -4.5, and -6.0. Related setting: How the service uses this value depends on the value that you choose for Stereo downmix. Related setting: To have MediaConvert use this value, keep the default value, Custom for the setting Downmix control. Otherwise, MediaConvert ignores Left total/Right total center. public var ltRtCenterMixLevel: Swift.Double? - /// Specify a value for the following Dolby Atmos setting: Left total/Right total surround mix (Lt/Rt surround). MediaConvert uses this value for downmixing. Default value: -3 dB (ATMOS_STORAGE_DDP_MIXLEV_MINUS_3_DB) Valid values: -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. Related setting: How the service uses this value depends on the value that you choose for Stereo downmix (Eac3AtmosStereoDownmix). Related setting: To have MediaConvert use this value, keep the default value, Custom (SPECIFIED) for the setting Downmix control (DownmixControl). Otherwise, the service ignores Left total/Right total surround (LtRtSurroundMixLevel). + /// Specify a value for the following Dolby Atmos setting: Left total/Right total surround mix (Lt/Rt surround). MediaConvert uses this value for downmixing. Default value: -3 dB Valid values: -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. Related setting: How the service uses this value depends on the value that you choose for Stereo downmix. Related setting: To have MediaConvert use this value, keep the default value, Custom for the setting Downmix control. Otherwise, the service ignores Left total/Right total surround. public var ltRtSurroundMixLevel: Swift.Double? /// Choose how the service meters the loudness of your audio. public var meteringMode: MediaConvertClientTypes.Eac3AtmosMeteringMode? @@ -11556,7 +11568,7 @@ extension MediaConvertClientTypes { public var sampleRate: Swift.Int? /// Specify the percentage of audio content, from 0% to 100%, that must be speech in order for the encoder to use the measured speech loudness as the overall program loudness. Default value: 15% public var speechThreshold: Swift.Int? - /// Choose how the service does stereo downmixing. Default value: Not indicated (ATMOS_STORAGE_DDP_DMIXMOD_NOT_INDICATED) Related setting: To have MediaConvert use this value, keep the default value, Custom (SPECIFIED) for the setting Downmix control (DownmixControl). Otherwise, MediaConvert ignores Stereo downmix (StereoDownmix). + /// Choose how the service does stereo downmixing. Default value: Not indicated Related setting: To have MediaConvert use this value, keep the default value, Custom for the setting Downmix control. Otherwise, MediaConvert ignores Stereo downmix. public var stereoDownmix: MediaConvertClientTypes.Eac3AtmosStereoDownmix? /// Specify whether your input audio has an additional center rear surround channel matrix encoded into your left and right surround channels. public var surroundExMode: MediaConvertClientTypes.Eac3AtmosSurroundExMode? @@ -11604,7 +11616,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose how the service does stereo downmixing. Default value: Not indicated (ATMOS_STORAGE_DDP_DMIXMOD_NOT_INDICATED) Related setting: To have MediaConvert use this value, keep the default value, Custom (SPECIFIED) for the setting Downmix control (DownmixControl). Otherwise, MediaConvert ignores Stereo downmix (StereoDownmix). + /// Choose how the service does stereo downmixing. Default value: Not indicated Related setting: To have MediaConvert use this value, keep the default value, Custom for the setting Downmix control. Otherwise, MediaConvert ignores Stereo downmix. public enum Eac3AtmosStereoDownmix: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case dpl2 case notIndicated @@ -11823,7 +11835,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the line operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile (DynamicRangeCompressionProfile). For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the line operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile. For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public enum Eac3DynamicRangeCompressionLine: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case filmLight case filmStandard @@ -11868,7 +11880,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the RF operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile (DynamicRangeCompressionProfile). For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the RF operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile. For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public enum Eac3DynamicRangeCompressionRf: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case filmLight case filmStandard @@ -12217,7 +12229,7 @@ extension MediaConvertClientTypes.Eac3Settings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value EAC3. + /// Required when you set Codec to the value EAC3. public struct Eac3Settings: Swift.Equatable { /// If set to ATTENUATE_3_DB, applies a 3 dB attenuation to the surround channels. Only used for 3/2 coding mode. public var attenuationControl: MediaConvertClientTypes.Eac3AttenuationControl? @@ -12231,21 +12243,21 @@ extension MediaConvertClientTypes { public var dcFilter: MediaConvertClientTypes.Eac3DcFilter? /// Sets the dialnorm for the output. If blank and input audio is Dolby Digital Plus, dialnorm will be passed through. public var dialnorm: Swift.Int? - /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the line operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile (DynamicRangeCompressionProfile). For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the line operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile. For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public var dynamicRangeCompressionLine: MediaConvertClientTypes.Eac3DynamicRangeCompressionLine? - /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the RF operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile (DynamicRangeCompressionProfile). For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. + /// Choose the Dolby Digital dynamic range control (DRC) profile that MediaConvert uses when encoding the metadata in the Dolby Digital stream for the RF operating mode. Related setting: When you use this setting, MediaConvert ignores any value you provide for Dynamic range compression profile. For information about the Dolby Digital DRC operating modes and profiles, see the Dynamic Range Control chapter of the Dolby Metadata Guide at https://developer.dolby.com/globalassets/professional/documents/dolby-metadata-guide.pdf. public var dynamicRangeCompressionRf: MediaConvertClientTypes.Eac3DynamicRangeCompressionRf? /// When encoding 3/2 audio, controls whether the LFE channel is enabled public var lfeControl: MediaConvertClientTypes.Eac3LfeControl? /// Applies a 120Hz lowpass filter to the LFE channel prior to encoding. Only valid with 3_2_LFE coding mode. public var lfeFilter: MediaConvertClientTypes.Eac3LfeFilter? - /// Specify a value for the following Dolby Digital Plus setting: Left only/Right only center mix (Lo/Ro center). MediaConvert uses this value for downmixing. How the service uses this value depends on the value that you choose for Stereo downmix (Eac3StereoDownmix). Valid values: 3.0, 1.5, 0.0, -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. This setting applies only if you keep the default value of 3/2 - L, R, C, Ls, Rs (CODING_MODE_3_2) for the setting Coding mode (Eac3CodingMode). If you choose a different value for Coding mode, the service ignores Left only/Right only center (loRoCenterMixLevel). + /// Specify a value for the following Dolby Digital Plus setting: Left only/Right only center mix. MediaConvert uses this value for downmixing. How the service uses this value depends on the value that you choose for Stereo downmix. Valid values: 3.0, 1.5, 0.0, -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. This setting applies only if you keep the default value of 3/2 - L, R, C, Ls, Rs for the setting Coding mode. If you choose a different value for Coding mode, the service ignores Left only/Right only center. public var loRoCenterMixLevel: Swift.Double? - /// Specify a value for the following Dolby Digital Plus setting: Left only/Right only (Lo/Ro surround). MediaConvert uses this value for downmixing. How the service uses this value depends on the value that you choose for Stereo downmix (Eac3StereoDownmix). Valid values: -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. This setting applies only if you keep the default value of 3/2 - L, R, C, Ls, Rs (CODING_MODE_3_2) for the setting Coding mode (Eac3CodingMode). If you choose a different value for Coding mode, the service ignores Left only/Right only surround (loRoSurroundMixLevel). + /// Specify a value for the following Dolby Digital Plus setting: Left only/Right only. MediaConvert uses this value for downmixing. How the service uses this value depends on the value that you choose for Stereo downmix. Valid values: -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. This setting applies only if you keep the default value of 3/2 - L, R, C, Ls, Rs for the setting Coding mode. If you choose a different value for Coding mode, the service ignores Left only/Right only surround. public var loRoSurroundMixLevel: Swift.Double? - /// Specify a value for the following Dolby Digital Plus setting: Left total/Right total center mix (Lt/Rt center). MediaConvert uses this value for downmixing. How the service uses this value depends on the value that you choose for Stereo downmix (Eac3StereoDownmix). Valid values: 3.0, 1.5, 0.0, -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. This setting applies only if you keep the default value of 3/2 - L, R, C, Ls, Rs (CODING_MODE_3_2) for the setting Coding mode (Eac3CodingMode). If you choose a different value for Coding mode, the service ignores Left total/Right total center (ltRtCenterMixLevel). + /// Specify a value for the following Dolby Digital Plus setting: Left total/Right total center mix. MediaConvert uses this value for downmixing. How the service uses this value depends on the value that you choose for Stereo downmix. Valid values: 3.0, 1.5, 0.0, -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. This setting applies only if you keep the default value of 3/2 - L, R, C, Ls, Rs for the setting Coding mode. If you choose a different value for Coding mode, the service ignores Left total/Right total center. public var ltRtCenterMixLevel: Swift.Double? - /// Specify a value for the following Dolby Digital Plus setting: Left total/Right total surround mix (Lt/Rt surround). MediaConvert uses this value for downmixing. How the service uses this value depends on the value that you choose for Stereo downmix (Eac3StereoDownmix). Valid values: -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. This setting applies only if you keep the default value of 3/2 - L, R, C, Ls, Rs (CODING_MODE_3_2) for the setting Coding mode (Eac3CodingMode). If you choose a different value for Coding mode, the service ignores Left total/Right total surround (ltRtSurroundMixLevel). + /// Specify a value for the following Dolby Digital Plus setting: Left total/Right total surround mix. MediaConvert uses this value for downmixing. How the service uses this value depends on the value that you choose for Stereo downmix. Valid values: -1.5, -3.0, -4.5, -6.0, and -60. The value -60 mutes the channel. This setting applies only if you keep the default value of 3/2 - L, R, C, Ls, Rs for the setting Coding mode. If you choose a different value for Coding mode, the service ignores Left total/Right total surround. public var ltRtSurroundMixLevel: Swift.Double? /// When set to FOLLOW_INPUT, encoder metadata will be sourced from the DD, DD+, or DolbyE decoder that supplied this audio data. If audio was not supplied from one of these streams, then the static metadata settings will be used. public var metadataControl: MediaConvertClientTypes.Eac3MetadataControl? @@ -12255,7 +12267,7 @@ extension MediaConvertClientTypes { public var phaseControl: MediaConvertClientTypes.Eac3PhaseControl? /// This value is always 48000. It represents the sample rate in Hz. public var sampleRate: Swift.Int? - /// Choose how the service does stereo downmixing. This setting only applies if you keep the default value of 3/2 - L, R, C, Ls, Rs (CODING_MODE_3_2) for the setting Coding mode (Eac3CodingMode). If you choose a different value for Coding mode, the service ignores Stereo downmix (Eac3StereoDownmix). + /// Choose how the service does stereo downmixing. This setting only applies if you keep the default value of 3/2 - L, R, C, Ls, Rs for the setting Coding mode. If you choose a different value for Coding mode, the service ignores Stereo downmix. public var stereoDownmix: MediaConvertClientTypes.Eac3StereoDownmix? /// When encoding 3/2 audio, sets whether an extra center back surround channel is matrix encoded into the left and right surround channels. public var surroundExMode: MediaConvertClientTypes.Eac3SurroundExMode? @@ -12313,7 +12325,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose how the service does stereo downmixing. This setting only applies if you keep the default value of 3/2 - L, R, C, Ls, Rs (CODING_MODE_3_2) for the setting Coding mode (Eac3CodingMode). If you choose a different value for Coding mode, the service ignores Stereo downmix (Eac3StereoDownmix). + /// Choose how the service does stereo downmixing. This setting only applies if you keep the default value of 3/2 - L, R, C, Ls, Rs for the setting Coding mode. If you choose a different value for Coding mode, the service ignores Stereo downmix. public enum Eac3StereoDownmix: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case dpl2 case loRo @@ -12424,7 +12436,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert (UPCONVERT), MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. + /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert, MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. public enum EmbeddedConvert608To708: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case upconvert @@ -12482,11 +12494,11 @@ extension MediaConvertClientTypes.EmbeddedDestinationSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to CEA/EIA-608 and CEA/EIA-708 (also called embedded or ancillary) captions. Set up embedded captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/embedded-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to EMBEDDED, EMBEDDED_PLUS_SCTE20, or SCTE20_PLUS_EMBEDDED. + /// Settings related to CEA/EIA-608 and CEA/EIA-708 (also called embedded or ancillary) captions. Set up embedded captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/embedded-output-captions.html. public struct EmbeddedDestinationSettings: Swift.Equatable { /// Ignore this setting unless your input captions are SCC format and your output captions are embedded in the video stream. Specify a CC number for each captions channel in this output. If you have two channels, choose CC numbers that aren't in the same field. For example, choose 1 and 3. For more information, see https://docs.aws.amazon.com/console/mediaconvert/dual-scc-to-embedded. public var destination608ChannelNumber: Swift.Int? - /// Ignore this setting unless your input captions are SCC format and you want both 608 and 708 captions embedded in your output stream. Optionally, specify the 708 service number for each output captions channel. Choose a different number for each channel. To use this setting, also set Force 608 to 708 upconvert (Convert608To708) to Upconvert (UPCONVERT) in your input captions selector settings. If you choose to upconvert but don't specify a 708 service number, MediaConvert uses the number that you specify for CC channel number (destination608ChannelNumber) for the 708 service number. For more information, see https://docs.aws.amazon.com/console/mediaconvert/dual-scc-to-embedded. + /// Ignore this setting unless your input captions are SCC format and you want both 608 and 708 captions embedded in your output stream. Optionally, specify the 708 service number for each output captions channel. Choose a different number for each channel. To use this setting, also set Force 608 to 708 upconvert to Upconvert in your input captions selector settings. If you choose to upconvert but don't specify a 708 service number, MediaConvert uses the number that you specify for CC channel number for the 708 service number. For more information, see https://docs.aws.amazon.com/console/mediaconvert/dual-scc-to-embedded. public var destination708ServiceNumber: Swift.Int? public init( @@ -12541,7 +12553,7 @@ extension MediaConvertClientTypes.EmbeddedSourceSettings: Swift.Codable { extension MediaConvertClientTypes { /// Settings for embedded captions Source public struct EmbeddedSourceSettings: Swift.Equatable { - /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert (UPCONVERT), MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. + /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert, MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. public var convert608To708: MediaConvertClientTypes.EmbeddedConvert608To708? /// Specifies the 608/708 channel number within the video track from which to extract captions. Unused for passthrough. public var source608ChannelNumber: Swift.Int? @@ -12600,7 +12612,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Set Embedded timecode override (embeddedTimecodeOverride) to Use MDPM (USE_MDPM) when your AVCHD input contains timecode tag data in the Modified Digital Video Pack Metadata (MDPM). When you do, we recommend you also set Timecode source (inputTimecodeSource) to Embedded (EMBEDDED). Leave Embedded timecode override blank, or set to None (NONE), when your input does not contain MDPM timecode. + /// Set Embedded timecode override to Use MDPM when your AVCHD input contains timecode tag data in the Modified Digital Video Pack Metadata. When you do, we recommend you also set Timecode source to Embedded. Leave Embedded timecode override blank, or set to None, when your input does not contain MDPM timecode. public enum EmbeddedTimecodeOverride: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `none` case useMdpm @@ -12736,11 +12748,11 @@ extension MediaConvertClientTypes.EsamSettings: Swift.Codable { extension MediaConvertClientTypes { /// Settings for Event Signaling And Messaging (ESAM). If you don't do ad insertion, you can ignore these settings. public struct EsamSettings: Swift.Equatable { - /// Specifies an ESAM ManifestConfirmConditionNotification XML as per OC-SP-ESAM-API-I03-131025. The transcoder uses the manifest conditioning instructions that you provide in the setting MCC XML (mccXml). + /// Specifies an ESAM ManifestConfirmConditionNotification XML as per OC-SP-ESAM-API-I03-131025. The transcoder uses the manifest conditioning instructions that you provide in the setting MCC XML. public var manifestConfirmConditionNotification: MediaConvertClientTypes.EsamManifestConfirmConditionNotification? /// Specifies the stream distance, in milliseconds, between the SCTE 35 messages that the transcoder places and the splice points that they refer to. If the time between the start of the asset and the SCTE-35 message is less than this value, then the transcoder places the SCTE-35 marker at the beginning of the stream. public var responseSignalPreroll: Swift.Int? - /// Specifies an ESAM SignalProcessingNotification XML as per OC-SP-ESAM-API-I03-131025. The transcoder uses the signal processing instructions that you provide in the setting SCC XML (sccXml). + /// Specifies an ESAM SignalProcessingNotification XML as per OC-SP-ESAM-API-I03-131025. The transcoder uses the signal processing instructions that you provide in the setting SCC XML. public var signalProcessingNotification: MediaConvertClientTypes.EsamSignalProcessingNotification? public init( @@ -12779,7 +12791,7 @@ extension MediaConvertClientTypes.EsamSignalProcessingNotification: Swift.Codabl extension MediaConvertClientTypes { /// ESAM SignalProcessingNotification data defined by OC-SP-ESAM-API-I03-131025. public struct EsamSignalProcessingNotification: Swift.Equatable { - /// Provide your ESAM SignalProcessingNotification XML document inside your JSON job settings. Form the XML document as per OC-SP-ESAM-API-I03-131025. The transcoder will use the signal processing instructions in the message that you supply. Provide your ESAM SignalProcessingNotification XML document inside your JSON job settings. For your MPEG2-TS file outputs, if you want the service to place SCTE-35 markers at the insertion points you specify in the XML document, you must also enable SCTE-35 ESAM (scte35Esam). Note that you can either specify an ESAM XML document or enable SCTE-35 passthrough. You can't do both. + /// Provide your ESAM SignalProcessingNotification XML document inside your JSON job settings. Form the XML document as per OC-SP-ESAM-API-I03-131025. The transcoder will use the signal processing instructions in the message that you supply. For your MPEG2-TS file outputs, if you want the service to place SCTE-35 markers at the insertion points you specify in the XML document, you must also enable SCTE-35 ESAM. Note that you can either specify an ESAM XML document or enable SCTE-35 passthrough. You can't do both. public var sccXml: Swift.String? public init( @@ -12931,9 +12943,9 @@ extension MediaConvertClientTypes.FileGroupSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to your File output group. MediaConvert uses this group of settings to generate a single standalone file, rather than a streaming package. When you work directly in your JSON job specification, include this object and any required children when you set Type, under OutputGroupSettings, to FILE_GROUP_SETTINGS. + /// Settings related to your File output group. MediaConvert uses this group of settings to generate a single standalone file, rather than a streaming package. public struct FileGroupSettings: Swift.Equatable { - /// Use Destination (Destination) to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. + /// Use Destination to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. public var destination: Swift.String? /// Settings associated with the destination. Will vary based on the type of destination public var destinationSettings: MediaConvertClientTypes.DestinationSettings? @@ -12951,7 +12963,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert (UPCONVERT), MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. + /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert, MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. public enum FileSourceConvert608To708: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case upconvert @@ -13035,17 +13047,17 @@ extension MediaConvertClientTypes.FileSourceSettings: Swift.Codable { extension MediaConvertClientTypes { /// If your input captions are SCC, SMI, SRT, STL, TTML, WebVTT, or IMSC 1.1 in an xml file, specify the URI of the input caption source file. If your caption source is IMSC in an IMF package, use TrackSourceSettings instead of FileSoureSettings. public struct FileSourceSettings: Swift.Equatable { - /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert (UPCONVERT), MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. + /// Specify whether this set of input captions appears in your outputs in both 608 and 708 format. If you choose Upconvert, MediaConvert includes the captions data in two ways: it passes the 608 data through using the 608 compatibility bytes fields of the 708 wrapper, and it also translates the 608 data into 708. public var convert608To708: MediaConvertClientTypes.FileSourceConvert608To708? /// Choose the presentation style of your input SCC captions. To use the same presentation style as your input: Keep the default value, Disabled. To convert paint-on captions to pop-on: Choose Enabled. We also recommend that you choose Enabled if you notice additional repeated lines in your output captions. public var convertPaintToPop: MediaConvertClientTypes.CaptionSourceConvertPaintOnToPopOn? - /// Ignore this setting unless your input captions format is SCC. To have the service compensate for differing frame rates between your input captions and input video, specify the frame rate of the captions file. Specify this value as a fraction. When you work directly in your JSON job specification, use the settings framerateNumerator and framerateDenominator. For example, you might specify 24 / 1 for 24 fps, 25 / 1 for 25 fps, 24000 / 1001 for 23.976 fps, or 30000 / 1001 for 29.97 fps. + /// Ignore this setting unless your input captions format is SCC. To have the service compensate for differing frame rates between your input captions and input video, specify the frame rate of the captions file. Specify this value as a fraction. For example, you might specify 24 / 1 for 24 fps, 25 / 1 for 25 fps, 24000 / 1001 for 23.976 fps, or 30000 / 1001 for 29.97 fps. public var framerate: MediaConvertClientTypes.CaptionSourceFramerate? /// External caption file used for loading captions. Accepted file extensions are 'scc', 'ttml', 'dfxp', 'stl', 'srt', 'xml', 'smi', 'webvtt', and 'vtt'. public var sourceFile: Swift.String? - /// Optional. Use this setting when you need to adjust the sync between your sidecar captions and your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/time-delta-use-cases.html. Enter a positive or negative number to modify the times in the captions file. For example, type 15 to add 15 seconds to all the times in the captions file. Type -5 to subtract 5 seconds from the times in the captions file. You can optionally specify your time delta in milliseconds instead of seconds. When you do so, set the related setting, Time delta units (TimeDeltaUnits) to Milliseconds (MILLISECONDS). Note that, when you specify a time delta for timecode-based caption sources, such as SCC and STL, and your time delta isn't a multiple of the input frame rate, MediaConvert snaps the captions to the nearest frame. For example, when your input video frame rate is 25 fps and you specify 1010ms for time delta, MediaConvert delays your captions by 1000 ms. + /// Optional. Use this setting when you need to adjust the sync between your sidecar captions and your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/time-delta-use-cases.html. Enter a positive or negative number to modify the times in the captions file. For example, type 15 to add 15 seconds to all the times in the captions file. Type -5 to subtract 5 seconds from the times in the captions file. You can optionally specify your time delta in milliseconds instead of seconds. When you do so, set the related setting, Time delta units to Milliseconds. Note that, when you specify a time delta for timecode-based caption sources, such as SCC and STL, and your time delta isn't a multiple of the input frame rate, MediaConvert snaps the captions to the nearest frame. For example, when your input video frame rate is 25 fps and you specify 1010ms for time delta, MediaConvert delays your captions by 1000 ms. public var timeDelta: Swift.Int? - /// When you use the setting Time delta (TimeDelta) to adjust the sync between your sidecar captions and your video, use this setting to specify the units for the delta that you specify. When you don't specify a value for Time delta units (TimeDeltaUnits), MediaConvert uses seconds by default. + /// When you use the setting Time delta to adjust the sync between your sidecar captions and your video, use this setting to specify the units for the delta that you specify. When you don't specify a value for Time delta units, MediaConvert uses seconds by default. public var timeDeltaUnits: MediaConvertClientTypes.FileSourceTimeDeltaUnits? public init( @@ -13069,7 +13081,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you use the setting Time delta (TimeDelta) to adjust the sync between your sidecar captions and your video, use this setting to specify the units for the delta that you specify. When you don't specify a value for Time delta units (TimeDeltaUnits), MediaConvert uses seconds by default. + /// When you use the setting Time delta to adjust the sync between your sidecar captions and your video, use this setting to specify the units for the delta that you specify. When you don't specify a value for Time delta units, MediaConvert uses seconds by default. public enum FileSourceTimeDeltaUnits: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case milliseconds case seconds @@ -13275,7 +13287,7 @@ extension MediaConvertClientTypes.FrameCaptureSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value FRAME_CAPTURE. + /// Required when you set Codec to the value FRAME_CAPTURE. public struct FrameCaptureSettings: Swift.Equatable { /// Frame capture will encode the first frame of the output stream, then one frame every framerateDenominator/framerateNumerator seconds. For example, settings of framerateNumerator = 1 and framerateDenominator = 3 (a rate of 1/3 frame per second) will capture the first frame, then 1 frame every 3s. Files will be named as filename.n.jpg where n is the 0-based sequence number of each Capture. public var framerateDenominator: Swift.Int? @@ -13727,7 +13739,7 @@ extension GetQueueOutputResponseBody: Swift.Decodable { } extension MediaConvertClientTypes { - /// Keep the default value, Auto (AUTO), for this setting to have MediaConvert automatically apply the best types of quantization for your video content. When you want to apply your quantization settings manually, you must set H264AdaptiveQuantization to a value other than Auto (AUTO). Use this setting to specify the strength of any adaptive quantization filters that you enable. If you don't want MediaConvert to do any adaptive quantization in this transcode, set Adaptive quantization (H264AdaptiveQuantization) to Off (OFF). Related settings: The value that you choose here applies to the following settings: H264FlickerAdaptiveQuantization, H264SpatialAdaptiveQuantization, and H264TemporalAdaptiveQuantization. + /// Keep the default value, Auto, for this setting to have MediaConvert automatically apply the best types of quantization for your video content. When you want to apply your quantization settings manually, you must set H264AdaptiveQuantization to a value other than Auto. Use this setting to specify the strength of any adaptive quantization filters that you enable. If you don't want MediaConvert to do any adaptive quantization in this transcode, set Adaptive quantization to Off. Related settings: The value that you choose here applies to the following settings: H264FlickerAdaptiveQuantization, H264SpatialAdaptiveQuantization, and H264TemporalAdaptiveQuantization. public enum H264AdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case high @@ -13775,7 +13787,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify an H.264 level that is consistent with your output video settings. If you aren't sure what level to specify, choose Auto (AUTO). + /// Specify an H.264 level that is consistent with your output video settings. If you aren't sure what level to specify, choose Auto. public enum H264CodecLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case level1 @@ -13898,7 +13910,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames (numberBFramesBetweenReferenceFrames). + /// Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames. public enum H264DynamicSubGop: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case adaptive case `static` @@ -13964,7 +13976,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// The video encoding method for your MPEG-4 AVC output. Keep the default value, PAFF, to have MediaConvert use PAFF encoding for interlaced outputs. Choose Force field (FORCE_FIELD) to disable PAFF encoding and create separate interlaced fields. Choose MBAFF to disable PAFF and have MediaConvert use MBAFF encoding for interlaced outputs. + /// The video encoding method for your MPEG-4 AVC output. Keep the default value, PAFF, to have MediaConvert use PAFF encoding for interlaced outputs. Choose Force field to disable PAFF encoding and create separate interlaced fields. Choose MBAFF to disable PAFF and have MediaConvert use MBAFF encoding for interlaced outputs. public enum H264FieldEncoding: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case forceField case mbaff @@ -14000,7 +14012,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Only use this setting when you change the default value, AUTO, for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264FlickerAdaptiveQuantization is Disabled (DISABLED). Change this value to Enabled (ENABLED) to reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. To manually enable or disable H264FlickerAdaptiveQuantization, you must set Adaptive quantization (H264AdaptiveQuantization) to a value other than AUTO. + /// Only use this setting when you change the default value, AUTO, for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264FlickerAdaptiveQuantization is Disabled. Change this value to Enabled to reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. To manually enable or disable H264FlickerAdaptiveQuantization, you must set Adaptive quantization to a value other than AUTO. public enum H264FlickerAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -14033,7 +14045,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public enum H264FramerateControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -14135,7 +14147,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify how the transcoder determines GOP size for this output. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, choose Auto (AUTO) and and leave GOP size (GopSize) blank. By default, if you don't specify GOP mode control (GopSizeUnits), MediaConvert will use automatic behavior. If your output group specifies HLS, DASH, or CMAF, set GOP mode control to Auto and leave GOP size blank in each output in your output group. To explicitly specify the GOP length, choose Specified, frames (FRAMES) or Specified, seconds (SECONDS) and then provide the GOP length in the related setting GOP size (GopSize). + /// Specify how the transcoder determines GOP size for this output. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, choose Auto and and leave GOP size blank. By default, if you don't specify GOP mode control, MediaConvert will use automatic behavior. If your output group specifies HLS, DASH, or CMAF, set GOP mode control to Auto and leave GOP size blank in each output in your output group. To explicitly specify the GOP length, choose Specified, frames or Specified, seconds and then provide the GOP length in the related setting GOP size. public enum H264GopSizeUnits: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case frames @@ -14171,7 +14183,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public enum H264InterlaceMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bottomField case followBottomField @@ -14213,7 +14225,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source (INITIALIZE_FROM_SOURCE), uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. To specify a different PAR by editing the JSON job specification, choose SPECIFIED. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. + /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. public enum H264ParControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -14313,11 +14325,11 @@ extension MediaConvertClientTypes.H264QvbrSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings for quality-defined variable bitrate encoding with the H.264 codec. Use these settings only when you set QVBR for Rate control mode (RateControlMode). + /// Settings for quality-defined variable bitrate encoding with the H.264 codec. Use these settings only when you set QVBR for Rate control mode. public struct H264QvbrSettings: Swift.Equatable { /// Use this setting only when Rate control mode is QVBR and Quality tuning level is Multi-pass HQ. For Max average bitrate values suited to the complexity of your input video, the service limits the average bitrate of the video part of this output to the value that you choose. That is, the total size of the video element is less than or equal to the value you set multiplied by the number of seconds of encoded output. public var maxAverageBitrate: Swift.Int? - /// Use this setting only when you set Rate control mode (RateControlMode) to QVBR. Specify the target quality level for this output. MediaConvert determines the right number of bits to use for each part of the video to maintain the video quality that you specify. When you keep the default value, AUTO, MediaConvert picks a quality level for you, based on characteristics of your input video. If you prefer to specify a quality level, specify a number from 1 through 10. Use higher numbers for greater quality. Level 10 results in nearly lossless compression. The quality level for most broadcast-quality transcodes is between 6 and 9. Optionally, to specify a value between whole numbers, also provide a value for the setting qvbrQualityLevelFineTune. For example, if you want your QVBR quality level to be 7.33, set qvbrQualityLevel to 7 and set qvbrQualityLevelFineTune to .33. + /// Use this setting only when you set Rate control mode to QVBR. Specify the target quality level for this output. MediaConvert determines the right number of bits to use for each part of the video to maintain the video quality that you specify. When you keep the default value, AUTO, MediaConvert picks a quality level for you, based on characteristics of your input video. If you prefer to specify a quality level, specify a number from 1 through 10. Use higher numbers for greater quality. Level 10 results in nearly lossless compression. The quality level for most broadcast-quality transcodes is between 6 and 9. Optionally, to specify a value between whole numbers, also provide a value for the setting qvbrQualityLevelFineTune. For example, if you want your QVBR quality level to be 7.33, set qvbrQualityLevel to 7 and set qvbrQualityLevelFineTune to .33. public var qvbrQualityLevel: Swift.Int? /// Optional. Specify a value here to set the QVBR quality to a level that is between whole numbers. For example, if you want your QVBR quality level to be 7.33, set qvbrQualityLevel to 7 and set qvbrQualityLevelFineTune to .33. MediaConvert rounds your QVBR quality level to the nearest third of a whole number. For example, if you set qvbrQualityLevel to 7 and you set qvbrQualityLevelFineTune to .25, your actual QVBR quality level is 7.33. public var qvbrQualityLevelFineTune: Swift.Double? @@ -14406,7 +14418,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public enum H264ScanTypeConversionMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case interlaced case interlacedOptimize @@ -14439,7 +14451,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default. If this output uses QVBR, choose Transition detection (TRANSITION_DETECTION) for further video quality improvement. For more information about QVBR, see https://docs.aws.amazon.com/console/mediaconvert/cbr-vbr-qvbr. + /// Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default. If this output uses QVBR, choose Transition detection for further video quality improvement. For more information about QVBR, see https://docs.aws.amazon.com/console/mediaconvert/cbr-vbr-qvbr. public enum H264SceneChangeDetect: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -14740,15 +14752,15 @@ extension MediaConvertClientTypes.H264Settings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value H_264. + /// Required when you set Codec to the value H_264. public struct H264Settings: Swift.Equatable { - /// Keep the default value, Auto (AUTO), for this setting to have MediaConvert automatically apply the best types of quantization for your video content. When you want to apply your quantization settings manually, you must set H264AdaptiveQuantization to a value other than Auto (AUTO). Use this setting to specify the strength of any adaptive quantization filters that you enable. If you don't want MediaConvert to do any adaptive quantization in this transcode, set Adaptive quantization (H264AdaptiveQuantization) to Off (OFF). Related settings: The value that you choose here applies to the following settings: H264FlickerAdaptiveQuantization, H264SpatialAdaptiveQuantization, and H264TemporalAdaptiveQuantization. + /// Keep the default value, Auto, for this setting to have MediaConvert automatically apply the best types of quantization for your video content. When you want to apply your quantization settings manually, you must set H264AdaptiveQuantization to a value other than Auto. Use this setting to specify the strength of any adaptive quantization filters that you enable. If you don't want MediaConvert to do any adaptive quantization in this transcode, set Adaptive quantization to Off. Related settings: The value that you choose here applies to the following settings: H264FlickerAdaptiveQuantization, H264SpatialAdaptiveQuantization, and H264TemporalAdaptiveQuantization. public var adaptiveQuantization: MediaConvertClientTypes.H264AdaptiveQuantization? /// The Bandwidth reduction filter increases the video quality of your output relative to its bitrate. Use to lower the bitrate of your constant quality QVBR output, with little or no perceptual decrease in quality. Or, use to increase the video quality of outputs with other rate control modes relative to the bitrate that you specify. Bandwidth reduction increases further when your input is low quality or noisy. Outputs that use this feature incur pro-tier pricing. When you include Bandwidth reduction filter, you cannot include the Noise reducer preprocessor. public var bandwidthReductionFilter: MediaConvertClientTypes.BandwidthReductionFilter? /// Specify the average bitrate in bits per second. Required for VBR and CBR. For MS Smooth outputs, bitrates must be unique when rounded down to the nearest multiple of 1000. public var bitrate: Swift.Int? - /// Specify an H.264 level that is consistent with your output video settings. If you aren't sure what level to specify, choose Auto (AUTO). + /// Specify an H.264 level that is consistent with your output video settings. If you aren't sure what level to specify, choose Auto. public var codecLevel: MediaConvertClientTypes.H264CodecLevel? /// H.264 Profile. High 4:2:2 and 10-bit profiles are only available with the AVC-I License. public var codecProfile: MediaConvertClientTypes.H264CodecProfile? @@ -14756,11 +14768,11 @@ extension MediaConvertClientTypes { public var dynamicSubGop: MediaConvertClientTypes.H264DynamicSubGop? /// Entropy encoding mode. Use CABAC (must be in Main or High profile) or CAVLC. public var entropyEncoding: MediaConvertClientTypes.H264EntropyEncoding? - /// The video encoding method for your MPEG-4 AVC output. Keep the default value, PAFF, to have MediaConvert use PAFF encoding for interlaced outputs. Choose Force field (FORCE_FIELD) to disable PAFF encoding and create separate interlaced fields. Choose MBAFF to disable PAFF and have MediaConvert use MBAFF encoding for interlaced outputs. + /// The video encoding method for your MPEG-4 AVC output. Keep the default value, PAFF, to have MediaConvert use PAFF encoding for interlaced outputs. Choose Force field to disable PAFF encoding and create separate interlaced fields. Choose MBAFF to disable PAFF and have MediaConvert use MBAFF encoding for interlaced outputs. public var fieldEncoding: MediaConvertClientTypes.H264FieldEncoding? - /// Only use this setting when you change the default value, AUTO, for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264FlickerAdaptiveQuantization is Disabled (DISABLED). Change this value to Enabled (ENABLED) to reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. To manually enable or disable H264FlickerAdaptiveQuantization, you must set Adaptive quantization (H264AdaptiveQuantization) to a value other than AUTO. + /// Only use this setting when you change the default value, AUTO, for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264FlickerAdaptiveQuantization is Disabled. Change this value to Enabled to reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. To manually enable or disable H264FlickerAdaptiveQuantization, you must set Adaptive quantization to a value other than AUTO. public var flickerAdaptiveQuantization: MediaConvertClientTypes.H264FlickerAdaptiveQuantization? - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public var framerateControl: MediaConvertClientTypes.H264FramerateControl? /// Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. public var framerateConversionAlgorithm: MediaConvertClientTypes.H264FramerateConversionAlgorithm? @@ -14770,11 +14782,11 @@ extension MediaConvertClientTypes { public var framerateNumerator: Swift.Int? /// Specify whether to allow B-frames to be referenced by other frame types. To use reference B-frames when your GOP structure has 1 or more B-frames: Leave blank or keep the default value Enabled. We recommend that you choose Enabled to help improve the video quality of your output relative to its bitrate. To not use reference B-frames: Choose Disabled. public var gopBReference: MediaConvertClientTypes.H264GopBReference? - /// Specify the relative frequency of open to closed GOPs in this output. For example, if you want to allow four open GOPs and then require a closed GOP, set this value to 5. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, keep the default value by leaving this setting out of your JSON job specification. In the console, do this by keeping the default empty value. If you do explicitly specify a value, for segmented outputs, don't set this value to 0. + /// Specify the relative frequency of open to closed GOPs in this output. For example, if you want to allow four open GOPs and then require a closed GOP, set this value to 5. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. In the console, do this by keeping the default empty value. If you do explicitly specify a value, for segmented outputs, don't set this value to 0. public var gopClosedCadence: Swift.Int? - /// Use this setting only when you set GOP mode control (GopSizeUnits) to Specified, frames (FRAMES) or Specified, seconds (SECONDS). Specify the GOP length using a whole number of frames or a decimal value of seconds. MediaConvert will interpret this value as frames or seconds depending on the value you choose for GOP mode control (GopSizeUnits). If you want to allow MediaConvert to automatically determine GOP size, leave GOP size blank and set GOP mode control to Auto (AUTO). If your output group specifies HLS, DASH, or CMAF, leave GOP size blank and set GOP mode control to Auto in each output in your output group. + /// Use this setting only when you set GOP mode control to Specified, frames or Specified, seconds. Specify the GOP length using a whole number of frames or a decimal value of seconds. MediaConvert will interpret this value as frames or seconds depending on the value you choose for GOP mode control. If you want to allow MediaConvert to automatically determine GOP size, leave GOP size blank and set GOP mode control to Auto. If your output group specifies HLS, DASH, or CMAF, leave GOP size blank and set GOP mode control to Auto in each output in your output group. public var gopSize: Swift.Double? - /// Specify how the transcoder determines GOP size for this output. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, choose Auto (AUTO) and and leave GOP size (GopSize) blank. By default, if you don't specify GOP mode control (GopSizeUnits), MediaConvert will use automatic behavior. If your output group specifies HLS, DASH, or CMAF, set GOP mode control to Auto and leave GOP size blank in each output in your output group. To explicitly specify the GOP length, choose Specified, frames (FRAMES) or Specified, seconds (SECONDS) and then provide the GOP length in the related setting GOP size (GopSize). + /// Specify how the transcoder determines GOP size for this output. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, choose Auto and and leave GOP size blank. By default, if you don't specify GOP mode control, MediaConvert will use automatic behavior. If your output group specifies HLS, DASH, or CMAF, set GOP mode control to Auto and leave GOP size blank in each output in your output group. To explicitly specify the GOP length, choose Specified, frames or Specified, seconds and then provide the GOP length in the related setting GOP size. public var gopSizeUnits: MediaConvertClientTypes.H264GopSizeUnits? /// If your downstream systems have strict buffer requirements: Specify the minimum percentage of the HRD buffer that's available at the end of each encoded video segment. For the best video quality: Set to 0 or leave blank to automatically determine the final buffer fill percentage. public var hrdBufferFinalFillPercentage: Swift.Int? @@ -14782,47 +14794,47 @@ extension MediaConvertClientTypes { public var hrdBufferInitialFillPercentage: Swift.Int? /// Size of buffer (HRD buffer model) in bits. For example, enter five megabits as 5000000. public var hrdBufferSize: Swift.Int? - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public var interlaceMode: MediaConvertClientTypes.H264InterlaceMode? /// Maximum bitrate in bits/second. For example, enter five megabits per second as 5000000. Required when Rate control mode is QVBR. public var maxBitrate: Swift.Int? - /// Use this setting only when you also enable Scene change detection (SceneChangeDetect). This setting determines how the encoder manages the spacing between I-frames that it inserts as part of the I-frame cadence and the I-frames that it inserts for Scene change detection. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, keep the default value by leaving this setting out of your JSON job specification. In the console, do this by keeping the default empty value. When you explicitly specify a value for this setting, the encoder determines whether to skip a cadence-driven I-frame by the value you set. For example, if you set Min I interval (minIInterval) to 5 and a cadence-driven I-frame would fall within 5 frames of a scene-change I-frame, then the encoder skips the cadence-driven I-frame. In this way, one GOP is shrunk slightly and one GOP is stretched slightly. When the cadence-driven I-frames are farther from the scene-change I-frame than the value you set, then the encoder leaves all I-frames in place and the GOPs surrounding the scene change are smaller than the usual cadence GOPs. + /// Use this setting only when you also enable Scene change detection. This setting determines how the encoder manages the spacing between I-frames that it inserts as part of the I-frame cadence and the I-frames that it inserts for Scene change detection. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, do this by keeping the default empty value. When you explicitly specify a value for this setting, the encoder determines whether to skip a cadence-driven I-frame by the value you set. For example, if you set Min I interval to 5 and a cadence-driven I-frame would fall within 5 frames of a scene-change I-frame, then the encoder skips the cadence-driven I-frame. In this way, one GOP is shrunk slightly and one GOP is stretched slightly. When the cadence-driven I-frames are farther from the scene-change I-frame than the value you set, then the encoder leaves all I-frames in place and the GOPs surrounding the scene change are smaller than the usual cadence GOPs. public var minIInterval: Swift.Int? /// Specify the number of B-frames between reference frames in this output. For the best video quality: Leave blank. MediaConvert automatically determines the number of B-frames to use based on the characteristics of your input video. To manually specify the number of B-frames between reference frames: Enter an integer from 0 to 7. public var numberBFramesBetweenReferenceFrames: Swift.Int? /// Number of reference frames to use. The encoder may use more than requested if using B-frames and/or interlaced encoding. public var numberReferenceFrames: Swift.Int? - /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source (INITIALIZE_FROM_SOURCE), uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. To specify a different PAR by editing the JSON job specification, choose SPECIFIED. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. + /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. public var parControl: MediaConvertClientTypes.H264ParControl? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. public var parDenominator: Swift.Int? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. public var parNumerator: Swift.Int? /// The Quality tuning level you choose represents a trade-off between the encoding speed of your job and the output video quality. For the fastest encoding speed at the cost of video quality: Choose Single pass. For a good balance between encoding speed and video quality: Leave blank or keep the default value Single pass HQ. For the best video quality, at the cost of encoding speed: Choose Multi pass HQ. MediaConvert performs an analysis pass on your input followed by an encoding pass. Outputs that use this feature incur pro-tier pricing. public var qualityTuningLevel: MediaConvertClientTypes.H264QualityTuningLevel? - /// Settings for quality-defined variable bitrate encoding with the H.265 codec. Use these settings only when you set QVBR for Rate control mode (RateControlMode). + /// Settings for quality-defined variable bitrate encoding with the H.265 codec. Use these settings only when you set QVBR for Rate control mode. public var qvbrSettings: MediaConvertClientTypes.H264QvbrSettings? /// Use this setting to specify whether this output has a variable bitrate (VBR), constant bitrate (CBR) or quality-defined variable bitrate (QVBR). public var rateControlMode: MediaConvertClientTypes.H264RateControlMode? /// Places a PPS header on each encoded picture, even if repeated. public var repeatPps: MediaConvertClientTypes.H264RepeatPps? - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public var scanTypeConversionMode: MediaConvertClientTypes.H264ScanTypeConversionMode? - /// Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default. If this output uses QVBR, choose Transition detection (TRANSITION_DETECTION) for further video quality improvement. For more information about QVBR, see https://docs.aws.amazon.com/console/mediaconvert/cbr-vbr-qvbr. + /// Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default. If this output uses QVBR, choose Transition detection for further video quality improvement. For more information about QVBR, see https://docs.aws.amazon.com/console/mediaconvert/cbr-vbr-qvbr. public var sceneChangeDetect: MediaConvertClientTypes.H264SceneChangeDetect? /// Number of slices per picture. Must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures. public var slices: Swift.Int? - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. public var slowPal: MediaConvertClientTypes.H264SlowPal? - /// Ignore this setting unless you need to comply with a specification that requires a specific value. If you don't have a specification requirement, we recommend that you adjust the softness of your output by using a lower value for the setting Sharpness (sharpness) or by enabling a noise reducer filter (noiseReducerFilter). The Softness (softness) setting specifies the quantization matrices that the encoder uses. Keep the default value, 0, for flat quantization. Choose the value 1 or 16 to use the default JVT softening quantization matricies from the H.264 specification. Choose a value from 17 to 128 to use planar interpolation. Increasing values from 17 to 128 result in increasing reduction of high-frequency data. The value 128 results in the softest video. + /// Ignore this setting unless you need to comply with a specification that requires a specific value. If you don't have a specification requirement, we recommend that you adjust the softness of your output by using a lower value for the setting Sharpness or by enabling a noise reducer filter. The Softness setting specifies the quantization matrices that the encoder uses. Keep the default value, 0, for flat quantization. Choose the value 1 or 16 to use the default JVT softening quantization matricies from the H.264 specification. Choose a value from 17 to 128 to use planar interpolation. Increasing values from 17 to 128 result in increasing reduction of high-frequency data. The value 128 results in the softest video. public var softness: Swift.Int? - /// Only use this setting when you change the default value, Auto (AUTO), for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264SpatialAdaptiveQuantization is Enabled (ENABLED). Keep this default value to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to set H264SpatialAdaptiveQuantization to Disabled (DISABLED). Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization (H264AdaptiveQuantization) depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. To manually enable or disable H264SpatialAdaptiveQuantization, you must set Adaptive quantization (H264AdaptiveQuantization) to a value other than AUTO. + /// Only use this setting when you change the default value, Auto, for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264SpatialAdaptiveQuantization is Enabled. Keep this default value to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to set H264SpatialAdaptiveQuantization to Disabled. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. To manually enable or disable H264SpatialAdaptiveQuantization, you must set Adaptive quantization to a value other than AUTO. public var spatialAdaptiveQuantization: MediaConvertClientTypes.H264SpatialAdaptiveQuantization? /// Produces a bitstream compliant with SMPTE RP-2027. public var syntax: MediaConvertClientTypes.H264Syntax? - /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard or soft telecine to create a smoother picture. Hard telecine (HARD) produces a 29.97i output. Soft telecine (SOFT) produces an output with a 23.976 output that signals to the video player device to do the conversion during play back. When you keep the default value, None (NONE), MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. + /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard or soft telecine to create a smoother picture. Hard telecine produces a 29.97i output. Soft telecine produces an output with a 23.976 output that signals to the video player device to do the conversion during play back. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. public var telecine: MediaConvertClientTypes.H264Telecine? - /// Only use this setting when you change the default value, AUTO, for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264TemporalAdaptiveQuantization is Enabled (ENABLED). Keep this default value to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to set H264TemporalAdaptiveQuantization to Disabled (DISABLED). Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization (adaptiveQuantization). To manually enable or disable H264TemporalAdaptiveQuantization, you must set Adaptive quantization (H264AdaptiveQuantization) to a value other than AUTO. + /// Only use this setting when you change the default value, AUTO, for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264TemporalAdaptiveQuantization is Enabled. Keep this default value to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to set H264TemporalAdaptiveQuantization to Disabled. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization. To manually enable or disable H264TemporalAdaptiveQuantization, you must set Adaptive quantization to a value other than AUTO. public var temporalAdaptiveQuantization: MediaConvertClientTypes.H264TemporalAdaptiveQuantization? /// Inserts timecode for each frame as 4 bytes of an unregistered SEI message. public var unregisteredSeiTimecode: MediaConvertClientTypes.H264UnregisteredSeiTimecode? @@ -14920,7 +14932,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. public enum H264SlowPal: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -14953,7 +14965,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Only use this setting when you change the default value, Auto (AUTO), for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264SpatialAdaptiveQuantization is Enabled (ENABLED). Keep this default value to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to set H264SpatialAdaptiveQuantization to Disabled (DISABLED). Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization (H264AdaptiveQuantization) depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. To manually enable or disable H264SpatialAdaptiveQuantization, you must set Adaptive quantization (H264AdaptiveQuantization) to a value other than AUTO. + /// Only use this setting when you change the default value, Auto, for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264SpatialAdaptiveQuantization is Enabled. Keep this default value to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to set H264SpatialAdaptiveQuantization to Disabled. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. To manually enable or disable H264SpatialAdaptiveQuantization, you must set Adaptive quantization to a value other than AUTO. public enum H264SpatialAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -15019,7 +15031,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard or soft telecine to create a smoother picture. Hard telecine (HARD) produces a 29.97i output. Soft telecine (SOFT) produces an output with a 23.976 output that signals to the video player device to do the conversion during play back. When you keep the default value, None (NONE), MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. + /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard or soft telecine to create a smoother picture. Hard telecine produces a 29.97i output. Soft telecine produces an output with a 23.976 output that signals to the video player device to do the conversion during play back. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. public enum H264Telecine: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case hard case `none` @@ -15055,7 +15067,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Only use this setting when you change the default value, AUTO, for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264TemporalAdaptiveQuantization is Enabled (ENABLED). Keep this default value to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to set H264TemporalAdaptiveQuantization to Disabled (DISABLED). Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization (adaptiveQuantization). To manually enable or disable H264TemporalAdaptiveQuantization, you must set Adaptive quantization (H264AdaptiveQuantization) to a value other than AUTO. + /// Only use this setting when you change the default value, AUTO, for the setting H264AdaptiveQuantization. When you keep all defaults, excluding H264AdaptiveQuantization and all other adaptive quantization from your JSON job specification, MediaConvert automatically applies the best types of quantization for your video content. When you set H264AdaptiveQuantization to a value other than AUTO, the default value for H264TemporalAdaptiveQuantization is Enabled. Keep this default value to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to set H264TemporalAdaptiveQuantization to Disabled. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization. To manually enable or disable H264TemporalAdaptiveQuantization, you must set Adaptive quantization to a value other than AUTO. public enum H264TemporalAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -15121,7 +15133,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you set Adaptive Quantization (H265AdaptiveQuantization) to Auto (AUTO), or leave blank, MediaConvert automatically applies quantization to improve the video quality of your output. Set Adaptive Quantization to Low (LOW), Medium (MEDIUM), High (HIGH), Higher (HIGHER), or Max (MAX) to manually control the strength of the quantization filter. When you do, you can specify a value for Spatial Adaptive Quantization (H265SpatialAdaptiveQuantization), Temporal Adaptive Quantization (H265TemporalAdaptiveQuantization), and Flicker Adaptive Quantization (H265FlickerAdaptiveQuantization), to further control the quantization filter. Set Adaptive Quantization to Off (OFF) to apply no quantization to your output. + /// When you set Adaptive Quantization to Auto, or leave blank, MediaConvert automatically applies quantization to improve the video quality of your output. Set Adaptive Quantization to Low, Medium, High, Higher, or Max to manually control the strength of the quantization filter. When you do, you can specify a value for Spatial Adaptive Quantization, Temporal Adaptive Quantization, and Flicker Adaptive Quantization, to further control the quantization filter. Set Adaptive Quantization to Off to apply no quantization to your output. public enum H265AdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case high @@ -15322,7 +15334,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames (numberBFramesBetweenReferenceFrames). + /// Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames. public enum H265DynamicSubGop: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case adaptive case `static` @@ -15355,7 +15367,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Enable this setting to have the encoder reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. This setting is disabled by default. Related setting: In addition to enabling this setting, you must also set adaptiveQuantization to a value other than Off (OFF). + /// Enable this setting to have the encoder reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. This setting is disabled by default. Related setting: In addition to enabling this setting, you must also set adaptiveQuantization to a value other than Off. public enum H265FlickerAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -15388,7 +15400,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// Use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public enum H265FramerateControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -15490,7 +15502,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify how the transcoder determines GOP size for this output. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, choose Auto (AUTO) and and leave GOP size (GopSize) blank. By default, if you don't specify GOP mode control (GopSizeUnits), MediaConvert will use automatic behavior. If your output group specifies HLS, DASH, or CMAF, set GOP mode control to Auto and leave GOP size blank in each output in your output group. To explicitly specify the GOP length, choose Specified, frames (FRAMES) or Specified, seconds (SECONDS) and then provide the GOP length in the related setting GOP size (GopSize). + /// Specify how the transcoder determines GOP size for this output. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, choose Auto and and leave GOP size blank. By default, if you don't specify GOP mode control, MediaConvert will use automatic behavior. If your output group specifies HLS, DASH, or CMAF, set GOP mode control to Auto and leave GOP size blank in each output in your output group. To explicitly specify the GOP length, choose Specified, frames or Specified, seconds and then provide the GOP length in the related setting GOP size. public enum H265GopSizeUnits: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case frames @@ -15526,7 +15538,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public enum H265InterlaceMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bottomField case followBottomField @@ -15568,7 +15580,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source (INITIALIZE_FROM_SOURCE), uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. To specify a different PAR by editing the JSON job specification, choose SPECIFIED. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. + /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. public enum H265ParControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -15601,7 +15613,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. public enum H265QualityTuningLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case multiPassHq case singlePass @@ -15668,11 +15680,11 @@ extension MediaConvertClientTypes.H265QvbrSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings for quality-defined variable bitrate encoding with the H.265 codec. Use these settings only when you set QVBR for Rate control mode (RateControlMode). + /// Settings for quality-defined variable bitrate encoding with the H.265 codec. Use these settings only when you set QVBR for Rate control mode. public struct H265QvbrSettings: Swift.Equatable { /// Use this setting only when Rate control mode is QVBR and Quality tuning level is Multi-pass HQ. For Max average bitrate values suited to the complexity of your input video, the service limits the average bitrate of the video part of this output to the value that you choose. That is, the total size of the video element is less than or equal to the value you set multiplied by the number of seconds of encoded output. public var maxAverageBitrate: Swift.Int? - /// Use this setting only when you set Rate control mode (RateControlMode) to QVBR. Specify the target quality level for this output. MediaConvert determines the right number of bits to use for each part of the video to maintain the video quality that you specify. When you keep the default value, AUTO, MediaConvert picks a quality level for you, based on characteristics of your input video. If you prefer to specify a quality level, specify a number from 1 through 10. Use higher numbers for greater quality. Level 10 results in nearly lossless compression. The quality level for most broadcast-quality transcodes is between 6 and 9. Optionally, to specify a value between whole numbers, also provide a value for the setting qvbrQualityLevelFineTune. For example, if you want your QVBR quality level to be 7.33, set qvbrQualityLevel to 7 and set qvbrQualityLevelFineTune to .33. + /// Use this setting only when you set Rate control mode to QVBR. Specify the target quality level for this output. MediaConvert determines the right number of bits to use for each part of the video to maintain the video quality that you specify. When you keep the default value, AUTO, MediaConvert picks a quality level for you, based on characteristics of your input video. If you prefer to specify a quality level, specify a number from 1 through 10. Use higher numbers for greater quality. Level 10 results in nearly lossless compression. The quality level for most broadcast-quality transcodes is between 6 and 9. Optionally, to specify a value between whole numbers, also provide a value for the setting qvbrQualityLevelFineTune. For example, if you want your QVBR quality level to be 7.33, set qvbrQualityLevel to 7 and set qvbrQualityLevelFineTune to .33. public var qvbrQualityLevel: Swift.Int? /// Optional. Specify a value here to set the QVBR quality to a level that is between whole numbers. For example, if you want your QVBR quality level to be 7.33, set qvbrQualityLevel to 7 and set qvbrQualityLevelFineTune to .33. MediaConvert rounds your QVBR quality level to the nearest third of a whole number. For example, if you set qvbrQualityLevel to 7 and you set qvbrQualityLevelFineTune to .25, your actual QVBR quality level is 7.33. public var qvbrQualityLevelFineTune: Swift.Double? @@ -15764,7 +15776,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public enum H265ScanTypeConversionMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case interlaced case interlacedOptimize @@ -15797,7 +15809,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default. If this output uses QVBR, choose Transition detection (TRANSITION_DETECTION) for further video quality improvement. For more information about QVBR, see https://docs.aws.amazon.com/console/mediaconvert/cbr-vbr-qvbr. + /// Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default. If this output uses QVBR, choose Transition detection for further video quality improvement. For more information about QVBR, see https://docs.aws.amazon.com/console/mediaconvert/cbr-vbr-qvbr. public enum H265SceneChangeDetect: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -16100,7 +16112,7 @@ extension MediaConvertClientTypes.H265Settings: Swift.Codable { extension MediaConvertClientTypes { /// Settings for H265 codec public struct H265Settings: Swift.Equatable { - /// When you set Adaptive Quantization (H265AdaptiveQuantization) to Auto (AUTO), or leave blank, MediaConvert automatically applies quantization to improve the video quality of your output. Set Adaptive Quantization to Low (LOW), Medium (MEDIUM), High (HIGH), Higher (HIGHER), or Max (MAX) to manually control the strength of the quantization filter. When you do, you can specify a value for Spatial Adaptive Quantization (H265SpatialAdaptiveQuantization), Temporal Adaptive Quantization (H265TemporalAdaptiveQuantization), and Flicker Adaptive Quantization (H265FlickerAdaptiveQuantization), to further control the quantization filter. Set Adaptive Quantization to Off (OFF) to apply no quantization to your output. + /// When you set Adaptive Quantization to Auto, or leave blank, MediaConvert automatically applies quantization to improve the video quality of your output. Set Adaptive Quantization to Low, Medium, High, Higher, or Max to manually control the strength of the quantization filter. When you do, you can specify a value for Spatial Adaptive Quantization, Temporal Adaptive Quantization, and Flicker Adaptive Quantization, to further control the quantization filter. Set Adaptive Quantization to Off to apply no quantization to your output. public var adaptiveQuantization: MediaConvertClientTypes.H265AdaptiveQuantization? /// Enables Alternate Transfer Function SEI message for outputs using Hybrid Log Gamma (HLG) Electro-Optical Transfer Function (EOTF). public var alternateTransferFunctionSei: MediaConvertClientTypes.H265AlternateTransferFunctionSei? @@ -16114,9 +16126,9 @@ extension MediaConvertClientTypes { public var codecProfile: MediaConvertClientTypes.H265CodecProfile? /// Specify whether to allow the number of B-frames in your output GOP structure to vary or not depending on your input video content. To improve the subjective video quality of your output that has high-motion content: Leave blank or keep the default value Adaptive. MediaConvert will use fewer B-frames for high-motion video content than low-motion content. The maximum number of B- frames is limited by the value that you choose for B-frames between reference frames. To use the same number B-frames for all types of content: Choose Static. public var dynamicSubGop: MediaConvertClientTypes.H265DynamicSubGop? - /// Enable this setting to have the encoder reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. This setting is disabled by default. Related setting: In addition to enabling this setting, you must also set adaptiveQuantization to a value other than Off (OFF). + /// Enable this setting to have the encoder reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. This setting is disabled by default. Related setting: In addition to enabling this setting, you must also set adaptiveQuantization to a value other than Off. public var flickerAdaptiveQuantization: MediaConvertClientTypes.H265FlickerAdaptiveQuantization? - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// Use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public var framerateControl: MediaConvertClientTypes.H265FramerateControl? /// Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. public var framerateConversionAlgorithm: MediaConvertClientTypes.H265FramerateConversionAlgorithm? @@ -16126,11 +16138,11 @@ extension MediaConvertClientTypes { public var framerateNumerator: Swift.Int? /// Specify whether to allow B-frames to be referenced by other frame types. To use reference B-frames when your GOP structure has 1 or more B-frames: Leave blank or keep the default value Enabled. We recommend that you choose Enabled to help improve the video quality of your output relative to its bitrate. To not use reference B-frames: Choose Disabled. public var gopBReference: MediaConvertClientTypes.H265GopBReference? - /// Specify the relative frequency of open to closed GOPs in this output. For example, if you want to allow four open GOPs and then require a closed GOP, set this value to 5. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, keep the default value by leaving this setting out of your JSON job specification. In the console, do this by keeping the default empty value. If you do explicitly specify a value, for segmented outputs, don't set this value to 0. + /// Specify the relative frequency of open to closed GOPs in this output. For example, if you want to allow four open GOPs and then require a closed GOP, set this value to 5. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, do this by keeping the default empty value. If you do explicitly specify a value, for segmented outputs, don't set this value to 0. public var gopClosedCadence: Swift.Int? - /// Use this setting only when you set GOP mode control (GopSizeUnits) to Specified, frames (FRAMES) or Specified, seconds (SECONDS). Specify the GOP length using a whole number of frames or a decimal value of seconds. MediaConvert will interpret this value as frames or seconds depending on the value you choose for GOP mode control (GopSizeUnits). If you want to allow MediaConvert to automatically determine GOP size, leave GOP size blank and set GOP mode control to Auto (AUTO). If your output group specifies HLS, DASH, or CMAF, leave GOP size blank and set GOP mode control to Auto in each output in your output group. + /// Use this setting only when you set GOP mode control to Specified, frames or Specified, seconds. Specify the GOP length using a whole number of frames or a decimal value of seconds. MediaConvert will interpret this value as frames or seconds depending on the value you choose for GOP mode control. If you want to allow MediaConvert to automatically determine GOP size, leave GOP size blank and set GOP mode control to Auto. If your output group specifies HLS, DASH, or CMAF, leave GOP size blank and set GOP mode control to Auto in each output in your output group. public var gopSize: Swift.Double? - /// Specify how the transcoder determines GOP size for this output. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, choose Auto (AUTO) and and leave GOP size (GopSize) blank. By default, if you don't specify GOP mode control (GopSizeUnits), MediaConvert will use automatic behavior. If your output group specifies HLS, DASH, or CMAF, set GOP mode control to Auto and leave GOP size blank in each output in your output group. To explicitly specify the GOP length, choose Specified, frames (FRAMES) or Specified, seconds (SECONDS) and then provide the GOP length in the related setting GOP size (GopSize). + /// Specify how the transcoder determines GOP size for this output. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, choose Auto and and leave GOP size blank. By default, if you don't specify GOP mode control, MediaConvert will use automatic behavior. If your output group specifies HLS, DASH, or CMAF, set GOP mode control to Auto and leave GOP size blank in each output in your output group. To explicitly specify the GOP length, choose Specified, frames or Specified, seconds and then provide the GOP length in the related setting GOP size. public var gopSizeUnits: MediaConvertClientTypes.H265GopSizeUnits? /// If your downstream systems have strict buffer requirements: Specify the minimum percentage of the HRD buffer that's available at the end of each encoded video segment. For the best video quality: Set to 0 or leave blank to automatically determine the final buffer fill percentage. public var hrdBufferFinalFillPercentage: Swift.Int? @@ -16138,43 +16150,43 @@ extension MediaConvertClientTypes { public var hrdBufferInitialFillPercentage: Swift.Int? /// Size of buffer (HRD buffer model) in bits. For example, enter five megabits as 5000000. public var hrdBufferSize: Swift.Int? - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public var interlaceMode: MediaConvertClientTypes.H265InterlaceMode? /// Maximum bitrate in bits/second. For example, enter five megabits per second as 5000000. Required when Rate control mode is QVBR. public var maxBitrate: Swift.Int? - /// Use this setting only when you also enable Scene change detection (SceneChangeDetect). This setting determines how the encoder manages the spacing between I-frames that it inserts as part of the I-frame cadence and the I-frames that it inserts for Scene change detection. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, keep the default value by leaving this setting out of your JSON job specification. In the console, do this by keeping the default empty value. When you explicitly specify a value for this setting, the encoder determines whether to skip a cadence-driven I-frame by the value you set. For example, if you set Min I interval (minIInterval) to 5 and a cadence-driven I-frame would fall within 5 frames of a scene-change I-frame, then the encoder skips the cadence-driven I-frame. In this way, one GOP is shrunk slightly and one GOP is stretched slightly. When the cadence-driven I-frames are farther from the scene-change I-frame than the value you set, then the encoder leaves all I-frames in place and the GOPs surrounding the scene change are smaller than the usual cadence GOPs. + /// Use this setting only when you also enable Scene change detection. This setting determines how the encoder manages the spacing between I-frames that it inserts as part of the I-frame cadence and the I-frames that it inserts for Scene change detection. We recommend that you have the transcoder automatically choose this value for you based on characteristics of your input video. To enable this automatic behavior, do this by keeping the default empty value. When you explicitly specify a value for this setting, the encoder determines whether to skip a cadence-driven I-frame by the value you set. For example, if you set Min I interval to 5 and a cadence-driven I-frame would fall within 5 frames of a scene-change I-frame, then the encoder skips the cadence-driven I-frame. In this way, one GOP is shrunk slightly and one GOP is stretched slightly. When the cadence-driven I-frames are farther from the scene-change I-frame than the value you set, then the encoder leaves all I-frames in place and the GOPs surrounding the scene change are smaller than the usual cadence GOPs. public var minIInterval: Swift.Int? /// Specify the number of B-frames between reference frames in this output. For the best video quality: Leave blank. MediaConvert automatically determines the number of B-frames to use based on the characteristics of your input video. To manually specify the number of B-frames between reference frames: Enter an integer from 0 to 7. public var numberBFramesBetweenReferenceFrames: Swift.Int? /// Number of reference frames to use. The encoder may use more than requested if using B-frames and/or interlaced encoding. public var numberReferenceFrames: Swift.Int? - /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source (INITIALIZE_FROM_SOURCE), uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. To specify a different PAR by editing the JSON job specification, choose SPECIFIED. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. + /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. public var parControl: MediaConvertClientTypes.H265ParControl? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. public var parDenominator: Swift.Int? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. public var parNumerator: Swift.Int? - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. public var qualityTuningLevel: MediaConvertClientTypes.H265QualityTuningLevel? - /// Settings for quality-defined variable bitrate encoding with the H.265 codec. Use these settings only when you set QVBR for Rate control mode (RateControlMode). + /// Settings for quality-defined variable bitrate encoding with the H.265 codec. Use these settings only when you set QVBR for Rate control mode. public var qvbrSettings: MediaConvertClientTypes.H265QvbrSettings? /// Use this setting to specify whether this output has a variable bitrate (VBR), constant bitrate (CBR) or quality-defined variable bitrate (QVBR). public var rateControlMode: MediaConvertClientTypes.H265RateControlMode? /// Specify Sample Adaptive Offset (SAO) filter strength. Adaptive mode dynamically selects best strength based on content public var sampleAdaptiveOffsetFilterMode: MediaConvertClientTypes.H265SampleAdaptiveOffsetFilterMode? - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public var scanTypeConversionMode: MediaConvertClientTypes.H265ScanTypeConversionMode? - /// Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default. If this output uses QVBR, choose Transition detection (TRANSITION_DETECTION) for further video quality improvement. For more information about QVBR, see https://docs.aws.amazon.com/console/mediaconvert/cbr-vbr-qvbr. + /// Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default. If this output uses QVBR, choose Transition detection for further video quality improvement. For more information about QVBR, see https://docs.aws.amazon.com/console/mediaconvert/cbr-vbr-qvbr. public var sceneChangeDetect: MediaConvertClientTypes.H265SceneChangeDetect? /// Number of slices per picture. Must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures. public var slices: Swift.Int? - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. public var slowPal: MediaConvertClientTypes.H265SlowPal? - /// Keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization (adaptiveQuantization) depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. + /// Keep the default value, Enabled, to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. public var spatialAdaptiveQuantization: MediaConvertClientTypes.H265SpatialAdaptiveQuantization? - /// This field applies only if the Streams > Advanced > Framerate (framerate) field is set to 29.970. This field works with the Streams > Advanced > Preprocessors > Deinterlacer field (deinterlace_mode) and the Streams > Advanced > Interlaced Mode field (interlace_mode) to identify the scan type for the output: Progressive, Interlaced, Hard Telecine or Soft Telecine. - Hard: produces 29.97i output from 23.976 input. - Soft: produces 23.976; the player converts this output to 29.97i. + /// This field applies only if the Streams > Advanced > Framerate field is set to 29.970. This field works with the Streams > Advanced > Preprocessors > Deinterlacer field and the Streams > Advanced > Interlaced Mode field to identify the scan type for the output: Progressive, Interlaced, Hard Telecine or Soft Telecine. - Hard: produces 29.97i output from 23.976 input. - Soft: produces 23.976; the player converts this output to 29.97i. public var telecine: MediaConvertClientTypes.H265Telecine? - /// Keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization (adaptiveQuantization). + /// Keep the default value, Enabled, to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization. public var temporalAdaptiveQuantization: MediaConvertClientTypes.H265TemporalAdaptiveQuantization? /// Enables temporal layer identifiers in the encoded bitstream. Up to 3 layers are supported depending on GOP structure: I- and P-frames form one layer, reference B-frames can form a second layer and non-reference b-frames can form a third layer. Decoders can optionally decode only the lower temporal layers to generate a lower frame rate output. For example, given a bitstream with temporal IDs and with b-frames = 1 (i.e. IbPbPb display order), a decoder could decode all the frames for full frame rate output or only the I and P frames (lowest temporal layer) for a half frame rate output. public var temporalIds: MediaConvertClientTypes.H265TemporalIds? @@ -16278,7 +16290,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. public enum H265SlowPal: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -16311,7 +16323,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization (adaptiveQuantization) depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. + /// Keep the default value, Enabled, to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. public enum H265SpatialAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -16344,7 +16356,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// This field applies only if the Streams > Advanced > Framerate (framerate) field is set to 29.970. This field works with the Streams > Advanced > Preprocessors > Deinterlacer field (deinterlace_mode) and the Streams > Advanced > Interlaced Mode field (interlace_mode) to identify the scan type for the output: Progressive, Interlaced, Hard Telecine or Soft Telecine. - Hard: produces 29.97i output from 23.976 input. - Soft: produces 23.976; the player converts this output to 29.97i. + /// This field applies only if the Streams > Advanced > Framerate field is set to 29.970. This field works with the Streams > Advanced > Preprocessors > Deinterlacer field and the Streams > Advanced > Interlaced Mode field to identify the scan type for the output: Progressive, Interlaced, Hard Telecine or Soft Telecine. - Hard: produces 29.97i output from 23.976 input. - Soft: produces 23.976; the player converts this output to 29.97i. public enum H265Telecine: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case hard case `none` @@ -16380,7 +16392,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization (adaptiveQuantization). + /// Keep the default value, Enabled, to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization. public enum H265TemporalAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -16858,7 +16870,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting only in audio-only outputs. Choose MPEG-2 Transport Stream (M2TS) to create a file in an MPEG2-TS container. Keep the default value Automatic (AUTOMATIC) to create a raw audio-only file with no container. Regardless of the value that you specify here, if this output has video, the service will place outputs into an MPEG2-TS container. + /// Use this setting only in audio-only outputs. Choose MPEG-2 Transport Stream (M2TS) to create a file in an MPEG2-TS container. Keep the default value Automatic to create a raw audio-only file with no container. Regardless of the value that you specify here, if this output has video, the service will place outputs into an MPEG2-TS container. public enum HlsAudioOnlyContainer: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case automatic case m2ts @@ -16891,7 +16903,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless you are using FairPlay DRM with Verimatrix and you encounter playback issues. Keep the default value, Include (INCLUDE), to output audio-only headers. Choose Exclude (EXCLUDE) to remove the audio-only headers from your audio segments. + /// Ignore this setting unless you are using FairPlay DRM with Verimatrix and you encounter playback issues. Keep the default value, Include, to output audio-only headers. Choose Exclude to remove the audio-only headers from your audio segments. public enum HlsAudioOnlyHeader: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case exclude case include @@ -17064,7 +17076,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Set Caption segment length control (CaptionSegmentLengthControl) to Match video (MATCH_VIDEO) to create caption segments that align with the video segments from the first video output in this output group. For example, if the video segments are 2 seconds long, your WebVTT segments will also be 2 seconds long. Keep the default setting, Large segments (LARGE_SEGMENTS) to create caption segments that are 300 seconds long. + /// Set Caption segment length control to Match video to create caption segments that align with the video segments from the first video output in this output group. For example, if the video segments are 2 seconds long, your WebVTT segments will also be 2 seconds long. Keep the default setting, Large segments to create caption segments that are 300 seconds long. public enum HlsCaptionSegmentLengthControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case largeSegments case matchVideo @@ -17097,7 +17109,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Disable this setting only when your workflow requires the #EXT-X-ALLOW-CACHE:no tag. Otherwise, keep the default value Enabled (ENABLED) and control caching in your video distribution set up. For example, use the Cache-Control http header. + /// Disable this setting only when your workflow requires the #EXT-X-ALLOW-CACHE:no tag. Otherwise, keep the default value Enabled and control caching in your video distribution set up. For example, use the Cache-Control http header. public enum HlsClientCache: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -17163,7 +17175,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether to flag this audio track as descriptive video service (DVS) in your HLS parent manifest. When you choose Flag (FLAG), MediaConvert includes the parameter CHARACTERISTICS="public.accessibility.describes-video" in the EXT-X-MEDIA entry for this track. When you keep the default choice, Don't flag (DONT_FLAG), MediaConvert leaves this parameter out. The DVS flag can help with accessibility on Apple devices. For more information, see the Apple documentation. + /// Specify whether to flag this audio track as descriptive video service (DVS) in your HLS parent manifest. When you choose Flag, MediaConvert includes the parameter CHARACTERISTICS="public.accessibility.describes-video" in the EXT-X-MEDIA entry for this track. When you keep the default choice, Don't flag, MediaConvert leaves this parameter out. The DVS flag can help with accessibility on Apple devices. For more information, see the Apple documentation. public enum HlsDescriptiveVideoServiceFlag: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case dontFlag case flag @@ -17598,13 +17610,13 @@ extension MediaConvertClientTypes.HlsGroupSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to your HLS output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. When you work directly in your JSON job specification, include this object and any required children when you set Type, under OutputGroupSettings, to HLS_GROUP_SETTINGS. + /// Settings related to your HLS output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. public struct HlsGroupSettings: Swift.Equatable { /// Choose one or more ad marker types to decorate your Apple HLS manifest. This setting does not determine whether SCTE-35 markers appear in the outputs themselves. public var adMarkers: [MediaConvertClientTypes.HlsAdMarkers]? /// By default, the service creates one top-level .m3u8 HLS manifest for each HLS output group in your job. This default manifest references every output in the output group. To create additional top-level manifests that reference a subset of the outputs in the output group, specify a list of them here. public var additionalManifests: [MediaConvertClientTypes.HlsAdditionalManifest]? - /// Ignore this setting unless you are using FairPlay DRM with Verimatrix and you encounter playback issues. Keep the default value, Include (INCLUDE), to output audio-only headers. Choose Exclude (EXCLUDE) to remove the audio-only headers from your audio segments. + /// Ignore this setting unless you are using FairPlay DRM with Verimatrix and you encounter playback issues. Keep the default value, Include, to output audio-only headers. Choose Exclude to remove the audio-only headers from your audio segments. public var audioOnlyHeader: MediaConvertClientTypes.HlsAudioOnlyHeader? /// A partial URI prefix that will be prepended to each output in the media .m3u8 file. Can be used if base manifest is delivered from a different URL than the main .m3u8 file. public var baseUrl: Swift.String? @@ -17612,13 +17624,13 @@ extension MediaConvertClientTypes { public var captionLanguageMappings: [MediaConvertClientTypes.HlsCaptionLanguageMapping]? /// Applies only to 608 Embedded output captions. Insert: Include CLOSED-CAPTIONS lines in the manifest. Specify at least one language in the CC1 Language Code field. One CLOSED-CAPTION line is added for each Language Code you specify. Make sure to specify the languages in the order in which they appear in the original source (if the source is embedded format) or the order of the caption selectors (if the source is other than embedded). Otherwise, languages in the manifest will not match up properly with the output captions. None: Include CLOSED-CAPTIONS=NONE line in the manifest. Omit: Omit any CLOSED-CAPTIONS line from the manifest. public var captionLanguageSetting: MediaConvertClientTypes.HlsCaptionLanguageSetting? - /// Set Caption segment length control (CaptionSegmentLengthControl) to Match video (MATCH_VIDEO) to create caption segments that align with the video segments from the first video output in this output group. For example, if the video segments are 2 seconds long, your WebVTT segments will also be 2 seconds long. Keep the default setting, Large segments (LARGE_SEGMENTS) to create caption segments that are 300 seconds long. + /// Set Caption segment length control to Match video to create caption segments that align with the video segments from the first video output in this output group. For example, if the video segments are 2 seconds long, your WebVTT segments will also be 2 seconds long. Keep the default setting, Large segments to create caption segments that are 300 seconds long. public var captionSegmentLengthControl: MediaConvertClientTypes.HlsCaptionSegmentLengthControl? - /// Disable this setting only when your workflow requires the #EXT-X-ALLOW-CACHE:no tag. Otherwise, keep the default value Enabled (ENABLED) and control caching in your video distribution set up. For example, use the Cache-Control http header. + /// Disable this setting only when your workflow requires the #EXT-X-ALLOW-CACHE:no tag. Otherwise, keep the default value Enabled and control caching in your video distribution set up. For example, use the Cache-Control http header. public var clientCache: MediaConvertClientTypes.HlsClientCache? /// Specification to use (RFC-6381 or the default RFC-4281) during m3u8 playlist generation. public var codecSpecification: MediaConvertClientTypes.HlsCodecSpecification? - /// Use Destination (Destination) to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. + /// Use Destination to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. public var destination: Swift.String? /// Settings associated with the destination. Will vary based on the type of destination public var destinationSettings: MediaConvertClientTypes.DestinationSettings? @@ -17626,7 +17638,7 @@ extension MediaConvertClientTypes { public var directoryStructure: MediaConvertClientTypes.HlsDirectoryStructure? /// DRM settings. public var encryption: MediaConvertClientTypes.HlsEncryptionSettings? - /// Specify whether MediaConvert generates images for trick play. Keep the default value, None (NONE), to not generate any images. Choose Thumbnail (THUMBNAIL) to generate tiled thumbnails. Choose Thumbnail and full frame (THUMBNAIL_AND_FULLFRAME) to generate tiled thumbnails and full-resolution images of single frames. MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md + /// Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md public var imageBasedTrickPlay: MediaConvertClientTypes.HlsImageBasedTrickPlay? /// Tile and thumbnail settings applicable when imageBasedTrickPlay is ADVANCED public var imageBasedTrickPlaySettings: MediaConvertClientTypes.HlsImageBasedTrickPlaySettings? @@ -17648,9 +17660,9 @@ extension MediaConvertClientTypes { public var progressiveWriteHlsManifest: MediaConvertClientTypes.HlsProgressiveWriteHlsManifest? /// When set to SINGLE_FILE, emits program as a single media resource (.ts) file, uses #EXT-X-BYTERANGE tags to index segment for playback. public var segmentControl: MediaConvertClientTypes.HlsSegmentControl? - /// Specify the length, in whole seconds, of each segment. When you don't specify a value, MediaConvert defaults to 10. Related settings: Use Segment length control (SegmentLengthControl) to specify whether the encoder enforces this value strictly. Use Segment control (HlsSegmentControl) to specify whether MediaConvert creates separate segment files or one content file that has metadata to mark the segment boundaries. + /// Specify the length, in whole seconds, of each segment. When you don't specify a value, MediaConvert defaults to 10. Related settings: Use Segment length control to specify whether the encoder enforces this value strictly. Use Segment control to specify whether MediaConvert creates separate segment files or one content file that has metadata to mark the segment boundaries. public var segmentLength: Swift.Int? - /// Specify how you want MediaConvert to determine the segment length. Choose Exact (EXACT) to have the encoder use the exact length that you specify with the setting Segment length (SegmentLength). This might result in extra I-frames. Choose Multiple of GOP (GOP_MULTIPLE) to have the encoder round up the segment lengths to match the next GOP boundary. + /// Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary. public var segmentLengthControl: MediaConvertClientTypes.HlsSegmentLengthControl? /// Specify the number of segments to write to a subdirectory before starting a new one. You must also set Directory structure to Subdirectory per stream for this setting to have an effect. public var segmentsPerSubdirectory: Swift.Int? @@ -17658,9 +17670,9 @@ extension MediaConvertClientTypes { public var streamInfResolution: MediaConvertClientTypes.HlsStreamInfResolution? /// When set to LEGACY, the segment target duration is always rounded up to the nearest integer value above its current value in seconds. When set to SPEC\_COMPLIANT, the segment target duration is rounded up to the nearest integer value if fraction seconds are greater than or equal to 0.5 (>= 0.5) and rounded down if less than 0.5 (< 0.5). You may need to use LEGACY if your client needs to ensure that the target duration is always longer than the actual duration of the segment. Some older players may experience interrupted playback when the actual duration of a track in a segment is longer than the target duration. public var targetDurationCompatibilityMode: MediaConvertClientTypes.HlsTargetDurationCompatibilityMode? - /// Specify the type of the ID3 frame (timedMetadataId3Frame) to use for ID3 timestamps (timedMetadataId3Period) in your output. To include ID3 timestamps: Specify PRIV (PRIV) or TDRL (TDRL) and set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH). To exclude ID3 timestamps: Set ID3 timestamp frame type to None (NONE). + /// Specify the type of the ID3 frame to use for ID3 timestamps in your output. To include ID3 timestamps: Specify PRIV or TDRL and set ID3 metadata to Passthrough. To exclude ID3 timestamps: Set ID3 timestamp frame type to None. public var timedMetadataId3Frame: MediaConvertClientTypes.HlsTimedMetadataId3Frame? - /// Specify the interval in seconds to write ID3 timestamps in your output. The first timestamp starts at the output timecode and date, and increases incrementally with each ID3 timestamp. To use the default interval of 10 seconds: Leave blank. To include this metadata in your output: Set ID3 timestamp frame type (timedMetadataId3Frame) to PRIV (PRIV) or TDRL (TDRL), and set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH). + /// Specify the interval in seconds to write ID3 timestamps in your output. The first timestamp starts at the output timecode and date, and increases incrementally with each ID3 timestamp. To use the default interval of 10 seconds: Leave blank. To include this metadata in your output: Set ID3 timestamp frame type to PRIV or TDRL, and set ID3 metadata to Passthrough. public var timedMetadataId3Period: Swift.Int? /// Provides an extra millisecond delta offset to fine tune the timestamps. public var timestampDeltaMilliseconds: Swift.Int? @@ -17738,7 +17750,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose Include (INCLUDE) to have MediaConvert generate a child manifest that lists only the I-frames for this rendition, in addition to your regular manifest for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only child manifest and the regular child manifest to the parent manifest. When you don't need the I-frame only child manifest, keep the default value Exclude (EXCLUDE). + /// Choose Include to have MediaConvert generate a child manifest that lists only the I-frames for this rendition, in addition to your regular manifest for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only child manifest and the regular child manifest to the parent manifest. When you don't need the I-frame only child manifest, keep the default value Exclude. public enum HlsIFrameOnlyManifest: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case exclude case include @@ -17771,7 +17783,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether MediaConvert generates images for trick play. Keep the default value, None (NONE), to not generate any images. Choose Thumbnail (THUMBNAIL) to generate tiled thumbnails. Choose Thumbnail and full frame (THUMBNAIL_AND_FULLFRAME) to generate tiled thumbnails and full-resolution images of single frames. MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md + /// Specify whether MediaConvert generates images for trick play. Keep the default value, None, to not generate any images. Choose Thumbnail to generate tiled thumbnails. Choose Thumbnail and full frame to generate tiled thumbnails and full-resolution images of single frames. MediaConvert creates a child manifest for each set of images that you generate and adds corresponding entries to the parent manifest. A common application for these images is Roku trick mode. The thumbnails and full-frame images that MediaConvert creates with this feature are compatible with this Roku specification: https://developer.roku.com/docs/developer-program/media-playback/trick-mode/hls-and-dash.md public enum HlsImageBasedTrickPlay: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case advanced case `none` @@ -18280,7 +18292,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify how you want MediaConvert to determine the segment length. Choose Exact (EXACT) to have the encoder use the exact length that you specify with the setting Segment length (SegmentLength). This might result in extra I-frames. Choose Multiple of GOP (GOP_MULTIPLE) to have the encoder round up the segment lengths to match the next GOP boundary. + /// Specify how you want MediaConvert to determine the segment length. Choose Exact to have the encoder use the exact length that you specify with the setting Segment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary. public enum HlsSegmentLengthControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case exact case gopMultiple @@ -18372,15 +18384,15 @@ extension MediaConvertClientTypes { public struct HlsSettings: Swift.Equatable { /// Specifies the group to which the audio rendition belongs. public var audioGroupId: Swift.String? - /// Use this setting only in audio-only outputs. Choose MPEG-2 Transport Stream (M2TS) to create a file in an MPEG2-TS container. Keep the default value Automatic (AUTOMATIC) to create an audio-only file in a raw container. Regardless of the value that you specify here, if this output has video, the service will place the output into an MPEG2-TS container. + /// Use this setting only in audio-only outputs. Choose MPEG-2 Transport Stream (M2TS) to create a file in an MPEG2-TS container. Keep the default value Automatic to create an audio-only file in a raw container. Regardless of the value that you specify here, if this output has video, the service will place the output into an MPEG2-TS container. public var audioOnlyContainer: MediaConvertClientTypes.HlsAudioOnlyContainer? /// List all the audio groups that are used with the video output stream. Input all the audio GROUP-IDs that are associated to the video, separate by ','. public var audioRenditionSets: Swift.String? /// Four types of audio-only tracks are supported: Audio-Only Variant Stream The client can play back this audio-only stream instead of video in low-bandwidth scenarios. Represented as an EXT-X-STREAM-INF in the HLS manifest. Alternate Audio, Auto Select, Default Alternate rendition that the client should try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=YES, AUTOSELECT=YES Alternate Audio, Auto Select, Not Default Alternate rendition that the client may try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=YES Alternate Audio, not Auto Select Alternate rendition that the client will not try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=NO public var audioTrackType: MediaConvertClientTypes.HlsAudioTrackType? - /// Specify whether to flag this audio track as descriptive video service (DVS) in your HLS parent manifest. When you choose Flag (FLAG), MediaConvert includes the parameter CHARACTERISTICS="public.accessibility.describes-video" in the EXT-X-MEDIA entry for this track. When you keep the default choice, Don't flag (DONT_FLAG), MediaConvert leaves this parameter out. The DVS flag can help with accessibility on Apple devices. For more information, see the Apple documentation. + /// Specify whether to flag this audio track as descriptive video service (DVS) in your HLS parent manifest. When you choose Flag, MediaConvert includes the parameter CHARACTERISTICS="public.accessibility.describes-video" in the EXT-X-MEDIA entry for this track. When you keep the default choice, Don't flag, MediaConvert leaves this parameter out. The DVS flag can help with accessibility on Apple devices. For more information, see the Apple documentation. public var descriptiveVideoServiceFlag: MediaConvertClientTypes.HlsDescriptiveVideoServiceFlag? - /// Choose Include (INCLUDE) to have MediaConvert generate a child manifest that lists only the I-frames for this rendition, in addition to your regular manifest for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only child manifest and the regular child manifest to the parent manifest. When you don't need the I-frame only child manifest, keep the default value Exclude (EXCLUDE). + /// Choose Include to have MediaConvert generate a child manifest that lists only the I-frames for this rendition, in addition to your regular manifest for this rendition. You might use this manifest as part of a workflow that creates preview functions for your video. MediaConvert adds both the I-frame only child manifest and the regular child manifest to the parent manifest. When you don't need the I-frame only child manifest, keep the default value Exclude. public var iFrameOnlyManifest: MediaConvertClientTypes.HlsIFrameOnlyManifest? /// Use this setting to add an identifying string to the filename of each segment. The service adds this string between the name modifier and segment index number. You can use format identifiers in the string. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/using-variables-in-your-job-settings.html public var segmentModifier: Swift.String? @@ -18474,7 +18486,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the type of the ID3 frame (timedMetadataId3Frame) to use for ID3 timestamps (timedMetadataId3Period) in your output. To include ID3 timestamps: Specify PRIV (PRIV) or TDRL (TDRL) and set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH). To exclude ID3 timestamps: Set ID3 timestamp frame type to None (NONE). + /// Specify the type of the ID3 frame to use for ID3 timestamps in your output. To include ID3 timestamps: Specify PRIV or TDRL and set ID3 metadata to Passthrough. To exclude ID3 timestamps: Set ID3 timestamp frame type to None. public enum HlsTimedMetadataId3Frame: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `none` case priv @@ -18590,11 +18602,11 @@ extension MediaConvertClientTypes.Id3Insertion: Swift.Codable { } extension MediaConvertClientTypes { - /// To insert ID3 tags in your output, specify two values. Use ID3 tag (Id3) to specify the base 64 encoded string and use Timecode (TimeCode) to specify the time when the tag should be inserted. To insert multiple ID3 tags in your output, create multiple instances of ID3 insertion (Id3Insertion). + /// To insert ID3 tags in your output, specify two values. Use ID3 tag to specify the base 64 encoded string and use Timecode to specify the time when the tag should be inserted. To insert multiple ID3 tags in your output, create multiple instances of ID3 insertion. public struct Id3Insertion: Swift.Equatable { - /// Use ID3 tag (Id3) to provide a fully formed ID3 tag in base64-encode format. + /// Use ID3 tag to provide a fully formed ID3 tag in base64-encode format. public var id3: Swift.String? - /// Provide a Timecode (TimeCode) in HH:MM:SS:FF or HH:MM:SS;FF format. + /// Provide a Timecode in HH:MM:SS:FF or HH:MM:SS;FF format. public var timecode: Swift.String? public init( @@ -18725,7 +18737,7 @@ extension MediaConvertClientTypes.ImscDestinationSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to IMSC captions. IMSC is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to IMSC. + /// Settings related to IMSC captions. IMSC is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. public struct ImscDestinationSettings: Swift.Equatable { /// If the IMSC captions track is intended to provide accessibility for people who are deaf or hard of hearing: Set Accessibility subtitles to Enabled. When you do, MediaConvert adds accessibility attributes to your output HLS or DASH manifest. For HLS manifests, MediaConvert adds the following accessibility attributes under EXT-X-MEDIA for this track: CHARACTERISTICS="public.accessibility.describes-spoken-dialog,public.accessibility.describes-music-and-sound" and AUTOSELECT="YES". For DASH manifests, MediaConvert adds the following in the adaptation set for this track: . If the captions track is not intended to provide such accessibility: Keep the default value, Disabled. When you do, for DASH manifests, MediaConvert instead adds the following in the adaptation set for this track: . public var accessibility: MediaConvertClientTypes.ImscAccessibilitySubs? @@ -19001,23 +19013,23 @@ extension MediaConvertClientTypes { public var advancedInputFilter: MediaConvertClientTypes.AdvancedInputFilter? /// Optional settings for Advanced input filter when you set Advanced input filter to Enabled. public var advancedInputFilterSettings: MediaConvertClientTypes.AdvancedInputFilterSettings? - /// Use audio selector groups to combine multiple sidecar audio inputs so that you can assign them to a single output audio tab (AudioDescription). Note that, if you're working with embedded audio, it's simpler to assign multiple input tracks into a single audio selector rather than use an audio selector group. + /// Use audio selector groups to combine multiple sidecar audio inputs so that you can assign them to a single output audio tab. Note that, if you're working with embedded audio, it's simpler to assign multiple input tracks into a single audio selector rather than use an audio selector group. public var audioSelectorGroups: [Swift.String:MediaConvertClientTypes.AudioSelectorGroup]? - /// Use Audio selectors (AudioSelectors) to specify a track or set of tracks from the input that you will use in your outputs. You can use multiple Audio selectors per input. + /// Use Audio selectors to specify a track or set of tracks from the input that you will use in your outputs. You can use multiple Audio selectors per input. public var audioSelectors: [Swift.String:MediaConvertClientTypes.AudioSelector]? /// Use captions selectors to specify the captions data from your input that you use in your outputs. You can use up to 100 captions selectors per input. public var captionSelectors: [Swift.String:MediaConvertClientTypes.CaptionSelector]? - /// Use Cropping selection (crop) to specify the video area that the service will include in the output video frame. If you specify a value here, it will override any value that you specify in the output setting Cropping selection (crop). + /// Use Cropping selection to specify the video area that the service will include in the output video frame. If you specify a value here, it will override any value that you specify in the output setting Cropping selection. public var crop: MediaConvertClientTypes.Rectangle? - /// Enable Deblock (InputDeblockFilter) to produce smoother motion in the output. Default is disabled. Only manually controllable for MPEG2 and uncompressed video inputs. + /// Enable Deblock to produce smoother motion in the output. Default is disabled. Only manually controllable for MPEG2 and uncompressed video inputs. public var deblockFilter: MediaConvertClientTypes.InputDeblockFilter? /// Settings for decrypting any input files that you encrypt before you upload them to Amazon S3. MediaConvert can decrypt files only when you use AWS Key Management Service (KMS) to encrypt the data key that you use to encrypt your content. public var decryptionSettings: MediaConvertClientTypes.InputDecryptionSettings? - /// Enable Denoise (InputDenoiseFilter) to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, H.265, and uncompressed video inputs. + /// Enable Denoise to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, H.265, and uncompressed video inputs. public var denoiseFilter: MediaConvertClientTypes.InputDenoiseFilter? /// Use this setting only when your video source has Dolby Vision studio mastering metadata that is carried in a separate XML file. Specify the Amazon S3 location for the metadata XML file. MediaConvert uses this file to provide global and frame-level metadata for Dolby Vision preprocessing. When you specify a file here and your input also has interleaved global and frame level metadata, MediaConvert ignores the interleaved metadata and uses only the the metadata from this external XML file. Note that your IAM service role must grant MediaConvert read permissions to this file. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/iam-role.html. public var dolbyVisionMetadataXml: Swift.String? - /// Specify the source file for your transcoding job. You can use multiple inputs in a single job. The service concatenates these inputs, in the order that you specify them in the job, to create the outputs. If your input format is IMF, specify your input by providing the path to your CPL. For example, "s3://bucket/vf/cpl.xml". If the CPL is in an incomplete IMP, make sure to use Supplemental IMPs (SupplementalImps) to specify any supplemental IMPs that contain assets referenced by the CPL. + /// Specify the source file for your transcoding job. You can use multiple inputs in a single job. The service concatenates these inputs, in the order that you specify them in the job, to create the outputs. If your input format is IMF, specify your input by providing the path to your CPL. For example, "s3://bucket/vf/cpl.xml". If the CPL is in an incomplete IMP, make sure to use Supplemental IMPs to specify any supplemental IMPs that contain assets referenced by the CPL. public var fileInput: Swift.String? /// Specify whether to apply input filtering to improve the video quality of your input. To apply filtering depending on your input type and quality: Choose Auto. To apply no filtering: Choose Disable. To apply filtering regardless of your input type and quality: Choose Force. When you do, you must also specify a value for Filter strength. public var filterEnable: MediaConvertClientTypes.InputFilterEnable? @@ -19025,21 +19037,25 @@ extension MediaConvertClientTypes { public var filterStrength: Swift.Int? /// Enable the image inserter feature to include a graphic overlay on your video. Enable or disable this feature for each input individually. This setting is disabled by default. public var imageInserter: MediaConvertClientTypes.ImageInserter? - /// (InputClippings) contains sets of start and end times that together specify a portion of the input to be used in the outputs. If you provide only a start time, the clip will be the entire input from that point to the end. If you provide only an end time, it will be the entire input up to that point. When you specify more than one input clip, the transcoding service creates the job outputs by stringing the clips together in the order you specify them. + /// Contains sets of start and end times that together specify a portion of the input to be used in the outputs. If you provide only a start time, the clip will be the entire input from that point to the end. If you provide only an end time, it will be the entire input up to that point. When you specify more than one input clip, the transcoding service creates the job outputs by stringing the clips together in the order you specify them. public var inputClippings: [MediaConvertClientTypes.InputClipping]? - /// When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better preservation of video quality when you do deinterlacing and frame rate conversion. If you don't specify, the default value is Auto (AUTO). Auto is the correct setting for all inputs that are not PsF. Don't set this value to PsF when your input is interlaced. Doing so creates horizontal interlacing artifacts. + /// When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better preservation of video quality when you do deinterlacing and frame rate conversion. If you don't specify, the default value is Auto. Auto is the correct setting for all inputs that are not PsF. Don't set this value to PsF when your input is interlaced. Doing so creates horizontal interlacing artifacts. public var inputScanType: MediaConvertClientTypes.InputScanType? - /// Use Selection placement (position) to define the video area in your output frame. The area outside of the rectangle that you specify here is black. If you specify a value here, it will override any value that you specify in the output setting Selection placement (position). If you specify a value here, this will override any AFD values in your input, even if you set Respond to AFD (RespondToAfd) to Respond (RESPOND). If you specify a value here, this will ignore anything that you specify for the setting Scaling Behavior (scalingBehavior). + /// Use Selection placement to define the video area in your output frame. The area outside of the rectangle that you specify here is black. If you specify a value here, it will override any value that you specify in the output setting Selection placement. If you specify a value here, this will override any AFD values in your input, even if you set Respond to AFD to Respond. If you specify a value here, this will ignore anything that you specify for the setting Scaling Behavior. public var position: MediaConvertClientTypes.Rectangle? - /// Use Program (programNumber) to select a specific program from within a multi-program transport stream. Note that Quad 4K is not currently supported. Default is the first program within the transport stream. If the program you specify doesn't exist, the transcoding service will use this default. + /// Use Program to select a specific program from within a multi-program transport stream. Note that Quad 4K is not currently supported. Default is the first program within the transport stream. If the program you specify doesn't exist, the transcoding service will use this default. public var programNumber: Swift.Int? - /// Set PSI control (InputPsiControl) for transport stream inputs to specify which data the demux process to scans. * Ignore PSI - Scan all PIDs for audio and video. * Use PSI - Scan only PSI data. + /// Set PSI control for transport stream inputs to specify which data the demux process to scans. + /// + /// * Ignore PSI - Scan all PIDs for audio and video. + /// + /// * Use PSI - Scan only PSI data. public var psiControl: MediaConvertClientTypes.InputPsiControl? /// Provide a list of any necessary supplemental IMPs. You need supplemental IMPs if the CPL that you're using for your input is in an incomplete IMP. Specify either the supplemental IMP directories with a trailing slash or the ASSETMAP.xml files. For example ["s3://bucket/ov/", "s3://bucket/vf2/ASSETMAP.xml"]. You don't need to specify the IMP that contains your input CPL, because the service automatically detects it. public var supplementalImps: [Swift.String]? - /// Use this Timecode source setting, located under the input settings (InputTimecodeSource), to specify how the service counts input video frames. This input frame count affects only the behavior of features that apply to a single input at a time, such as input clipping and synchronizing some captions formats. Choose Embedded (EMBEDDED) to use the timecodes in your input video. Choose Start at zero (ZEROBASED) to start the first frame at zero. Choose Specified start (SPECIFIEDSTART) to start the first frame at the timecode that you specify in the setting Start timecode (timecodeStart). If you don't specify a value for Timecode source, the service will use Embedded by default. For more information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. + /// Use this Timecode source setting, located under the input settings, to specify how the service counts input video frames. This input frame count affects only the behavior of features that apply to a single input at a time, such as input clipping and synchronizing some captions formats. Choose Embedded to use the timecodes in your input video. Choose Start at zero to start the first frame at zero. Choose Specified start to start the first frame at the timecode that you specify in the setting Start timecode. If you don't specify a value for Timecode source, the service will use Embedded by default. For more information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. public var timecodeSource: MediaConvertClientTypes.InputTimecodeSource? - /// Specify the timecode that you want the service to use for this input's initial frame. To use this setting, you must set the Timecode source setting, located under the input settings (InputTimecodeSource), to Specified start (SPECIFIEDSTART). For more information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. + /// Specify the timecode that you want the service to use for this input's initial frame. To use this setting, you must set the Timecode source setting, located under the input settings, to Specified start. For more information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. public var timecodeStart: Swift.String? /// When you include Video generator, MediaConvert creates a video input with black frames. Use this setting if you do not have a video input or if you want to add black video frames before, or after, other inputs. You can specify Video generator, or you can specify an Input file, but you cannot specify both. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/video-generator.html public var videoGenerator: MediaConvertClientTypes.InputVideoGenerator? @@ -19130,9 +19146,9 @@ extension MediaConvertClientTypes.InputClipping: Swift.Codable { extension MediaConvertClientTypes { /// To transcode only portions of your input, include one input clip for each part of your input that you want in your output. All input clips that you specify will be included in every output of the job. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/assembling-multiple-inputs-and-input-clips.html. public struct InputClipping: Swift.Equatable { - /// Set End timecode (EndTimecode) to the end of the portion of the input you are clipping. The frame corresponding to the End timecode value is included in the clip. Start timecode or End timecode may be left blank, but not both. Use the format HH:MM:SS:FF or HH:MM:SS;FF, where HH is the hour, MM is the minute, SS is the second, and FF is the frame number. When choosing this value, take into account your setting for timecode source under input settings (InputTimecodeSource). For example, if you have embedded timecodes that start at 01:00:00:00 and you want your clip to end six minutes into the video, use 01:06:00:00. + /// Set End timecode to the end of the portion of the input you are clipping. The frame corresponding to the End timecode value is included in the clip. Start timecode or End timecode may be left blank, but not both. Use the format HH:MM:SS:FF or HH:MM:SS;FF, where HH is the hour, MM is the minute, SS is the second, and FF is the frame number. When choosing this value, take into account your setting for timecode source under input settings. For example, if you have embedded timecodes that start at 01:00:00:00 and you want your clip to end six minutes into the video, use 01:06:00:00. public var endTimecode: Swift.String? - /// Set Start timecode (StartTimecode) to the beginning of the portion of the input you are clipping. The frame corresponding to the Start timecode value is included in the clip. Start timecode or End timecode may be left blank, but not both. Use the format HH:MM:SS:FF or HH:MM:SS;FF, where HH is the hour, MM is the minute, SS is the second, and FF is the frame number. When choosing this value, take into account your setting for Input timecode source. For example, if you have embedded timecodes that start at 01:00:00:00 and you want your clip to begin five minutes into the video, use 01:05:00:00. + /// Set Start timecode to the beginning of the portion of the input you are clipping. The frame corresponding to the Start timecode value is included in the clip. Start timecode or End timecode may be left blank, but not both. Use the format HH:MM:SS:FF or HH:MM:SS;FF, where HH is the hour, MM is the minute, SS is the second, and FF is the frame number. When choosing this value, take into account your setting for Input timecode source. For example, if you have embedded timecodes that start at 01:00:00:00 and you want your clip to begin five minutes into the video, use 01:05:00:00. public var startTimecode: Swift.String? public init( @@ -19148,7 +19164,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Enable Deblock (InputDeblockFilter) to produce smoother motion in the output. Default is disabled. Only manually controllable for MPEG2 and uncompressed video inputs. + /// Enable Deblock to produce smoother motion in the output. Default is disabled. Only manually controllable for MPEG2 and uncompressed video inputs. public enum InputDeblockFilter: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -19246,7 +19262,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Enable Denoise (InputDenoiseFilter) to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, H.265, and uncompressed video inputs. + /// Enable Denoise to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, H.265, and uncompressed video inputs. public enum InputDenoiseFilter: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -19348,7 +19364,11 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Set PSI control (InputPsiControl) for transport stream inputs to specify which data the demux process to scans. * Ignore PSI - Scan all PIDs for audio and video. * Use PSI - Scan only PSI data. + /// Set PSI control for transport stream inputs to specify which data the demux process to scans. + /// + /// * Ignore PSI - Scan all PIDs for audio and video. + /// + /// * Use PSI - Scan only PSI data. public enum InputPsiControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case ignorePsi case usePsi @@ -19381,7 +19401,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Rotate (InputRotate) to specify how the service rotates your video. You can choose automatic rotation or specify a rotation. You can specify a clockwise rotation of 0, 90, 180, or 270 degrees. If your input video container is .mov or .mp4 and your input has rotation metadata, you can choose Automatic to have the service rotate your video according to the rotation specified in the metadata. The rotation must be within one degree of 90, 180, or 270 degrees. If the rotation metadata specifies any other rotation, the service will default to no rotation. By default, the service does no rotation, even if your input video has rotation metadata. The service doesn't pass through rotation metadata. + /// Use Rotate to specify how the service rotates your video. You can choose automatic rotation or specify a rotation. You can specify a clockwise rotation of 0, 90, 180, or 270 degrees. If your input video container is .mov or .mp4 and your input has rotation metadata, you can choose Automatic to have the service rotate your video according to the rotation specified in the metadata. The rotation must be within one degree of 90, 180, or 270 degrees. If the rotation metadata specifies any other rotation, the service will default to no rotation. By default, the service does no rotation, even if your input video has rotation metadata. The service doesn't pass through rotation metadata. public enum InputRotate: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case degrees180 @@ -19423,7 +19443,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If the sample range metadata in your input video is accurate, or if you don't know about sample range, keep the default value, Follow (FOLLOW), for this setting. When you do, the service automatically detects your input sample range. If your input video has metadata indicating the wrong sample range, specify the accurate sample range here. When you do, MediaConvert ignores any sample range information in the input metadata. Regardless of whether MediaConvert uses the input sample range or the sample range that you specify, MediaConvert uses the sample range for transcoding and also writes it to the output metadata. + /// If the sample range metadata in your input video is accurate, or if you don't know about sample range, keep the default value, Follow, for this setting. When you do, the service automatically detects your input sample range. If your input video has metadata indicating the wrong sample range, specify the accurate sample range here. When you do, MediaConvert ignores any sample range information in the input metadata. Regardless of whether MediaConvert uses the input sample range or the sample range that you specify, MediaConvert uses the sample range for transcoding and also writes it to the output metadata. public enum InputSampleRange: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case follow case fullRange @@ -19459,7 +19479,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better preservation of video quality when you do deinterlacing and frame rate conversion. If you don't specify, the default value is Auto (AUTO). Auto is the correct setting for all inputs that are not PsF. Don't set this value to PsF when your input is interlaced. Doing so creates horizontal interlacing artifacts. + /// When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better preservation of video quality when you do deinterlacing and frame rate conversion. If you don't specify, the default value is Auto. Auto is the correct setting for all inputs that are not PsF. Don't set this value to PsF when your input is interlaced. Doing so creates horizontal interlacing artifacts. public enum InputScanType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case psf @@ -19679,17 +19699,17 @@ extension MediaConvertClientTypes { public var advancedInputFilter: MediaConvertClientTypes.AdvancedInputFilter? /// Optional settings for Advanced input filter when you set Advanced input filter to Enabled. public var advancedInputFilterSettings: MediaConvertClientTypes.AdvancedInputFilterSettings? - /// Use audio selector groups to combine multiple sidecar audio inputs so that you can assign them to a single output audio tab (AudioDescription). Note that, if you're working with embedded audio, it's simpler to assign multiple input tracks into a single audio selector rather than use an audio selector group. + /// Use audio selector groups to combine multiple sidecar audio inputs so that you can assign them to a single output audio tab. Note that, if you're working with embedded audio, it's simpler to assign multiple input tracks into a single audio selector rather than use an audio selector group. public var audioSelectorGroups: [Swift.String:MediaConvertClientTypes.AudioSelectorGroup]? - /// Use Audio selectors (AudioSelectors) to specify a track or set of tracks from the input that you will use in your outputs. You can use multiple Audio selectors per input. + /// Use Audio selectors to specify a track or set of tracks from the input that you will use in your outputs. You can use multiple Audio selectors per input. public var audioSelectors: [Swift.String:MediaConvertClientTypes.AudioSelector]? /// Use captions selectors to specify the captions data from your input that you use in your outputs. You can use up to 100 captions selectors per input. public var captionSelectors: [Swift.String:MediaConvertClientTypes.CaptionSelector]? - /// Use Cropping selection (crop) to specify the video area that the service will include in the output video frame. If you specify a value here, it will override any value that you specify in the output setting Cropping selection (crop). + /// Use Cropping selection to specify the video area that the service will include in the output video frame. If you specify a value here, it will override any value that you specify in the output setting Cropping selection. public var crop: MediaConvertClientTypes.Rectangle? - /// Enable Deblock (InputDeblockFilter) to produce smoother motion in the output. Default is disabled. Only manually controllable for MPEG2 and uncompressed video inputs. + /// Enable Deblock to produce smoother motion in the output. Default is disabled. Only manually controllable for MPEG2 and uncompressed video inputs. public var deblockFilter: MediaConvertClientTypes.InputDeblockFilter? - /// Enable Denoise (InputDenoiseFilter) to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, H.265, and uncompressed video inputs. + /// Enable Denoise to filter noise from the input. Default is disabled. Only applicable to MPEG2, H.264, H.265, and uncompressed video inputs. public var denoiseFilter: MediaConvertClientTypes.InputDenoiseFilter? /// Use this setting only when your video source has Dolby Vision studio mastering metadata that is carried in a separate XML file. Specify the Amazon S3 location for the metadata XML file. MediaConvert uses this file to provide global and frame-level metadata for Dolby Vision preprocessing. When you specify a file here and your input also has interleaved global and frame level metadata, MediaConvert ignores the interleaved metadata and uses only the the metadata from this external XML file. Note that your IAM service role must grant MediaConvert read permissions to this file. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/iam-role.html. public var dolbyVisionMetadataXml: Swift.String? @@ -19699,19 +19719,23 @@ extension MediaConvertClientTypes { public var filterStrength: Swift.Int? /// Enable the image inserter feature to include a graphic overlay on your video. Enable or disable this feature for each input individually. This setting is disabled by default. public var imageInserter: MediaConvertClientTypes.ImageInserter? - /// (InputClippings) contains sets of start and end times that together specify a portion of the input to be used in the outputs. If you provide only a start time, the clip will be the entire input from that point to the end. If you provide only an end time, it will be the entire input up to that point. When you specify more than one input clip, the transcoding service creates the job outputs by stringing the clips together in the order you specify them. + /// Contains sets of start and end times that together specify a portion of the input to be used in the outputs. If you provide only a start time, the clip will be the entire input from that point to the end. If you provide only an end time, it will be the entire input up to that point. When you specify more than one input clip, the transcoding service creates the job outputs by stringing the clips together in the order you specify them. public var inputClippings: [MediaConvertClientTypes.InputClipping]? - /// When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better preservation of video quality when you do deinterlacing and frame rate conversion. If you don't specify, the default value is Auto (AUTO). Auto is the correct setting for all inputs that are not PsF. Don't set this value to PsF when your input is interlaced. Doing so creates horizontal interlacing artifacts. + /// When you have a progressive segmented frame (PsF) input, use this setting to flag the input as PsF. MediaConvert doesn't automatically detect PsF. Therefore, flagging your input as PsF results in better preservation of video quality when you do deinterlacing and frame rate conversion. If you don't specify, the default value is Auto. Auto is the correct setting for all inputs that are not PsF. Don't set this value to PsF when your input is interlaced. Doing so creates horizontal interlacing artifacts. public var inputScanType: MediaConvertClientTypes.InputScanType? - /// Use Selection placement (position) to define the video area in your output frame. The area outside of the rectangle that you specify here is black. If you specify a value here, it will override any value that you specify in the output setting Selection placement (position). If you specify a value here, this will override any AFD values in your input, even if you set Respond to AFD (RespondToAfd) to Respond (RESPOND). If you specify a value here, this will ignore anything that you specify for the setting Scaling Behavior (scalingBehavior). + /// Use Selection placement to define the video area in your output frame. The area outside of the rectangle that you specify here is black. If you specify a value here, it will override any value that you specify in the output setting Selection placement. If you specify a value here, this will override any AFD values in your input, even if you set Respond to AFD to Respond. If you specify a value here, this will ignore anything that you specify for the setting Scaling Behavior. public var position: MediaConvertClientTypes.Rectangle? - /// Use Program (programNumber) to select a specific program from within a multi-program transport stream. Note that Quad 4K is not currently supported. Default is the first program within the transport stream. If the program you specify doesn't exist, the transcoding service will use this default. + /// Use Program to select a specific program from within a multi-program transport stream. Note that Quad 4K is not currently supported. Default is the first program within the transport stream. If the program you specify doesn't exist, the transcoding service will use this default. public var programNumber: Swift.Int? - /// Set PSI control (InputPsiControl) for transport stream inputs to specify which data the demux process to scans. * Ignore PSI - Scan all PIDs for audio and video. * Use PSI - Scan only PSI data. + /// Set PSI control for transport stream inputs to specify which data the demux process to scans. + /// + /// * Ignore PSI - Scan all PIDs for audio and video. + /// + /// * Use PSI - Scan only PSI data. public var psiControl: MediaConvertClientTypes.InputPsiControl? - /// Use this Timecode source setting, located under the input settings (InputTimecodeSource), to specify how the service counts input video frames. This input frame count affects only the behavior of features that apply to a single input at a time, such as input clipping and synchronizing some captions formats. Choose Embedded (EMBEDDED) to use the timecodes in your input video. Choose Start at zero (ZEROBASED) to start the first frame at zero. Choose Specified start (SPECIFIEDSTART) to start the first frame at the timecode that you specify in the setting Start timecode (timecodeStart). If you don't specify a value for Timecode source, the service will use Embedded by default. For more information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. + /// Use this Timecode source setting, located under the input settings, to specify how the service counts input video frames. This input frame count affects only the behavior of features that apply to a single input at a time, such as input clipping and synchronizing some captions formats. Choose Embedded to use the timecodes in your input video. Choose Start at zero to start the first frame at zero. Choose Specified start to start the first frame at the timecode that you specify in the setting Start timecode. If you don't specify a value for Timecode source, the service will use Embedded by default. For more information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. public var timecodeSource: MediaConvertClientTypes.InputTimecodeSource? - /// Specify the timecode that you want the service to use for this input's initial frame. To use this setting, you must set the Timecode source setting, located under the input settings (InputTimecodeSource), to Specified start (SPECIFIEDSTART). For more information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. + /// Specify the timecode that you want the service to use for this input's initial frame. To use this setting, you must set the Timecode source setting, located under the input settings, to Specified start. For more information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. public var timecodeStart: Swift.String? /// Input video selectors contain the video settings for the input. Each of your inputs can have up to one video selector. public var videoSelector: MediaConvertClientTypes.VideoSelector? @@ -19765,7 +19789,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this Timecode source setting, located under the input settings (InputTimecodeSource), to specify how the service counts input video frames. This input frame count affects only the behavior of features that apply to a single input at a time, such as input clipping and synchronizing some captions formats. Choose Embedded (EMBEDDED) to use the timecodes in your input video. Choose Start at zero (ZEROBASED) to start the first frame at zero. Choose Specified start (SPECIFIEDSTART) to start the first frame at the timecode that you specify in the setting Start timecode (timecodeStart). If you don't specify a value for Timecode source, the service will use Embedded by default. For more information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. + /// Use this Timecode source setting, located under the input settings, to specify how the service counts input video frames. This input frame count affects only the behavior of features that apply to a single input at a time, such as input clipping and synchronizing some captions formats. Choose Embedded to use the timecodes in your input video. Choose Start at zero to start the first frame at zero. Choose Specified start to start the first frame at the timecode that you specify in the setting Start timecode. If you don't specify a value for Timecode source, the service will use Embedded by default. For more information about timecodes, see https://docs.aws.amazon.com/console/mediaconvert/timecode. public enum InputTimecodeSource: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case embedded case specifiedstart @@ -19933,7 +19957,7 @@ extension MediaConvertClientTypes { public var imagey: Swift.Int? /// Specify how overlapping inserted images appear. Images with higher values for Layer appear on top of images with lower values for Layer. public var layer: Swift.Int? - /// Use Opacity (Opacity) to specify how much of the underlying video shows through the inserted image. 0 is transparent and 100 is fully opaque. Default is 50. + /// Use Opacity to specify how much of the underlying video shows through the inserted image. 0 is transparent and 100 is fully opaque. Default is 50. public var opacity: Swift.Int? /// Specify the timecode of the frame that you want the overlay to first appear on. This must be in timecode (HH:MM:SS:FF or HH:MM:SS;FF) format. Remember to take into account your timecode source settings. public var startTime: Swift.String? @@ -20607,21 +20631,21 @@ extension MediaConvertClientTypes { public var esam: MediaConvertClientTypes.EsamSettings? /// If your source content has EIA-608 Line 21 Data Services, enable this feature to specify what MediaConvert does with the Extended Data Services (XDS) packets. You can choose to pass through XDS packets, or remove them from the output. For more information about XDS, see EIA-608 Line Data Services, section 9.5.1.5 05h Content Advisory. public var extendedDataServices: MediaConvertClientTypes.ExtendedDataServices? - /// Use Inputs (inputs) to define source file used in the transcode job. There can be multiple inputs add in a job. These inputs will be concantenated together to create the output. + /// Use Inputs to define source file used in the transcode job. There can be multiple inputs add in a job. These inputs will be concantenated together to create the output. public var inputs: [MediaConvertClientTypes.Input]? /// Use these settings only when you use Kantar watermarking. Specify the values that MediaConvert uses to generate and place Kantar watermarks in your output audio. These settings apply to every output in your job. In addition to specifying these values, you also need to store your Kantar credentials in AWS Secrets Manager. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/kantar-watermarking.html. public var kantarWatermark: MediaConvertClientTypes.KantarWatermarkSettings? /// Overlay motion graphics on top of your video. The motion graphics that you specify here appear on all outputs in all output groups. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/motion-graphic-overlay.html. public var motionImageInserter: MediaConvertClientTypes.MotionImageInserter? - /// Settings for your Nielsen configuration. If you don't do Nielsen measurement and analytics, ignore these settings. When you enable Nielsen configuration (nielsenConfiguration), MediaConvert enables PCM to ID3 tagging for all outputs in the job. To enable Nielsen configuration programmatically, include an instance of nielsenConfiguration in your JSON job specification. Even if you don't include any children of nielsenConfiguration, you still enable the setting. + /// Settings for your Nielsen configuration. If you don't do Nielsen measurement and analytics, ignore these settings. When you enable Nielsen configuration, MediaConvert enables PCM to ID3 tagging for all outputs in the job. public var nielsenConfiguration: MediaConvertClientTypes.NielsenConfiguration? /// Ignore these settings unless you are using Nielsen non-linear watermarking. Specify the values that MediaConvert uses to generate and place Nielsen watermarks in your output audio. In addition to specifying these values, you also need to set up your cloud TIC server. These settings apply to every output in your job. The MediaConvert implementation is currently with the following Nielsen versions: Nielsen Watermark SDK Version 5.2.1 Nielsen NLM Watermark Engine Version 1.2.7 Nielsen Watermark Authenticator [SID_TIC] Version [5.0.0] public var nielsenNonLinearWatermark: MediaConvertClientTypes.NielsenNonLinearWatermarkSettings? - /// (OutputGroups) contains one group of settings for each set of outputs that share a common package type. All unpackaged files (MPEG-4, MPEG-2 TS, Quicktime, MXF, and no container) are grouped in a single output group as well. Required in (OutputGroups) is a group of settings that apply to the whole group. This required object depends on the value you set for (Type) under (OutputGroups)>(OutputGroupSettings). Type, settings object pairs are as follows. * FILE_GROUP_SETTINGS, FileGroupSettings * HLS_GROUP_SETTINGS, HlsGroupSettings * DASH_ISO_GROUP_SETTINGS, DashIsoGroupSettings * MS_SMOOTH_GROUP_SETTINGS, MsSmoothGroupSettings * CMAF_GROUP_SETTINGS, CmafGroupSettings + /// Contains one group of settings for each set of outputs that share a common package type. All unpackaged files (MPEG-4, MPEG-2 TS, Quicktime, MXF, and no container) are grouped in a single output group as well. Required in is a group of settings that apply to the whole group. This required object depends on the value you set for Type. Type, settings object pairs are as follows. * FILE_GROUP_SETTINGS, FileGroupSettings * HLS_GROUP_SETTINGS, HlsGroupSettings * DASH_ISO_GROUP_SETTINGS, DashIsoGroupSettings * MS_SMOOTH_GROUP_SETTINGS, MsSmoothGroupSettings * CMAF_GROUP_SETTINGS, CmafGroupSettings public var outputGroups: [MediaConvertClientTypes.OutputGroup]? /// These settings control how the service handles timecodes throughout the job. These settings don't affect input clipping. public var timecodeConfig: MediaConvertClientTypes.TimecodeConfig? - /// Insert user-defined custom ID3 metadata (id3) at timecodes (timecode) that you specify. In each output that you want to include this metadata, you must set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH). + /// Insert user-defined custom ID3 metadata at timecodes that you specify. In each output that you want to include this metadata, you must set ID3 metadata to Passthrough. public var timedMetadataInsertion: MediaConvertClientTypes.TimedMetadataInsertion? public init( @@ -21023,21 +21047,21 @@ extension MediaConvertClientTypes { public var esam: MediaConvertClientTypes.EsamSettings? /// If your source content has EIA-608 Line 21 Data Services, enable this feature to specify what MediaConvert does with the Extended Data Services (XDS) packets. You can choose to pass through XDS packets, or remove them from the output. For more information about XDS, see EIA-608 Line Data Services, section 9.5.1.5 05h Content Advisory. public var extendedDataServices: MediaConvertClientTypes.ExtendedDataServices? - /// Use Inputs (inputs) to define the source file used in the transcode job. There can only be one input in a job template. Using the API, you can include multiple inputs when referencing a job template. + /// Use Inputs to define the source file used in the transcode job. There can only be one input in a job template. Using the API, you can include multiple inputs when referencing a job template. public var inputs: [MediaConvertClientTypes.InputTemplate]? /// Use these settings only when you use Kantar watermarking. Specify the values that MediaConvert uses to generate and place Kantar watermarks in your output audio. These settings apply to every output in your job. In addition to specifying these values, you also need to store your Kantar credentials in AWS Secrets Manager. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/kantar-watermarking.html. public var kantarWatermark: MediaConvertClientTypes.KantarWatermarkSettings? /// Overlay motion graphics on top of your video. The motion graphics that you specify here appear on all outputs in all output groups. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/motion-graphic-overlay.html. public var motionImageInserter: MediaConvertClientTypes.MotionImageInserter? - /// Settings for your Nielsen configuration. If you don't do Nielsen measurement and analytics, ignore these settings. When you enable Nielsen configuration (nielsenConfiguration), MediaConvert enables PCM to ID3 tagging for all outputs in the job. To enable Nielsen configuration programmatically, include an instance of nielsenConfiguration in your JSON job specification. Even if you don't include any children of nielsenConfiguration, you still enable the setting. + /// Settings for your Nielsen configuration. If you don't do Nielsen measurement and analytics, ignore these settings. When you enable Nielsen configuration, MediaConvert enables PCM to ID3 tagging for all outputs in the job. public var nielsenConfiguration: MediaConvertClientTypes.NielsenConfiguration? /// Ignore these settings unless you are using Nielsen non-linear watermarking. Specify the values that MediaConvert uses to generate and place Nielsen watermarks in your output audio. In addition to specifying these values, you also need to set up your cloud TIC server. These settings apply to every output in your job. The MediaConvert implementation is currently with the following Nielsen versions: Nielsen Watermark SDK Version 5.2.1 Nielsen NLM Watermark Engine Version 1.2.7 Nielsen Watermark Authenticator [SID_TIC] Version [5.0.0] public var nielsenNonLinearWatermark: MediaConvertClientTypes.NielsenNonLinearWatermarkSettings? - /// (OutputGroups) contains one group of settings for each set of outputs that share a common package type. All unpackaged files (MPEG-4, MPEG-2 TS, Quicktime, MXF, and no container) are grouped in a single output group as well. Required in (OutputGroups) is a group of settings that apply to the whole group. This required object depends on the value you set for (Type) under (OutputGroups)>(OutputGroupSettings). Type, settings object pairs are as follows. * FILE_GROUP_SETTINGS, FileGroupSettings * HLS_GROUP_SETTINGS, HlsGroupSettings * DASH_ISO_GROUP_SETTINGS, DashIsoGroupSettings * MS_SMOOTH_GROUP_SETTINGS, MsSmoothGroupSettings * CMAF_GROUP_SETTINGS, CmafGroupSettings + /// Contains one group of settings for each set of outputs that share a common package type. All unpackaged files (MPEG-4, MPEG-2 TS, Quicktime, MXF, and no container) are grouped in a single output group as well. Required in is a group of settings that apply to the whole group. This required object depends on the value you set for Type. Type, settings object pairs are as follows. * FILE_GROUP_SETTINGS, FileGroupSettings * HLS_GROUP_SETTINGS, HlsGroupSettings * DASH_ISO_GROUP_SETTINGS, DashIsoGroupSettings * MS_SMOOTH_GROUP_SETTINGS, MsSmoothGroupSettings * CMAF_GROUP_SETTINGS, CmafGroupSettings public var outputGroups: [MediaConvertClientTypes.OutputGroup]? /// These settings control how the service handles timecodes throughout the job. These settings don't affect input clipping. public var timecodeConfig: MediaConvertClientTypes.TimecodeConfig? - /// Insert user-defined custom ID3 metadata (id3) at timecodes (timecode) that you specify. In each output that you want to include this metadata, you must set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH). + /// Insert user-defined custom ID3 metadata at timecodes that you specify. In each output that you want to include this metadata, you must set ID3 metadata to Passthrough. public var timedMetadataInsertion: MediaConvertClientTypes.TimedMetadataInsertion? public init( @@ -22531,7 +22555,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration (MATCH_VIDEO_DURATION). In all other cases, keep the default value, Default codec duration (DEFAULT_CODEC_DURATION). When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. + /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration. In all other cases, keep the default value, Default codec duration. When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. public enum M2tsAudioDuration: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case defaultCodecDuration case matchVideoDuration @@ -22597,7 +22621,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you select ALIGN_TO_VIDEO, MediaConvert writes captions and data packets with Presentation Timestamp (PTS) values greater than or equal to the first video packet PTS (MediaConvert drops captions and data packets with lesser PTS values). Keep the default value (AUTO) to allow all PTS values. + /// If you select ALIGN_TO_VIDEO, MediaConvert writes captions and data packets with Presentation Timestamp (PTS) values greater than or equal to the first video packet PTS (MediaConvert drops captions and data packets with lesser PTS values). Keep the default value to allow all PTS values. public enum M2tsDataPtsControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case alignToVideo case auto @@ -22729,7 +22753,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Keep the default value (DEFAULT) unless you know that your audio EBP markers are incorrectly appearing before your video EBP markers. To correct this problem, set this value to Force (FORCE). + /// Keep the default value unless you know that your audio EBP markers are incorrectly appearing before your video EBP markers. To correct this problem, set this value to Force. public enum M2tsForceTsVideoEbpOrder: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `default` case force @@ -22913,7 +22937,7 @@ extension MediaConvertClientTypes.M2tsScte35Esam: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings for SCTE-35 signals from ESAM. Include this in your job settings to put SCTE-35 markers in your HLS and transport stream outputs at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML (sccXml). + /// Settings for SCTE-35 signals from ESAM. Include this in your job settings to put SCTE-35 markers in your HLS and transport stream outputs at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML. public struct M2tsScte35Esam: Swift.Equatable { /// Packet Identifier (PID) of the SCTE-35 stream in the transport stream generated by ESAM. public var scte35EsamPid: Swift.Int? @@ -22929,7 +22953,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// For SCTE-35 markers from your input-- Choose Passthrough (PASSTHROUGH) if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None (NONE) if you don't want SCTE-35 markers in this output. For SCTE-35 markers from an ESAM XML document-- Choose None (NONE). Also provide the ESAM XML as a string in the setting Signal processing notification XML (sccXml). Also enable ESAM SCTE-35 (include the property scte35Esam). + /// For SCTE-35 markers from your input-- Choose Passthrough if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None if you don't want SCTE-35 markers in this output. For SCTE-35 markers from an ESAM XML document-- Choose None. Also provide the ESAM XML as a string in the setting Signal processing notification XML. Also enable ESAM SCTE-35 (include the property scte35Esam). public enum M2tsScte35Source: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `none` case passthrough @@ -23311,11 +23335,11 @@ extension MediaConvertClientTypes.M2tsSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// MPEG-2 TS container settings. These apply to outputs in a File output group when the output's container (ContainerType) is MPEG-2 Transport Stream (M2TS). In these assets, data is organized by the program map table (PMT). Each transport stream program contains subsets of data, including audio, video, and metadata. Each of these subsets of data has a numerical label called a packet identifier (PID). Each transport stream program corresponds to one MediaConvert output. The PMT lists the types of data in a program along with their PID. Downstream systems and players use the program map table to look up the PID for each type of data it accesses and then uses the PIDs to locate specific data within the asset. + /// MPEG-2 TS container settings. These apply to outputs in a File output group when the output's container is MPEG-2 Transport Stream (M2TS). In these assets, data is organized by the program map table (PMT). Each transport stream program contains subsets of data, including audio, video, and metadata. Each of these subsets of data has a numerical label called a packet identifier (PID). Each transport stream program corresponds to one MediaConvert output. The PMT lists the types of data in a program along with their PID. Downstream systems and players use the program map table to look up the PID for each type of data it accesses and then uses the PIDs to locate specific data within the asset. public struct M2tsSettings: Swift.Equatable { /// Selects between the DVB and ATSC buffer models for Dolby Digital audio. public var audioBufferModel: MediaConvertClientTypes.M2tsAudioBufferModel? - /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration (MATCH_VIDEO_DURATION). In all other cases, keep the default value, Default codec duration (DEFAULT_CODEC_DURATION). When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. + /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration. In all other cases, keep the default value, Default codec duration. When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. public var audioDuration: MediaConvertClientTypes.M2tsAudioDuration? /// The number of audio frames to insert for each PES packet. public var audioFramesPerPes: Swift.Int? @@ -23325,15 +23349,15 @@ extension MediaConvertClientTypes { public var bitrate: Swift.Int? /// Controls what buffer model to use for accurate interleaving. If set to MULTIPLEX, use multiplex buffer model. If set to NONE, this can lead to lower latency, but low-memory devices may not be able to play back the stream without interruptions. public var bufferModel: MediaConvertClientTypes.M2tsBufferModel? - /// If you select ALIGN_TO_VIDEO, MediaConvert writes captions and data packets with Presentation Timestamp (PTS) values greater than or equal to the first video packet PTS (MediaConvert drops captions and data packets with lesser PTS values). Keep the default value (AUTO) to allow all PTS values. + /// If you select ALIGN_TO_VIDEO, MediaConvert writes captions and data packets with Presentation Timestamp (PTS) values greater than or equal to the first video packet PTS (MediaConvert drops captions and data packets with lesser PTS values). Keep the default value to allow all PTS values. public var dataPTSControl: MediaConvertClientTypes.M2tsDataPtsControl? - /// Use these settings to insert a DVB Network Information Table (NIT) in the transport stream of this output. When you work directly in your JSON job specification, include this object only when your job has a transport stream output and the container settings contain the object M2tsSettings. + /// Use these settings to insert a DVB Network Information Table (NIT) in the transport stream of this output. public var dvbNitSettings: MediaConvertClientTypes.DvbNitSettings? - /// Use these settings to insert a DVB Service Description Table (SDT) in the transport stream of this output. When you work directly in your JSON job specification, include this object only when your job has a transport stream output and the container settings contain the object M2tsSettings. + /// Use these settings to insert a DVB Service Description Table (SDT) in the transport stream of this output. public var dvbSdtSettings: MediaConvertClientTypes.DvbSdtSettings? /// Specify the packet identifiers (PIDs) for DVB subtitle data included in this output. Specify multiple PIDs as a JSON array. Default is the range 460-479. public var dvbSubPids: [Swift.Int]? - /// Use these settings to insert a DVB Time and Date Table (TDT) in the transport stream of this output. When you work directly in your JSON job specification, include this object only when your job has a transport stream output and the container settings contain the object M2tsSettings. + /// Use these settings to insert a DVB Time and Date Table (TDT) in the transport stream of this output. public var dvbTdtSettings: MediaConvertClientTypes.DvbTdtSettings? /// Specify the packet identifier (PID) for DVB teletext data you include in this output. Default is 499. public var dvbTeletextPid: Swift.Int? @@ -23343,7 +23367,7 @@ extension MediaConvertClientTypes { public var ebpPlacement: MediaConvertClientTypes.M2tsEbpPlacement? /// Controls whether to include the ES Rate field in the PES header. public var esRateInPes: MediaConvertClientTypes.M2tsEsRateInPes? - /// Keep the default value (DEFAULT) unless you know that your audio EBP markers are incorrectly appearing before your video EBP markers. To correct this problem, set this value to Force (FORCE). + /// Keep the default value unless you know that your audio EBP markers are incorrectly appearing before your video EBP markers. To correct this problem, set this value to Force. public var forceTsVideoEbpOrder: MediaConvertClientTypes.M2tsForceTsVideoEbpOrder? /// The length, in seconds, of each fragment. Only used with EBP markers. public var fragmentTime: Swift.Double? @@ -23361,7 +23385,7 @@ extension MediaConvertClientTypes { public var patInterval: Swift.Int? /// When set to PCR_EVERY_PES_PACKET, a Program Clock Reference value is inserted for every Packetized Elementary Stream (PES) header. This is effective only when the PCR PID is the same as the video or audio elementary stream. public var pcrControl: MediaConvertClientTypes.M2tsPcrControl? - /// Specify the packet identifier (PID) for the program clock reference (PCR) in this output. If you do not specify a value, the service will use the value for Video PID (VideoPid). + /// Specify the packet identifier (PID) for the program clock reference (PCR) in this output. If you do not specify a value, the service will use the value for Video PID. public var pcrPid: Swift.Int? /// Specify the number of milliseconds between instances of the program map table (PMT) in the output transport stream. public var pmtInterval: Swift.Int? @@ -23369,15 +23393,15 @@ extension MediaConvertClientTypes { public var pmtPid: Swift.Int? /// Specify the packet identifier (PID) of the private metadata stream. Default is 503. public var privateMetadataPid: Swift.Int? - /// Use Program number (programNumber) to specify the program number used in the program map table (PMT) for this output. Default is 1. Program numbers and program map tables are parts of MPEG-2 transport stream containers, used for organizing data. + /// Use Program number to specify the program number used in the program map table (PMT) for this output. Default is 1. Program numbers and program map tables are parts of MPEG-2 transport stream containers, used for organizing data. public var programNumber: Swift.Int? /// When set to CBR, inserts null packets into transport stream to fill specified bitrate. When set to VBR, the bitrate setting acts as the maximum bitrate, but the output will not be padded up to that bitrate. public var rateMode: MediaConvertClientTypes.M2tsRateMode? - /// Include this in your job settings to put SCTE-35 markers in your HLS and transport stream outputs at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML (sccXml). + /// Include this in your job settings to put SCTE-35 markers in your HLS and transport stream outputs at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML. public var scte35Esam: MediaConvertClientTypes.M2tsScte35Esam? /// Specify the packet identifier (PID) of the SCTE-35 stream in the transport stream. public var scte35Pid: Swift.Int? - /// For SCTE-35 markers from your input-- Choose Passthrough (PASSTHROUGH) if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None (NONE) if you don't want SCTE-35 markers in this output. For SCTE-35 markers from an ESAM XML document-- Choose None (NONE). Also provide the ESAM XML as a string in the setting Signal processing notification XML (sccXml). Also enable ESAM SCTE-35 (include the property scte35Esam). + /// For SCTE-35 markers from your input-- Choose Passthrough if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None if you don't want SCTE-35 markers in this output. For SCTE-35 markers from an ESAM XML document-- Choose None. Also provide the ESAM XML as a string in the setting Signal processing notification XML. Also enable ESAM SCTE-35 (include the property scte35Esam). public var scte35Source: MediaConvertClientTypes.M2tsScte35Source? /// Inserts segmentation markers at each segmentation_time period. rai_segstart sets the Random Access Indicator bit in the adaptation field. rai_adapt sets the RAI bit and adds the current timecode in the private data bytes. psi_segstart inserts PAT and PMT tables at the start of segments. ebp adds Encoder Boundary Point information to the adaptation field as per OpenCable specification OC-SP-EBP-I01-130118. ebp_legacy adds Encoder Boundary Point information to the adaptation field using a legacy proprietary format. public var segmentationMarkers: MediaConvertClientTypes.M2tsSegmentationMarkers? @@ -23479,7 +23503,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration (MATCH_VIDEO_DURATION). In all other cases, keep the default value, Default codec duration (DEFAULT_CODEC_DURATION). When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. + /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration. In all other cases, keep the default value, Default codec duration. When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. public enum M3u8AudioDuration: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case defaultCodecDuration case matchVideoDuration @@ -23512,7 +23536,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you select ALIGN_TO_VIDEO, MediaConvert writes captions and data packets with Presentation Timestamp (PTS) values greater than or equal to the first video packet PTS (MediaConvert drops captions and data packets with lesser PTS values). Keep the default value (AUTO) to allow all PTS values. + /// If you select ALIGN_TO_VIDEO, MediaConvert writes captions and data packets with Presentation Timestamp (PTS) values greater than or equal to the first video packet PTS (MediaConvert drops captions and data packets with lesser PTS values). Keep the default value AUTO to allow all PTS values. public enum M3u8DataPtsControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case alignToVideo case auto @@ -23611,7 +23635,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// For SCTE-35 markers from your input-- Choose Passthrough (PASSTHROUGH) if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None (NONE) if you don't want SCTE-35 markers in this output. For SCTE-35 markers from an ESAM XML document-- Choose None (NONE) if you don't want manifest conditioning. Choose Passthrough (PASSTHROUGH) and choose Ad markers (adMarkers) if you do want manifest conditioning. In both cases, also provide the ESAM XML as a string in the setting Signal processing notification XML (sccXml). + /// For SCTE-35 markers from your input-- Choose Passthrough if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None if you don't want SCTE-35 markers in this output. For SCTE-35 markers from an ESAM XML document-- Choose None if you don't want manifest conditioning. Choose Passthrough and choose Ad markers if you do want manifest conditioning. In both cases, also provide the ESAM XML as a string in the setting Signal processing notification XML. public enum M3u8Scte35Source: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `none` case passthrough @@ -23785,13 +23809,13 @@ extension MediaConvertClientTypes.M3u8Settings: Swift.Codable { extension MediaConvertClientTypes { /// These settings relate to the MPEG-2 transport stream (MPEG2-TS) container for the MPEG2-TS segments in your HLS outputs. public struct M3u8Settings: Swift.Equatable { - /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration (MATCH_VIDEO_DURATION). In all other cases, keep the default value, Default codec duration (DEFAULT_CODEC_DURATION). When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. + /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration. In all other cases, keep the default value, Default codec duration. When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. public var audioDuration: MediaConvertClientTypes.M3u8AudioDuration? /// The number of audio frames to insert for each PES packet. public var audioFramesPerPes: Swift.Int? /// Packet Identifier (PID) of the elementary audio stream(s) in the transport stream. Multiple values are accepted, and can be entered in ranges and/or by comma separation. public var audioPids: [Swift.Int]? - /// If you select ALIGN_TO_VIDEO, MediaConvert writes captions and data packets with Presentation Timestamp (PTS) values greater than or equal to the first video packet PTS (MediaConvert drops captions and data packets with lesser PTS values). Keep the default value (AUTO) to allow all PTS values. + /// If you select ALIGN_TO_VIDEO, MediaConvert writes captions and data packets with Presentation Timestamp (PTS) values greater than or equal to the first video packet PTS (MediaConvert drops captions and data packets with lesser PTS values). Keep the default value AUTO to allow all PTS values. public var dataPTSControl: MediaConvertClientTypes.M3u8DataPtsControl? /// Specify the maximum time, in milliseconds, between Program Clock References (PCRs) inserted into the transport stream. public var maxPcrInterval: Swift.Int? @@ -23813,9 +23837,9 @@ extension MediaConvertClientTypes { public var programNumber: Swift.Int? /// Packet Identifier (PID) of the SCTE-35 stream in the transport stream. public var scte35Pid: Swift.Int? - /// For SCTE-35 markers from your input-- Choose Passthrough (PASSTHROUGH) if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None (NONE) if you don't want SCTE-35 markers in this output. For SCTE-35 markers from an ESAM XML document-- Choose None (NONE) if you don't want manifest conditioning. Choose Passthrough (PASSTHROUGH) and choose Ad markers (adMarkers) if you do want manifest conditioning. In both cases, also provide the ESAM XML as a string in the setting Signal processing notification XML (sccXml). + /// For SCTE-35 markers from your input-- Choose Passthrough if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None if you don't want SCTE-35 markers in this output. For SCTE-35 markers from an ESAM XML document-- Choose None if you don't want manifest conditioning. Choose Passthrough and choose Ad markers if you do want manifest conditioning. In both cases, also provide the ESAM XML as a string in the setting Signal processing notification XML. public var scte35Source: MediaConvertClientTypes.M3u8Scte35Source? - /// Set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH) to include ID3 metadata in this output. This includes ID3 metadata from the following features: ID3 timestamp period (timedMetadataId3Period), and Custom ID3 metadata inserter (timedMetadataInsertion). To exclude this ID3 metadata in this output: set ID3 metadata to None (NONE) or leave blank. + /// Set ID3 metadata to Passthrough to include ID3 metadata in this output. This includes ID3 metadata from the following features: ID3 timestamp period, and Custom ID3 metadata inserter. To exclude this ID3 metadata in this output: set ID3 metadata to None or leave blank. public var timedMetadata: MediaConvertClientTypes.TimedMetadata? /// Packet Identifier (PID) of the ID3 metadata stream in the transport stream. public var timedMetadataPid: Swift.Int? @@ -24022,7 +24046,7 @@ extension MediaConvertClientTypes { public var offset: MediaConvertClientTypes.MotionImageInsertionOffset? /// Specify whether your motion graphic overlay repeats on a loop or plays only once. public var playback: MediaConvertClientTypes.MotionImagePlayback? - /// Specify when the motion overlay begins. Use timecode format (HH:MM:SS:FF or HH:MM:SS;FF). Make sure that the timecode you provide here takes into account how you have set up your timecode configuration under both job settings and input settings. The simplest way to do that is to set both to start at 0. If you need to set up your job to follow timecodes embedded in your source that don't start at zero, make sure that you specify a start time that is after the first embedded timecode. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/setting-up-timecode.html Find job-wide and input timecode configuration settings in your JSON job settings specification at settings>timecodeConfig>source and settings>inputs>timecodeSource. + /// Specify when the motion overlay begins. Use timecode format (HH:MM:SS:FF or HH:MM:SS;FF). Make sure that the timecode you provide here takes into account how you have set up your timecode configuration under both job settings and input settings. The simplest way to do that is to set both to start at 0. If you need to set up your job to follow timecodes embedded in your source that don't start at zero, make sure that you specify a start time that is after the first embedded timecode. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/setting-up-timecode.html public var startTime: Swift.String? public init( @@ -24473,11 +24497,11 @@ extension MediaConvertClientTypes.Mp2Settings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value MP2. + /// Required when you set Codec to the value MP2. public struct Mp2Settings: Swift.Equatable { /// Specify the average bitrate in bits per second. public var bitrate: Swift.Int? - /// Set Channels to specify the number of channels in this output audio track. Choosing Mono in the console will give you 1 output channel; choosing Stereo will give you 2. In the API, valid values are 1 and 2. + /// Set Channels to specify the number of channels in this output audio track. Choosing Mono in will give you 1 output channel; choosing Stereo will give you 2. In the API, valid values are 1 and 2. public var channels: Swift.Int? /// Sample rate in hz. public var sampleRate: Swift.Int? @@ -24577,13 +24601,13 @@ extension MediaConvertClientTypes { public struct Mp3Settings: Swift.Equatable { /// Specify the average bitrate in bits per second. public var bitrate: Swift.Int? - /// Specify the number of channels in this output audio track. Choosing Mono on the console gives you 1 output channel; choosing Stereo gives you 2. In the API, valid values are 1 and 2. + /// Specify the number of channels in this output audio track. Choosing Mono gives you 1 output channel; choosing Stereo gives you 2. In the API, valid values are 1 and 2. public var channels: Swift.Int? /// Specify whether the service encodes this MP3 audio output with a constant bitrate (CBR) or a variable bitrate (VBR). public var rateControlMode: MediaConvertClientTypes.Mp3RateControlMode? /// Sample rate in hz. public var sampleRate: Swift.Int? - /// Required when you set Bitrate control mode (rateControlMode) to VBR. Specify the audio quality of this MP3 output from 0 (highest quality) to 9 (lowest quality). + /// Required when you set Bitrate control mode to VBR. Specify the audio quality of this MP3 output from 0 (highest quality) to 9 (lowest quality). public var vbrQuality: Swift.Int? public init( @@ -24755,11 +24779,11 @@ extension MediaConvertClientTypes.Mp4Settings: Swift.Codable { extension MediaConvertClientTypes { /// These settings relate to your MP4 output container. You can create audio only outputs with this container. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/supported-codecs-containers-audio-only.html#output-codecs-and-containers-supported-for-audio-only. public struct Mp4Settings: Swift.Equatable { - /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration (MATCH_VIDEO_DURATION). In all other cases, keep the default value, Default codec duration (DEFAULT_CODEC_DURATION). When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. + /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration. In all other cases, keep the default value, Default codec duration. When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. public var audioDuration: MediaConvertClientTypes.CmfcAudioDuration? /// When enabled, file composition times will start at zero, composition times in the 'ctts' (composition time to sample) box for B-frames will be negative, and a 'cslg' (composition shift least greatest) box will be included per 14496-1 amendment 1. This improves compatibility with Apple players and tools. public var cslgAtom: MediaConvertClientTypes.Mp4CslgAtom? - /// Ignore this setting unless compliance to the CTTS box version specification matters in your workflow. Specify a value of 1 to set your CTTS box version to 1 and make your output compliant with the specification. When you specify a value of 1, you must also set CSLG atom (cslgAtom) to the value INCLUDE. Keep the default value 0 to set your CTTS box version to 0. This can provide backward compatibility for some players and packagers. + /// Ignore this setting unless compliance to the CTTS box version specification matters in your workflow. Specify a value of 1 to set your CTTS box version to 1 and make your output compliant with the specification. When you specify a value of 1, you must also set CSLG atom to the value INCLUDE. Keep the default value 0 to set your CTTS box version to 0. This can provide backward compatibility for some players and packagers. public var cttsVersion: Swift.Int? /// Inserts a free-space box immediately after the moov box. public var freeSpaceBox: MediaConvertClientTypes.Mp4FreeSpaceBox? @@ -24789,7 +24813,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Choose Include (INCLUDE) to have MediaConvert mark up your DASH manifest with elements for embedded 608 captions. This markup isn't generally required, but some video players require it to discover and play embedded 608 captions. Keep the default value, Exclude (EXCLUDE), to leave these elements out. When you enable this setting, this is the markup that MediaConvert includes in your manifest: + /// Optional. Choose Include to have MediaConvert mark up your DASH manifest with elements for embedded 608 captions. This markup isn't generally required, but some video players require it to discover and play embedded 608 captions. Keep the default value, Exclude, to leave these elements out. When you enable this setting, this is the markup that MediaConvert includes in your manifest: public enum MpdAccessibilityCaptionHints: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case exclude case include @@ -24822,7 +24846,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration (MATCH_VIDEO_DURATION). In all other cases, keep the default value, Default codec duration (DEFAULT_CODEC_DURATION). When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. + /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration. In all other cases, keep the default value, Default codec duration. When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. public enum MpdAudioDuration: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case defaultCodecDuration case matchVideoDuration @@ -24855,7 +24879,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting only in DASH output groups that include sidecar TTML or IMSC captions. You specify sidecar captions in a separate output from your audio and video. Choose Raw (RAW) for captions in a single XML file in a raw container. Choose Fragmented MPEG-4 (FRAGMENTED_MP4) for captions in XML format contained within fragmented MP4 files. This set of fragmented MP4 files is separate from your video and audio fragmented MP4 files. + /// Use this setting only in DASH output groups that include sidecar TTML or IMSC captions. You specify sidecar captions in a separate output from your audio and video. Choose Raw for captions in a single XML file in a raw container. Choose Fragmented MPEG-4 for captions in XML format contained within fragmented MP4 files. This set of fragmented MP4 files is separate from your video and audio fragmented MP4 files. public enum MpdCaptionContainerType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case fragmentedMp4 case raw @@ -24921,7 +24945,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// To add an InbandEventStream element in your output MPD manifest for each type of event message, set Manifest metadata signaling to Enabled. For ID3 event messages, the InbandEventStream element schemeIdUri will be same value that you specify for ID3 metadata scheme ID URI. For SCTE35 event messages, the InbandEventStream element schemeIdUri will be "urn:scte:scte35:2013:bin". To leave these elements out of your output MPD manifest, set Manifest metadata signaling to Disabled. To enable Manifest metadata signaling, you must also set SCTE-35 source to Passthrough, ESAM SCTE-35 to insert, or ID3 metadata (TimedMetadata) to Passthrough. + /// To add an InbandEventStream element in your output MPD manifest for each type of event message, set Manifest metadata signaling to Enabled. For ID3 event messages, the InbandEventStream element schemeIdUri will be same value that you specify for ID3 metadata scheme ID URI. For SCTE35 event messages, the InbandEventStream element schemeIdUri will be "urn:scte:scte35:2013:bin". To leave these elements out of your output MPD manifest, set Manifest metadata signaling to Disabled. To enable Manifest metadata signaling, you must also set SCTE-35 source to Passthrough, ESAM SCTE-35 to insert, or ID3 metadata to Passthrough. public enum MpdManifestMetadataSignaling: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -24954,7 +24978,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting only when you specify SCTE-35 markers from ESAM. Choose INSERT to put SCTE-35 markers in this output at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML (sccXml). + /// Use this setting only when you specify SCTE-35 markers from ESAM. Choose INSERT to put SCTE-35 markers in this output at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML. public enum MpdScte35Esam: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case insert case `none` @@ -24987,7 +25011,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless you have SCTE-35 markers in your input video file. Choose Passthrough (PASSTHROUGH) if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None (NONE) if you don't want those SCTE-35 markers in this output. + /// Ignore this setting unless you have SCTE-35 markers in your input video file. Choose Passthrough if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None if you don't want those SCTE-35 markers in this output. public enum MpdScte35Source: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `none` case passthrough @@ -25101,27 +25125,27 @@ extension MediaConvertClientTypes.MpdSettings: Swift.Codable { extension MediaConvertClientTypes { /// These settings relate to the fragmented MP4 container for the segments in your DASH outputs. public struct MpdSettings: Swift.Equatable { - /// Optional. Choose Include (INCLUDE) to have MediaConvert mark up your DASH manifest with elements for embedded 608 captions. This markup isn't generally required, but some video players require it to discover and play embedded 608 captions. Keep the default value, Exclude (EXCLUDE), to leave these elements out. When you enable this setting, this is the markup that MediaConvert includes in your manifest: + /// Optional. Choose Include to have MediaConvert mark up your DASH manifest with elements for embedded 608 captions. This markup isn't generally required, but some video players require it to discover and play embedded 608 captions. Keep the default value, Exclude, to leave these elements out. When you enable this setting, this is the markup that MediaConvert includes in your manifest: public var accessibilityCaptionHints: MediaConvertClientTypes.MpdAccessibilityCaptionHints? - /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration (MATCH_VIDEO_DURATION). In all other cases, keep the default value, Default codec duration (DEFAULT_CODEC_DURATION). When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. + /// Specify this setting only when your output will be consumed by a downstream repackaging workflow that is sensitive to very small duration differences between video and audio. For this situation, choose Match video duration. In all other cases, keep the default value, Default codec duration. When you choose Match video duration, MediaConvert pads the output audio streams with silence or trims them to ensure that the total duration of each audio stream is at least as long as the total duration of the video stream. After padding or trimming, the audio stream duration is no more than one frame longer than the video stream. MediaConvert applies audio padding or trimming only to the end of the last segment of the output. For unsegmented outputs, MediaConvert adds padding only to the end of the file. When you keep the default value, any minor discrepancies between audio and video duration will depend on your output audio codec. public var audioDuration: MediaConvertClientTypes.MpdAudioDuration? - /// Use this setting only in DASH output groups that include sidecar TTML or IMSC captions. You specify sidecar captions in a separate output from your audio and video. Choose Raw (RAW) for captions in a single XML file in a raw container. Choose Fragmented MPEG-4 (FRAGMENTED_MP4) for captions in XML format contained within fragmented MP4 files. This set of fragmented MP4 files is separate from your video and audio fragmented MP4 files. + /// Use this setting only in DASH output groups that include sidecar TTML or IMSC captions. You specify sidecar captions in a separate output from your audio and video. Choose Raw for captions in a single XML file in a raw container. Choose Fragmented MPEG-4 for captions in XML format contained within fragmented MP4 files. This set of fragmented MP4 files is separate from your video and audio fragmented MP4 files. public var captionContainerType: MediaConvertClientTypes.MpdCaptionContainerType? /// To include key-length-value metadata in this output: Set KLV metadata insertion to Passthrough. MediaConvert reads KLV metadata present in your input and writes each instance to a separate event message box in the output, according to MISB ST1910.1. To exclude this KLV metadata: Set KLV metadata insertion to None or leave blank. public var klvMetadata: MediaConvertClientTypes.MpdKlvMetadata? - /// To add an InbandEventStream element in your output MPD manifest for each type of event message, set Manifest metadata signaling to Enabled. For ID3 event messages, the InbandEventStream element schemeIdUri will be same value that you specify for ID3 metadata scheme ID URI. For SCTE35 event messages, the InbandEventStream element schemeIdUri will be "urn:scte:scte35:2013:bin". To leave these elements out of your output MPD manifest, set Manifest metadata signaling to Disabled. To enable Manifest metadata signaling, you must also set SCTE-35 source to Passthrough, ESAM SCTE-35 to insert, or ID3 metadata (TimedMetadata) to Passthrough. + /// To add an InbandEventStream element in your output MPD manifest for each type of event message, set Manifest metadata signaling to Enabled. For ID3 event messages, the InbandEventStream element schemeIdUri will be same value that you specify for ID3 metadata scheme ID URI. For SCTE35 event messages, the InbandEventStream element schemeIdUri will be "urn:scte:scte35:2013:bin". To leave these elements out of your output MPD manifest, set Manifest metadata signaling to Disabled. To enable Manifest metadata signaling, you must also set SCTE-35 source to Passthrough, ESAM SCTE-35 to insert, or ID3 metadata to Passthrough. public var manifestMetadataSignaling: MediaConvertClientTypes.MpdManifestMetadataSignaling? - /// Use this setting only when you specify SCTE-35 markers from ESAM. Choose INSERT to put SCTE-35 markers in this output at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML (sccXml). + /// Use this setting only when you specify SCTE-35 markers from ESAM. Choose INSERT to put SCTE-35 markers in this output at the insertion points that you specify in an ESAM XML document. Provide the document in the setting SCC XML. public var scte35Esam: MediaConvertClientTypes.MpdScte35Esam? - /// Ignore this setting unless you have SCTE-35 markers in your input video file. Choose Passthrough (PASSTHROUGH) if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None (NONE) if you don't want those SCTE-35 markers in this output. + /// Ignore this setting unless you have SCTE-35 markers in your input video file. Choose Passthrough if you want SCTE-35 markers that appear in your input to also appear in this output. Choose None if you don't want those SCTE-35 markers in this output. public var scte35Source: MediaConvertClientTypes.MpdScte35Source? - /// To include ID3 metadata in this output: Set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH). Specify this ID3 metadata in Custom ID3 metadata inserter (timedMetadataInsertion). MediaConvert writes each instance of ID3 metadata in a separate Event Message (eMSG) box. To exclude this ID3 metadata: Set ID3 metadata to None (NONE) or leave blank. + /// To include ID3 metadata in this output: Set ID3 metadata to Passthrough. Specify this ID3 metadata in Custom ID3 metadata inserter. MediaConvert writes each instance of ID3 metadata in a separate Event Message (eMSG) box. To exclude this ID3 metadata: Set ID3 metadata to None or leave blank. public var timedMetadata: MediaConvertClientTypes.MpdTimedMetadata? - /// Specify the event message box (eMSG) version for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.3 Syntax. Leave blank to use the default value Version 0. When you specify Version 1, you must also set ID3 metadata (timedMetadata) to Passthrough. + /// Specify the event message box (eMSG) version for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.3 Syntax. Leave blank to use the default value Version 0. When you specify Version 1, you must also set ID3 metadata to Passthrough. public var timedMetadataBoxVersion: MediaConvertClientTypes.MpdTimedMetadataBoxVersion? - /// Specify the event message box (eMSG) scheme ID URI (scheme_id_uri) for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.4 Semantics. Leave blank to use the default value: https://aomedia.org/emsg/ID3 When you specify a value for ID3 metadata scheme ID URI, you must also set ID3 metadata (timedMetadata) to Passthrough. + /// Specify the event message box (eMSG) scheme ID URI for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.4 Semantics. Leave blank to use the default value: https://aomedia.org/emsg/ID3 When you specify a value for ID3 metadata scheme ID URI, you must also set ID3 metadata to Passthrough. public var timedMetadataSchemeIdUri: Swift.String? - /// Specify the event message box (eMSG) value for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.4 Semantics. When you specify a value for ID3 Metadata Value, you must also set ID3 metadata (timedMetadata) to Passthrough. + /// Specify the event message box (eMSG) value for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.4 Semantics. When you specify a value for ID3 Metadata Value, you must also set ID3 metadata to Passthrough. public var timedMetadataValue: Swift.String? public init( @@ -25155,7 +25179,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// To include ID3 metadata in this output: Set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH). Specify this ID3 metadata in Custom ID3 metadata inserter (timedMetadataInsertion). MediaConvert writes each instance of ID3 metadata in a separate Event Message (eMSG) box. To exclude this ID3 metadata: Set ID3 metadata to None (NONE) or leave blank. + /// To include ID3 metadata in this output: Set ID3 metadata to Passthrough. Specify this ID3 metadata in Custom ID3 metadata inserter. MediaConvert writes each instance of ID3 metadata in a separate Event Message (eMSG) box. To exclude this ID3 metadata: Set ID3 metadata to None or leave blank. public enum MpdTimedMetadata: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `none` case passthrough @@ -25188,7 +25212,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the event message box (eMSG) version for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.3 Syntax. Leave blank to use the default value Version 0. When you specify Version 1, you must also set ID3 metadata (timedMetadata) to Passthrough. + /// Specify the event message box (eMSG) version for ID3 timed metadata in your output. For more information, see ISO/IEC 23009-1:2022 section 5.10.3.3.3 Syntax. Leave blank to use the default value Version 0. When you specify Version 1, you must also set ID3 metadata to Passthrough. public enum MpdTimedMetadataBoxVersion: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case version0 case version1 @@ -25221,7 +25245,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the strength of any adaptive quantization filters that you enable. The value that you choose here applies to the following settings: Spatial adaptive quantization (spatialAdaptiveQuantization), and Temporal adaptive quantization (temporalAdaptiveQuantization). + /// Specify the strength of any adaptive quantization filters that you enable. The value that you choose here applies to the following settings: Spatial adaptive quantization, and Temporal adaptive quantization. public enum Mpeg2AdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case high case low @@ -25260,7 +25284,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Level (Mpeg2CodecLevel) to set the MPEG-2 level for the video output. + /// Use Level to set the MPEG-2 level for the video output. public enum Mpeg2CodecLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case high @@ -25302,7 +25326,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Profile (Mpeg2CodecProfile) to set the MPEG-2 profile for the video output. + /// Use Profile to set the MPEG-2 profile for the video output. public enum Mpeg2CodecProfile: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case main case profile422 @@ -25335,7 +25359,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames (numberBFramesBetweenReferenceFrames). + /// Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames. public enum Mpeg2DynamicSubGop: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case adaptive case `static` @@ -25368,7 +25392,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public enum Mpeg2FramerateControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -25437,7 +25461,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify the units for GOP size (GopSize). If you don't specify a value here, by default the encoder measures GOP size in frames. + /// Specify the units for GOP size. If you don't specify a value here, by default the encoder measures GOP size in frames. public enum Mpeg2GopSizeUnits: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case frames case seconds @@ -25470,7 +25494,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public enum Mpeg2InterlaceMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bottomField case followBottomField @@ -25512,7 +25536,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Intra DC precision (Mpeg2IntraDcPrecision) to set quantization precision for intra-block DC coefficients. If you choose the value auto, the service will automatically select the precision based on the per-frame compression ratio. + /// Use Intra DC precision to set quantization precision for intra-block DC coefficients. If you choose the value auto, the service will automatically select the precision based on the per-frame compression ratio. public enum Mpeg2IntraDcPrecision: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case intraDcPrecision10 @@ -25554,7 +25578,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source (INITIALIZE_FROM_SOURCE), uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. To specify a different PAR by editing the JSON job specification, choose SPECIFIED. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. + /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. public enum Mpeg2ParControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -25587,7 +25611,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. public enum Mpeg2QualityTuningLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case multiPass case singlePass @@ -25620,7 +25644,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Rate control mode (Mpeg2RateControlMode) to specify whether the bitrate is variable (vbr) or constant (cbr). + /// Use Rate control mode to specify whether the bitrate is variable (vbr) or constant (cbr). public enum Mpeg2RateControlMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case cbr case vbr @@ -25653,7 +25677,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public enum Mpeg2ScanTypeConversionMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case interlaced case interlacedOptimize @@ -25930,19 +25954,19 @@ extension MediaConvertClientTypes.Mpeg2Settings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value MPEG2. + /// Required when you set Codec to the value MPEG2. public struct Mpeg2Settings: Swift.Equatable { - /// Specify the strength of any adaptive quantization filters that you enable. The value that you choose here applies to the following settings: Spatial adaptive quantization (spatialAdaptiveQuantization), and Temporal adaptive quantization (temporalAdaptiveQuantization). + /// Specify the strength of any adaptive quantization filters that you enable. The value that you choose here applies to the following settings: Spatial adaptive quantization, and Temporal adaptive quantization. public var adaptiveQuantization: MediaConvertClientTypes.Mpeg2AdaptiveQuantization? /// Specify the average bitrate in bits per second. Required for VBR and CBR. For MS Smooth outputs, bitrates must be unique when rounded down to the nearest multiple of 1000. public var bitrate: Swift.Int? - /// Use Level (Mpeg2CodecLevel) to set the MPEG-2 level for the video output. + /// Use Level to set the MPEG-2 level for the video output. public var codecLevel: MediaConvertClientTypes.Mpeg2CodecLevel? - /// Use Profile (Mpeg2CodecProfile) to set the MPEG-2 profile for the video output. + /// Use Profile to set the MPEG-2 profile for the video output. public var codecProfile: MediaConvertClientTypes.Mpeg2CodecProfile? - /// Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames (numberBFramesBetweenReferenceFrames). + /// Choose Adaptive to improve subjective video quality for high-motion content. This will cause the service to use fewer B-frames (which infer information based on other frames) for high-motion portions of the video and more B-frames for low-motion portions. The maximum number of B-frames is limited by the value you provide for the setting B frames between reference frames. public var dynamicSubGop: MediaConvertClientTypes.Mpeg2DynamicSubGop? - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public var framerateControl: MediaConvertClientTypes.Mpeg2FramerateControl? /// Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. public var framerateConversionAlgorithm: MediaConvertClientTypes.Mpeg2FramerateConversionAlgorithm? @@ -25952,9 +25976,9 @@ extension MediaConvertClientTypes { public var framerateNumerator: Swift.Int? /// Specify the relative frequency of open to closed GOPs in this output. For example, if you want to allow four open GOPs and then require a closed GOP, set this value to 5. When you create a streaming output, we recommend that you keep the default value, 1, so that players starting mid-stream receive an IDR frame as quickly as possible. Don't set this value to 0; that would break output segmenting. public var gopClosedCadence: Swift.Int? - /// Specify the interval between keyframes, in seconds or frames, for this output. Default: 12 Related settings: When you specify the GOP size in seconds, set GOP mode control (GopSizeUnits) to Specified, seconds (SECONDS). The default value for GOP mode control (GopSizeUnits) is Frames (FRAMES). + /// Specify the interval between keyframes, in seconds or frames, for this output. Default: 12 Related settings: When you specify the GOP size in seconds, set GOP mode control to Specified, seconds. The default value for GOP mode control is Frames. public var gopSize: Swift.Double? - /// Specify the units for GOP size (GopSize). If you don't specify a value here, by default the encoder measures GOP size in frames. + /// Specify the units for GOP size. If you don't specify a value here, by default the encoder measures GOP size in frames. public var gopSizeUnits: MediaConvertClientTypes.Mpeg2GopSizeUnits? /// If your downstream systems have strict buffer requirements: Specify the minimum percentage of the HRD buffer that's available at the end of each encoded video segment. For the best video quality: Set to 0 or leave blank to automatically determine the final buffer fill percentage. public var hrdBufferFinalFillPercentage: Swift.Int? @@ -25962,41 +25986,41 @@ extension MediaConvertClientTypes { public var hrdBufferInitialFillPercentage: Swift.Int? /// Size of buffer (HRD buffer model) in bits. For example, enter five megabits as 5000000. public var hrdBufferSize: Swift.Int? - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public var interlaceMode: MediaConvertClientTypes.Mpeg2InterlaceMode? - /// Use Intra DC precision (Mpeg2IntraDcPrecision) to set quantization precision for intra-block DC coefficients. If you choose the value auto, the service will automatically select the precision based on the per-frame compression ratio. + /// Use Intra DC precision to set quantization precision for intra-block DC coefficients. If you choose the value auto, the service will automatically select the precision based on the per-frame compression ratio. public var intraDcPrecision: MediaConvertClientTypes.Mpeg2IntraDcPrecision? /// Maximum bitrate in bits/second. For example, enter five megabits per second as 5000000. public var maxBitrate: Swift.Int? - /// Use this setting only when you also enable Scene change detection (SceneChangeDetect). This setting determines how the encoder manages the spacing between I-frames that it inserts as part of the I-frame cadence and the I-frames that it inserts for Scene change detection. When you specify a value for this setting, the encoder determines whether to skip a cadence-driven I-frame by the value you set. For example, if you set Min I interval (minIInterval) to 5 and a cadence-driven I-frame would fall within 5 frames of a scene-change I-frame, then the encoder skips the cadence-driven I-frame. In this way, one GOP is shrunk slightly and one GOP is stretched slightly. When the cadence-driven I-frames are farther from the scene-change I-frame than the value you set, then the encoder leaves all I-frames in place and the GOPs surrounding the scene change are smaller than the usual cadence GOPs. + /// Use this setting only when you also enable Scene change detection. This setting determines how the encoder manages the spacing between I-frames that it inserts as part of the I-frame cadence and the I-frames that it inserts for Scene change detection. When you specify a value for this setting, the encoder determines whether to skip a cadence-driven I-frame by the value you set. For example, if you set Min I interval to 5 and a cadence-driven I-frame would fall within 5 frames of a scene-change I-frame, then the encoder skips the cadence-driven I-frame. In this way, one GOP is shrunk slightly and one GOP is stretched slightly. When the cadence-driven I-frames are farther from the scene-change I-frame than the value you set, then the encoder leaves all I-frames in place and the GOPs surrounding the scene change are smaller than the usual cadence GOPs. public var minIInterval: Swift.Int? /// Specify the number of B-frames that MediaConvert puts between reference frames in this output. Valid values are whole numbers from 0 through 7. When you don't specify a value, MediaConvert defaults to 2. public var numberBFramesBetweenReferenceFrames: Swift.Int? - /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source (INITIALIZE_FROM_SOURCE), uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. To specify a different PAR by editing the JSON job specification, choose SPECIFIED. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. + /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. public var parControl: MediaConvertClientTypes.Mpeg2ParControl? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. public var parDenominator: Swift.Int? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. public var parNumerator: Swift.Int? - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. public var qualityTuningLevel: MediaConvertClientTypes.Mpeg2QualityTuningLevel? - /// Use Rate control mode (Mpeg2RateControlMode) to specify whether the bitrate is variable (vbr) or constant (cbr). + /// Use Rate control mode to specify whether the bitrate is variable (vbr) or constant (cbr). public var rateControlMode: MediaConvertClientTypes.Mpeg2RateControlMode? - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public var scanTypeConversionMode: MediaConvertClientTypes.Mpeg2ScanTypeConversionMode? /// Enable this setting to insert I-frames at scene changes that the service automatically detects. This improves video quality and is enabled by default. public var sceneChangeDetect: MediaConvertClientTypes.Mpeg2SceneChangeDetect? - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. public var slowPal: MediaConvertClientTypes.Mpeg2SlowPal? - /// Ignore this setting unless you need to comply with a specification that requires a specific value. If you don't have a specification requirement, we recommend that you adjust the softness of your output by using a lower value for the setting Sharpness (sharpness) or by enabling a noise reducer filter (noiseReducerFilter). The Softness (softness) setting specifies the quantization matrices that the encoder uses. Keep the default value, 0, to use the AWS Elemental default matrices. Choose a value from 17 to 128 to use planar interpolation. Increasing values from 17 to 128 result in increasing reduction of high-frequency data. The value 128 results in the softest video. + /// Ignore this setting unless you need to comply with a specification that requires a specific value. If you don't have a specification requirement, we recommend that you adjust the softness of your output by using a lower value for the setting Sharpness or by enabling a noise reducer filter. The Softness setting specifies the quantization matrices that the encoder uses. Keep the default value, 0, to use the AWS Elemental default matrices. Choose a value from 17 to 128 to use planar interpolation. Increasing values from 17 to 128 result in increasing reduction of high-frequency data. The value 128 results in the softest video. public var softness: Swift.Int? - /// Keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization (adaptiveQuantization) depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. + /// Keep the default value, Enabled, to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. public var spatialAdaptiveQuantization: MediaConvertClientTypes.Mpeg2SpatialAdaptiveQuantization? - /// Specify whether this output's video uses the D10 syntax. Keep the default value to not use the syntax. Related settings: When you choose D10 (D_10) for your MXF profile (profile), you must also set this value to D10 (D_10). + /// Specify whether this output's video uses the D10 syntax. Keep the default value to not use the syntax. Related settings: When you choose D10 for your MXF profile, you must also set this value to D10. public var syntax: MediaConvertClientTypes.Mpeg2Syntax? - /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard or soft telecine to create a smoother picture. Hard telecine (HARD) produces a 29.97i output. Soft telecine (SOFT) produces an output with a 23.976 output that signals to the video player device to do the conversion during play back. When you keep the default value, None (NONE), MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. + /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard or soft telecine to create a smoother picture. Hard telecine produces a 29.97i output. Soft telecine produces an output with a 23.976 output that signals to the video player device to do the conversion during play back. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. public var telecine: MediaConvertClientTypes.Mpeg2Telecine? - /// Keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization (adaptiveQuantization). + /// Keep the default value, Enabled, to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization. public var temporalAdaptiveQuantization: MediaConvertClientTypes.Mpeg2TemporalAdaptiveQuantization? public init( @@ -26074,7 +26098,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. public enum Mpeg2SlowPal: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -26107,7 +26131,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization (adaptiveQuantization) depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. + /// Keep the default value, Enabled, to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. public enum Mpeg2SpatialAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -26140,7 +26164,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether this output's video uses the D10 syntax. Keep the default value to not use the syntax. Related settings: When you choose D10 (D_10) for your MXF profile (profile), you must also set this value to D10 (D_10). + /// Specify whether this output's video uses the D10 syntax. Keep the default value to not use the syntax. Related settings: When you choose D10 for your MXF profile, you must also set this value to D10. public enum Mpeg2Syntax: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `default` case d10 @@ -26173,7 +26197,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard or soft telecine to create a smoother picture. Hard telecine (HARD) produces a 29.97i output. Soft telecine (SOFT) produces an output with a 23.976 output that signals to the video player device to do the conversion during play back. When you keep the default value, None (NONE), MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. + /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard or soft telecine to create a smoother picture. Hard telecine produces a 29.97i output. Soft telecine produces an output with a 23.976 output that signals to the video player device to do the conversion during play back. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. public enum Mpeg2Telecine: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case hard case `none` @@ -26209,7 +26233,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization (adaptiveQuantization). + /// Keep the default value, Enabled, to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal quantization, adjust the strength of the filter with the setting Adaptive quantization. public enum Mpeg2TemporalAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -26351,7 +26375,7 @@ extension MediaConvertClientTypes.MsSmoothEncryptionSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// If you are using DRM, set DRM System (MsSmoothEncryptionSettings) to specify the value SpekeKeyProvider. + /// If you are using DRM, set DRM System to specify the value SpekeKeyProvider. public struct MsSmoothEncryptionSettings: Swift.Equatable { /// If your output group type is HLS, DASH, or Microsoft Smooth, use these settings when doing DRM encryption with a SPEKE-compliant key provider. If your output group type is CMAF, use the SpekeKeyProviderCmaf settings instead. public var spekeKeyProvider: MediaConvertClientTypes.SpekeKeyProvider? @@ -26367,7 +26391,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify how you want MediaConvert to determine the fragment length. Choose Exact (EXACT) to have the encoder use the exact length that you specify with the setting Fragment length (FragmentLength). This might result in extra I-frames. Choose Multiple of GOP (GOP_MULTIPLE) to have the encoder round up the segment lengths to match the next GOP boundary. + /// Specify how you want MediaConvert to determine the fragment length. Choose Exact to have the encoder use the exact length that you specify with the setting Fragment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary. public enum MsSmoothFragmentLengthControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case exact case gopMultiple @@ -26473,23 +26497,23 @@ extension MediaConvertClientTypes.MsSmoothGroupSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to your Microsoft Smooth Streaming output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. When you work directly in your JSON job specification, include this object and any required children when you set Type, under OutputGroupSettings, to MS_SMOOTH_GROUP_SETTINGS. + /// Settings related to your Microsoft Smooth Streaming output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. public struct MsSmoothGroupSettings: Swift.Equatable { /// By default, the service creates one .ism Microsoft Smooth Streaming manifest for each Microsoft Smooth Streaming output group in your job. This default manifest references every output in the output group. To create additional manifests that reference a subset of the outputs in the output group, specify a list of them here. public var additionalManifests: [MediaConvertClientTypes.MsSmoothAdditionalManifest]? /// COMBINE_DUPLICATE_STREAMS combines identical audio encoding settings across a Microsoft Smooth output group into a single audio stream. public var audioDeduplication: MediaConvertClientTypes.MsSmoothAudioDeduplication? - /// Use Destination (Destination) to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. + /// Use Destination to specify the S3 output location and the output filename base. Destination accepts format identifiers. If you do not specify the base filename in the URI, the service will use the filename of the input file. If your job has multiple inputs, the service uses the filename of the first input file. public var destination: Swift.String? /// Settings associated with the destination. Will vary based on the type of destination public var destinationSettings: MediaConvertClientTypes.DestinationSettings? - /// If you are using DRM, set DRM System (MsSmoothEncryptionSettings) to specify the value SpekeKeyProvider. + /// If you are using DRM, set DRM System to specify the value SpekeKeyProvider. public var encryption: MediaConvertClientTypes.MsSmoothEncryptionSettings? - /// Specify how you want MediaConvert to determine the fragment length. Choose Exact (EXACT) to have the encoder use the exact length that you specify with the setting Fragment length (FragmentLength). This might result in extra I-frames. Choose Multiple of GOP (GOP_MULTIPLE) to have the encoder round up the segment lengths to match the next GOP boundary. + /// Specify how you want MediaConvert to determine the fragment length. Choose Exact to have the encoder use the exact length that you specify with the setting Fragment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary. public var fragmentLength: Swift.Int? - /// Specify how you want MediaConvert to determine the fragment length. Choose Exact (EXACT) to have the encoder use the exact length that you specify with the setting Fragment length (FragmentLength). This might result in extra I-frames. Choose Multiple of GOP (GOP_MULTIPLE) to have the encoder round up the segment lengths to match the next GOP boundary. + /// Specify how you want MediaConvert to determine the fragment length. Choose Exact to have the encoder use the exact length that you specify with the setting Fragment length. This might result in extra I-frames. Choose Multiple of GOP to have the encoder round up the segment lengths to match the next GOP boundary. public var fragmentLengthControl: MediaConvertClientTypes.MsSmoothFragmentLengthControl? - /// Use Manifest encoding (MsSmoothManifestEncoding) to specify the encoding format for the server and client manifest. Valid options are utf8 and utf16. + /// Use Manifest encoding to specify the encoding format for the server and client manifest. Valid options are utf8 and utf16. public var manifestEncoding: MediaConvertClientTypes.MsSmoothManifestEncoding? public init( @@ -26517,7 +26541,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Manifest encoding (MsSmoothManifestEncoding) to specify the encoding format for the server and client manifest. Valid options are utf8 and utf16. + /// Use Manifest encoding to specify the encoding format for the server and client manifest. Valid options are utf8 and utf16. public enum MsSmoothManifestEncoding: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case utf16 case utf8 @@ -26550,7 +26574,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. When you have AFD signaling set up in your output video stream, use this setting to choose whether to also include it in the MXF wrapper. Choose Don't copy (NO_COPY) to exclude AFD signaling from the MXF wrapper. Choose Copy from video stream (COPY_FROM_VIDEO) to copy the AFD values from the video stream for this output to the MXF wrapper. Regardless of which option you choose, the AFD values remain in the video stream. Related settings: To set up your output to include or exclude AFD values, see AfdSignaling, under VideoDescription. On the console, find AFD signaling under the output's video encoding settings. + /// Optional. When you have AFD signaling set up in your output video stream, use this setting to choose whether to also include it in the MXF wrapper. Choose Don't copy to exclude AFD signaling from the MXF wrapper. Choose Copy from video stream to copy the AFD values from the video stream for this output to the MXF wrapper. Regardless of which option you choose, the AFD values remain in the video stream. Related settings: To set up your output to include or exclude AFD values, see AfdSignaling, under VideoDescription. On the console, find AFD signaling under the output's video encoding settings. public enum MxfAfdSignaling: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case copyFromVideo case noCopy @@ -26658,7 +26682,7 @@ extension MediaConvertClientTypes.MxfSettings: Swift.Codable { extension MediaConvertClientTypes { /// These settings relate to your MXF output container. public struct MxfSettings: Swift.Equatable { - /// Optional. When you have AFD signaling set up in your output video stream, use this setting to choose whether to also include it in the MXF wrapper. Choose Don't copy (NO_COPY) to exclude AFD signaling from the MXF wrapper. Choose Copy from video stream (COPY_FROM_VIDEO) to copy the AFD values from the video stream for this output to the MXF wrapper. Regardless of which option you choose, the AFD values remain in the video stream. Related settings: To set up your output to include or exclude AFD values, see AfdSignaling, under VideoDescription. On the console, find AFD signaling under the output's video encoding settings. + /// Optional. When you have AFD signaling set up in your output video stream, use this setting to choose whether to also include it in the MXF wrapper. Choose Don't copy to exclude AFD signaling from the MXF wrapper. Choose Copy from video stream to copy the AFD values from the video stream for this output to the MXF wrapper. Regardless of which option you choose, the AFD values remain in the video stream. Related settings: To set up your output to include or exclude AFD values, see AfdSignaling, under VideoDescription. On the console, find AFD signaling under the output's video encoding settings. public var afdSignaling: MediaConvertClientTypes.MxfAfdSignaling? /// Specify the MXF profile, also called shim, for this output. To automatically select a profile according to your output video codec and resolution, leave blank. For a list of codecs supported with each MXF profile, see https://docs.aws.amazon.com/mediaconvert/latest/ug/codecs-supported-with-each-mxf-profile.html. For more information about the automatic selection behavior, see https://docs.aws.amazon.com/mediaconvert/latest/ug/default-automatic-selection-of-mxf-profiles.html. public var profile: MediaConvertClientTypes.MxfProfile? @@ -26680,7 +26704,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// To create an output that complies with the XAVC file format guidelines for interoperability, keep the default value, Drop frames for compliance (DROP_FRAMES_FOR_COMPLIANCE). To include all frames from your input in this output, keep the default setting, Allow any duration (ALLOW_ANY_DURATION). The number of frames that MediaConvert excludes when you set this to Drop frames for compliance depends on the output frame rate and duration. + /// To create an output that complies with the XAVC file format guidelines for interoperability, keep the default value, Drop frames for compliance. To include all frames from your input in this output, keep the default setting, Allow any duration. The number of frames that MediaConvert excludes when you set this to Drop frames for compliance depends on the output frame rate and duration. public enum MxfXavcDurationMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case allowAnyDuration case dropFramesForCompliance @@ -26740,9 +26764,9 @@ extension MediaConvertClientTypes.MxfXavcProfileSettings: Swift.Codable { extension MediaConvertClientTypes { /// Specify the XAVC profile settings for MXF outputs when you set your MXF profile to XAVC. public struct MxfXavcProfileSettings: Swift.Equatable { - /// To create an output that complies with the XAVC file format guidelines for interoperability, keep the default value, Drop frames for compliance (DROP_FRAMES_FOR_COMPLIANCE). To include all frames from your input in this output, keep the default setting, Allow any duration (ALLOW_ANY_DURATION). The number of frames that MediaConvert excludes when you set this to Drop frames for compliance depends on the output frame rate and duration. + /// To create an output that complies with the XAVC file format guidelines for interoperability, keep the default value, Drop frames for compliance. To include all frames from your input in this output, keep the default setting, Allow any duration. The number of frames that MediaConvert excludes when you set this to Drop frames for compliance depends on the output frame rate and duration. public var durationMode: MediaConvertClientTypes.MxfXavcDurationMode? - /// Specify a value for this setting only for outputs that you set up with one of these two XAVC profiles: XAVC HD Intra CBG (XAVC_HD_INTRA_CBG) or XAVC 4K Intra CBG (XAVC_4K_INTRA_CBG). Specify the amount of space in each frame that the service reserves for ancillary data, such as teletext captions. The default value for this setting is 1492 bytes per frame. This should be sufficient to prevent overflow unless you have multiple pages of teletext captions data. If you have a large amount of teletext data, specify a larger number. + /// Specify a value for this setting only for outputs that you set up with one of these two XAVC profiles: XAVC HD Intra CBG or XAVC 4K Intra CBG. Specify the amount of space in each frame that the service reserves for ancillary data, such as teletext captions. The default value for this setting is 1492 bytes per frame. This should be sufficient to prevent overflow unless you have multiple pages of teletext captions data. If you have a large amount of teletext data, specify a larger number. public var maxAncDataSize: Swift.Int? public init( @@ -26797,11 +26821,11 @@ extension MediaConvertClientTypes.NexGuardFileMarkerSettings: Swift.Codable { extension MediaConvertClientTypes { /// For forensic video watermarking, MediaConvert supports Nagra NexGuard File Marker watermarking. MediaConvert supports both PreRelease Content (NGPR/G2) and OTT Streaming workflows. public struct NexGuardFileMarkerSettings: Swift.Equatable { - /// Use the base64 license string that Nagra provides you. Enter it directly in your JSON job specification or in the console. Required when you include Nagra NexGuard File Marker watermarking (NexGuardWatermarkingSettings) in your job. + /// Use the base64 license string that Nagra provides you. Enter it directly in your JSON job specification or in the console. Required when you include Nagra NexGuard File Marker watermarking in your job. public var license: Swift.String? - /// Specify the payload ID that you want associated with this output. Valid values vary depending on your Nagra NexGuard forensic watermarking workflow. Required when you include Nagra NexGuard File Marker watermarking (NexGuardWatermarkingSettings) in your job. For PreRelease Content (NGPR/G2), specify an integer from 1 through 4,194,303. You must generate a unique ID for each asset you watermark, and keep a record of which ID you have assigned to each asset. Neither Nagra nor MediaConvert keep track of the relationship between output files and your IDs. For OTT Streaming, create two adaptive bitrate (ABR) stacks for each asset. Do this by setting up two output groups. For one output group, set the value of Payload ID (payload) to 0 in every output. For the other output group, set Payload ID (payload) to 1 in every output. + /// Specify the payload ID that you want associated with this output. Valid values vary depending on your Nagra NexGuard forensic watermarking workflow. Required when you include Nagra NexGuard File Marker watermarking in your job. For PreRelease Content (NGPR/G2), specify an integer from 1 through 4,194,303. You must generate a unique ID for each asset you watermark, and keep a record of which ID you have assigned to each asset. Neither Nagra nor MediaConvert keep track of the relationship between output files and your IDs. For OTT Streaming, create two adaptive bitrate (ABR) stacks for each asset. Do this by setting up two output groups. For one output group, set the value of Payload ID to 0 in every output. For the other output group, set Payload ID to 1 in every output. public var payload: Swift.Int? - /// Enter one of the watermarking preset strings that Nagra provides you. Required when you include Nagra NexGuard File Marker watermarking (NexGuardWatermarkingSettings) in your job. + /// Enter one of the watermarking preset strings that Nagra provides you. Required when you include Nagra NexGuard File Marker watermarking in your job. public var preset: Swift.String? /// Optional. Ignore this setting unless Nagra support directs you to specify a value. When you don't specify a value here, the Nagra NexGuard library uses its default value. public var strength: MediaConvertClientTypes.WatermarkingStrength? @@ -26823,7 +26847,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the type of Nielsen watermarks that you want in your outputs. When you choose NAES 2 and NW (NAES2_AND_NW), you must provide a value for the setting SID (sourceId). When you choose CBET (CBET), you must provide a value for the setting CSID (cbetSourceId). When you choose NAES 2, NW, and CBET (NAES2_AND_NW_AND_CBET), you must provide values for both of these settings. + /// Choose the type of Nielsen watermarks that you want in your outputs. When you choose NAES 2 and NW, you must provide a value for the setting SID. When you choose CBET, you must provide a value for the setting CSID. When you choose NAES 2, NW, and CBET, you must provide values for both of these settings. public enum NielsenActiveWatermarkProcessType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case cbet case naes2AndNw @@ -26884,11 +26908,11 @@ extension MediaConvertClientTypes.NielsenConfiguration: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings for your Nielsen configuration. If you don't do Nielsen measurement and analytics, ignore these settings. When you enable Nielsen configuration (nielsenConfiguration), MediaConvert enables PCM to ID3 tagging for all outputs in the job. To enable Nielsen configuration programmatically, include an instance of nielsenConfiguration in your JSON job specification. Even if you don't include any children of nielsenConfiguration, you still enable the setting. + /// Settings for your Nielsen configuration. If you don't do Nielsen measurement and analytics, ignore these settings. When you enable Nielsen configuration, MediaConvert enables PCM to ID3 tagging for all outputs in the job. public struct NielsenConfiguration: Swift.Equatable { /// Nielsen has discontinued the use of breakout code functionality. If you must include this property, set the value to zero. public var breakoutCode: Swift.Int? - /// Use Distributor ID (DistributorID) to specify the distributor ID that is assigned to your organization by Neilsen. + /// Use Distributor ID to specify the distributor ID that is assigned to your organization by Nielsen. public var distributorId: Swift.String? public init( @@ -26985,27 +27009,27 @@ extension MediaConvertClientTypes.NielsenNonLinearWatermarkSettings: Swift.Codab extension MediaConvertClientTypes { /// Ignore these settings unless you are using Nielsen non-linear watermarking. Specify the values that MediaConvert uses to generate and place Nielsen watermarks in your output audio. In addition to specifying these values, you also need to set up your cloud TIC server. These settings apply to every output in your job. The MediaConvert implementation is currently with the following Nielsen versions: Nielsen Watermark SDK Version 5.2.1 Nielsen NLM Watermark Engine Version 1.2.7 Nielsen Watermark Authenticator [SID_TIC] Version [5.0.0] public struct NielsenNonLinearWatermarkSettings: Swift.Equatable { - /// Choose the type of Nielsen watermarks that you want in your outputs. When you choose NAES 2 and NW (NAES2_AND_NW), you must provide a value for the setting SID (sourceId). When you choose CBET (CBET), you must provide a value for the setting CSID (cbetSourceId). When you choose NAES 2, NW, and CBET (NAES2_AND_NW_AND_CBET), you must provide values for both of these settings. + /// Choose the type of Nielsen watermarks that you want in your outputs. When you choose NAES 2 and NW, you must provide a value for the setting SID. When you choose CBET, you must provide a value for the setting CSID. When you choose NAES 2, NW, and CBET, you must provide values for both of these settings. public var activeWatermarkProcess: MediaConvertClientTypes.NielsenActiveWatermarkProcessType? - /// Optional. Use this setting when you want the service to include an ADI file in the Nielsen metadata .zip file. To provide an ADI file, store it in Amazon S3 and provide a URL to it here. The URL should be in the following format: S3://bucket/path/ADI-file. For more information about the metadata .zip file, see the setting Metadata destination (metadataDestination). + /// Optional. Use this setting when you want the service to include an ADI file in the Nielsen metadata .zip file. To provide an ADI file, store it in Amazon S3 and provide a URL to it here. The URL should be in the following format: S3://bucket/path/ADI-file. For more information about the metadata .zip file, see the setting Metadata destination. public var adiFilename: Swift.String? /// Use the asset ID that you provide to Nielsen to uniquely identify this asset. Required for all Nielsen non-linear watermarking. public var assetId: Swift.String? /// Use the asset name that you provide to Nielsen for this asset. Required for all Nielsen non-linear watermarking. public var assetName: Swift.String? - /// Use the CSID that Nielsen provides to you. This CBET source ID should be unique to your Nielsen account but common to all of your output assets that have CBET watermarking. Required when you choose a value for the setting Watermark types (ActiveWatermarkProcess) that includes CBET. + /// Use the CSID that Nielsen provides to you. This CBET source ID should be unique to your Nielsen account but common to all of your output assets that have CBET watermarking. Required when you choose a value for the setting Watermark types that includes CBET. public var cbetSourceId: Swift.String? /// Optional. If this asset uses an episode ID with Nielsen, provide it here. public var episodeId: Swift.String? - /// Specify the Amazon S3 location where you want MediaConvert to save your Nielsen non-linear metadata .zip file. This Amazon S3 bucket must be in the same Region as the one where you do your MediaConvert transcoding. If you want to include an ADI file in this .zip file, use the setting ADI file (adiFilename) to specify it. MediaConvert delivers the Nielsen metadata .zip files only to your metadata destination Amazon S3 bucket. It doesn't deliver the .zip files to Nielsen. You are responsible for delivering the metadata .zip files to Nielsen. + /// Specify the Amazon S3 location where you want MediaConvert to save your Nielsen non-linear metadata .zip file. This Amazon S3 bucket must be in the same Region as the one where you do your MediaConvert transcoding. If you want to include an ADI file in this .zip file, use the setting ADI file to specify it. MediaConvert delivers the Nielsen metadata .zip files only to your metadata destination Amazon S3 bucket. It doesn't deliver the .zip files to Nielsen. You are responsible for delivering the metadata .zip files to Nielsen. public var metadataDestination: Swift.String? /// Use the SID that Nielsen provides to you. This source ID should be unique to your Nielsen account but common to all of your output assets. Required for all Nielsen non-linear watermarking. This ID should be unique to your Nielsen account but common to all of your output assets. Required for all Nielsen non-linear watermarking. public var sourceId: Swift.Int? - /// Required. Specify whether your source content already contains Nielsen non-linear watermarks. When you set this value to Watermarked (WATERMARKED), the service fails the job. Nielsen requires that you add non-linear watermarking to only clean content that doesn't already have non-linear Nielsen watermarks. + /// Required. Specify whether your source content already contains Nielsen non-linear watermarks. When you set this value to Watermarked, the service fails the job. Nielsen requires that you add non-linear watermarking to only clean content that doesn't already have non-linear Nielsen watermarks. public var sourceWatermarkStatus: MediaConvertClientTypes.NielsenSourceWatermarkStatusType? /// Specify the endpoint for the TIC server that you have deployed and configured in the AWS Cloud. Required for all Nielsen non-linear watermarking. MediaConvert can't connect directly to a TIC server. Instead, you must use API Gateway to provide a RESTful interface between MediaConvert and a TIC server that you deploy in your AWS account. For more information on deploying a TIC server in your AWS account and the required API Gateway, contact Nielsen support. public var ticServerUrl: Swift.String? - /// To create assets that have the same TIC values in each audio track, keep the default value Share TICs (SAME_TICS_PER_TRACK). To create assets that have unique TIC values for each audio track, choose Use unique TICs (RESERVE_UNIQUE_TICS_PER_TRACK). + /// To create assets that have the same TIC values in each audio track, keep the default value Share TICs. To create assets that have unique TIC values for each audio track, choose Use unique TICs. public var uniqueTicPerAudioTrack: MediaConvertClientTypes.NielsenUniqueTicPerAudioTrackType? public init( @@ -27039,7 +27063,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Required. Specify whether your source content already contains Nielsen non-linear watermarks. When you set this value to Watermarked (WATERMARKED), the service fails the job. Nielsen requires that you add non-linear watermarking to only clean content that doesn't already have non-linear Nielsen watermarks. + /// Required. Specify whether your source content already contains Nielsen non-linear watermarks. When you set this value to Watermarked, the service fails the job. Nielsen requires that you add non-linear watermarking to only clean content that doesn't already have non-linear Nielsen watermarks. public enum NielsenSourceWatermarkStatusType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case clean case watermarked @@ -27072,7 +27096,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// To create assets that have the same TIC values in each audio track, keep the default value Share TICs (SAME_TICS_PER_TRACK). To create assets that have unique TIC values for each audio track, choose Use unique TICs (RESERVE_UNIQUE_TICS_PER_TRACK). + /// To create assets that have the same TIC values in each audio track, keep the default value Share TICs. To create assets that have unique TIC values for each audio track, choose Use unique TICs. public enum NielsenUniqueTicPerAudioTrackType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case reserveUniqueTicsPerTrack case sameTicsPerTrack @@ -27105,7 +27129,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you set Noise reducer (noiseReducer) to Temporal (TEMPORAL), the bandwidth and sharpness of your output is reduced. You can optionally use Post temporal sharpening (postTemporalSharpening) to apply sharpening to the edges of your output. Note that Post temporal sharpening will also make the bandwidth reduction from the Noise reducer smaller. The default behavior, Auto (AUTO), allows the transcoder to determine whether to apply sharpening, depending on your input type and quality. When you set Post temporal sharpening to Enabled (ENABLED), specify how much sharpening is applied using Post temporal sharpening strength (postTemporalSharpeningStrength). Set Post temporal sharpening to Disabled (DISABLED) to not apply sharpening. + /// When you set Noise reducer to Temporal, the bandwidth and sharpness of your output is reduced. You can optionally use Post temporal sharpening to apply sharpening to the edges of your output. Note that Post temporal sharpening will also make the bandwidth reduction from the Noise reducer smaller. The default behavior, Auto, allows the transcoder to determine whether to apply sharpening, depending on your input type and quality. When you set Post temporal sharpening to Enabled, specify how much sharpening is applied using Post temporal sharpening strength. Set Post temporal sharpening to Disabled to not apply sharpening. public enum NoiseFilterPostTemporalSharpening: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case disabled @@ -27141,7 +27165,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Post temporal sharpening strength (postTemporalSharpeningStrength) to define the amount of sharpening the transcoder applies to your output. Set Post temporal sharpening strength to Low (LOW), Medium (MEDIUM), or High (HIGH) to indicate the amount of sharpening. + /// Use Post temporal sharpening strength to define the amount of sharpening the transcoder applies to your output. Set Post temporal sharpening strength to Low, Medium, or High to indicate the amount of sharpening. public enum NoiseFilterPostTemporalSharpeningStrength: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case high case low @@ -27216,7 +27240,7 @@ extension MediaConvertClientTypes.NoiseReducer: Swift.Codable { extension MediaConvertClientTypes { /// Enable the Noise reducer feature to remove noise from your video output if necessary. Enable or disable this feature for each output individually. This setting is disabled by default. When you enable Noise reducer, you must also select a value for Noise reducer filter. For AVC outputs, when you include Noise reducer, you cannot include the Bandwidth reduction filter. public struct NoiseReducer: Swift.Equatable { - /// Use Noise reducer filter (NoiseReducerFilter) to select one of the following spatial image filtering functions. To use this setting, you must also enable Noise reducer (NoiseReducer). * Bilateral preserves edges while reducing noise. * Mean (softest), Gaussian, Lanczos, and Sharpen (sharpest) do convolution filtering. * Conserve does min/max noise reduction. * Spatial does frequency-domain filtering based on JND principles. * Temporal optimizes video quality for complex motion. + /// Use Noise reducer filter to select one of the following spatial image filtering functions. To use this setting, you must also enable Noise reducer. * Bilateral preserves edges while reducing noise. * Mean (softest), Gaussian, Lanczos, and Sharpen (sharpest) do convolution filtering. * Conserve does min/max noise reduction. * Spatial does frequency-domain filtering based on JND principles. * Temporal optimizes video quality for complex motion. public var filter: MediaConvertClientTypes.NoiseReducerFilter? /// Settings for a noise reducer filter public var filterSettings: MediaConvertClientTypes.NoiseReducerFilterSettings? @@ -27242,7 +27266,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Noise reducer filter (NoiseReducerFilter) to select one of the following spatial image filtering functions. To use this setting, you must also enable Noise reducer (NoiseReducer). * Bilateral preserves edges while reducing noise. * Mean (softest), Gaussian, Lanczos, and Sharpen (sharpest) do convolution filtering. * Conserve does min/max noise reduction. * Spatial does frequency-domain filtering based on JND principles. * Temporal optimizes video quality for complex motion. + /// Use Noise reducer filter to select one of the following spatial image filtering functions. To use this setting, you must also enable Noise reducer. * Bilateral preserves edges while reducing noise. * Mean (softest), Gaussian, Lanczos, and Sharpen (sharpest) do convolution filtering. * Conserve does min/max noise reduction. * Spatial does frequency-domain filtering based on JND principles. * Temporal optimizes video quality for complex motion. public enum NoiseReducerFilter: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bilateral case conserve @@ -27430,9 +27454,9 @@ extension MediaConvertClientTypes { public struct NoiseReducerTemporalFilterSettings: Swift.Equatable { /// Use Aggressive mode for content that has complex motion. Higher values produce stronger temporal filtering. This filters highly complex scenes more aggressively and creates better VQ for low bitrate outputs. public var aggressiveMode: Swift.Int? - /// When you set Noise reducer (noiseReducer) to Temporal (TEMPORAL), the bandwidth and sharpness of your output is reduced. You can optionally use Post temporal sharpening (postTemporalSharpening) to apply sharpening to the edges of your output. Note that Post temporal sharpening will also make the bandwidth reduction from the Noise reducer smaller. The default behavior, Auto (AUTO), allows the transcoder to determine whether to apply sharpening, depending on your input type and quality. When you set Post temporal sharpening to Enabled (ENABLED), specify how much sharpening is applied using Post temporal sharpening strength (postTemporalSharpeningStrength). Set Post temporal sharpening to Disabled (DISABLED) to not apply sharpening. + /// When you set Noise reducer to Temporal, the bandwidth and sharpness of your output is reduced. You can optionally use Post temporal sharpening to apply sharpening to the edges of your output. Note that Post temporal sharpening will also make the bandwidth reduction from the Noise reducer smaller. The default behavior, Auto, allows the transcoder to determine whether to apply sharpening, depending on your input type and quality. When you set Post temporal sharpening to Enabled, specify how much sharpening is applied using Post temporal sharpening strength. Set Post temporal sharpening to Disabled to not apply sharpening. public var postTemporalSharpening: MediaConvertClientTypes.NoiseFilterPostTemporalSharpening? - /// Use Post temporal sharpening strength (postTemporalSharpeningStrength) to define the amount of sharpening the transcoder applies to your output. Set Post temporal sharpening strength to Low (LOW), Medium (MEDIUM), or High (HIGH) to indicate the amount of sharpening. + /// Use Post temporal sharpening strength to define the amount of sharpening the transcoder applies to your output. Set Post temporal sharpening strength to Low, Medium, or High to indicate the amount of sharpening. public var postTemporalSharpeningStrength: MediaConvertClientTypes.NoiseFilterPostTemporalSharpeningStrength? /// The speed of the filter (higher number is faster). Low setting reduces bit rate at the cost of transcode time, high setting improves transcode time at the cost of bit rate. public var speed: Swift.Int? @@ -27548,7 +27572,7 @@ extension MediaConvertClientTypes { public struct OpusSettings: Swift.Equatable { /// Optional. Specify the average bitrate in bits per second. Valid values are multiples of 8000, from 32000 through 192000. The default value is 96000, which we recommend for quality and bandwidth. public var bitrate: Swift.Int? - /// Specify the number of channels in this output audio track. Choosing Mono on the console gives you 1 output channel; choosing Stereo gives you 2. In the API, valid values are 1 and 2. + /// Specify the number of channels in this output audio track. Choosing Mono on gives you 1 output channel; choosing Stereo gives you 2. In the API, valid values are 1 and 2. public var channels: Swift.Int? /// Optional. Sample rate in hz. Valid values are 16000, 24000, and 48000. The default value is 48000. public var sampleRate: Swift.Int? @@ -27688,19 +27712,19 @@ extension MediaConvertClientTypes.Output: Swift.Codable { extension MediaConvertClientTypes { /// Each output in your job is a collection of settings that describes how you want MediaConvert to encode a single output file or stream. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/create-outputs.html. public struct Output: Swift.Equatable { - /// (AudioDescriptions) contains groups of audio encoding settings organized by audio codec. Include one instance of (AudioDescriptions) per output. (AudioDescriptions) can contain multiple groups of encoding settings. + /// Contains groups of audio encoding settings organized by audio codec. Include one instance of per output. Can contain multiple groups of encoding settings. public var audioDescriptions: [MediaConvertClientTypes.AudioDescription]? - /// (CaptionDescriptions) contains groups of captions settings. For each output that has captions, include one instance of (CaptionDescriptions). (CaptionDescriptions) can contain multiple groups of captions settings. + /// Contains groups of captions settings. For each output that has captions, include one instance of CaptionDescriptions. Can contain multiple groups of captions settings. public var captionDescriptions: [MediaConvertClientTypes.CaptionDescription]? /// Container specific settings. public var containerSettings: MediaConvertClientTypes.ContainerSettings? - /// Use Extension (Extension) to specify the file extension for outputs in File output groups. If you do not specify a value, the service will use default extensions by container type as follows * MPEG-2 transport stream, m2ts * Quicktime, mov * MXF container, mxf * MPEG-4 container, mp4 * WebM container, webm * No Container, the service will use codec extensions (e.g. AAC, H265, H265, AC3) + /// Use Extension to specify the file extension for outputs in File output groups. If you do not specify a value, the service will use default extensions by container type as follows * MPEG-2 transport stream, m2ts * Quicktime, mov * MXF container, mxf * MPEG-4 container, mp4 * WebM container, webm * No Container, the service will use codec extensions (e.g. AAC, H265, H265, AC3) public var `extension`: Swift.String? - /// Use Name modifier (NameModifier) to have the service add a string to the end of each output filename. You specify the base filename as part of your destination URI. When you create multiple outputs in the same output group, Name modifier (NameModifier) is required. Name modifier also accepts format identifiers. For DASH ISO outputs, if you use the format identifiers $Number$ or $Time$ in one output, you must use them in the same way in all outputs of the output group. + /// Use Name modifier to have the service add a string to the end of each output filename. You specify the base filename as part of your destination URI. When you create multiple outputs in the same output group, Name modifier is required. Name modifier also accepts format identifiers. For DASH ISO outputs, if you use the format identifiers $Number$ or $Time$ in one output, you must use them in the same way in all outputs of the output group. public var nameModifier: Swift.String? /// Specific settings for this type of output. public var outputSettings: MediaConvertClientTypes.OutputSettings? - /// Use Preset (Preset) to specify a preset for your transcoding settings. Provide the system or custom preset name. You can specify either Preset (Preset) or Container settings (ContainerSettings), but not both. + /// Use Preset to specify a preset for your transcoding settings. Provide the system or custom preset name. You can specify either Preset or Container settings, but not both. public var preset: Swift.String? /// VideoDescription contains a group of video encoding settings. The specific video settings depend on the video codec that you choose for the property codec. Include one instance of VideoDescription per output. public var videoDescription: MediaConvertClientTypes.VideoDescription? @@ -27903,7 +27927,7 @@ extension MediaConvertClientTypes { public struct OutputGroup: Swift.Equatable { /// Use automated encoding to have MediaConvert choose your encoding settings for you, based on characteristics of your input video. public var automatedEncodingSettings: MediaConvertClientTypes.AutomatedEncodingSettings? - /// Use Custom Group Name (CustomName) to specify a name for the output group. This value is displayed on the console and can make your job settings JSON more human-readable. It does not affect your outputs. Use up to twelve characters that are either letters, numbers, spaces, or underscores. + /// Use Custom Group Name to specify a name for the output group. This value is displayed on the console and can make your job settings JSON more human-readable. It does not affect your outputs. Use up to twelve characters that are either letters, numbers, spaces, or underscores. public var customName: Swift.String? /// Name of the output group public var name: Swift.String? @@ -28029,15 +28053,15 @@ extension MediaConvertClientTypes.OutputGroupSettings: Swift.Codable { extension MediaConvertClientTypes { /// Output Group settings, including type public struct OutputGroupSettings: Swift.Equatable { - /// Settings related to your CMAF output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. When you work directly in your JSON job specification, include this object and any required children when you set Type, under OutputGroupSettings, to CMAF_GROUP_SETTINGS. + /// Settings related to your CMAF output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. public var cmafGroupSettings: MediaConvertClientTypes.CmafGroupSettings? - /// Settings related to your DASH output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. When you work directly in your JSON job specification, include this object and any required children when you set Type, under OutputGroupSettings, to DASH_ISO_GROUP_SETTINGS. + /// Settings related to your DASH output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. public var dashIsoGroupSettings: MediaConvertClientTypes.DashIsoGroupSettings? - /// Settings related to your File output group. MediaConvert uses this group of settings to generate a single standalone file, rather than a streaming package. When you work directly in your JSON job specification, include this object and any required children when you set Type, under OutputGroupSettings, to FILE_GROUP_SETTINGS. + /// Settings related to your File output group. MediaConvert uses this group of settings to generate a single standalone file, rather than a streaming package. public var fileGroupSettings: MediaConvertClientTypes.FileGroupSettings? - /// Settings related to your HLS output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. When you work directly in your JSON job specification, include this object and any required children when you set Type, under OutputGroupSettings, to HLS_GROUP_SETTINGS. + /// Settings related to your HLS output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. public var hlsGroupSettings: MediaConvertClientTypes.HlsGroupSettings? - /// Settings related to your Microsoft Smooth Streaming output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. When you work directly in your JSON job specification, include this object and any required children when you set Type, under OutputGroupSettings, to MS_SMOOTH_GROUP_SETTINGS. + /// Settings related to your Microsoft Smooth Streaming output package. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/outputs-file-ABR.html. public var msSmoothGroupSettings: MediaConvertClientTypes.MsSmoothGroupSettings? /// Type of output group (File group, Apple HLS, DASH ISO, Microsoft Smooth Streaming, CMAF) public var type: MediaConvertClientTypes.OutputGroupType? @@ -28179,7 +28203,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting if your input has video and audio durations that don't align, and your output or player has strict alignment requirements. Examples: Input audio track has a delayed start. Input video track ends before audio ends. When you set Pad video (padVideo) to Black (BLACK), MediaConvert generates black video frames so that output video and audio durations match. Black video frames are added at the beginning or end, depending on your input. To keep the default behavior and not generate black video, set Pad video to Disabled (DISABLED) or leave blank. + /// Use this setting if your input has video and audio durations that don't align, and your output or player has strict alignment requirements. Examples: Input audio track has a delayed start. Input video track ends before audio ends. When you set Pad video to Black, MediaConvert generates black video frames so that output video and audio durations match. Black video frames are added at the beginning or end, depending on your input. To keep the default behavior and not generate black video, set Pad video to Disabled or leave blank. public enum PadVideo: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case black case disabled @@ -28508,7 +28532,7 @@ extension MediaConvertClientTypes.PresetSettings: Swift.Codable { extension MediaConvertClientTypes { /// Settings for preset public struct PresetSettings: Swift.Equatable { - /// (AudioDescriptions) contains groups of audio encoding settings organized by audio codec. Include one instance of (AudioDescriptions) per output. (AudioDescriptions) can contain multiple groups of encoding settings. + /// Contains groups of audio encoding settings organized by audio codec. Include one instance of per output. Can contain multiple groups of encoding settings. public var audioDescriptions: [MediaConvertClientTypes.AudioDescription]? /// This object holds groups of settings related to captions for one output. For each output that has captions, include one instance of CaptionDescriptions. public var captionDescriptions: [MediaConvertClientTypes.CaptionDescriptionPreset]? @@ -28567,7 +28591,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// This setting applies only to ProRes 4444 and ProRes 4444 XQ outputs that you create from inputs that use 4:4:4 chroma sampling. Set Preserve 4:4:4 sampling (PRESERVE_444_SAMPLING) to allow outputs to also use 4:4:4 chroma sampling. You must specify a value for this setting when your output codec profile supports 4:4:4 chroma sampling. Related Settings: When you set Chroma sampling to Preserve 4:4:4 sampling (PRESERVE_444_SAMPLING), you must choose an output codec profile that supports 4:4:4 chroma sampling. These values for Profile (CodecProfile) support 4:4:4 chroma sampling: Apple ProRes 4444 (APPLE_PRORES_4444) or Apple ProRes 4444 XQ (APPLE_PRORES_4444_XQ). When you set Chroma sampling to Preserve 4:4:4 sampling, you must disable all video preprocessors except for Nexguard file marker (PartnerWatermarking). When you set Chroma sampling to Preserve 4:4:4 sampling and use framerate conversion, you must set Frame rate conversion algorithm (FramerateConversionAlgorithm) to Drop duplicate (DUPLICATE_DROP). + /// This setting applies only to ProRes 4444 and ProRes 4444 XQ outputs that you create from inputs that use 4:4:4 chroma sampling. Set Preserve 4:4:4 sampling to allow outputs to also use 4:4:4 chroma sampling. You must specify a value for this setting when your output codec profile supports 4:4:4 chroma sampling. Related Settings: For Apple ProRes outputs with 4:4:4 chroma sampling: Choose Preserve 4:4:4 sampling. Use when your input has 4:4:4 chroma sampling and your output codec Profile is Apple ProRes 4444 or 4444 XQ. Note that when you choose Preserve 4:4:4 sampling, you cannot include any of the following Preprocessors: Dolby Vision, HDR10+, or Noise reducer. public enum ProresChromaSampling: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case preserve444Sampling case subsampleTo422 @@ -28600,7 +28624,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Profile (ProResCodecProfile) to specify the type of Apple ProRes codec to use for this output. + /// Use Profile to specify the type of Apple ProRes codec to use for this output. public enum ProresCodecProfile: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case appleProres422 case appleProres422Hq @@ -28645,7 +28669,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public enum ProresFramerateControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -28714,7 +28738,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public enum ProresInterlaceMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bottomField case followBottomField @@ -28756,7 +28780,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source (INITIALIZE_FROM_SOURCE), uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. To specify a different PAR by editing the JSON job specification, choose SPECIFIED. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. + /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. public enum ProresParControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -28789,7 +28813,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public enum ProresScanTypeConversionMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case interlaced case interlacedOptimize @@ -28913,13 +28937,13 @@ extension MediaConvertClientTypes.ProresSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value PRORES. + /// Required when you set Codec to the value PRORES. public struct ProresSettings: Swift.Equatable { - /// This setting applies only to ProRes 4444 and ProRes 4444 XQ outputs that you create from inputs that use 4:4:4 chroma sampling. Set Preserve 4:4:4 sampling (PRESERVE_444_SAMPLING) to allow outputs to also use 4:4:4 chroma sampling. You must specify a value for this setting when your output codec profile supports 4:4:4 chroma sampling. Related Settings: When you set Chroma sampling to Preserve 4:4:4 sampling (PRESERVE_444_SAMPLING), you must choose an output codec profile that supports 4:4:4 chroma sampling. These values for Profile (CodecProfile) support 4:4:4 chroma sampling: Apple ProRes 4444 (APPLE_PRORES_4444) or Apple ProRes 4444 XQ (APPLE_PRORES_4444_XQ). When you set Chroma sampling to Preserve 4:4:4 sampling, you must disable all video preprocessors except for Nexguard file marker (PartnerWatermarking). When you set Chroma sampling to Preserve 4:4:4 sampling and use framerate conversion, you must set Frame rate conversion algorithm (FramerateConversionAlgorithm) to Drop duplicate (DUPLICATE_DROP). + /// This setting applies only to ProRes 4444 and ProRes 4444 XQ outputs that you create from inputs that use 4:4:4 chroma sampling. Set Preserve 4:4:4 sampling to allow outputs to also use 4:4:4 chroma sampling. You must specify a value for this setting when your output codec profile supports 4:4:4 chroma sampling. Related Settings: For Apple ProRes outputs with 4:4:4 chroma sampling: Choose Preserve 4:4:4 sampling. Use when your input has 4:4:4 chroma sampling and your output codec Profile is Apple ProRes 4444 or 4444 XQ. Note that when you choose Preserve 4:4:4 sampling, you cannot include any of the following Preprocessors: Dolby Vision, HDR10+, or Noise reducer. public var chromaSampling: MediaConvertClientTypes.ProresChromaSampling? - /// Use Profile (ProResCodecProfile) to specify the type of Apple ProRes codec to use for this output. + /// Use Profile to specify the type of Apple ProRes codec to use for this output. public var codecProfile: MediaConvertClientTypes.ProresCodecProfile? - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public var framerateControl: MediaConvertClientTypes.ProresFramerateControl? /// Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. public var framerateConversionAlgorithm: MediaConvertClientTypes.ProresFramerateConversionAlgorithm? @@ -28927,19 +28951,19 @@ extension MediaConvertClientTypes { public var framerateDenominator: Swift.Int? /// When you use the API for transcode jobs that use frame rate conversion, specify the frame rate as a fraction. For example, 24000 / 1001 = 23.976 fps. Use FramerateNumerator to specify the numerator of this fraction. In this example, use 24000 for the value of FramerateNumerator. When you use the console for transcode jobs that use frame rate conversion, provide the value as a decimal number for Framerate. In this example, specify 23.976. public var framerateNumerator: Swift.Int? - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public var interlaceMode: MediaConvertClientTypes.ProresInterlaceMode? - /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source (INITIALIZE_FROM_SOURCE), uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. To specify a different PAR by editing the JSON job specification, choose SPECIFIED. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. + /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. public var parControl: MediaConvertClientTypes.ProresParControl? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. public var parDenominator: Swift.Int? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. public var parNumerator: Swift.Int? - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public var scanTypeConversionMode: MediaConvertClientTypes.ProresScanTypeConversionMode? - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. public var slowPal: MediaConvertClientTypes.ProresSlowPal? - /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine (HARD) to create a smoother picture. When you keep the default value, None (NONE), MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. + /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine to create a smoother picture. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. public var telecine: MediaConvertClientTypes.ProresTelecine? public init( @@ -28977,7 +29001,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output. When you enable slow PAL, MediaConvert relabels the video frames to 25 fps and resamples your audio to keep it synchronized with the video. Note that enabling this setting will slightly reduce the duration of your video. Required settings: You must also set Framerate to 25. public enum ProresSlowPal: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -29010,7 +29034,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine (HARD) to create a smoother picture. When you keep the default value, None (NONE), MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. + /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine to create a smoother picture. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. public enum ProresTelecine: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case hard case `none` @@ -29500,9 +29524,9 @@ extension MediaConvertClientTypes.RemixSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Use Manual audio remixing (RemixSettings) to adjust audio levels for each audio channel in each output of your job. With audio remixing, you can output more or fewer audio channels than your input audio source provides. + /// Use Manual audio remixing to adjust audio levels for each audio channel in each output of your job. With audio remixing, you can output more or fewer audio channels than your input audio source provides. public struct RemixSettings: Swift.Equatable { - /// Channel mapping (ChannelMapping) contains the group of fields that hold the remixing value for each channel, in dB. Specify remix values to indicate how much of the content from your input audio channel you want in your output audio channels. Each instance of the InputChannels or InputChannelsFineTune array specifies these values for one output channel. Use one instance of this array for each output channel. In the console, each array corresponds to a column in the graphical depiction of the mapping matrix. The rows of the graphical matrix correspond to input channels. Valid values are within the range from -60 (mute) through 6. A setting of 0 passes the input channel unchanged to the output channel (no attenuation or amplification). Use InputChannels or InputChannelsFineTune to specify your remix values. Don't use both. + /// Channel mapping contains the group of fields that hold the remixing value for each channel, in dB. Specify remix values to indicate how much of the content from your input audio channel you want in your output audio channels. Each instance of the InputChannels or InputChannelsFineTune array specifies these values for one output channel. Use one instance of this array for each output channel. In the console, each array corresponds to a column in the graphical depiction of the mapping matrix. The rows of the graphical matrix correspond to input channels. Valid values are within the range from -60 (mute) through 6. A setting of 0 passes the input channel unchanged to the output channel (no attenuation or amplification). Use InputChannels or InputChannelsFineTune to specify your remix values. Don't use both. public var channelMapping: MediaConvertClientTypes.ChannelMapping? /// Specify the number of audio channels from your input that you want to use in your output. With remixing, you might combine or split the data in these channels, so the number of channels in your final output might be different. If you are doing both input channel mapping and output channel mapping, the number of output channels in your input mapping must be the same as the number of input channels in your output mapping. public var channelsIn: Swift.Int? @@ -29823,7 +29847,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Respond to AFD (RespondToAfd) to specify how the service changes the video itself in response to AFD values in the input. * Choose Respond to clip the input video frame according to the AFD value, input display aspect ratio, and output display aspect ratio. * Choose Passthrough to include the input AFD values. Do not choose this when AfdSignaling is set to (NONE). A preferred implementation of this workflow is to set RespondToAfd to (NONE) and set AfdSignaling to (AUTO). * Choose None to remove all input AFD values from this output. + /// Use Respond to AFD to specify how the service changes the video itself in response to AFD values in the input. * Choose Respond to clip the input video frame according to the AFD value, input display aspect ratio, and output display aspect ratio. * Choose Passthrough to include the input AFD values. Do not choose this when AfdSignaling is set to NONE. A preferred implementation of this workflow is to set RespondToAfd to and set AfdSignaling to AUTO. * Choose None to remove all input AFD values from this output. public enum RespondToAfd: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `none` case passthrough @@ -30011,11 +30035,11 @@ extension MediaConvertClientTypes.S3EncryptionSettings: Swift.Codable { extension MediaConvertClientTypes { /// Settings for how your job outputs are encrypted as they are uploaded to Amazon S3. public struct S3EncryptionSettings: Swift.Equatable { - /// Specify how you want your data keys managed. AWS uses data keys to encrypt your content. AWS also encrypts the data keys themselves, using a customer master key (CMK), and then stores the encrypted data keys alongside your encrypted content. Use this setting to specify which AWS service manages the CMK. For simplest set up, choose Amazon S3 (SERVER_SIDE_ENCRYPTION_S3). If you want your master key to be managed by AWS Key Management Service (KMS), choose AWS KMS (SERVER_SIDE_ENCRYPTION_KMS). By default, when you choose AWS KMS, KMS uses the AWS managed customer master key (CMK) associated with Amazon S3 to encrypt your data keys. You can optionally choose to specify a different, customer managed CMK. Do so by specifying the Amazon Resource Name (ARN) of the key for the setting KMS ARN (kmsKeyArn). + /// Specify how you want your data keys managed. AWS uses data keys to encrypt your content. AWS also encrypts the data keys themselves, using a customer master key (CMK), and then stores the encrypted data keys alongside your encrypted content. Use this setting to specify which AWS service manages the CMK. For simplest set up, choose Amazon S3. If you want your master key to be managed by AWS Key Management Service (KMS), choose AWS KMS. By default, when you choose AWS KMS, KMS uses the AWS managed customer master key (CMK) associated with Amazon S3 to encrypt your data keys. You can optionally choose to specify a different, customer managed CMK. Do so by specifying the Amazon Resource Name (ARN) of the key for the setting KMS ARN. public var encryptionType: MediaConvertClientTypes.S3ServerSideEncryptionType? - /// Optionally, specify the encryption context that you want to use alongside your KMS key. AWS KMS uses this encryption context as additional authenticated data (AAD) to support authenticated encryption. This value must be a base64-encoded UTF-8 string holding JSON which represents a string-string map. To use this setting, you must also set Server-side encryption (S3ServerSideEncryptionType) to AWS KMS (SERVER_SIDE_ENCRYPTION_KMS). For more information about encryption context, see: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context. + /// Optionally, specify the encryption context that you want to use alongside your KMS key. AWS KMS uses this encryption context as additional authenticated data (AAD) to support authenticated encryption. This value must be a base64-encoded UTF-8 string holding JSON which represents a string-string map. To use this setting, you must also set Server-side encryption to AWS KMS. For more information about encryption context, see: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context. public var kmsEncryptionContext: Swift.String? - /// Optionally, specify the customer master key (CMK) that you want to use to encrypt the data key that AWS uses to encrypt your output content. Enter the Amazon Resource Name (ARN) of the CMK. To use this setting, you must also set Server-side encryption (S3ServerSideEncryptionType) to AWS KMS (SERVER_SIDE_ENCRYPTION_KMS). If you set Server-side encryption to AWS KMS but don't specify a CMK here, AWS uses the AWS managed CMK associated with Amazon S3. + /// Optionally, specify the customer master key (CMK) that you want to use to encrypt the data key that AWS uses to encrypt your output content. Enter the Amazon Resource Name (ARN) of the CMK. To use this setting, you must also set Server-side encryption to AWS KMS. If you set Server-side encryption to AWS KMS but don't specify a CMK here, AWS uses the AWS managed CMK associated with Amazon S3. public var kmsKeyArn: Swift.String? public init( @@ -30072,7 +30096,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify how you want your data keys managed. AWS uses data keys to encrypt your content. AWS also encrypts the data keys themselves, using a customer master key (CMK), and then stores the encrypted data keys alongside your encrypted content. Use this setting to specify which AWS service manages the CMK. For simplest set up, choose Amazon S3 (SERVER_SIDE_ENCRYPTION_S3). If you want your master key to be managed by AWS Key Management Service (KMS), choose AWS KMS (SERVER_SIDE_ENCRYPTION_KMS). By default, when you choose AWS KMS, KMS uses the AWS managed customer master key (CMK) associated with Amazon S3 to encrypt your data keys. You can optionally choose to specify a different, customer managed CMK. Do so by specifying the Amazon Resource Name (ARN) of the key for the setting KMS ARN (kmsKeyArn). + /// Specify how you want your data keys managed. AWS uses data keys to encrypt your content. AWS also encrypts the data keys themselves, using a customer master key (CMK), and then stores the encrypted data keys alongside your encrypted content. Use this setting to specify which AWS service manages the CMK. For simplest set up, choose Amazon S3. If you want your master key to be managed by AWS Key Management Service (KMS), choose AWS KMS. By default, when you choose AWS KMS, KMS uses the AWS managed customer master key (CMK) associated with Amazon S3 to encrypt your data keys. You can optionally choose to specify a different, customer managed CMK. Do so by specifying the Amazon Resource Name (ARN) of the key for the setting KMS ARN. public enum S3ServerSideEncryptionType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case serverSideEncryptionKms case serverSideEncryptionS3 @@ -30141,7 +30165,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify how the service handles outputs that have a different aspect ratio from the input aspect ratio. Choose Stretch to output (STRETCH_TO_OUTPUT) to have the service stretch your video image to fit. Keep the setting Default (DEFAULT) to have the service letterbox your video instead. This setting overrides any value that you specify for the setting Selection placement (position) in this output. + /// Specify how the service handles outputs that have a different aspect ratio from the input aspect ratio. Choose Stretch to output to have the service stretch your video image to fit. Keep the setting Default to have the service letterbox your video instead. This setting overrides any value that you specify for the setting Selection placement in this output. public enum ScalingBehavior: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `default` case stretchToOutput @@ -30174,7 +30198,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Set Framerate (SccDestinationFramerate) to make sure that the captions and the video are synchronized in the output. Specify a frame rate that matches the frame rate of the associated video. If the video frame rate is 29.97, choose 29.97 dropframe (FRAMERATE_29_97_DROPFRAME) only if the video has video_insertion=true and drop_frame_timecode=true; otherwise, choose 29.97 non-dropframe (FRAMERATE_29_97_NON_DROPFRAME). + /// Set Framerate to make sure that the captions and the video are synchronized in the output. Specify a frame rate that matches the frame rate of the associated video. If the video frame rate is 29.97, choose 29.97 dropframe only if the video has video_insertion=true and drop_frame_timecode=true; otherwise, choose 29.97 non-dropframe. public enum SccDestinationFramerate: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case framerate2397 case framerate24 @@ -30235,9 +30259,9 @@ extension MediaConvertClientTypes.SccDestinationSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to SCC captions. SCC is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/scc-srt-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to SCC. + /// Settings related to SCC captions. SCC is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/scc-srt-output-captions.html. public struct SccDestinationSettings: Swift.Equatable { - /// Set Framerate (SccDestinationFramerate) to make sure that the captions and the video are synchronized in the output. Specify a frame rate that matches the frame rate of the associated video. If the video frame rate is 29.97, choose 29.97 dropframe (FRAMERATE_29_97_DROPFRAME) only if the video has video_insertion=true and drop_frame_timecode=true; otherwise, choose 29.97 non-dropframe (FRAMERATE_29_97_NON_DROPFRAME). + /// Set Framerate to make sure that the captions and the video are synchronized in the output. Specify a frame rate that matches the frame rate of the associated video. If the video frame rate is 29.97, choose 29.97 dropframe only if the video has video_insertion=true and drop_frame_timecode=true; otherwise, choose 29.97 non-dropframe. public var framerate: MediaConvertClientTypes.SccDestinationFramerate? public init( @@ -30479,9 +30503,9 @@ extension MediaConvertClientTypes.SrtDestinationSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to SRT captions. SRT is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to SRT. + /// Settings related to SRT captions. SRT is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. public struct SrtDestinationSettings: Swift.Equatable { - /// Set Style passthrough (StylePassthrough) to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use simplified output captions. + /// Set Style passthrough to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use simplified output captions. public var stylePassthrough: MediaConvertClientTypes.SrtStylePassthrough? public init( @@ -30495,7 +30519,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Set Style passthrough (StylePassthrough) to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use simplified output captions. + /// Set Style passthrough to ENABLED to use the available style, color, and position information from your input captions. MediaConvert uses default settings for any missing style and position information in your input captions. Set Style passthrough to DISABLED, or leave blank, to ignore the style and position information from your input captions and use simplified output captions. public enum SrtStylePassthrough: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -30571,7 +30595,7 @@ extension MediaConvertClientTypes { public var keyFormat: Swift.String? /// Relates to DRM implementation. Either a single positive integer version value or a slash delimited list of version values (1/2/3). public var keyFormatVersions: Swift.String? - /// Relates to DRM implementation. Use a 32-character hexidecimal string to specify Key Value (StaticKeyValue). + /// Relates to DRM implementation. Use a 32-character hexidecimal string to specify Key Value. public var staticKeyValue: Swift.String? /// Relates to DRM implementation. The location of the license server used for protecting content. public var url: Swift.String? @@ -30801,11 +30825,11 @@ extension MediaConvertClientTypes.TeletextDestinationSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to teletext captions. Set up teletext captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/teletext-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to TELETEXT. + /// Settings related to teletext captions. Set up teletext captions in the same output as your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/teletext-output-captions.html. public struct TeletextDestinationSettings: Swift.Equatable { /// Set pageNumber to the Teletext page number for the destination captions for this output. This value must be a three-digit hexadecimal string; strings ending in -FF are invalid. If you are passing through the entire set of Teletext data, do not use this field. public var pageNumber: Swift.String? - /// Specify the page types for this Teletext page. If you don't specify a value here, the service sets the page type to the default value Subtitle (PAGE_TYPE_SUBTITLE). If you pass through the entire set of Teletext data, don't use this field. When you pass through a set of Teletext pages, your output has the same page types as your input. + /// Specify the page types for this Teletext page. If you don't specify a value here, the service sets the page type to the default value Subtitle. If you pass through the entire set of Teletext data, don't use this field. When you pass through a set of Teletext pages, your output has the same page types as your input. public var pageTypes: [MediaConvertClientTypes.TeletextPageType]? public init( @@ -30884,7 +30908,7 @@ extension MediaConvertClientTypes.TeletextSourceSettings: Swift.Codable { extension MediaConvertClientTypes { /// Settings specific to Teletext caption sources, including Page number. public struct TeletextSourceSettings: Swift.Equatable { - /// Use Page Number (PageNumber) to specify the three-digit hexadecimal page number that will be used for Teletext captions. Do not use this setting if you are passing through teletext from the input source to output. + /// Use Page Number to specify the three-digit hexadecimal page number that will be used for Teletext captions. Do not use this setting if you are passing through teletext from the input source to output. public var pageNumber: Swift.String? public init( @@ -30931,11 +30955,11 @@ extension MediaConvertClientTypes.TimecodeBurnin: Swift.Codable { extension MediaConvertClientTypes { /// Settings for burning the output timecode and specified prefix into the output. public struct TimecodeBurnin: Swift.Equatable { - /// Use Font Size (FontSize) to set the font size of any burned-in timecode. Valid values are 10, 16, 32, 48. + /// Use Font size to set the font size of any burned-in timecode. Valid values are 10, 16, 32, 48. public var fontSize: Swift.Int? - /// Use Position (Position) under under Timecode burn-in (TimecodeBurnIn) to specify the location the burned-in timecode on output video. + /// Use Position under Timecode burn-in to specify the location the burned-in timecode on output video. public var position: MediaConvertClientTypes.TimecodeBurninPosition? - /// Use Prefix (Prefix) to place ASCII characters before any burned-in timecode. For example, a prefix of "EZ-" will result in the timecode "EZ-00:00:00:00". Provide either the characters themselves or the ASCII code equivalents. The supported range of characters is 0x20 through 0x7e. This includes letters, numbers, and all special characters represented on a standard English keyboard. + /// Use Prefix to place ASCII characters before any burned-in timecode. For example, a prefix of "EZ-" will result in the timecode "EZ-00:00:00:00". Provide either the characters themselves or the ASCII code equivalents. The supported range of characters is 0x20 through 0x7e. This includes letters, numbers, and all special characters represented on a standard English keyboard. public var `prefix`: Swift.String? public init( @@ -30953,7 +30977,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Position (Position) under under Timecode burn-in (TimecodeBurnIn) to specify the location the burned-in timecode on output video. + /// Use Position under Timecode burn-in to specify the location the burned-in timecode on output video. public enum TimecodeBurninPosition: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bottomCenter case bottomLeft @@ -31046,13 +31070,13 @@ extension MediaConvertClientTypes.TimecodeConfig: Swift.Codable { extension MediaConvertClientTypes { /// These settings control how the service handles timecodes throughout the job. These settings don't affect input clipping. public struct TimecodeConfig: Swift.Equatable { - /// If you use an editing platform that relies on an anchor timecode, use Anchor Timecode (Anchor) to specify a timecode that will match the input video frame to the output video frame. Use 24-hour format with frame number, (HH:MM:SS:FF) or (HH:MM:SS;FF). This setting ignores frame rate conversion. System behavior for Anchor Timecode varies depending on your setting for Source (TimecodeSource). * If Source (TimecodeSource) is set to Specified Start (SPECIFIEDSTART), the first input frame is the specified value in Start Timecode (Start). Anchor Timecode (Anchor) and Start Timecode (Start) are used calculate output timecode. * If Source (TimecodeSource) is set to Start at 0 (ZEROBASED) the first frame is 00:00:00:00. * If Source (TimecodeSource) is set to Embedded (EMBEDDED), the first frame is the timecode value on the first input frame of the input. + /// If you use an editing platform that relies on an anchor timecode, use Anchor Timecode to specify a timecode that will match the input video frame to the output video frame. Use 24-hour format with frame number, (HH:MM:SS:FF) or (HH:MM:SS;FF). This setting ignores frame rate conversion. System behavior for Anchor Timecode varies depending on your setting for Source. * If Source is set to Specified Start, the first input frame is the specified value in Start Timecode. Anchor Timecode and Start Timecode are used calculate output timecode. * If Source is set to Start at 0 the first frame is 00:00:00:00. * If Source is set to Embedded, the first frame is the timecode value on the first input frame of the input. public var anchor: Swift.String? - /// Use Source (TimecodeSource) to set how timecodes are handled within this job. To make sure that your video, audio, captions, and markers are synchronized and that time-based features, such as image inserter, work correctly, choose the Timecode source option that matches your assets. All timecodes are in a 24-hour format with frame number (HH:MM:SS:FF). * Embedded (EMBEDDED) - Use the timecode that is in the input video. If no embedded timecode is in the source, the service will use Start at 0 (ZEROBASED) instead. * Start at 0 (ZEROBASED) - Set the timecode of the initial frame to 00:00:00:00. * Specified Start (SPECIFIEDSTART) - Set the timecode of the initial frame to a value other than zero. You use Start timecode (Start) to provide this value. + /// Use Source to set how timecodes are handled within this job. To make sure that your video, audio, captions, and markers are synchronized and that time-based features, such as image inserter, work correctly, choose the Timecode source option that matches your assets. All timecodes are in a 24-hour format with frame number (HH:MM:SS:FF). * Embedded - Use the timecode that is in the input video. If no embedded timecode is in the source, the service will use Start at 0 instead. * Start at 0 - Set the timecode of the initial frame to 00:00:00:00. * Specified Start - Set the timecode of the initial frame to a value other than zero. You use Start timecode to provide this value. public var source: MediaConvertClientTypes.TimecodeSource? - /// Only use when you set Source (TimecodeSource) to Specified start (SPECIFIEDSTART). Use Start timecode (Start) to specify the timecode for the initial frame. Use 24-hour format with frame number, (HH:MM:SS:FF) or (HH:MM:SS;FF). + /// Only use when you set Source to Specified start. Use Start timecode to specify the timecode for the initial frame. Use 24-hour format with frame number, (HH:MM:SS:FF) or (HH:MM:SS;FF). public var start: Swift.String? - /// Only applies to outputs that support program-date-time stamp. Use Timestamp offset (TimestampOffset) to overwrite the timecode date without affecting the time and frame number. Provide the new date as a string in the format "yyyy-mm-dd". To use Time stamp offset, you must also enable Insert program-date-time (InsertProgramDateTime) in the output settings. For example, if the date part of your timecodes is 2002-1-25 and you want to change it to one year later, set Timestamp offset (TimestampOffset) to 2003-1-25. + /// Only applies to outputs that support program-date-time stamp. Use Timestamp offset to overwrite the timecode date without affecting the time and frame number. Provide the new date as a string in the format "yyyy-mm-dd". To use Timestamp offset, you must also enable Insert program-date-time in the output settings. For example, if the date part of your timecodes is 2002-1-25 and you want to change it to one year later, set Timestamp offset to 2003-1-25. public var timestampOffset: Swift.String? public init( @@ -31072,7 +31096,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use Source (TimecodeSource) to set how timecodes are handled within this job. To make sure that your video, audio, captions, and markers are synchronized and that time-based features, such as image inserter, work correctly, choose the Timecode source option that matches your assets. All timecodes are in a 24-hour format with frame number (HH:MM:SS:FF). * Embedded (EMBEDDED) - Use the timecode that is in the input video. If no embedded timecode is in the source, the service will use Start at 0 (ZEROBASED) instead. * Start at 0 (ZEROBASED) - Set the timecode of the initial frame to 00:00:00:00. * Specified Start (SPECIFIEDSTART) - Set the timecode of the initial frame to a value other than zero. You use Start timecode (Start) to provide this value. + /// Use Source to set how timecodes are handled within this job. To make sure that your video, audio, captions, and markers are synchronized and that time-based features, such as image inserter, work correctly, choose the Timecode source option that matches your assets. All timecodes are in a 24-hour format with frame number (HH:MM:SS:FF). * Embedded - Use the timecode that is in the input video. If no embedded timecode is in the source, the service will use Start at 0 instead. * Start at 0 - Set the timecode of the initial frame to 00:00:00:00. * Specified Start - Set the timecode of the initial frame to a value other than zero. You use Start timecode to provide this value. public enum TimecodeSource: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case embedded case specifiedstart @@ -31108,7 +31132,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH) to include ID3 metadata in this output. This includes ID3 metadata from the following features: ID3 timestamp period (timedMetadataId3Period), and Custom ID3 metadata inserter (timedMetadataInsertion). To exclude this ID3 metadata in this output: set ID3 metadata to None (NONE) or leave blank. + /// Set ID3 metadata to Passthrough to include ID3 metadata in this output. This includes ID3 metadata from the following features: ID3 timestamp period, and Custom ID3 metadata inserter. To exclude this ID3 metadata in this output: set ID3 metadata to None or leave blank. public enum TimedMetadata: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `none` case passthrough @@ -31172,7 +31196,7 @@ extension MediaConvertClientTypes.TimedMetadataInsertion: Swift.Codable { } extension MediaConvertClientTypes { - /// Insert user-defined custom ID3 metadata (id3) at timecodes (timecode) that you specify. In each output that you want to include this metadata, you must set ID3 metadata (timedMetadata) to Passthrough (PASSTHROUGH). + /// Insert user-defined custom ID3 metadata at timecodes that you specify. In each output that you want to include this metadata, you must set ID3 metadata to Passthrough. public struct TimedMetadataInsertion: Swift.Equatable { /// Id3Insertions contains the array of Id3Insertion instances. public var id3Insertions: [MediaConvertClientTypes.Id3Insertion]? @@ -31352,7 +31376,7 @@ extension MediaConvertClientTypes.TtmlDestinationSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to TTML captions. TTML is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to TTML. + /// Settings related to TTML captions. TTML is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. public struct TtmlDestinationSettings: Swift.Equatable { /// Pass through style and position information from a TTML-like input source (TTML, IMSC, SMPTE-TT) to the TTML output. public var stylePassthrough: MediaConvertClientTypes.TtmlStylePassthrough? @@ -32003,7 +32027,7 @@ extension UpdateQueueOutputResponseBody: Swift.Decodable { } extension MediaConvertClientTypes { - /// Specify the VC3 class to choose the quality characteristics for this output. VC3 class, together with the settings Framerate (framerateNumerator and framerateDenominator) and Resolution (height and width), determine your output bitrate. For example, say that your video resolution is 1920x1080 and your framerate is 29.97. Then Class 145 (CLASS_145) gives you an output with a bitrate of approximately 145 Mbps and Class 220 (CLASS_220) gives you and output with a bitrate of approximately 220 Mbps. VC3 class also specifies the color bit depth of your output. + /// Specify the VC3 class to choose the quality characteristics for this output. VC3 class, together with the settings Framerate (framerateNumerator and framerateDenominator) and Resolution (height and width), determine your output bitrate. For example, say that your video resolution is 1920x1080 and your framerate is 29.97. Then Class 145 gives you an output with a bitrate of approximately 145 Mbps and Class 220 gives you and output with a bitrate of approximately 220 Mbps. VC3 class also specifies the color bit depth of your output. public enum Vc3Class: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case class1458bit case class22010bit @@ -32039,7 +32063,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public enum Vc3FramerateControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -32141,7 +32165,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public enum Vc3ScanTypeConversionMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case interlaced case interlacedOptimize @@ -32241,9 +32265,9 @@ extension MediaConvertClientTypes.Vc3Settings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value VC3 + /// Required when you set Codec to the value VC3 public struct Vc3Settings: Swift.Equatable { - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public var framerateControl: MediaConvertClientTypes.Vc3FramerateControl? /// Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. public var framerateConversionAlgorithm: MediaConvertClientTypes.Vc3FramerateConversionAlgorithm? @@ -32253,13 +32277,13 @@ extension MediaConvertClientTypes { public var framerateNumerator: Swift.Int? /// Optional. Choose the scan line type for this output. If you don't specify a value, MediaConvert will create a progressive output. public var interlaceMode: MediaConvertClientTypes.Vc3InterlaceMode? - /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing (INTERLACED_OPTIMIZE) to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing (INTERLACED), for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine (telecine) to None (NONE) or Soft (SOFT). You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode (interlaceMode) to a value other than Progressive (PROGRESSIVE). + /// Use this setting for interlaced outputs, when your output frame rate is half of your input frame rate. In this situation, choose Optimized interlacing to create a better quality interlaced output. In this case, each progressive frame from the input corresponds to an interlaced field in the output. Keep the default value, Basic interlacing, for all other output frame rates. With basic interlacing, MediaConvert performs any frame rate conversion first and then interlaces the frames. When you choose Optimized interlacing and you set your output frame rate to a value that isn't suitable for optimized interlacing, MediaConvert automatically falls back to basic interlacing. Required settings: To use optimized interlacing, you must set Telecine to None or Soft. You can't use optimized interlacing for hard telecine outputs. You must also set Interlace mode to a value other than Progressive. public var scanTypeConversionMode: MediaConvertClientTypes.Vc3ScanTypeConversionMode? - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output by relabeling the video frames and resampling your audio. Note that enabling this setting will slightly reduce the duration of your video. Related settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output by relabeling the video frames and resampling your audio. Note that enabling this setting will slightly reduce the duration of your video. Related settings: You must also set Framerate to 25. public var slowPal: MediaConvertClientTypes.Vc3SlowPal? - /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine (HARD) to create a smoother picture. When you keep the default value, None (NONE), MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. + /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine to create a smoother picture. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. public var telecine: MediaConvertClientTypes.Vc3Telecine? - /// Specify the VC3 class to choose the quality characteristics for this output. VC3 class, together with the settings Framerate (framerateNumerator and framerateDenominator) and Resolution (height and width), determine your output bitrate. For example, say that your video resolution is 1920x1080 and your framerate is 29.97. Then Class 145 (CLASS_145) gives you an output with a bitrate of approximately 145 Mbps and Class 220 (CLASS_220) gives you and output with a bitrate of approximately 220 Mbps. VC3 class also specifies the color bit depth of your output. + /// Specify the VC3 class to choose the quality characteristics for this output. VC3 class, together with the settings Framerate (framerateNumerator and framerateDenominator) and Resolution (height and width), determine your output bitrate. For example, say that your video resolution is 1920x1080 and your framerate is 29.97. Then Class 145 gives you an output with a bitrate of approximately 145 Mbps and Class 220 gives you and output with a bitrate of approximately 220 Mbps. VC3 class also specifies the color bit depth of your output. public var vc3Class: MediaConvertClientTypes.Vc3Class? public init( @@ -32289,7 +32313,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output by relabeling the video frames and resampling your audio. Note that enabling this setting will slightly reduce the duration of your video. Related settings: You must also set Framerate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output by relabeling the video frames and resampling your audio. Note that enabling this setting will slightly reduce the duration of your video. Related settings: You must also set Framerate to 25. public enum Vc3SlowPal: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -32322,7 +32346,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine (HARD) to create a smoother picture. When you keep the default value, None (NONE), MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. + /// When you do frame rate conversion from 23.976 frames per second (fps) to 29.97 fps, and your output scan type is interlaced, you can optionally enable hard telecine to create a smoother picture. When you keep the default value, None, MediaConvert does a standard frame rate conversion to 29.97 without doing anything with the field polarity to create a smoother picture. public enum Vc3Telecine: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case hard case `none` @@ -32536,7 +32560,7 @@ extension MediaConvertClientTypes.VideoCodecSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Video codec settings, (CodecSettings) under (VideoDescription), contains the group of settings related to video encoding. The settings in this group vary depending on the value that you choose for Video codec (Codec). For each codec enum that you choose, define the corresponding settings object. The following lists the codec enum, settings object pairs. * AV1, Av1Settings * AVC_INTRA, AvcIntraSettings * FRAME_CAPTURE, FrameCaptureSettings * H_264, H264Settings * H_265, H265Settings * MPEG2, Mpeg2Settings * PRORES, ProresSettings * VC3, Vc3Settings * VP8, Vp8Settings * VP9, Vp9Settings * XAVC, XavcSettings + /// Video codec settings contains the group of settings related to video encoding. The settings in this group vary depending on the value that you choose for Video codec. For each codec enum that you choose, define the corresponding settings object. The following lists the codec enum, settings object pairs. * AV1, Av1Settings * AVC_INTRA, AvcIntraSettings * FRAME_CAPTURE, FrameCaptureSettings * H_264, H264Settings * H_265, H265Settings * MPEG2, Mpeg2Settings * PRORES, ProresSettings * VC3, Vc3Settings * VP8, Vp8Settings * VP9, Vp9Settings * XAVC, XavcSettings public struct VideoCodecSettings: Swift.Equatable { /// Required when you set Codec, under VideoDescription>CodecSettings to the value AV1. public var av1Settings: MediaConvertClientTypes.Av1Settings? @@ -32544,23 +32568,23 @@ extension MediaConvertClientTypes { public var avcIntraSettings: MediaConvertClientTypes.AvcIntraSettings? /// Specifies the video codec. This must be equal to one of the enum values defined by the object VideoCodec. To passthrough the video stream of your input JPEG2000, VC-3, AVC-INTRA or Apple ProRes video without any video encoding: Choose Passthrough. If you have multiple input videos, note that they must have identical encoding attributes. When you choose Passthrough, your output container must be MXF or QuickTime MOV. public var codec: MediaConvertClientTypes.VideoCodec? - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value FRAME_CAPTURE. + /// Required when you set Codec to the value FRAME_CAPTURE. public var frameCaptureSettings: MediaConvertClientTypes.FrameCaptureSettings? - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value H_264. + /// Required when you set Codec to the value H_264. public var h264Settings: MediaConvertClientTypes.H264Settings? /// Settings for H265 codec public var h265Settings: MediaConvertClientTypes.H265Settings? - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value MPEG2. + /// Required when you set Codec to the value MPEG2. public var mpeg2Settings: MediaConvertClientTypes.Mpeg2Settings? - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value PRORES. + /// Required when you set Codec to the value PRORES. public var proresSettings: MediaConvertClientTypes.ProresSettings? - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value VC3 + /// Required when you set Codec to the value VC3 public var vc3Settings: MediaConvertClientTypes.Vc3Settings? - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value VP8. + /// Required when you set Codec to the value VP8. public var vp8Settings: MediaConvertClientTypes.Vp8Settings? - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value VP9. + /// Required when you set Codec to the value VP9. public var vp9Settings: MediaConvertClientTypes.Vp9Settings? - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value XAVC. + /// Required when you set Codec to the value XAVC. public var xavcSettings: MediaConvertClientTypes.XavcSettings? public init( @@ -32699,35 +32723,35 @@ extension MediaConvertClientTypes.VideoDescription: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to video encoding of your output. The specific video settings depend on the video codec that you choose. When you work directly in your JSON job specification, include one instance of Video description (VideoDescription) per output. + /// Settings related to video encoding of your output. The specific video settings depend on the video codec that you choose. public struct VideoDescription: Swift.Equatable { - /// This setting only applies to H.264, H.265, and MPEG2 outputs. Use Insert AFD signaling (AfdSignaling) to specify whether the service includes AFD values in the output video data and what those values are. * Choose None to remove all AFD values from this output. * Choose Fixed to ignore input AFD values and instead encode the value specified in the job. * Choose Auto to calculate output AFD values based on the input AFD scaler data. + /// This setting only applies to H.264, H.265, and MPEG2 outputs. Use Insert AFD signaling to specify whether the service includes AFD values in the output video data and what those values are. * Choose None to remove all AFD values from this output. * Choose Fixed to ignore input AFD values and instead encode the value specified in the job. * Choose Auto to calculate output AFD values based on the input AFD scaler data. public var afdSignaling: MediaConvertClientTypes.AfdSignaling? /// The anti-alias filter is automatically applied to all outputs. The service no longer accepts the value DISABLED for AntiAlias. If you specify that in your job, the service will ignore the setting. public var antiAlias: MediaConvertClientTypes.AntiAlias? - /// Video codec settings, (CodecSettings) under (VideoDescription), contains the group of settings related to video encoding. The settings in this group vary depending on the value that you choose for Video codec (Codec). For each codec enum that you choose, define the corresponding settings object. The following lists the codec enum, settings object pairs. * AV1, Av1Settings * AVC_INTRA, AvcIntraSettings * FRAME_CAPTURE, FrameCaptureSettings * H_264, H264Settings * H_265, H265Settings * MPEG2, Mpeg2Settings * PRORES, ProresSettings * VC3, Vc3Settings * VP8, Vp8Settings * VP9, Vp9Settings * XAVC, XavcSettings + /// Video codec settings contains the group of settings related to video encoding. The settings in this group vary depending on the value that you choose for Video codec. For each codec enum that you choose, define the corresponding settings object. The following lists the codec enum, settings object pairs. * AV1, Av1Settings * AVC_INTRA, AvcIntraSettings * FRAME_CAPTURE, FrameCaptureSettings * H_264, H264Settings * H_265, H265Settings * MPEG2, Mpeg2Settings * PRORES, ProresSettings * VC3, Vc3Settings * VP8, Vp8Settings * VP9, Vp9Settings * XAVC, XavcSettings public var codecSettings: MediaConvertClientTypes.VideoCodecSettings? - /// Choose Insert (INSERT) for this setting to include color metadata in this output. Choose Ignore (IGNORE) to exclude color metadata from this output. If you don't specify a value, the service sets this to Insert by default. + /// Choose Insert for this setting to include color metadata in this output. Choose Ignore to exclude color metadata from this output. If you don't specify a value, the service sets this to Insert by default. public var colorMetadata: MediaConvertClientTypes.ColorMetadata? - /// Use Cropping selection (crop) to specify the video area that the service will include in the output video frame. + /// Use Cropping selection to specify the video area that the service will include in the output video frame. public var crop: MediaConvertClientTypes.Rectangle? - /// Applies only to 29.97 fps outputs. When this feature is enabled, the service will use drop-frame timecode on outputs. If it is not possible to use drop-frame timecode, the system will fall back to non-drop-frame. This setting is enabled by default when Timecode insertion (TimecodeInsertion) is enabled. + /// Applies only to 29.97 fps outputs. When this feature is enabled, the service will use drop-frame timecode on outputs. If it is not possible to use drop-frame timecode, the system will fall back to non-drop-frame. This setting is enabled by default when Timecode insertion is enabled. public var dropFrameTimecode: MediaConvertClientTypes.DropFrameTimecode? - /// Applies only if you set AFD Signaling(AfdSignaling) to Fixed (FIXED). Use Fixed (FixedAfd) to specify a four-bit AFD value which the service will write on all frames of this video output. + /// Applies only if you set AFD Signaling to Fixed. Use Fixed to specify a four-bit AFD value which the service will write on all frames of this video output. public var fixedAfd: Swift.Int? /// Use Height to define the video resolution height, in pixels, for this output. To use the same resolution as your input: Leave both Width and Height blank. To evenly scale from your input resolution: Leave Height blank and enter a value for Width. For example, if your input is 1920x1080 and you set Width to 1280, your output will be 1280x720. public var height: Swift.Int? - /// Use Selection placement (position) to define the video area in your output frame. The area outside of the rectangle that you specify here is black. + /// Use Selection placement to define the video area in your output frame. The area outside of the rectangle that you specify here is black. public var position: MediaConvertClientTypes.Rectangle? - /// Use Respond to AFD (RespondToAfd) to specify how the service changes the video itself in response to AFD values in the input. * Choose Respond to clip the input video frame according to the AFD value, input display aspect ratio, and output display aspect ratio. * Choose Passthrough to include the input AFD values. Do not choose this when AfdSignaling is set to (NONE). A preferred implementation of this workflow is to set RespondToAfd to (NONE) and set AfdSignaling to (AUTO). * Choose None to remove all input AFD values from this output. + /// Use Respond to AFD to specify how the service changes the video itself in response to AFD values in the input. * Choose Respond to clip the input video frame according to the AFD value, input display aspect ratio, and output display aspect ratio. * Choose Passthrough to include the input AFD values. Do not choose this when AfdSignaling is set to NONE. A preferred implementation of this workflow is to set RespondToAfd to and set AfdSignaling to AUTO. * Choose None to remove all input AFD values from this output. public var respondToAfd: MediaConvertClientTypes.RespondToAfd? - /// Specify how the service handles outputs that have a different aspect ratio from the input aspect ratio. Choose Stretch to output (STRETCH_TO_OUTPUT) to have the service stretch your video image to fit. Keep the setting Default (DEFAULT) to have the service letterbox your video instead. This setting overrides any value that you specify for the setting Selection placement (position) in this output. + /// Specify how the service handles outputs that have a different aspect ratio from the input aspect ratio. Choose Stretch to output to have the service stretch your video image to fit. Keep the setting Default to have the service letterbox your video instead. This setting overrides any value that you specify for the setting Selection placement in this output. public var scalingBehavior: MediaConvertClientTypes.ScalingBehavior? - /// Use Sharpness (Sharpness) setting to specify the strength of anti-aliasing. This setting changes the width of the anti-alias filter kernel used for scaling. Sharpness only applies if your output resolution is different from your input resolution. 0 is the softest setting, 100 the sharpest, and 50 recommended for most content. + /// Use Sharpness setting to specify the strength of anti-aliasing. This setting changes the width of the anti-alias filter kernel used for scaling. Sharpness only applies if your output resolution is different from your input resolution. 0 is the softest setting, 100 the sharpest, and 50 recommended for most content. public var sharpness: Swift.Int? - /// Applies only to H.264, H.265, MPEG2, and ProRes outputs. Only enable Timecode insertion when the input frame rate is identical to the output frame rate. To include timecodes in this output, set Timecode insertion (VideoTimecodeInsertion) to PIC_TIMING_SEI. To leave them out, set it to DISABLED. Default is DISABLED. When the service inserts timecodes in an output, by default, it uses any embedded timecodes from the input. If none are present, the service will set the timecode for the first output frame to zero. To change this default behavior, adjust the settings under Timecode configuration (TimecodeConfig). In the console, these settings are located under Job > Job settings > Timecode configuration. Note - Timecode source under input settings (InputTimecodeSource) does not affect the timecodes that are inserted in the output. Source under Job settings > Timecode configuration (TimecodeSource) does. + /// Applies only to H.264, H.265, MPEG2, and ProRes outputs. Only enable Timecode insertion when the input frame rate is identical to the output frame rate. To include timecodes in this output, set Timecode insertion to PIC_TIMING_SEI. To leave them out, set it to DISABLED. Default is DISABLED. When the service inserts timecodes in an output, by default, it uses any embedded timecodes from the input. If none are present, the service will set the timecode for the first output frame to zero. To change this default behavior, adjust the settings under Timecode configuration. In the console, these settings are located under Job > Job settings > Timecode configuration. Note - Timecode source under input settings does not affect the timecodes that are inserted in the output. Source under Job settings > Timecode configuration does. public var timecodeInsertion: MediaConvertClientTypes.VideoTimecodeInsertion? - /// Find additional transcoding features under Preprocessors (VideoPreprocessors). Enable the features at each output individually. These features are disabled by default. + /// Find additional transcoding features under Preprocessors. Enable the features at each output individually. These features are disabled by default. public var videoPreprocessors: MediaConvertClientTypes.VideoPreprocessor? /// Use Width to define the video resolution width, in pixels, for this output. To use the same resolution as your input: Leave both Width and Height blank. To evenly scale from your input resolution: Leave Width blank and enter a value for Height. For example, if your input is 1920x1080 and you set Height to 720, your output will be 1280x720. public var width: Swift.Int? @@ -32877,7 +32901,7 @@ extension MediaConvertClientTypes.VideoPreprocessor: Swift.Codable { } extension MediaConvertClientTypes { - /// Find additional transcoding features under Preprocessors (VideoPreprocessors). Enable the features at each output individually. These features are disabled by default. + /// Find additional transcoding features under Preprocessors. Enable the features at each output individually. These features are disabled by default. public struct VideoPreprocessor: Swift.Equatable { /// Use these settings to convert the color space or to modify properties such as hue and contrast for this output. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/converting-the-color-space.html. public var colorCorrector: MediaConvertClientTypes.ColorCorrector? @@ -32887,7 +32911,7 @@ extension MediaConvertClientTypes { public var dolbyVision: MediaConvertClientTypes.DolbyVision? /// Enable HDR10+ analysis and metadata injection. Compatible with HEVC only. public var hdr10Plus: MediaConvertClientTypes.Hdr10Plus? - /// Enable the Image inserter (ImageInserter) feature to include a graphic overlay on your video. Enable or disable this feature for each output individually. This setting is disabled by default. + /// Enable the Image inserter feature to include a graphic overlay on your video. Enable or disable this feature for each output individually. This setting is disabled by default. public var imageInserter: MediaConvertClientTypes.ImageInserter? /// Enable the Noise reducer feature to remove noise from your video output if necessary. Enable or disable this feature for each output individually. This setting is disabled by default. When you enable Noise reducer, you must also select a value for Noise reducer filter. For AVC outputs, when you include Noise reducer, you cannot include the Bandwidth reduction filter. public var noiseReducer: MediaConvertClientTypes.NoiseReducer? @@ -33010,21 +33034,21 @@ extension MediaConvertClientTypes { /// /// * P3D65 (HDR): Display P3, PQ, BT.709 public var colorSpace: MediaConvertClientTypes.ColorSpace? - /// There are two sources for color metadata, the input file and the job input settings Color space (ColorSpace) and HDR master display information settings(Hdr10Metadata). The Color space usage setting determines which takes precedence. Choose Force (FORCE) to use color metadata from the input job settings. If you don't specify values for those settings, the service defaults to using metadata from your input. FALLBACK - Choose Fallback (FALLBACK) to use color metadata from the source when it is present. If there's no color metadata in your input file, the service defaults to using values you specify in the input settings. + /// There are two sources for color metadata, the input file and the job input settings Color space and HDR master display information settings. The Color space usage setting determines which takes precedence. Choose Force to use color metadata from the input job settings. If you don't specify values for those settings, the service defaults to using metadata from your input. FALLBACK - Choose Fallback to use color metadata from the source when it is present. If there's no color metadata in your input file, the service defaults to using values you specify in the input settings. public var colorSpaceUsage: MediaConvertClientTypes.ColorSpaceUsage? - /// Set Embedded timecode override (embeddedTimecodeOverride) to Use MDPM (USE_MDPM) when your AVCHD input contains timecode tag data in the Modified Digital Video Pack Metadata (MDPM). When you do, we recommend you also set Timecode source (inputTimecodeSource) to Embedded (EMBEDDED). Leave Embedded timecode override blank, or set to None (NONE), when your input does not contain MDPM timecode. + /// Set Embedded timecode override to Use MDPM when your AVCHD input contains timecode tag data in the Modified Digital Video Pack Metadata. When you do, we recommend you also set Timecode source to Embedded. Leave Embedded timecode override blank, or set to None, when your input does not contain MDPM timecode. public var embeddedTimecodeOverride: MediaConvertClientTypes.EmbeddedTimecodeOverride? - /// Use these settings to provide HDR 10 metadata that is missing or inaccurate in your input video. Appropriate values vary depending on the input video and must be provided by a color grader. The color grader generates these values during the HDR 10 mastering process. The valid range for each of these settings is 0 to 50,000. Each increment represents 0.00002 in CIE1931 color coordinate. Related settings - When you specify these values, you must also set Color space (ColorSpace) to HDR 10 (HDR10). To specify whether the the values you specify here take precedence over the values in the metadata of your input file, set Color space usage (ColorSpaceUsage). To specify whether color metadata is included in an output, set Color metadata (ColorMetadata). For more information about MediaConvert HDR jobs, see https://docs.aws.amazon.com/console/mediaconvert/hdr. + /// Use these settings to provide HDR 10 metadata that is missing or inaccurate in your input video. Appropriate values vary depending on the input video and must be provided by a color grader. The color grader generates these values during the HDR 10 mastering process. The valid range for each of these settings is 0 to 50,000. Each increment represents 0.00002 in CIE1931 color coordinate. Related settings - When you specify these values, you must also set Color space to HDR 10. To specify whether the the values you specify here take precedence over the values in the metadata of your input file, set Color space usage. To specify whether color metadata is included in an output, set Color metadata. For more information about MediaConvert HDR jobs, see https://docs.aws.amazon.com/console/mediaconvert/hdr. public var hdr10Metadata: MediaConvertClientTypes.Hdr10Metadata? - /// Use this setting if your input has video and audio durations that don't align, and your output or player has strict alignment requirements. Examples: Input audio track has a delayed start. Input video track ends before audio ends. When you set Pad video (padVideo) to Black (BLACK), MediaConvert generates black video frames so that output video and audio durations match. Black video frames are added at the beginning or end, depending on your input. To keep the default behavior and not generate black video, set Pad video to Disabled (DISABLED) or leave blank. + /// Use this setting if your input has video and audio durations that don't align, and your output or player has strict alignment requirements. Examples: Input audio track has a delayed start. Input video track ends before audio ends. When you set Pad video to Black, MediaConvert generates black video frames so that output video and audio durations match. Black video frames are added at the beginning or end, depending on your input. To keep the default behavior and not generate black video, set Pad video to Disabled or leave blank. public var padVideo: MediaConvertClientTypes.PadVideo? - /// Use PID (Pid) to select specific video data from an input file. Specify this value as an integer; the system automatically converts it to the hexidecimal value. For example, 257 selects PID 0x101. A PID, or packet identifier, is an identifier for a set of data in an MPEG-2 transport stream container. + /// Use PID to select specific video data from an input file. Specify this value as an integer; the system automatically converts it to the hexidecimal value. For example, 257 selects PID 0x101. A PID, or packet identifier, is an identifier for a set of data in an MPEG-2 transport stream container. public var pid: Swift.Int? /// Selects a specific program from within a multi-program transport stream. Note that Quad 4K is not currently supported. public var programNumber: Swift.Int? - /// Use Rotate (InputRotate) to specify how the service rotates your video. You can choose automatic rotation or specify a rotation. You can specify a clockwise rotation of 0, 90, 180, or 270 degrees. If your input video container is .mov or .mp4 and your input has rotation metadata, you can choose Automatic to have the service rotate your video according to the rotation specified in the metadata. The rotation must be within one degree of 90, 180, or 270 degrees. If the rotation metadata specifies any other rotation, the service will default to no rotation. By default, the service does no rotation, even if your input video has rotation metadata. The service doesn't pass through rotation metadata. + /// Use Rotate to specify how the service rotates your video. You can choose automatic rotation or specify a rotation. You can specify a clockwise rotation of 0, 90, 180, or 270 degrees. If your input video container is .mov or .mp4 and your input has rotation metadata, you can choose Automatic to have the service rotate your video according to the rotation specified in the metadata. The rotation must be within one degree of 90, 180, or 270 degrees. If the rotation metadata specifies any other rotation, the service will default to no rotation. By default, the service does no rotation, even if your input video has rotation metadata. The service doesn't pass through rotation metadata. public var rotate: MediaConvertClientTypes.InputRotate? - /// If the sample range metadata in your input video is accurate, or if you don't know about sample range, keep the default value, Follow (FOLLOW), for this setting. When you do, the service automatically detects your input sample range. If your input video has metadata indicating the wrong sample range, specify the accurate sample range here. When you do, MediaConvert ignores any sample range information in the input metadata. Regardless of whether MediaConvert uses the input sample range or the sample range that you specify, MediaConvert uses the sample range for transcoding and also writes it to the output metadata. + /// If the sample range metadata in your input video is accurate, or if you don't know about sample range, keep the default value, Follow, for this setting. When you do, the service automatically detects your input sample range. If your input video has metadata indicating the wrong sample range, specify the accurate sample range here. When you do, MediaConvert ignores any sample range information in the input metadata. Regardless of whether MediaConvert uses the input sample range or the sample range that you specify, MediaConvert uses the sample range for transcoding and also writes it to the output metadata. public var sampleRange: MediaConvertClientTypes.InputSampleRange? public init( @@ -33056,7 +33080,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Applies only to H.264, H.265, MPEG2, and ProRes outputs. Only enable Timecode insertion when the input frame rate is identical to the output frame rate. To include timecodes in this output, set Timecode insertion (VideoTimecodeInsertion) to PIC_TIMING_SEI. To leave them out, set it to DISABLED. Default is DISABLED. When the service inserts timecodes in an output, by default, it uses any embedded timecodes from the input. If none are present, the service will set the timecode for the first output frame to zero. To change this default behavior, adjust the settings under Timecode configuration (TimecodeConfig). In the console, these settings are located under Job > Job settings > Timecode configuration. Note - Timecode source under input settings (InputTimecodeSource) does not affect the timecodes that are inserted in the output. Source under Job settings > Timecode configuration (TimecodeSource) does. + /// Applies only to H.264, H.265, MPEG2, and ProRes outputs. Only enable Timecode insertion when the input frame rate is identical to the output frame rate. To include timecodes in this output, set Timecode insertion to PIC_TIMING_SEI. To leave them out, set it to DISABLED. Default is DISABLED. When the service inserts timecodes in an output, by default, it uses any embedded timecodes from the input. If none are present, the service will set the timecode for the first output frame to zero. To change this default behavior, adjust the settings under Timecode configuration. In the console, these settings are located under Job > Job settings > Timecode configuration. Note - Timecode source under input settings does not affect the timecodes that are inserted in the output. Source under Job settings > Timecode configuration does. public enum VideoTimecodeInsertion: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case picTimingSei @@ -33144,7 +33168,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public enum Vp8FramerateControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -33213,7 +33237,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source (INITIALIZE_FROM_SOURCE), uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. To specify a different PAR by editing the JSON job specification, choose SPECIFIED. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. + /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. public enum Vp8ParControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -33246,7 +33270,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, multi-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, multi-pass encoding. public enum Vp8QualityTuningLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case multiPass case multiPassHq @@ -33400,11 +33424,11 @@ extension MediaConvertClientTypes.Vp8Settings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value VP8. + /// Required when you set Codec to the value VP8. public struct Vp8Settings: Swift.Equatable { /// Target bitrate in bits/second. For example, enter five megabits per second as 5000000. public var bitrate: Swift.Int? - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public var framerateControl: MediaConvertClientTypes.Vp8FramerateControl? /// Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. public var framerateConversionAlgorithm: MediaConvertClientTypes.Vp8FramerateConversionAlgorithm? @@ -33418,13 +33442,13 @@ extension MediaConvertClientTypes { public var hrdBufferSize: Swift.Int? /// Ignore this setting unless you set qualityTuningLevel to MULTI_PASS. Optional. Specify the maximum bitrate in bits/second. For example, enter five megabits per second as 5000000. The default behavior uses twice the target bitrate as the maximum bitrate. public var maxBitrate: Swift.Int? - /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source (INITIALIZE_FROM_SOURCE), uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. To specify a different PAR by editing the JSON job specification, choose SPECIFIED. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. + /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. public var parControl: MediaConvertClientTypes.Vp8ParControl? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. public var parDenominator: Swift.Int? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. public var parNumerator: Swift.Int? - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, multi-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, multi-pass encoding. public var qualityTuningLevel: MediaConvertClientTypes.Vp8QualityTuningLevel? /// With the VP8 codec, you can use only the variable bitrate (VBR) rate control mode. public var rateControlMode: MediaConvertClientTypes.Vp8RateControlMode? @@ -33464,7 +33488,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public enum Vp9FramerateControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -33533,7 +33557,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source (INITIALIZE_FROM_SOURCE), uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. To specify a different PAR by editing the JSON job specification, choose SPECIFIED. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. + /// Optional. Specify how the service determines the pixel aspect ratio (PAR) for this output. The default behavior, Follow source, uses the PAR from your input video for your output. To specify a different PAR in the console, choose any value other than Follow source. When you choose SPECIFIED for this setting, you must also specify values for the parNumerator and parDenominator settings. public enum Vp9ParControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -33566,7 +33590,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, multi-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, multi-pass encoding. public enum Vp9QualityTuningLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case multiPass case multiPassHq @@ -33720,11 +33744,11 @@ extension MediaConvertClientTypes.Vp9Settings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value VP9. + /// Required when you set Codec to the value VP9. public struct Vp9Settings: Swift.Equatable { /// Target bitrate in bits/second. For example, enter five megabits per second as 5000000. public var bitrate: Swift.Int? - /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Framerate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list or choose Custom. The framerates shown in the dropdown list are decimal approximations of fractions. If you choose Custom, specify your frame rate as a fraction. public var framerateControl: MediaConvertClientTypes.Vp9FramerateControl? /// Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. public var framerateConversionAlgorithm: MediaConvertClientTypes.Vp9FramerateConversionAlgorithm? @@ -33740,11 +33764,11 @@ extension MediaConvertClientTypes { public var maxBitrate: Swift.Int? /// Optional. Specify how the service determines the pixel aspect ratio for this output. The default behavior is to use the same pixel aspect ratio as your input video. public var parControl: MediaConvertClientTypes.Vp9ParControl? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parDenominator is 33. public var parDenominator: Swift.Int? - /// Required when you set Pixel aspect ratio (parControl) to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. + /// Required when you set Pixel aspect ratio to SPECIFIED. On the console, this corresponds to any value other than Follow source. When you specify an output pixel aspect ratio (PAR) that is different from your input video PAR, provide your output PAR as a ratio. For example, for D1/DV NTSC widescreen, you would specify the ratio 40:33. In this example, the value for parNumerator is 40. public var parNumerator: Swift.Int? - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, multi-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, multi-pass encoding. public var qualityTuningLevel: MediaConvertClientTypes.Vp9QualityTuningLevel? /// With the VP9 codec, you can use only the variable bitrate (VBR) rate control mode. public var rateControlMode: MediaConvertClientTypes.Vp9RateControlMode? @@ -33943,9 +33967,9 @@ extension MediaConvertClientTypes.WavSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (AudioDescriptions)>(CodecSettings) to the value WAV. + /// Required when you set Codec to the value WAV. public struct WavSettings: Swift.Equatable { - /// Specify Bit depth (BitDepth), in bits per sample, to choose the encoding quality for this audio track. + /// Specify Bit depth, in bits per sample, to choose the encoding quality for this audio track. public var bitDepth: Swift.Int? /// Specify the number of channels in this output audio track. Valid values are 1 and even numbers up to 64. For example, 1, 2, 4, 6, and so on, up to 64. public var channels: Swift.Int? @@ -34029,11 +34053,11 @@ extension MediaConvertClientTypes.WebvttDestinationSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Settings related to WebVTT captions. WebVTT is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. When you work directly in your JSON job specification, include this object and any required children when you set destinationType to WebVTT. + /// Settings related to WebVTT captions. WebVTT is a sidecar format that holds captions in a file that is separate from the video container. Set up sidecar captions in the same output group, but different output from your video. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/ttml-and-webvtt-output-captions.html. public struct WebvttDestinationSettings: Swift.Equatable { /// If the WebVTT captions track is intended to provide accessibility for people who are deaf or hard of hearing: Set Accessibility subtitles to Enabled. When you do, MediaConvert adds accessibility attributes to your output HLS or DASH manifest. For HLS manifests, MediaConvert adds the following accessibility attributes under EXT-X-MEDIA for this track: CHARACTERISTICS="public.accessibility.describes-spoken-dialog,public.accessibility.describes-music-and-sound" and AUTOSELECT="YES". For DASH manifests, MediaConvert adds the following in the adaptation set for this track: . If the captions track is not intended to provide such accessibility: Keep the default value, Disabled. When you do, for DASH manifests, MediaConvert instead adds the following in the adaptation set for this track: . public var accessibility: MediaConvertClientTypes.WebvttAccessibilitySubs? - /// To use the available style, color, and position information from your input captions: Set Style passthrough (stylePassthrough) to Enabled (ENABLED). MediaConvert uses default settings when style and position information is missing from your input captions. To recreate the input captions exactly: Set Style passthrough to Strict (STRICT). MediaConvert automatically applies timing adjustments, including adjustments for frame rate conversion, ad avails, and input clipping. Your input captions format must be WebVTT. To ignore the style and position information from your input captions and use simplified output captions: Set Style passthrough to Disabled (DISABLED), or leave blank. + /// To use the available style, color, and position information from your input captions: Set Style passthrough to Enabled. MediaConvert uses default settings when style and position information is missing from your input captions. To recreate the input captions exactly: Set Style passthrough to Strict. MediaConvert automatically applies timing adjustments, including adjustments for frame rate conversion, ad avails, and input clipping. Your input captions format must be WebVTT. To ignore the style and position information from your input captions and use simplified output captions: Set Style passthrough to Disabled, or leave blank. public var stylePassthrough: MediaConvertClientTypes.WebvttStylePassthrough? public init( @@ -34104,7 +34128,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// To use the available style, color, and position information from your input captions: Set Style passthrough (stylePassthrough) to Enabled (ENABLED). MediaConvert uses default settings when style and position information is missing from your input captions. To recreate the input captions exactly: Set Style passthrough to Strict (STRICT). MediaConvert automatically applies timing adjustments, including adjustments for frame rate conversion, ad avails, and input clipping. Your input captions format must be WebVTT. To ignore the style and position information from your input captions and use simplified output captions: Set Style passthrough to Disabled (DISABLED), or leave blank. + /// To use the available style, color, and position information from your input captions: Set Style passthrough to Enabled. MediaConvert uses default settings when style and position information is missing from your input captions. To recreate the input captions exactly: Set Style passthrough to Strict. MediaConvert automatically applies timing adjustments, including adjustments for frame rate conversion, ad avails, and input clipping. Your input captions format must be WebVTT. To ignore the style and position information from your input captions and use simplified output captions: Set Style passthrough to Disabled, or leave blank. public enum WebvttStylePassthrough: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -34195,7 +34219,7 @@ extension MediaConvertClientTypes.Xavc4kIntraCbgProfileSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Profile) under (VideoDescription)>(CodecSettings)>(XavcSettings) to the value XAVC_4K_INTRA_CBG. + /// Required when you set Profile to the value XAVC_4K_INTRA_CBG. public struct Xavc4kIntraCbgProfileSettings: Swift.Equatable { /// Specify the XAVC Intra 4k (CBG) Class to set the bitrate of your output. Outputs of the same class have similar image quality over the operating points that are valid for that class. public var xavcClass: MediaConvertClientTypes.Xavc4kIntraCbgProfileClass? @@ -34266,7 +34290,7 @@ extension MediaConvertClientTypes.Xavc4kIntraVbrProfileSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Profile) under (VideoDescription)>(CodecSettings)>(XavcSettings) to the value XAVC_4K_INTRA_VBR. + /// Required when you set Profile to the value XAVC_4K_INTRA_VBR. public struct Xavc4kIntraVbrProfileSettings: Swift.Equatable { /// Specify the XAVC Intra 4k (VBR) Class to set the bitrate of your output. Outputs of the same class have similar image quality over the operating points that are valid for that class. public var xavcClass: MediaConvertClientTypes.Xavc4kIntraVbrProfileClass? @@ -34351,7 +34375,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. public enum Xavc4kProfileQualityTuningLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case multiPassHq case singlePass @@ -34448,21 +34472,21 @@ extension MediaConvertClientTypes.Xavc4kProfileSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Profile) under (VideoDescription)>(CodecSettings)>(XavcSettings) to the value XAVC_4K. + /// Required when you set Profile to the value XAVC_4K. public struct Xavc4kProfileSettings: Swift.Equatable { /// Specify the XAVC 4k (Long GOP) Bitrate Class to set the bitrate of your output. Outputs of the same class have similar image quality over the operating points that are valid for that class. public var bitrateClass: MediaConvertClientTypes.Xavc4kProfileBitrateClass? /// Specify the codec profile for this output. Choose High, 8-bit, 4:2:0 (HIGH) or High, 10-bit, 4:2:2 (HIGH_422). These profiles are specified in ITU-T H.264. public var codecProfile: MediaConvertClientTypes.Xavc4kProfileCodecProfile? - /// The best way to set up adaptive quantization is to keep the default value, Auto (AUTO), for the setting Adaptive quantization (XavcAdaptiveQuantization). When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. Enable this setting to have the encoder reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. This setting is disabled by default. Related setting: In addition to enabling this setting, you must also set Adaptive quantization (adaptiveQuantization) to a value other than Off (OFF) or Auto (AUTO). Use Adaptive quantization to adjust the degree of smoothing that Flicker adaptive quantization provides. + /// The best way to set up adaptive quantization is to keep the default value, Auto, for the setting Adaptive quantization. When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. Enable this setting to have the encoder reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. This setting is disabled by default. Related setting: In addition to enabling this setting, you must also set Adaptive quantization to a value other than Off or Auto. Use Adaptive quantization to adjust the degree of smoothing that Flicker adaptive quantization provides. public var flickerAdaptiveQuantization: MediaConvertClientTypes.XavcFlickerAdaptiveQuantization? - /// Specify whether the encoder uses B-frames as reference frames for other pictures in the same GOP. Choose Allow (ENABLED) to allow the encoder to use B-frames as reference frames. Choose Don't allow (DISABLED) to prevent the encoder from using B-frames as reference frames. + /// Specify whether the encoder uses B-frames as reference frames for other pictures in the same GOP. Choose Allow to allow the encoder to use B-frames as reference frames. Choose Don't allow to prevent the encoder from using B-frames as reference frames. public var gopBReference: MediaConvertClientTypes.XavcGopBReference? /// Frequency of closed GOPs. In streaming applications, it is recommended that this be set to 1 so a decoder joining mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break output segmenting. public var gopClosedCadence: Swift.Int? /// Specify the size of the buffer that MediaConvert uses in the HRD buffer model for this output. Specify this value in bits; for example, enter five megabits as 5000000. When you don't set this value, or you set it to zero, MediaConvert calculates the default by doubling the bitrate of this output point. public var hrdBufferSize: Swift.Int? - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. public var qualityTuningLevel: MediaConvertClientTypes.Xavc4kProfileQualityTuningLevel? /// Number of slices per picture. Must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures. public var slices: Swift.Int? @@ -34492,7 +34516,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Keep the default value, Auto (AUTO), for this setting to have MediaConvert automatically apply the best types of quantization for your video content. When you want to apply your quantization settings manually, you must set Adaptive quantization (adaptiveQuantization) to a value other than Auto (AUTO). Use this setting to specify the strength of any adaptive quantization filters that you enable. If you don't want MediaConvert to do any adaptive quantization in this transcode, set Adaptive quantization to Off (OFF). Related settings: The value that you choose here applies to the following settings: Flicker adaptive quantization (flickerAdaptiveQuantization), Spatial adaptive quantization (spatialAdaptiveQuantization), and Temporal adaptive quantization (temporalAdaptiveQuantization). + /// Keep the default value, Auto, for this setting to have MediaConvert automatically apply the best types of quantization for your video content. When you want to apply your quantization settings manually, you must set Adaptive quantization to a value other than Auto. Use this setting to specify the strength of any adaptive quantization filters that you enable. If you don't want MediaConvert to do any adaptive quantization in this transcode, set Adaptive quantization to Off. Related settings: The value that you choose here applies to the following settings: Flicker adaptive quantization (flickerAdaptiveQuantization), Spatial adaptive quantization, and Temporal adaptive quantization. public enum XavcAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case auto case high @@ -34576,7 +34600,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// The best way to set up adaptive quantization is to keep the default value, Auto (AUTO), for the setting Adaptive quantization (XavcAdaptiveQuantization). When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. Enable this setting to have the encoder reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. This setting is disabled by default. Related setting: In addition to enabling this setting, you must also set Adaptive quantization (adaptiveQuantization) to a value other than Off (OFF) or Auto (AUTO). Use Adaptive quantization to adjust the degree of smoothing that Flicker adaptive quantization provides. + /// The best way to set up adaptive quantization is to keep the default value, Auto, for the setting Adaptive quantization. When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. Enable this setting to have the encoder reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. This setting is disabled by default. Related setting: In addition to enabling this setting, you must also set Adaptive quantization to a value other than Off or Auto. Use Adaptive quantization to adjust the degree of smoothing that Flicker adaptive quantization provides. public enum XavcFlickerAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -34609,7 +34633,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// If you are using the console, use the Frame rate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list. The framerates shown in the dropdown list are decimal approximations of fractions. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate that you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Frame rate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list. The framerates shown in the dropdown list are decimal approximations of fractions. public enum XavcFramerateControl: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case initializeFromSource case specified @@ -34678,7 +34702,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Specify whether the encoder uses B-frames as reference frames for other pictures in the same GOP. Choose Allow (ENABLED) to allow the encoder to use B-frames as reference frames. Choose Don't allow (DISABLED) to prevent the encoder from using B-frames as reference frames. + /// Specify whether the encoder uses B-frames as reference frames for other pictures in the same GOP. Choose Allow to allow the encoder to use B-frames as reference frames. Choose Don't allow to prevent the encoder from using B-frames as reference frames. public enum XavcGopBReference: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -34766,7 +34790,7 @@ extension MediaConvertClientTypes.XavcHdIntraCbgProfileSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Profile) under (VideoDescription)>(CodecSettings)>(XavcSettings) to the value XAVC_HD_INTRA_CBG. + /// Required when you set Profile to the value XAVC_HD_INTRA_CBG. public struct XavcHdIntraCbgProfileSettings: Swift.Equatable { /// Specify the XAVC Intra HD (CBG) Class to set the bitrate of your output. Outputs of the same class have similar image quality over the operating points that are valid for that class. public var xavcClass: MediaConvertClientTypes.XavcHdIntraCbgProfileClass? @@ -34818,7 +34842,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. public enum XavcHdProfileQualityTuningLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case multiPassHq case singlePass @@ -34921,25 +34945,25 @@ extension MediaConvertClientTypes.XavcHdProfileSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Profile) under (VideoDescription)>(CodecSettings)>(XavcSettings) to the value XAVC_HD. + /// Required when you set Profile to the value XAVC_HD. public struct XavcHdProfileSettings: Swift.Equatable { /// Specify the XAVC HD (Long GOP) Bitrate Class to set the bitrate of your output. Outputs of the same class have similar image quality over the operating points that are valid for that class. public var bitrateClass: MediaConvertClientTypes.XavcHdProfileBitrateClass? - /// The best way to set up adaptive quantization is to keep the default value, Auto (AUTO), for the setting Adaptive quantization (XavcAdaptiveQuantization). When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. Enable this setting to have the encoder reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. This setting is disabled by default. Related setting: In addition to enabling this setting, you must also set Adaptive quantization (adaptiveQuantization) to a value other than Off (OFF) or Auto (AUTO). Use Adaptive quantization to adjust the degree of smoothing that Flicker adaptive quantization provides. + /// The best way to set up adaptive quantization is to keep the default value, Auto, for the setting Adaptive quantization. When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. Enable this setting to have the encoder reduce I-frame pop. I-frame pop appears as a visual flicker that can arise when the encoder saves bits by copying some macroblocks many times from frame to frame, and then refreshes them at the I-frame. When you enable this setting, the encoder updates these macroblocks slightly more often to smooth out the flicker. This setting is disabled by default. Related setting: In addition to enabling this setting, you must also set Adaptive quantization to a value other than Off or Auto. Use Adaptive quantization to adjust the degree of smoothing that Flicker adaptive quantization provides. public var flickerAdaptiveQuantization: MediaConvertClientTypes.XavcFlickerAdaptiveQuantization? - /// Specify whether the encoder uses B-frames as reference frames for other pictures in the same GOP. Choose Allow (ENABLED) to allow the encoder to use B-frames as reference frames. Choose Don't allow (DISABLED) to prevent the encoder from using B-frames as reference frames. + /// Specify whether the encoder uses B-frames as reference frames for other pictures in the same GOP. Choose Allow to allow the encoder to use B-frames as reference frames. Choose Don't allow to prevent the encoder from using B-frames as reference frames. public var gopBReference: MediaConvertClientTypes.XavcGopBReference? /// Frequency of closed GOPs. In streaming applications, it is recommended that this be set to 1 so a decoder joining mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break output segmenting. public var gopClosedCadence: Swift.Int? /// Specify the size of the buffer that MediaConvert uses in the HRD buffer model for this output. Specify this value in bits; for example, enter five megabits as 5000000. When you don't set this value, or you set it to zero, MediaConvert calculates the default by doubling the bitrate of this output point. public var hrdBufferSize: Swift.Int? - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public var interlaceMode: MediaConvertClientTypes.XavcInterlaceMode? - /// Optional. Use Quality tuning level (qualityTuningLevel) to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. + /// Optional. Use Quality tuning level to choose how you want to trade off encoding speed for output video quality. The default behavior is faster, lower quality, single-pass encoding. public var qualityTuningLevel: MediaConvertClientTypes.XavcHdProfileQualityTuningLevel? /// Number of slices per picture. Must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures. public var slices: Swift.Int? - /// Ignore this setting unless you set Frame rate (framerateNumerator divided by framerateDenominator) to 29.970. If your input framerate is 23.976, choose Hard (HARD). Otherwise, keep the default value None (NONE). For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/working-with-telecine-and-inverse-telecine.html. + /// Ignore this setting unless you set Frame rate (framerateNumerator divided by framerateDenominator) to 29.970. If your input framerate is 23.976, choose Hard. Otherwise, keep the default value None. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/working-with-telecine-and-inverse-telecine.html. public var telecine: MediaConvertClientTypes.XavcHdProfileTelecine? public init( @@ -34969,7 +34993,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless you set Frame rate (framerateNumerator divided by framerateDenominator) to 29.970. If your input framerate is 23.976, choose Hard (HARD). Otherwise, keep the default value None (NONE). For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/working-with-telecine-and-inverse-telecine.html. + /// Ignore this setting unless you set Frame rate (framerateNumerator divided by framerateDenominator) to 29.970. If your input framerate is 23.976, choose Hard. Otherwise, keep the default value None. For more information, see https://docs.aws.amazon.com/mediaconvert/latest/ug/working-with-telecine-and-inverse-telecine.html. public enum XavcHdProfileTelecine: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case hard case `none` @@ -35002,7 +35026,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Choose the scan line type for the output. Keep the default value, Progressive (PROGRESSIVE) to create a progressive output, regardless of the scan type of your input. Use Top field first (TOP_FIELD) or Bottom field first (BOTTOM_FIELD) to create an output that's interlaced with the same field polarity throughout. Use Follow, default top (FOLLOW_TOP_FIELD) or Follow, default bottom (FOLLOW_BOTTOM_FIELD) to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. + /// Choose the scan line type for the output. Keep the default value, Progressive to create a progressive output, regardless of the scan type of your input. Use Top field first or Bottom field first to create an output that's interlaced with the same field polarity throughout. Use Follow, default top or Follow, default bottom to produce outputs with the same field polarity as the source. For jobs that have multiple inputs, the output field polarity might change over the course of the output. Follow behavior depends on the input scan type. If the source is interlaced, the output will be interlaced with the same polarity as the source. If the source is progressive, the output will be interlaced with top field bottom field first, depending on which of the Follow options you choose. public enum XavcInterlaceMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case bottomField case followBottomField @@ -35195,13 +35219,13 @@ extension MediaConvertClientTypes.XavcSettings: Swift.Codable { } extension MediaConvertClientTypes { - /// Required when you set (Codec) under (VideoDescription)>(CodecSettings) to the value XAVC. + /// Required when you set Codec to the value XAVC. public struct XavcSettings: Swift.Equatable { - /// Keep the default value, Auto (AUTO), for this setting to have MediaConvert automatically apply the best types of quantization for your video content. When you want to apply your quantization settings manually, you must set Adaptive quantization (adaptiveQuantization) to a value other than Auto (AUTO). Use this setting to specify the strength of any adaptive quantization filters that you enable. If you don't want MediaConvert to do any adaptive quantization in this transcode, set Adaptive quantization to Off (OFF). Related settings: The value that you choose here applies to the following settings: Flicker adaptive quantization (flickerAdaptiveQuantization), Spatial adaptive quantization (spatialAdaptiveQuantization), and Temporal adaptive quantization (temporalAdaptiveQuantization). + /// Keep the default value, Auto, for this setting to have MediaConvert automatically apply the best types of quantization for your video content. When you want to apply your quantization settings manually, you must set Adaptive quantization to a value other than Auto. Use this setting to specify the strength of any adaptive quantization filters that you enable. If you don't want MediaConvert to do any adaptive quantization in this transcode, set Adaptive quantization to Off. Related settings: The value that you choose here applies to the following settings: Flicker adaptive quantization (flickerAdaptiveQuantization), Spatial adaptive quantization, and Temporal adaptive quantization. public var adaptiveQuantization: MediaConvertClientTypes.XavcAdaptiveQuantization? /// Optional. Choose a specific entropy encoding mode only when you want to override XAVC recommendations. If you choose the value auto, MediaConvert uses the mode that the XAVC file format specifies given this output's operating point. public var entropyEncoding: MediaConvertClientTypes.XavcEntropyEncoding? - /// If you are using the console, use the Frame rate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list. The framerates shown in the dropdown list are decimal approximations of fractions. If you are creating your transcoding job specification as a JSON file without the console, use FramerateControl to specify which value the service uses for the frame rate for this output. Choose INITIALIZE_FROM_SOURCE if you want the service to use the frame rate from the input. Choose SPECIFIED if you want the service to use the frame rate that you specify in the settings FramerateNumerator and FramerateDenominator. + /// If you are using the console, use the Frame rate setting to specify the frame rate for this output. If you want to keep the same frame rate as the input video, choose Follow source. If you want to do frame rate conversion, choose a frame rate from the dropdown list. The framerates shown in the dropdown list are decimal approximations of fractions. public var framerateControl: MediaConvertClientTypes.XavcFramerateControl? /// Choose the method that you want MediaConvert to use when increasing or decreasing the frame rate. For numerically simple conversions, such as 60 fps to 30 fps: We recommend that you keep the default value, Drop duplicate. For numerically complex conversions, to avoid stutter: Choose Interpolate. This results in a smooth picture, but might introduce undesirable video artifacts. For complex frame rate conversions, especially if your source video has already been converted from its original cadence: Choose FrameFormer to do motion-compensated interpolation. FrameFormer uses the best conversion method frame by frame. Note that using FrameFormer increases the transcoding time and incurs a significant add-on cost. When you choose FrameFormer, your input video resolution must be at least 128x96. public var framerateConversionAlgorithm: MediaConvertClientTypes.XavcFramerateConversionAlgorithm? @@ -35211,23 +35235,23 @@ extension MediaConvertClientTypes { public var framerateNumerator: Swift.Int? /// Specify the XAVC profile for this output. For more information, see the Sony documentation at https://www.xavc-info.org/. Note that MediaConvert doesn't support the interlaced video XAVC operating points for XAVC_HD_INTRA_CBG. To create an interlaced XAVC output, choose the profile XAVC_HD. public var profile: MediaConvertClientTypes.XavcProfile? - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output by relabeling the video frames and resampling your audio. Note that enabling this setting will slightly reduce the duration of your video. Related settings: You must also set Frame rate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output by relabeling the video frames and resampling your audio. Note that enabling this setting will slightly reduce the duration of your video. Related settings: You must also set Frame rate to 25. public var slowPal: MediaConvertClientTypes.XavcSlowPal? - /// Ignore this setting unless your downstream workflow requires that you specify it explicitly. Otherwise, we recommend that you adjust the softness of your output by using a lower value for the setting Sharpness (sharpness) or by enabling a noise reducer filter (noiseReducerFilter). The Softness (softness) setting specifies the quantization matrices that the encoder uses. Keep the default value, 0, for flat quantization. Choose the value 1 or 16 to use the default JVT softening quantization matricies from the H.264 specification. Choose a value from 17 to 128 to use planar interpolation. Increasing values from 17 to 128 result in increasing reduction of high-frequency data. The value 128 results in the softest video. + /// Ignore this setting unless your downstream workflow requires that you specify it explicitly. Otherwise, we recommend that you adjust the softness of your output by using a lower value for the setting Sharpness or by enabling a noise reducer filter. The Softness setting specifies the quantization matrices that the encoder uses. Keep the default value, 0, for flat quantization. Choose the value 1 or 16 to use the default JVT softening quantization matricies from the H.264 specification. Choose a value from 17 to 128 to use planar interpolation. Increasing values from 17 to 128 result in increasing reduction of high-frequency data. The value 128 results in the softest video. public var softness: Swift.Int? - /// The best way to set up adaptive quantization is to keep the default value, Auto (AUTO), for the setting Adaptive quantization (adaptiveQuantization). When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. For this setting, keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization (adaptiveQuantization) depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. + /// The best way to set up adaptive quantization is to keep the default value, Auto, for the setting Adaptive quantization. When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. For this setting, keep the default value, Enabled, to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. public var spatialAdaptiveQuantization: MediaConvertClientTypes.XavcSpatialAdaptiveQuantization? - /// The best way to set up adaptive quantization is to keep the default value, Auto (AUTO), for the setting Adaptive quantization (adaptiveQuantization). When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. For this setting, keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal adaptive quantization, adjust the strength of the filter with the setting Adaptive quantization (adaptiveQuantization). + /// The best way to set up adaptive quantization is to keep the default value, Auto, for the setting Adaptive quantization. When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. For this setting, keep the default value, Enabled, to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal adaptive quantization, adjust the strength of the filter with the setting Adaptive quantization. public var temporalAdaptiveQuantization: MediaConvertClientTypes.XavcTemporalAdaptiveQuantization? - /// Required when you set (Profile) under (VideoDescription)>(CodecSettings)>(XavcSettings) to the value XAVC_4K_INTRA_CBG. + /// Required when you set Profile to the value XAVC_4K_INTRA_CBG. public var xavc4kIntraCbgProfileSettings: MediaConvertClientTypes.Xavc4kIntraCbgProfileSettings? - /// Required when you set (Profile) under (VideoDescription)>(CodecSettings)>(XavcSettings) to the value XAVC_4K_INTRA_VBR. + /// Required when you set Profile to the value XAVC_4K_INTRA_VBR. public var xavc4kIntraVbrProfileSettings: MediaConvertClientTypes.Xavc4kIntraVbrProfileSettings? - /// Required when you set (Profile) under (VideoDescription)>(CodecSettings)>(XavcSettings) to the value XAVC_4K. + /// Required when you set Profile to the value XAVC_4K. public var xavc4kProfileSettings: MediaConvertClientTypes.Xavc4kProfileSettings? - /// Required when you set (Profile) under (VideoDescription)>(CodecSettings)>(XavcSettings) to the value XAVC_HD_INTRA_CBG. + /// Required when you set Profile to the value XAVC_HD_INTRA_CBG. public var xavcHdIntraCbgProfileSettings: MediaConvertClientTypes.XavcHdIntraCbgProfileSettings? - /// Required when you set (Profile) under (VideoDescription)>(CodecSettings)>(XavcSettings) to the value XAVC_HD. + /// Required when you set Profile to the value XAVC_HD. public var xavcHdProfileSettings: MediaConvertClientTypes.XavcHdProfileSettings? public init( @@ -35271,7 +35295,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output by relabeling the video frames and resampling your audio. Note that enabling this setting will slightly reduce the duration of your video. Related settings: You must also set Frame rate to 25. In your JSON job specification, set (framerateControl) to (SPECIFIED), (framerateNumerator) to 25 and (framerateDenominator) to 1. + /// Ignore this setting unless your input frame rate is 23.976 or 24 frames per second (fps). Enable slow PAL to create a 25 fps output by relabeling the video frames and resampling your audio. Note that enabling this setting will slightly reduce the duration of your video. Related settings: You must also set Frame rate to 25. public enum XavcSlowPal: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -35304,7 +35328,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// The best way to set up adaptive quantization is to keep the default value, Auto (AUTO), for the setting Adaptive quantization (adaptiveQuantization). When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. For this setting, keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization (adaptiveQuantization) depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. + /// The best way to set up adaptive quantization is to keep the default value, Auto, for the setting Adaptive quantization. When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. For this setting, keep the default value, Enabled, to adjust quantization within each frame based on spatial variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas that can sustain more distortion with no noticeable visual degradation and uses more bits on areas where any small distortion will be noticeable. For example, complex textured blocks are encoded with fewer bits and smooth textured blocks are encoded with more bits. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen with a lot of complex texture, you might choose to disable this feature. Related setting: When you enable spatial adaptive quantization, set the value for Adaptive quantization depending on your content. For homogeneous content, such as cartoons and video games, set it to Low. For content with a wider variety of textures, set it to High or Higher. public enum XavcSpatialAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled @@ -35337,7 +35361,7 @@ extension MediaConvertClientTypes { } extension MediaConvertClientTypes { - /// The best way to set up adaptive quantization is to keep the default value, Auto (AUTO), for the setting Adaptive quantization (adaptiveQuantization). When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. For this setting, keep the default value, Enabled (ENABLED), to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal adaptive quantization, adjust the strength of the filter with the setting Adaptive quantization (adaptiveQuantization). + /// The best way to set up adaptive quantization is to keep the default value, Auto, for the setting Adaptive quantization. When you do so, MediaConvert automatically applies the best types of quantization for your video content. Include this setting in your JSON job specification only when you choose to change the default value for Adaptive quantization. For this setting, keep the default value, Enabled, to adjust quantization within each frame based on temporal variation of content complexity. When you enable this feature, the encoder uses fewer bits on areas of the frame that aren't moving and uses more bits on complex objects with sharp edges that move a lot. For example, this feature improves the readability of text tickers on newscasts and scoreboards on sports matches. Enabling this feature will almost always improve your video quality. Note, though, that this feature doesn't take into account where the viewer's attention is likely to be. If viewers are likely to be focusing their attention on a part of the screen that doesn't have moving objects with sharp edges, such as sports athletes' faces, you might choose to disable this feature. Related setting: When you enable temporal adaptive quantization, adjust the strength of the filter with the setting Adaptive quantization. public enum XavcTemporalAdaptiveQuantization: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled case enabled diff --git a/Sources/Services/AWSMediaLive/models/Models.swift b/Sources/Services/AWSMediaLive/models/Models.swift index f4101a290cd..0076b478da1 100644 --- a/Sources/Services/AWSMediaLive/models/Models.swift +++ b/Sources/Services/AWSMediaLive/models/Models.swift @@ -8647,6 +8647,7 @@ extension DescribeInputDeviceOutputResponse: ClientRuntime.HttpResponseBinding { let responseDecoder = decoder { let output: DescribeInputDeviceOutputResponseBody = try responseDecoder.decode(responseBody: data) self.arn = output.arn + self.availabilityZone = output.availabilityZone self.connectionState = output.connectionState self.deviceSettingsSyncState = output.deviceSettingsSyncState self.deviceUpdateStatus = output.deviceUpdateStatus @@ -8661,6 +8662,7 @@ extension DescribeInputDeviceOutputResponse: ClientRuntime.HttpResponseBinding { self.uhdDeviceSettings = output.uhdDeviceSettings } else { self.arn = nil + self.availabilityZone = nil self.connectionState = nil self.deviceSettingsSyncState = nil self.deviceUpdateStatus = nil @@ -8681,6 +8683,8 @@ extension DescribeInputDeviceOutputResponse: ClientRuntime.HttpResponseBinding { public struct DescribeInputDeviceOutputResponse: Swift.Equatable { /// The unique ARN of the input device. public var arn: Swift.String? + /// The Availability Zone associated with this input device. + public var availabilityZone: Swift.String? /// The state of the connection between the input device and AWS. public var connectionState: MediaLiveClientTypes.InputDeviceConnectionState? /// The status of the action to synchronize the device configuration. If you change the configuration of the input device (for example, the maximum bitrate), MediaLive sends the new data to the device. The device might not update itself immediately. SYNCED means the device has updated its configuration. SYNCING means that it has not updated its configuration. @@ -8708,6 +8712,7 @@ public struct DescribeInputDeviceOutputResponse: Swift.Equatable { public init( arn: Swift.String? = nil, + availabilityZone: Swift.String? = nil, connectionState: MediaLiveClientTypes.InputDeviceConnectionState? = nil, deviceSettingsSyncState: MediaLiveClientTypes.DeviceSettingsSyncState? = nil, deviceUpdateStatus: MediaLiveClientTypes.DeviceUpdateStatus? = nil, @@ -8723,6 +8728,7 @@ public struct DescribeInputDeviceOutputResponse: Swift.Equatable { ) { self.arn = arn + self.availabilityZone = availabilityZone self.connectionState = connectionState self.deviceSettingsSyncState = deviceSettingsSyncState self.deviceUpdateStatus = deviceUpdateStatus @@ -8752,11 +8758,13 @@ struct DescribeInputDeviceOutputResponseBody: Swift.Equatable { let type: MediaLiveClientTypes.InputDeviceType? let uhdDeviceSettings: MediaLiveClientTypes.InputDeviceUhdSettings? let tags: [Swift.String:Swift.String]? + let availabilityZone: Swift.String? } extension DescribeInputDeviceOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn = "arn" + case availabilityZone = "availabilityZone" case connectionState = "connectionState" case deviceSettingsSyncState = "deviceSettingsSyncState" case deviceUpdateStatus = "deviceUpdateStatus" @@ -8808,6 +8816,8 @@ extension DescribeInputDeviceOutputResponseBody: Swift.Decodable { } } tags = tagsDecoded0 + let availabilityZoneDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .availabilityZone) + availabilityZone = availabilityZoneDecoded } } @@ -19795,6 +19805,7 @@ extension MediaLiveClientTypes { extension MediaLiveClientTypes.InputDeviceSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn = "arn" + case availabilityZone = "availabilityZone" case connectionState = "connectionState" case deviceSettingsSyncState = "deviceSettingsSyncState" case deviceUpdateStatus = "deviceUpdateStatus" @@ -19814,6 +19825,9 @@ extension MediaLiveClientTypes.InputDeviceSummary: Swift.Codable { if let arn = self.arn { try encodeContainer.encode(arn, forKey: .arn) } + if let availabilityZone = self.availabilityZone { + try encodeContainer.encode(availabilityZone, forKey: .availabilityZone) + } if let connectionState = self.connectionState { try encodeContainer.encode(connectionState.rawValue, forKey: .connectionState) } @@ -19892,6 +19906,8 @@ extension MediaLiveClientTypes.InputDeviceSummary: Swift.Codable { } } tags = tagsDecoded0 + let availabilityZoneDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .availabilityZone) + availabilityZone = availabilityZoneDecoded } } @@ -19900,6 +19916,8 @@ extension MediaLiveClientTypes { public struct InputDeviceSummary: Swift.Equatable { /// The unique ARN of the input device. public var arn: Swift.String? + /// The Availability Zone associated with this input device. + public var availabilityZone: Swift.String? /// The state of the connection between the input device and AWS. public var connectionState: MediaLiveClientTypes.InputDeviceConnectionState? /// The status of the action to synchronize the device configuration. If you change the configuration of the input device (for example, the maximum bitrate), MediaLive sends the new data to the device. The device might not update itself immediately. SYNCED means the device has updated its configuration. SYNCING means that it has not updated its configuration. @@ -19927,6 +19945,7 @@ extension MediaLiveClientTypes { public init( arn: Swift.String? = nil, + availabilityZone: Swift.String? = nil, connectionState: MediaLiveClientTypes.InputDeviceConnectionState? = nil, deviceSettingsSyncState: MediaLiveClientTypes.DeviceSettingsSyncState? = nil, deviceUpdateStatus: MediaLiveClientTypes.DeviceUpdateStatus? = nil, @@ -19942,6 +19961,7 @@ extension MediaLiveClientTypes { ) { self.arn = arn + self.availabilityZone = availabilityZone self.connectionState = connectionState self.deviceSettingsSyncState = deviceSettingsSyncState self.deviceUpdateStatus = deviceUpdateStatus @@ -35273,6 +35293,7 @@ extension UpdateChannelOutputResponseBody: Swift.Decodable { extension UpdateInputDeviceInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case availabilityZone = "availabilityZone" case hdDeviceSettings = "hdDeviceSettings" case name = "name" case uhdDeviceSettings = "uhdDeviceSettings" @@ -35280,6 +35301,9 @@ extension UpdateInputDeviceInput: Swift.Encodable { 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 hdDeviceSettings = self.hdDeviceSettings { try encodeContainer.encode(hdDeviceSettings, forKey: .hdDeviceSettings) } @@ -35303,6 +35327,8 @@ extension UpdateInputDeviceInput: ClientRuntime.URLPathProvider { /// A request to update an input device. public struct UpdateInputDeviceInput: Swift.Equatable { + /// The Availability Zone you want associated with this input device. + public var availabilityZone: Swift.String? /// The settings that you want to apply to the HD input device. public var hdDeviceSettings: MediaLiveClientTypes.InputDeviceConfigurableSettings? /// The unique ID of the input device. For example, hd-123456789abcdef. @@ -35314,12 +35340,14 @@ public struct UpdateInputDeviceInput: Swift.Equatable { public var uhdDeviceSettings: MediaLiveClientTypes.InputDeviceConfigurableSettings? public init( + availabilityZone: Swift.String? = nil, hdDeviceSettings: MediaLiveClientTypes.InputDeviceConfigurableSettings? = nil, inputDeviceId: Swift.String? = nil, name: Swift.String? = nil, uhdDeviceSettings: MediaLiveClientTypes.InputDeviceConfigurableSettings? = nil ) { + self.availabilityZone = availabilityZone self.hdDeviceSettings = hdDeviceSettings self.inputDeviceId = inputDeviceId self.name = name @@ -35331,10 +35359,12 @@ struct UpdateInputDeviceInputBody: Swift.Equatable { let hdDeviceSettings: MediaLiveClientTypes.InputDeviceConfigurableSettings? let name: Swift.String? let uhdDeviceSettings: MediaLiveClientTypes.InputDeviceConfigurableSettings? + let availabilityZone: Swift.String? } extension UpdateInputDeviceInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case availabilityZone = "availabilityZone" case hdDeviceSettings = "hdDeviceSettings" case name = "name" case uhdDeviceSettings = "uhdDeviceSettings" @@ -35348,6 +35378,8 @@ extension UpdateInputDeviceInputBody: Swift.Decodable { name = nameDecoded let uhdDeviceSettingsDecoded = try containerValues.decodeIfPresent(MediaLiveClientTypes.InputDeviceConfigurableSettings.self, forKey: .uhdDeviceSettings) uhdDeviceSettings = uhdDeviceSettingsDecoded + let availabilityZoneDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .availabilityZone) + availabilityZone = availabilityZoneDecoded } } @@ -35375,6 +35407,7 @@ extension UpdateInputDeviceOutputResponse: ClientRuntime.HttpResponseBinding { let responseDecoder = decoder { let output: UpdateInputDeviceOutputResponseBody = try responseDecoder.decode(responseBody: data) self.arn = output.arn + self.availabilityZone = output.availabilityZone self.connectionState = output.connectionState self.deviceSettingsSyncState = output.deviceSettingsSyncState self.deviceUpdateStatus = output.deviceUpdateStatus @@ -35389,6 +35422,7 @@ extension UpdateInputDeviceOutputResponse: ClientRuntime.HttpResponseBinding { self.uhdDeviceSettings = output.uhdDeviceSettings } else { self.arn = nil + self.availabilityZone = nil self.connectionState = nil self.deviceSettingsSyncState = nil self.deviceUpdateStatus = nil @@ -35409,6 +35443,8 @@ extension UpdateInputDeviceOutputResponse: ClientRuntime.HttpResponseBinding { public struct UpdateInputDeviceOutputResponse: Swift.Equatable { /// The unique ARN of the input device. public var arn: Swift.String? + /// The Availability Zone associated with this input device. + public var availabilityZone: Swift.String? /// The state of the connection between the input device and AWS. public var connectionState: MediaLiveClientTypes.InputDeviceConnectionState? /// The status of the action to synchronize the device configuration. If you change the configuration of the input device (for example, the maximum bitrate), MediaLive sends the new data to the device. The device might not update itself immediately. SYNCED means the device has updated its configuration. SYNCING means that it has not updated its configuration. @@ -35436,6 +35472,7 @@ public struct UpdateInputDeviceOutputResponse: Swift.Equatable { public init( arn: Swift.String? = nil, + availabilityZone: Swift.String? = nil, connectionState: MediaLiveClientTypes.InputDeviceConnectionState? = nil, deviceSettingsSyncState: MediaLiveClientTypes.DeviceSettingsSyncState? = nil, deviceUpdateStatus: MediaLiveClientTypes.DeviceUpdateStatus? = nil, @@ -35451,6 +35488,7 @@ public struct UpdateInputDeviceOutputResponse: Swift.Equatable { ) { self.arn = arn + self.availabilityZone = availabilityZone self.connectionState = connectionState self.deviceSettingsSyncState = deviceSettingsSyncState self.deviceUpdateStatus = deviceUpdateStatus @@ -35480,11 +35518,13 @@ struct UpdateInputDeviceOutputResponseBody: Swift.Equatable { let type: MediaLiveClientTypes.InputDeviceType? let uhdDeviceSettings: MediaLiveClientTypes.InputDeviceUhdSettings? let tags: [Swift.String:Swift.String]? + let availabilityZone: Swift.String? } extension UpdateInputDeviceOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn = "arn" + case availabilityZone = "availabilityZone" case connectionState = "connectionState" case deviceSettingsSyncState = "deviceSettingsSyncState" case deviceUpdateStatus = "deviceUpdateStatus" @@ -35536,6 +35576,8 @@ extension UpdateInputDeviceOutputResponseBody: Swift.Decodable { } } tags = tagsDecoded0 + let availabilityZoneDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .availabilityZone) + availabilityZone = availabilityZoneDecoded } } diff --git a/Sources/Services/AWSMediaTailor/models/Models.swift b/Sources/Services/AWSMediaTailor/models/Models.swift index 99c23583f57..bcecbd8f1d2 100644 --- a/Sources/Services/AWSMediaTailor/models/Models.swift +++ b/Sources/Services/AWSMediaTailor/models/Models.swift @@ -247,6 +247,7 @@ extension MediaTailorClientTypes.Alert: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case alertCode = "AlertCode" case alertMessage = "AlertMessage" + case category = "Category" case lastModifiedTime = "LastModifiedTime" case relatedResourceArns = "RelatedResourceArns" case resourceArn = "ResourceArn" @@ -260,6 +261,9 @@ extension MediaTailorClientTypes.Alert: Swift.Codable { if let alertMessage = self.alertMessage { try encodeContainer.encode(alertMessage, forKey: .alertMessage) } + if let category = self.category { + try encodeContainer.encode(category.rawValue, forKey: .category) + } if let lastModifiedTime = self.lastModifiedTime { try encodeContainer.encodeTimestamp(lastModifiedTime, format: .epochSeconds, forKey: .lastModifiedTime) } @@ -295,6 +299,8 @@ extension MediaTailorClientTypes.Alert: Swift.Codable { relatedResourceArns = relatedResourceArnsDecoded0 let resourceArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceArn) resourceArn = resourceArnDecoded + let categoryDecoded = try containerValues.decodeIfPresent(MediaTailorClientTypes.AlertCategory.self, forKey: .category) + category = categoryDecoded } } @@ -307,6 +313,8 @@ extension MediaTailorClientTypes { /// If an alert is generated for a resource, an explanation of the reason for the alert. /// This member is required. public var alertMessage: Swift.String? + /// The category that MediaTailor assigns to the alert. + public var category: MediaTailorClientTypes.AlertCategory? /// The timestamp when the alert was last modified. /// This member is required. public var lastModifiedTime: ClientRuntime.Date? @@ -320,6 +328,7 @@ extension MediaTailorClientTypes { public init( alertCode: Swift.String? = nil, alertMessage: Swift.String? = nil, + category: MediaTailorClientTypes.AlertCategory? = nil, lastModifiedTime: ClientRuntime.Date? = nil, relatedResourceArns: [Swift.String]? = nil, resourceArn: Swift.String? = nil @@ -327,6 +336,7 @@ extension MediaTailorClientTypes { { self.alertCode = alertCode self.alertMessage = alertMessage + self.category = category self.lastModifiedTime = lastModifiedTime self.relatedResourceArns = relatedResourceArns self.resourceArn = resourceArn @@ -335,6 +345,41 @@ extension MediaTailorClientTypes { } +extension MediaTailorClientTypes { + public enum AlertCategory: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case info + case playbackWarning + case schedulingError + case sdkUnknown(Swift.String) + + public static var allCases: [AlertCategory] { + return [ + .info, + .playbackWarning, + .schedulingError, + .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 .info: return "INFO" + case .playbackWarning: return "PLAYBACK_WARNING" + case .schedulingError: return "SCHEDULING_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 = AlertCategory(rawValue: rawValue) ?? AlertCategory.sdkUnknown(rawValue) + } + } +} + extension MediaTailorClientTypes.AvailMatchingCriteria: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case dynamicVariable = "DynamicVariable" @@ -5012,7 +5057,7 @@ extension MediaTailorClientTypes { /// For SCTE35_ENHANCED output, defines a key. MediaTailor takes this key, and its associated value, and generates the key/value pair within the EXT-X-ASSETtag. If you specify a key, you must also specify a corresponding value. /// This member is required. public var key: Swift.String? - /// For SCTE35_ENHANCED output, defines a vaue. MediaTailor; takes this value, and its associated key, and generates the key/value pair within the EXT-X-ASSETtag. If you specify a value, you must also specify a corresponding key. + /// For SCTE35_ENHANCED output, defines a value. MediaTailor; takes this value, and its associated key, and generates the key/value pair within the EXT-X-ASSETtag. If you specify a value, you must also specify a corresponding key. /// This member is required. public var value: Swift.String? diff --git a/Sources/Services/AWSMedicalImaging/EndpointResolver.swift b/Sources/Services/AWSMedicalImaging/EndpointResolver.swift new file mode 100644 index 00000000000..700b6919d7d --- /dev/null +++ b/Sources/Services/AWSMedicalImaging/EndpointResolver.swift @@ -0,0 +1,154 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import AWSClientRuntime +import ClientRuntime + +public struct EndpointParams { + /// Override the endpoint used to send this request + public let endpoint: Swift.String? + /// The AWS region used to dispatch the request. + public let region: Swift.String? + /// When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error. + public let useDualStack: Swift.Bool + /// When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error. + public let useFIPS: Swift.Bool + + public init( + endpoint: Swift.String? = nil, + region: Swift.String? = nil, + useDualStack: Swift.Bool = false, + useFIPS: Swift.Bool = false + ) + { + self.endpoint = endpoint + self.region = region + self.useDualStack = useDualStack + self.useFIPS = useFIPS + } +} + +public protocol EndpointResolver { + func resolve(params: EndpointParams) throws -> ClientRuntime.Endpoint +} + +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://medical-imaging-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://medical-imaging-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://medical-imaging.{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://medical-imaging.{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) + } + + public func resolve(params: EndpointParams) throws -> ClientRuntime.Endpoint { + let context = try AWSClientRuntime.AWSEndpointsRequestContext() + try context.add(name: "Endpoint", value: params.endpoint) + try context.add(name: "Region", value: params.region) + try context.add(name: "UseDualStack", value: params.useDualStack) + try context.add(name: "UseFIPS", value: params.useFIPS) + + guard let crtResolvedEndpoint = try engine.resolve(context: context) else { + throw EndpointError.unresolved("Failed to resolved endpoint") + } + + if crtResolvedEndpoint.getType() == .error { + let error = crtResolvedEndpoint.getError() + throw EndpointError.unresolved(error) + } + + guard let url = crtResolvedEndpoint.getURL() else { + assertionFailure("This must be a bug in either CRT or the rule engine, if the endpoint is not an error, it must have a url") + throw EndpointError.unresolved("Failed to resolved endpoint") + } + + let headers = crtResolvedEndpoint.getHeaders() ?? [:] + let properties = crtResolvedEndpoint.getProperties() ?? [:] + return try Endpoint(urlString: url, headers: Headers(headers), properties: properties) + } +} + +public struct EndpointResolverMiddleware: ClientRuntime.Middleware { + public let id: Swift.String = "EndpointResolverMiddleware" + + let endpointResolver: EndpointResolver + + let endpointParams: EndpointParams + + let authSchemeResolver: AWSClientRuntime.AuthSchemeResolver + + public init(endpointResolver: EndpointResolver, endpointParams: EndpointParams, authSchemeResolver: AWSClientRuntime.AuthSchemeResolver = AWSClientRuntime.DefaultAuthSchemeResolver()) { + self.endpointResolver = endpointResolver + self.endpointParams = endpointParams + self.authSchemeResolver = authSchemeResolver + } + + public func handle(context: Context, + input: ClientRuntime.SdkHttpRequestBuilder, + next: H) async throws -> ClientRuntime.OperationOutput + where H: Handler, + Self.MInput == H.Input, + Self.MOutput == H.Output, + Self.Context == H.Context + { + let endpoint = try endpointResolver.resolve(params: endpointParams) + + var signingName: String? = nil + var signingRegion: String? = nil + var signingAlgorithm: String? = nil + if let authSchemes = endpoint.authSchemes() { + let schemes = try authSchemes.map { try AuthScheme(from: $0) } + let authScheme = try authSchemeResolver.resolve(authSchemes: schemes) + signingAlgorithm = authScheme.name + switch authScheme { + case .sigV4(let param): + signingName = param.signingName + signingRegion = param.signingRegion + case .sigV4A(let param): + signingName = param.signingName + signingRegion = param.signingRegionSet?.first + case .none: + break + } + } + + let awsEndpoint = AWSEndpoint(endpoint: endpoint, signingName: signingName, signingRegion: signingRegion) + + var host = "" + if let hostOverride = context.getHost() { + host = hostOverride + } else { + host = "\(context.getHostPrefix() ?? "")\(awsEndpoint.endpoint.host)" + } + + if let protocolType = awsEndpoint.endpoint.protocolType { + input.withProtocol(protocolType) + } + + if let signingRegion = signingRegion { + context.attributes.set(key: HttpContext.signingRegion, value: signingRegion) + } + if let signingName = signingName { + context.attributes.set(key: HttpContext.signingName, value: signingName) + } + if let signingAlgorithm = signingAlgorithm { + context.attributes.set(key: HttpContext.signingAlgorithm, value: signingAlgorithm) + } + + if let headers = endpoint.headers { + input.withHeaders(headers) + } + + input.withMethod(context.getMethod()) + .withHost(host) + .withPort(awsEndpoint.endpoint.port) + .withPath(awsEndpoint.endpoint.path.appendingPathComponent(context.getPath())) + .withHeader(name: "Host", value: host) + + return try await next.handle(context: context, input: input) + } + + public typealias MInput = ClientRuntime.SdkHttpRequestBuilder + public typealias MOutput = ClientRuntime.OperationOutput + public typealias Context = ClientRuntime.HttpContext +} diff --git a/Sources/Services/AWSMedicalImaging/MedicalImagingClient.swift b/Sources/Services/AWSMedicalImaging/MedicalImagingClient.swift new file mode 100644 index 00000000000..8402ecedbd8 --- /dev/null +++ b/Sources/Services/AWSMedicalImaging/MedicalImagingClient.swift @@ -0,0 +1,709 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +@_spi(FileBasedConfig) import AWSClientRuntime +import ClientRuntime +import Foundation +import Logging + +public class MedicalImagingClient { + public static let clientName = "MedicalImagingClient" + let client: ClientRuntime.SdkHttpClient + let config: MedicalImagingClient.MedicalImagingClientConfiguration + let serviceName = "Medical Imaging" + let encoder: ClientRuntime.RequestEncoder + let decoder: ClientRuntime.ResponseDecoder + + public init(config: MedicalImagingClient.MedicalImagingClientConfiguration) { + client = ClientRuntime.SdkHttpClient(engine: config.httpClientEngine, config: config.httpClientConfiguration) + let encoder = ClientRuntime.JSONEncoder() + encoder.dateEncodingStrategy = .secondsSince1970 + encoder.nonConformingFloatEncodingStrategy = .convertToString(positiveInfinity: "Infinity", negativeInfinity: "-Infinity", nan: "NaN") + self.encoder = config.encoder ?? encoder + let decoder = ClientRuntime.JSONDecoder() + decoder.dateDecodingStrategy = .secondsSince1970 + decoder.nonConformingFloatDecodingStrategy = .convertFromString(positiveInfinity: "Infinity", negativeInfinity: "-Infinity", nan: "NaN") + self.decoder = config.decoder ?? decoder + self.config = config + } + + public convenience init(region: Swift.String) throws { + let config = try MedicalImagingClient.MedicalImagingClientConfiguration(region: region) + self.init(config: config) + } + + public convenience init() async throws { + let config = try await MedicalImagingClient.MedicalImagingClientConfiguration() + self.init(config: config) + } +} + +extension MedicalImagingClient { + public typealias MedicalImagingClientConfiguration = AWSClientConfiguration + + public struct ServiceSpecificConfiguration: AWSServiceSpecificConfiguration { + public typealias AWSServiceEndpointResolver = EndpointResolver + + public var serviceName: String { "Medical Imaging" } + public var clientName: String { "MedicalImagingClient" } + public var endpointResolver: EndpointResolver + + public init(endpointResolver: EndpointResolver? = nil) throws { + self.endpointResolver = try endpointResolver ?? DefaultEndpointResolver() + } + } +} + +public struct MedicalImagingClientLogHandlerFactory: ClientRuntime.SDKLogHandlerFactory { + public var label = "MedicalImagingClient" + let logLevel: ClientRuntime.SDKLogLevel + public func construct(label: String) -> LogHandler { + var handler = StreamLogHandler.standardOutput(label: label) + handler.logLevel = logLevel.toLoggerType() + return handler + } + public init(logLevel: ClientRuntime.SDKLogLevel) { + self.logLevel = logLevel + } +} + +extension MedicalImagingClient: MedicalImagingClientProtocol { + /// Copy an image set. + public func copyImageSet(input: CopyImageSetInput) async throws -> CopyImageSetOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "copyImageSet") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "copyImageSet") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware(hostPrefix: "runtime-")) + 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.serviceSpecific.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: CopyImageSetInputBodyMiddleware()) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Create a data store. + public func createDatastore(input: CreateDatastoreInput) async throws -> CreateDatastoreOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createDatastore") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createDatastore") + 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) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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: "CreateDatastoreRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Delete a data store. Before a data store can be deleted, you must first delete all image sets within it. + public func deleteDatastore(input: DeleteDatastoreInput) async throws -> DeleteDatastoreOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "deleteDatastore") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteDatastore") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Delete an image set. + public func deleteImageSet(input: DeleteImageSetInput) async throws -> DeleteImageSetOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "deleteImageSet") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteImageSet") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware(hostPrefix: "runtime-")) + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Get the import job properties to learn more about the job or job progress. + public func getDICOMImportJob(input: GetDICOMImportJobInput) async throws -> GetDICOMImportJobOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getDICOMImportJob") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getDICOMImportJob") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Get data store properties. + public func getDatastore(input: GetDatastoreInput) async throws -> GetDatastoreOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "getDatastore") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getDatastore") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Get an image frame (pixel data) for an image set. + public func getImageFrame(input: GetImageFrameInput) async throws -> GetImageFrameOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getImageFrame") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getImageFrame") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware(hostPrefix: "runtime-")) + 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.serviceSpecific.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: GetImageFrameInputBodyMiddleware()) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Get image set properties. + public func getImageSet(input: GetImageSetInput) async throws -> GetImageSetOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getImageSet") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getImageSet") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware(hostPrefix: "runtime-")) + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Get metadata attributes for an image set. + public func getImageSetMetadata(input: GetImageSetMetadataInput) async throws -> GetImageSetMetadataOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getImageSetMetadata") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getImageSetMetadata") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware(hostPrefix: "runtime-")) + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// List import jobs created by this AWS account for a specific data store. + public func listDICOMImportJobs(input: ListDICOMImportJobsInput) async throws -> ListDICOMImportJobsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listDICOMImportJobs") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listDICOMImportJobs") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// List data stores created by this AWS account. + public func listDatastores(input: ListDatastoresInput) async throws -> ListDatastoresOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listDatastores") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listDatastores") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// List image set versions. + public func listImageSetVersions(input: ListImageSetVersionsInput) async throws -> ListImageSetVersionsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listImageSetVersions") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listImageSetVersions") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware(hostPrefix: "runtime-")) + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Lists all tags associated with a medical imaging resource. + public func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTagsForResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTagsForResource") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Search image sets based on defined input attributes. + public func searchImageSets(input: SearchImageSetsInput) async throws -> SearchImageSetsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "searchImageSets") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "searchImageSets") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware(hostPrefix: "runtime-")) + 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.serviceSpecific.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.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: SearchImageSetsInputBodyMiddleware()) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Start importing bulk data into an ACTIVE data store. The import job imports DICOM P10 files found in the S3 prefix specified by the inputS3Uri parameter. The import job stores processing results in the file specified by the outputS3Uri parameter. + public func startDICOMImportJob(input: StartDICOMImportJobInput) async throws -> StartDICOMImportJobOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "startDICOMImportJob") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "startDICOMImportJob") + 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) + operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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: "StartDICOMImportJobRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Adds a user-specifed key and value tag to a medical imaging resource. + public func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "tagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "tagResource") + 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.serviceSpecific.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: "TagResourceRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Removes tags from a medical imaging resource. + public func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "untagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "untagResource") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Update image set metadata attributes. + public func updateImageSetMetadata(input: UpdateImageSetMetadataInput) async throws -> UpdateImageSetMetadataOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "updateImageSetMetadata") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "medical-imaging") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateImageSetMetadata") + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) + operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware(hostPrefix: "runtime-")) + 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.serviceSpecific.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.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/json")) + operation.serializeStep.intercept(position: .after, middleware: UpdateImageSetMetadataInputBodyMiddleware()) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + +} diff --git a/Sources/Services/AWSMedicalImaging/MedicalImagingClientProtocol.swift b/Sources/Services/AWSMedicalImaging/MedicalImagingClientProtocol.swift new file mode 100644 index 00000000000..5a7f498a487 --- /dev/null +++ b/Sources/Services/AWSMedicalImaging/MedicalImagingClientProtocol.swift @@ -0,0 +1,93 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import ClientRuntime + +/// This is the AWS HealthImaging API Reference. AWS HealthImaging is an AWS service for storing, accessing, and analyzing medical images. For an introduction to the service, see the [ AWS HealthImaging Developer Guide ](https://docs.aws.amazon.com/medical-imaging/latest/devguide). We recommend using one of the AWS Software Development Kits (SDKs) for your programming language, as they take care of request authentication, serialization, and connection management. For more information, see [Tools to build on AWS](http://aws.amazon.com/developer/tools). For information about using AWS HealthImaging API actions in one of the language-specific AWS SDKs, refer to the See Also link at the end of each section that describes an API action or data type. The following sections list AWS HealthImaging API actions categorized according to functionality. Links are provided to actions within this Reference, along with links back to corresponding sections in the AWS HealthImaging Developer Guide so you can view console procedures and CLI/SDK code examples. Data store actions +/// +/// * [CreateDatastore](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_CreateDatastore.html) – See [Creating a data store](https://docs.aws.amazon.com/medical-imaging/latest/devguide/create-data-store.html). +/// +/// * [GetDatastore](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_GetDatastore.html) – See [Getting data store properties](https://docs.aws.amazon.com/medical-imaging/latest/devguide/get-data-store.html). +/// +/// * [ListDatastores](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_ListDatastores.html) – See [Listing data stores](https://docs.aws.amazon.com/medical-imaging/latest/devguide/list-data-stores.html). +/// +/// * [DeleteDatastore](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_DeleteDatastore.html) – See [Deleting a data store](https://docs.aws.amazon.com/medical-imaging/latest/devguide/delete-data-store.html). +/// +/// +/// Import job actions +/// +/// * [StartDICOMImportJob](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_StartDICOMImportJob.html) – See [Starting an import job](https://docs.aws.amazon.com/medical-imaging/latest/devguide/start-dicom-import-job.html). +/// +/// * [GetDICOMImportJob](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_GetDICOMImportJob.html) – See [Getting import job properties](https://docs.aws.amazon.com/medical-imaging/latest/devguide/get-dicom-import-job.html). +/// +/// * [ListDICOMImportJobs](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_ListDICOMImportJobs.html) – See [Listing import jobs](https://docs.aws.amazon.com/medical-imaging/latest/devguide/list-dicom-import-jobs.html). +/// +/// +/// Image set access actions +/// +/// * [SearchImageSets](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_SearchImageSets.html) – See [Searching image sets](https://docs.aws.amazon.com/medical-imaging/latest/devguide/search-image-sets.html). +/// +/// * [GetImageSet](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_GetImageSet.html) – See [Getting image set properties](https://docs.aws.amazon.com/medical-imaging/latest/devguide/get-image-set-properties.html). +/// +/// * [GetImageSetMetadata](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_GetImageSetMetadata.html) – See [Getting image set metadata](https://docs.aws.amazon.com/medical-imaging/latest/devguide/get-image-set-metadata.html). +/// +/// * [GetImageFrame](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_GetImageFrame.html) – See [Getting image set pixel data](https://docs.aws.amazon.com/medical-imaging/latest/devguide/get-image-frame.html). +/// +/// +/// Image set modification actions +/// +/// * [ListImageSetVersions](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_ListImageSetVersions.html) – See [Listing image set versions](https://docs.aws.amazon.com/medical-imaging/latest/devguide/list-image-set-versions.html). +/// +/// * [UpdateImageSetMetadata](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_UpdateImageSetMetadata.html) – See [Updating image set metadata](https://docs.aws.amazon.com/medical-imaging/latest/devguide/update-image-set-metadata.html). +/// +/// * [CopyImageSet](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_CopyImageSet.html) – See [Copying an image set](https://docs.aws.amazon.com/medical-imaging/latest/devguide/copy-image-set.html). +/// +/// * [DeleteImageSet](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_DeleteImageSet.html) – See [Deleting an image set](https://docs.aws.amazon.com/medical-imaging/latest/devguide/delete-image-set.html). +/// +/// +/// Tagging actions +/// +/// * [TagResource](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_TagResource.html) – See [Tagging a data store](https://docs.aws.amazon.com/medical-imaging/latest/devguide/tag-list-untag-data-store.html) and [Tagging an image set](https://docs.aws.amazon.com/medical-imaging/latest/devguide/tag-list-untag-image-set.html). +/// +/// * [ListTagsForResource](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_ListTagsForResource.html) – See [Tagging a data store](https://docs.aws.amazon.com/medical-imaging/latest/devguide/tag-list-untag-data-store.html) and [Tagging an image set](https://docs.aws.amazon.com/medical-imaging/latest/devguide/tag-list-untag-image-set.html). +/// +/// * [UntagResource](https://docs.aws.amazon.com/medical-imaging/latest/APIReference/API_UntagResource.html) – See [Tagging a data store](https://docs.aws.amazon.com/medical-imaging/latest/devguide/tag-list-untag-data-store.html) and [Tagging an image set](https://docs.aws.amazon.com/medical-imaging/latest/devguide/tag-list-untag-image-set.html). +public protocol MedicalImagingClientProtocol { + /// Copy an image set. + func copyImageSet(input: CopyImageSetInput) async throws -> CopyImageSetOutputResponse + /// Create a data store. + func createDatastore(input: CreateDatastoreInput) async throws -> CreateDatastoreOutputResponse + /// Delete a data store. Before a data store can be deleted, you must first delete all image sets within it. + func deleteDatastore(input: DeleteDatastoreInput) async throws -> DeleteDatastoreOutputResponse + /// Delete an image set. + func deleteImageSet(input: DeleteImageSetInput) async throws -> DeleteImageSetOutputResponse + /// Get data store properties. + func getDatastore(input: GetDatastoreInput) async throws -> GetDatastoreOutputResponse + /// Get the import job properties to learn more about the job or job progress. + func getDICOMImportJob(input: GetDICOMImportJobInput) async throws -> GetDICOMImportJobOutputResponse + /// Get an image frame (pixel data) for an image set. + func getImageFrame(input: GetImageFrameInput) async throws -> GetImageFrameOutputResponse + /// Get image set properties. + func getImageSet(input: GetImageSetInput) async throws -> GetImageSetOutputResponse + /// Get metadata attributes for an image set. + func getImageSetMetadata(input: GetImageSetMetadataInput) async throws -> GetImageSetMetadataOutputResponse + /// List data stores created by this AWS account. + func listDatastores(input: ListDatastoresInput) async throws -> ListDatastoresOutputResponse + /// List import jobs created by this AWS account for a specific data store. + func listDICOMImportJobs(input: ListDICOMImportJobsInput) async throws -> ListDICOMImportJobsOutputResponse + /// List image set versions. + func listImageSetVersions(input: ListImageSetVersionsInput) async throws -> ListImageSetVersionsOutputResponse + /// Lists all tags associated with a medical imaging resource. + func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse + /// Search image sets based on defined input attributes. + func searchImageSets(input: SearchImageSetsInput) async throws -> SearchImageSetsOutputResponse + /// Start importing bulk data into an ACTIVE data store. The import job imports DICOM P10 files found in the S3 prefix specified by the inputS3Uri parameter. The import job stores processing results in the file specified by the outputS3Uri parameter. + func startDICOMImportJob(input: StartDICOMImportJobInput) async throws -> StartDICOMImportJobOutputResponse + /// Adds a user-specifed key and value tag to a medical imaging resource. + func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse + /// Removes tags from a medical imaging resource. + func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse + /// Update image set metadata attributes. + func updateImageSetMetadata(input: UpdateImageSetMetadataInput) async throws -> UpdateImageSetMetadataOutputResponse +} + +public enum MedicalImagingClientTypes {} diff --git a/Sources/Services/AWSMedicalImaging/Paginators.swift b/Sources/Services/AWSMedicalImaging/Paginators.swift new file mode 100644 index 00000000000..46c9c7cfad9 --- /dev/null +++ b/Sources/Services/AWSMedicalImaging/Paginators.swift @@ -0,0 +1,100 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import ClientRuntime + +extension MedicalImagingClient { + /// Paginate over `[ListDICOMImportJobsOutputResponse]` 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 `[ListDICOMImportJobsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListDICOMImportJobsOutputResponse` + public func listDICOMImportJobsPaginated(input: ListDICOMImportJobsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListDICOMImportJobsInput.nextToken, outputKey: \ListDICOMImportJobsOutputResponse.nextToken, paginationFunction: self.listDICOMImportJobs(input:)) + } +} + +extension ListDICOMImportJobsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListDICOMImportJobsInput { + return ListDICOMImportJobsInput( + datastoreId: self.datastoreId, + jobStatus: self.jobStatus, + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListDICOMImportJobsInput, Output == ListDICOMImportJobsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listDICOMImportJobsPaginated` + /// to access the nested member `[MedicalImagingClientTypes.DICOMImportJobSummary]` + /// - Returns: `[MedicalImagingClientTypes.DICOMImportJobSummary]` + public func jobSummaries() async throws -> [MedicalImagingClientTypes.DICOMImportJobSummary] { + return try await self.asyncCompactMap { item in item.jobSummaries } + } +} +extension MedicalImagingClient { + /// Paginate over `[ListImageSetVersionsOutputResponse]` 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 `[ListImageSetVersionsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListImageSetVersionsOutputResponse` + public func listImageSetVersionsPaginated(input: ListImageSetVersionsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListImageSetVersionsInput.nextToken, outputKey: \ListImageSetVersionsOutputResponse.nextToken, paginationFunction: self.listImageSetVersions(input:)) + } +} + +extension ListImageSetVersionsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListImageSetVersionsInput { + return ListImageSetVersionsInput( + datastoreId: self.datastoreId, + imageSetId: self.imageSetId, + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListImageSetVersionsInput, Output == ListImageSetVersionsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listImageSetVersionsPaginated` + /// to access the nested member `[MedicalImagingClientTypes.ImageSetProperties]` + /// - Returns: `[MedicalImagingClientTypes.ImageSetProperties]` + public func imageSetPropertiesList() async throws -> [MedicalImagingClientTypes.ImageSetProperties] { + return try await self.asyncCompactMap { item in item.imageSetPropertiesList } + } +} +extension MedicalImagingClient { + /// Paginate over `[SearchImageSetsOutputResponse]` 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 `[SearchImageSetsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `SearchImageSetsOutputResponse` + public func searchImageSetsPaginated(input: SearchImageSetsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \SearchImageSetsInput.nextToken, outputKey: \SearchImageSetsOutputResponse.nextToken, paginationFunction: self.searchImageSets(input:)) + } +} + +extension SearchImageSetsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> SearchImageSetsInput { + return SearchImageSetsInput( + datastoreId: self.datastoreId, + maxResults: self.maxResults, + nextToken: token, + searchCriteria: self.searchCriteria + )} +} + +extension PaginatorSequence where Input == SearchImageSetsInput, Output == SearchImageSetsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `searchImageSetsPaginated` + /// to access the nested member `[MedicalImagingClientTypes.ImageSetsMetadataSummary]` + /// - Returns: `[MedicalImagingClientTypes.ImageSetsMetadataSummary]` + public func imageSetsMetadataSummaries() async throws -> [MedicalImagingClientTypes.ImageSetsMetadataSummary] { + return try await self.asyncCompactMap { item in item.imageSetsMetadataSummaries } + } +} diff --git a/Sources/Services/AWSMedicalImaging/models/Models.swift b/Sources/Services/AWSMedicalImaging/models/Models.swift new file mode 100644 index 00000000000..67deea417ef --- /dev/null +++ b/Sources/Services/AWSMedicalImaging/models/Models.swift @@ -0,0 +1,4644 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! +import AWSClientRuntime +import ClientRuntime + +extension AccessDeniedException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: AccessDeniedExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The user does not have sufficient access to perform this action. +public struct AccessDeniedException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "AccessDeniedException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct AccessDeniedExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension AccessDeniedExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 ConflictException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ConflictExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// Updating or deleting a resource can cause an inconsistent state. +public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ConflictException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ConflictExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ConflictExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 MedicalImagingClientTypes.CopyDestinationImageSet: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case imageSetId + case latestVersionId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let imageSetId = self.imageSetId { + try encodeContainer.encode(imageSetId, forKey: .imageSetId) + } + if let latestVersionId = self.latestVersionId { + try encodeContainer.encode(latestVersionId, forKey: .latestVersionId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let imageSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageSetId) + imageSetId = imageSetIdDecoded + let latestVersionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .latestVersionId) + latestVersionId = latestVersionIdDecoded + } +} + +extension MedicalImagingClientTypes { + /// Copy the destination image set. + public struct CopyDestinationImageSet: Swift.Equatable { + /// The image set identifier for the destination image set. + /// This member is required. + public var imageSetId: Swift.String? + /// The latest version identifier for the destination image set. + /// This member is required. + public var latestVersionId: Swift.String? + + public init( + imageSetId: Swift.String? = nil, + latestVersionId: Swift.String? = nil + ) + { + self.imageSetId = imageSetId + self.latestVersionId = latestVersionId + } + } + +} + +extension MedicalImagingClientTypes.CopyDestinationImageSetProperties: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdAt + case imageSetArn + case imageSetId + case imageSetState + case imageSetWorkflowStatus + case latestVersionId + case updatedAt + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let createdAt = self.createdAt { + try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) + } + if let imageSetArn = self.imageSetArn { + try encodeContainer.encode(imageSetArn, forKey: .imageSetArn) + } + if let imageSetId = self.imageSetId { + try encodeContainer.encode(imageSetId, forKey: .imageSetId) + } + if let imageSetState = self.imageSetState { + try encodeContainer.encode(imageSetState.rawValue, forKey: .imageSetState) + } + if let imageSetWorkflowStatus = self.imageSetWorkflowStatus { + try encodeContainer.encode(imageSetWorkflowStatus.rawValue, forKey: .imageSetWorkflowStatus) + } + if let latestVersionId = self.latestVersionId { + try encodeContainer.encode(latestVersionId, forKey: .latestVersionId) + } + if let updatedAt = self.updatedAt { + try encodeContainer.encodeTimestamp(updatedAt, format: .epochSeconds, forKey: .updatedAt) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let imageSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageSetId) + imageSetId = imageSetIdDecoded + let latestVersionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .latestVersionId) + latestVersionId = latestVersionIdDecoded + let imageSetStateDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetState.self, forKey: .imageSetState) + imageSetState = imageSetStateDecoded + let imageSetWorkflowStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetWorkflowStatus.self, forKey: .imageSetWorkflowStatus) + imageSetWorkflowStatus = imageSetWorkflowStatusDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + let imageSetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageSetArn) + imageSetArn = imageSetArnDecoded + } +} + +extension MedicalImagingClientTypes { + /// Copy the image set properties of the destination image set. + public struct CopyDestinationImageSetProperties: Swift.Equatable { + /// The timestamp when the destination image set properties were created. + public var createdAt: ClientRuntime.Date? + /// The Amazon Resource Name (ARN) assigned to the destination image set. + public var imageSetArn: Swift.String? + /// The image set identifier of the copied image set properties. + /// This member is required. + public var imageSetId: Swift.String? + /// The image set state of the destination image set properties. + public var imageSetState: MedicalImagingClientTypes.ImageSetState? + /// The image set workflow status of the destination image set properties. + public var imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? + /// The latest version identifier for the destination image set properties. + /// This member is required. + public var latestVersionId: Swift.String? + /// The timestamp when the destination image set properties were last updated. + public var updatedAt: ClientRuntime.Date? + + public init( + createdAt: ClientRuntime.Date? = nil, + imageSetArn: Swift.String? = nil, + imageSetId: Swift.String? = nil, + imageSetState: MedicalImagingClientTypes.ImageSetState? = nil, + imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? = nil, + latestVersionId: Swift.String? = nil, + updatedAt: ClientRuntime.Date? = nil + ) + { + self.createdAt = createdAt + self.imageSetArn = imageSetArn + self.imageSetId = imageSetId + self.imageSetState = imageSetState + self.imageSetWorkflowStatus = imageSetWorkflowStatus + self.latestVersionId = latestVersionId + self.updatedAt = updatedAt + } + } + +} + +extension MedicalImagingClientTypes.CopyImageSetInformation: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case destinationImageSet + case sourceImageSet + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let destinationImageSet = self.destinationImageSet { + try encodeContainer.encode(destinationImageSet, forKey: .destinationImageSet) + } + if let sourceImageSet = self.sourceImageSet { + try encodeContainer.encode(sourceImageSet, forKey: .sourceImageSet) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sourceImageSetDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.CopySourceImageSetInformation.self, forKey: .sourceImageSet) + sourceImageSet = sourceImageSetDecoded + let destinationImageSetDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.CopyDestinationImageSet.self, forKey: .destinationImageSet) + destinationImageSet = destinationImageSetDecoded + } +} + +extension MedicalImagingClientTypes { + /// Copy image set information. + public struct CopyImageSetInformation: Swift.Equatable { + /// The destination image set. + public var destinationImageSet: MedicalImagingClientTypes.CopyDestinationImageSet? + /// The source image set. + /// This member is required. + public var sourceImageSet: MedicalImagingClientTypes.CopySourceImageSetInformation? + + public init( + destinationImageSet: MedicalImagingClientTypes.CopyDestinationImageSet? = nil, + sourceImageSet: MedicalImagingClientTypes.CopySourceImageSetInformation? = nil + ) + { + self.destinationImageSet = destinationImageSet + self.sourceImageSet = sourceImageSet + } + } + +} + +public struct CopyImageSetInputBodyMiddleware: ClientRuntime.Middleware { + public let id: Swift.String = "CopyImageSetInputBodyMiddleware" + + public init() {} + + public func handle(context: Context, + input: ClientRuntime.SerializeStepInput, + next: H) async throws -> ClientRuntime.OperationOutput + where H: Handler, + Self.MInput == H.Input, + Self.MOutput == H.Output, + Self.Context == H.Context + { + do { + let encoder = context.getEncoder() + if let copyImageSetInformation = input.operationInput.copyImageSetInformation { + let copyImageSetInformationData = try encoder.encode(copyImageSetInformation) + let copyImageSetInformationBody = ClientRuntime.HttpBody.data(copyImageSetInformationData) + input.builder.withBody(copyImageSetInformationBody) + } else { + if encoder is JSONEncoder { + // Encode an empty body as an empty structure in JSON + let copyImageSetInformationData = "{}".data(using: .utf8)! + let copyImageSetInformationBody = ClientRuntime.HttpBody.data(copyImageSetInformationData) + input.builder.withBody(copyImageSetInformationBody) + } + } + } catch let err { + throw ClientRuntime.ClientError.unknownError(err.localizedDescription) + } + return try await next.handle(context: context, input: input) + } + + public typealias MInput = ClientRuntime.SerializeStepInput + public typealias MOutput = ClientRuntime.OperationOutput + public typealias Context = ClientRuntime.HttpContext +} + +extension CopyImageSetInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case copyImageSetInformation + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let copyImageSetInformation = self.copyImageSetInformation { + try encodeContainer.encode(copyImageSetInformation, forKey: .copyImageSetInformation) + } + } +} + +extension CopyImageSetInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + guard let sourceImageSetId = sourceImageSetId else { + return nil + } + return "/datastore/\(datastoreId.urlPercentEncoding())/imageSet/\(sourceImageSetId.urlPercentEncoding())/copyImageSet" + } +} + +public struct CopyImageSetInput: Swift.Equatable { + /// Copy image set information. + /// This member is required. + public var copyImageSetInformation: MedicalImagingClientTypes.CopyImageSetInformation? + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The source image set identifier. + /// This member is required. + public var sourceImageSetId: Swift.String? + + public init( + copyImageSetInformation: MedicalImagingClientTypes.CopyImageSetInformation? = nil, + datastoreId: Swift.String? = nil, + sourceImageSetId: Swift.String? = nil + ) + { + self.copyImageSetInformation = copyImageSetInformation + self.datastoreId = datastoreId + self.sourceImageSetId = sourceImageSetId + } +} + +struct CopyImageSetInputBody: Swift.Equatable { + let copyImageSetInformation: MedicalImagingClientTypes.CopyImageSetInformation? +} + +extension CopyImageSetInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case copyImageSetInformation + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let copyImageSetInformationDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.CopyImageSetInformation.self, forKey: .copyImageSetInformation) + copyImageSetInformation = copyImageSetInformationDecoded + } +} + +public enum CopyImageSetOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension CopyImageSetOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: CopyImageSetOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.datastoreId = output.datastoreId + self.destinationImageSetProperties = output.destinationImageSetProperties + self.sourceImageSetProperties = output.sourceImageSetProperties + } else { + self.datastoreId = nil + self.destinationImageSetProperties = nil + self.sourceImageSetProperties = nil + } + } +} + +public struct CopyImageSetOutputResponse: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The properties of the destination image set. + /// This member is required. + public var destinationImageSetProperties: MedicalImagingClientTypes.CopyDestinationImageSetProperties? + /// The properties of the source image set. + /// This member is required. + public var sourceImageSetProperties: MedicalImagingClientTypes.CopySourceImageSetProperties? + + public init( + datastoreId: Swift.String? = nil, + destinationImageSetProperties: MedicalImagingClientTypes.CopyDestinationImageSetProperties? = nil, + sourceImageSetProperties: MedicalImagingClientTypes.CopySourceImageSetProperties? = nil + ) + { + self.datastoreId = datastoreId + self.destinationImageSetProperties = destinationImageSetProperties + self.sourceImageSetProperties = sourceImageSetProperties + } +} + +struct CopyImageSetOutputResponseBody: Swift.Equatable { + let datastoreId: Swift.String? + let sourceImageSetProperties: MedicalImagingClientTypes.CopySourceImageSetProperties? + let destinationImageSetProperties: MedicalImagingClientTypes.CopyDestinationImageSetProperties? +} + +extension CopyImageSetOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datastoreId + case destinationImageSetProperties + case sourceImageSetProperties + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastoreIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreId) + datastoreId = datastoreIdDecoded + let sourceImageSetPropertiesDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.CopySourceImageSetProperties.self, forKey: .sourceImageSetProperties) + sourceImageSetProperties = sourceImageSetPropertiesDecoded + let destinationImageSetPropertiesDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.CopyDestinationImageSetProperties.self, forKey: .destinationImageSetProperties) + destinationImageSetProperties = destinationImageSetPropertiesDecoded + } +} + +extension MedicalImagingClientTypes.CopySourceImageSetInformation: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case latestVersionId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let latestVersionId = self.latestVersionId { + try encodeContainer.encode(latestVersionId, forKey: .latestVersionId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let latestVersionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .latestVersionId) + latestVersionId = latestVersionIdDecoded + } +} + +extension MedicalImagingClientTypes { + /// Copy source image set information. + public struct CopySourceImageSetInformation: Swift.Equatable { + /// The latest version identifier for the source image set. + /// This member is required. + public var latestVersionId: Swift.String? + + public init( + latestVersionId: Swift.String? = nil + ) + { + self.latestVersionId = latestVersionId + } + } + +} + +extension MedicalImagingClientTypes.CopySourceImageSetProperties: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdAt + case imageSetArn + case imageSetId + case imageSetState + case imageSetWorkflowStatus + case latestVersionId + case updatedAt + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let createdAt = self.createdAt { + try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) + } + if let imageSetArn = self.imageSetArn { + try encodeContainer.encode(imageSetArn, forKey: .imageSetArn) + } + if let imageSetId = self.imageSetId { + try encodeContainer.encode(imageSetId, forKey: .imageSetId) + } + if let imageSetState = self.imageSetState { + try encodeContainer.encode(imageSetState.rawValue, forKey: .imageSetState) + } + if let imageSetWorkflowStatus = self.imageSetWorkflowStatus { + try encodeContainer.encode(imageSetWorkflowStatus.rawValue, forKey: .imageSetWorkflowStatus) + } + if let latestVersionId = self.latestVersionId { + try encodeContainer.encode(latestVersionId, forKey: .latestVersionId) + } + if let updatedAt = self.updatedAt { + try encodeContainer.encodeTimestamp(updatedAt, format: .epochSeconds, forKey: .updatedAt) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let imageSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageSetId) + imageSetId = imageSetIdDecoded + let latestVersionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .latestVersionId) + latestVersionId = latestVersionIdDecoded + let imageSetStateDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetState.self, forKey: .imageSetState) + imageSetState = imageSetStateDecoded + let imageSetWorkflowStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetWorkflowStatus.self, forKey: .imageSetWorkflowStatus) + imageSetWorkflowStatus = imageSetWorkflowStatusDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + let imageSetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageSetArn) + imageSetArn = imageSetArnDecoded + } +} + +extension MedicalImagingClientTypes { + /// Copy source image set properties. + public struct CopySourceImageSetProperties: Swift.Equatable { + /// The timestamp when the source image set properties were created. + public var createdAt: ClientRuntime.Date? + /// The Amazon Resource Name (ARN) assigned to the source image set. + public var imageSetArn: Swift.String? + /// The image set identifier for the copied source image set. + /// This member is required. + public var imageSetId: Swift.String? + /// The image set state of the copied source image set. + public var imageSetState: MedicalImagingClientTypes.ImageSetState? + /// The workflow status of the copied source image set. + public var imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? + /// The latest version identifier for the copied source image set. + /// This member is required. + public var latestVersionId: Swift.String? + /// The timestamp when the source image set properties were updated. + public var updatedAt: ClientRuntime.Date? + + public init( + createdAt: ClientRuntime.Date? = nil, + imageSetArn: Swift.String? = nil, + imageSetId: Swift.String? = nil, + imageSetState: MedicalImagingClientTypes.ImageSetState? = nil, + imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? = nil, + latestVersionId: Swift.String? = nil, + updatedAt: ClientRuntime.Date? = nil + ) + { + self.createdAt = createdAt + self.imageSetArn = imageSetArn + self.imageSetId = imageSetId + self.imageSetState = imageSetState + self.imageSetWorkflowStatus = imageSetWorkflowStatus + self.latestVersionId = latestVersionId + self.updatedAt = updatedAt + } + } + +} + +extension CreateDatastoreInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken + case datastoreName + case kmsKeyArn + case tags + } + + 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 datastoreName = self.datastoreName { + try encodeContainer.encode(datastoreName, forKey: .datastoreName) + } + if let kmsKeyArn = self.kmsKeyArn { + try encodeContainer.encode(kmsKeyArn, forKey: .kmsKeyArn) + } + if let tags = tags { + var tagsContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .tags) + for (dictKey0, tagMap0) in tags { + try tagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + } +} + +extension CreateDatastoreInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/datastore" + } +} + +public struct CreateDatastoreInput: Swift.Equatable { + /// A unique identifier for API idempotency. + /// This member is required. + public var clientToken: Swift.String? + /// The data store name. + public var datastoreName: Swift.String? + /// The Amazon Resource Name (ARN) assigned to the AWS Key Management Service (AWS KMS) key for accessing encrypted data. + public var kmsKeyArn: Swift.String? + /// The tags provided when creating a data store. + public var tags: [Swift.String:Swift.String]? + + public init( + clientToken: Swift.String? = nil, + datastoreName: Swift.String? = nil, + kmsKeyArn: Swift.String? = nil, + tags: [Swift.String:Swift.String]? = nil + ) + { + self.clientToken = clientToken + self.datastoreName = datastoreName + self.kmsKeyArn = kmsKeyArn + self.tags = tags + } +} + +struct CreateDatastoreInputBody: Swift.Equatable { + let datastoreName: Swift.String? + let clientToken: Swift.String? + let tags: [Swift.String:Swift.String]? + let kmsKeyArn: Swift.String? +} + +extension CreateDatastoreInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken + case datastoreName + case kmsKeyArn + case tags + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastoreNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreName) + datastoreName = datastoreNameDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded + 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 kmsKeyArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kmsKeyArn) + kmsKeyArn = kmsKeyArnDecoded + } +} + +public enum CreateDatastoreOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension CreateDatastoreOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: CreateDatastoreOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.datastoreId = output.datastoreId + self.datastoreStatus = output.datastoreStatus + } else { + self.datastoreId = nil + self.datastoreStatus = nil + } + } +} + +public struct CreateDatastoreOutputResponse: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The data store status. + /// This member is required. + public var datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? + + public init( + datastoreId: Swift.String? = nil, + datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? = nil + ) + { + self.datastoreId = datastoreId + self.datastoreStatus = datastoreStatus + } +} + +struct CreateDatastoreOutputResponseBody: Swift.Equatable { + let datastoreId: Swift.String? + let datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? +} + +extension CreateDatastoreOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datastoreId + case datastoreStatus + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastoreIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreId) + datastoreId = datastoreIdDecoded + let datastoreStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.DatastoreStatus.self, forKey: .datastoreStatus) + datastoreStatus = datastoreStatusDecoded + } +} + +extension MedicalImagingClientTypes.DICOMImportJobProperties: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dataAccessRoleArn + case datastoreId + case endedAt + case inputS3Uri + case jobId + case jobName + case jobStatus + case message + case outputS3Uri + case submittedAt + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let dataAccessRoleArn = self.dataAccessRoleArn { + try encodeContainer.encode(dataAccessRoleArn, forKey: .dataAccessRoleArn) + } + if let datastoreId = self.datastoreId { + try encodeContainer.encode(datastoreId, forKey: .datastoreId) + } + if let endedAt = self.endedAt { + try encodeContainer.encodeTimestamp(endedAt, format: .epochSeconds, forKey: .endedAt) + } + if let inputS3Uri = self.inputS3Uri { + try encodeContainer.encode(inputS3Uri, forKey: .inputS3Uri) + } + if let jobId = self.jobId { + try encodeContainer.encode(jobId, forKey: .jobId) + } + if let jobName = self.jobName { + try encodeContainer.encode(jobName, forKey: .jobName) + } + if let jobStatus = self.jobStatus { + try encodeContainer.encode(jobStatus.rawValue, forKey: .jobStatus) + } + if let message = self.message { + try encodeContainer.encode(message, forKey: .message) + } + if let outputS3Uri = self.outputS3Uri { + try encodeContainer.encode(outputS3Uri, forKey: .outputS3Uri) + } + if let submittedAt = self.submittedAt { + try encodeContainer.encodeTimestamp(submittedAt, format: .epochSeconds, forKey: .submittedAt) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let jobIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .jobId) + jobId = jobIdDecoded + let jobNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .jobName) + jobName = jobNameDecoded + let jobStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.JobStatus.self, forKey: .jobStatus) + jobStatus = jobStatusDecoded + let datastoreIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreId) + datastoreId = datastoreIdDecoded + let dataAccessRoleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dataAccessRoleArn) + dataAccessRoleArn = dataAccessRoleArnDecoded + let endedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endedAt) + endedAt = endedAtDecoded + let submittedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .submittedAt) + submittedAt = submittedAtDecoded + let inputS3UriDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inputS3Uri) + inputS3Uri = inputS3UriDecoded + let outputS3UriDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outputS3Uri) + outputS3Uri = outputS3UriDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension MedicalImagingClientTypes { + /// Properties of the import job. + public struct DICOMImportJobProperties: Swift.Equatable { + /// The Amazon Resource Name (ARN) that grants permissions to access medical imaging resources. + /// This member is required. + public var dataAccessRoleArn: Swift.String? + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The timestamp for when the import job was ended. + public var endedAt: ClientRuntime.Date? + /// The input prefix path for the S3 bucket that contains the DICOM P10 files to be imported. + /// This member is required. + public var inputS3Uri: Swift.String? + /// The import job identifier. + /// This member is required. + public var jobId: Swift.String? + /// The import job name. + /// This member is required. + public var jobName: Swift.String? + /// The filters for listing import jobs based on status. + /// This member is required. + public var jobStatus: MedicalImagingClientTypes.JobStatus? + /// The error message thrown if an import job fails. + public var message: Swift.String? + /// The output prefix of the S3 bucket to upload the results of the DICOM import job. + /// This member is required. + public var outputS3Uri: Swift.String? + /// The timestamp for when the import job was submitted. + public var submittedAt: ClientRuntime.Date? + + public init( + dataAccessRoleArn: Swift.String? = nil, + datastoreId: Swift.String? = nil, + endedAt: ClientRuntime.Date? = nil, + inputS3Uri: Swift.String? = nil, + jobId: Swift.String? = nil, + jobName: Swift.String? = nil, + jobStatus: MedicalImagingClientTypes.JobStatus? = nil, + message: Swift.String? = nil, + outputS3Uri: Swift.String? = nil, + submittedAt: ClientRuntime.Date? = nil + ) + { + self.dataAccessRoleArn = dataAccessRoleArn + self.datastoreId = datastoreId + self.endedAt = endedAt + self.inputS3Uri = inputS3Uri + self.jobId = jobId + self.jobName = jobName + self.jobStatus = jobStatus + self.message = message + self.outputS3Uri = outputS3Uri + self.submittedAt = submittedAt + } + } + +} + +extension MedicalImagingClientTypes.DICOMImportJobSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dataAccessRoleArn + case datastoreId + case endedAt + case jobId + case jobName + case jobStatus + case message + case submittedAt + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let dataAccessRoleArn = self.dataAccessRoleArn { + try encodeContainer.encode(dataAccessRoleArn, forKey: .dataAccessRoleArn) + } + if let datastoreId = self.datastoreId { + try encodeContainer.encode(datastoreId, forKey: .datastoreId) + } + if let endedAt = self.endedAt { + try encodeContainer.encodeTimestamp(endedAt, format: .epochSeconds, forKey: .endedAt) + } + if let jobId = self.jobId { + try encodeContainer.encode(jobId, forKey: .jobId) + } + if let jobName = self.jobName { + try encodeContainer.encode(jobName, forKey: .jobName) + } + if let jobStatus = self.jobStatus { + try encodeContainer.encode(jobStatus.rawValue, forKey: .jobStatus) + } + if let message = self.message { + try encodeContainer.encode(message, forKey: .message) + } + if let submittedAt = self.submittedAt { + try encodeContainer.encodeTimestamp(submittedAt, format: .epochSeconds, forKey: .submittedAt) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let jobIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .jobId) + jobId = jobIdDecoded + let jobNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .jobName) + jobName = jobNameDecoded + let jobStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.JobStatus.self, forKey: .jobStatus) + jobStatus = jobStatusDecoded + let datastoreIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreId) + datastoreId = datastoreIdDecoded + let dataAccessRoleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dataAccessRoleArn) + dataAccessRoleArn = dataAccessRoleArnDecoded + let endedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endedAt) + endedAt = endedAtDecoded + let submittedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .submittedAt) + submittedAt = submittedAtDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension MedicalImagingClientTypes { + /// Summary of import job. + public struct DICOMImportJobSummary: Swift.Equatable { + /// The Amazon Resource Name (ARN) that grants permissions to access medical imaging resources. + public var dataAccessRoleArn: Swift.String? + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The timestamp when an import job ended. + public var endedAt: ClientRuntime.Date? + /// The import job identifier. + /// This member is required. + public var jobId: Swift.String? + /// The import job name. + /// This member is required. + public var jobName: Swift.String? + /// The filters for listing import jobs based on status. + /// This member is required. + public var jobStatus: MedicalImagingClientTypes.JobStatus? + /// The error message thrown if an import job fails. + public var message: Swift.String? + /// The timestamp when an import job was submitted. + public var submittedAt: ClientRuntime.Date? + + public init( + dataAccessRoleArn: Swift.String? = nil, + datastoreId: Swift.String? = nil, + endedAt: ClientRuntime.Date? = nil, + jobId: Swift.String? = nil, + jobName: Swift.String? = nil, + jobStatus: MedicalImagingClientTypes.JobStatus? = nil, + message: Swift.String? = nil, + submittedAt: ClientRuntime.Date? = nil + ) + { + self.dataAccessRoleArn = dataAccessRoleArn + self.datastoreId = datastoreId + self.endedAt = endedAt + self.jobId = jobId + self.jobName = jobName + self.jobStatus = jobStatus + self.message = message + self.submittedAt = submittedAt + } + } + +} + +extension MedicalImagingClientTypes.DICOMStudyDateAndTime: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dicomStudyDate = "DICOMStudyDate" + case dicomStudyTime = "DICOMStudyTime" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let dicomStudyDate = self.dicomStudyDate { + try encodeContainer.encode(dicomStudyDate, forKey: .dicomStudyDate) + } + if let dicomStudyTime = self.dicomStudyTime { + try encodeContainer.encode(dicomStudyTime, forKey: .dicomStudyTime) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let dicomStudyDateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomStudyDate) + dicomStudyDate = dicomStudyDateDecoded + let dicomStudyTimeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomStudyTime) + dicomStudyTime = dicomStudyTimeDecoded + } +} + +extension MedicalImagingClientTypes.DICOMStudyDateAndTime: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "DICOMStudyDateAndTime(dicomStudyDate: \"CONTENT_REDACTED\", dicomStudyTime: \"CONTENT_REDACTED\")"} +} + +extension MedicalImagingClientTypes { + /// The aggregated structure to store DICOM study date and study time for search capabilities. + public struct DICOMStudyDateAndTime: Swift.Equatable { + /// The DICOM study date provided in yyMMdd format. + /// This member is required. + public var dicomStudyDate: Swift.String? + /// The DICOM study time provided in HHmmss.FFFFFF format. + public var dicomStudyTime: Swift.String? + + public init( + dicomStudyDate: Swift.String? = nil, + dicomStudyTime: Swift.String? = nil + ) + { + self.dicomStudyDate = dicomStudyDate + self.dicomStudyTime = dicomStudyTime + } + } + +} + +extension MedicalImagingClientTypes.DICOMTags: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dicomAccessionNumber = "DICOMAccessionNumber" + case dicomNumberOfStudyRelatedInstances = "DICOMNumberOfStudyRelatedInstances" + case dicomNumberOfStudyRelatedSeries = "DICOMNumberOfStudyRelatedSeries" + case dicomPatientBirthDate = "DICOMPatientBirthDate" + case dicomPatientId = "DICOMPatientId" + case dicomPatientName = "DICOMPatientName" + case dicomPatientSex = "DICOMPatientSex" + case dicomStudyDate = "DICOMStudyDate" + case dicomStudyDescription = "DICOMStudyDescription" + case dicomStudyId = "DICOMStudyId" + case dicomStudyInstanceUID = "DICOMStudyInstanceUID" + case dicomStudyTime = "DICOMStudyTime" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let dicomAccessionNumber = self.dicomAccessionNumber { + try encodeContainer.encode(dicomAccessionNumber, forKey: .dicomAccessionNumber) + } + if dicomNumberOfStudyRelatedInstances != 0 { + try encodeContainer.encode(dicomNumberOfStudyRelatedInstances, forKey: .dicomNumberOfStudyRelatedInstances) + } + if dicomNumberOfStudyRelatedSeries != 0 { + try encodeContainer.encode(dicomNumberOfStudyRelatedSeries, forKey: .dicomNumberOfStudyRelatedSeries) + } + if let dicomPatientBirthDate = self.dicomPatientBirthDate { + try encodeContainer.encode(dicomPatientBirthDate, forKey: .dicomPatientBirthDate) + } + if let dicomPatientId = self.dicomPatientId { + try encodeContainer.encode(dicomPatientId, forKey: .dicomPatientId) + } + if let dicomPatientName = self.dicomPatientName { + try encodeContainer.encode(dicomPatientName, forKey: .dicomPatientName) + } + if let dicomPatientSex = self.dicomPatientSex { + try encodeContainer.encode(dicomPatientSex, forKey: .dicomPatientSex) + } + if let dicomStudyDate = self.dicomStudyDate { + try encodeContainer.encode(dicomStudyDate, forKey: .dicomStudyDate) + } + if let dicomStudyDescription = self.dicomStudyDescription { + try encodeContainer.encode(dicomStudyDescription, forKey: .dicomStudyDescription) + } + if let dicomStudyId = self.dicomStudyId { + try encodeContainer.encode(dicomStudyId, forKey: .dicomStudyId) + } + if let dicomStudyInstanceUID = self.dicomStudyInstanceUID { + try encodeContainer.encode(dicomStudyInstanceUID, forKey: .dicomStudyInstanceUID) + } + if let dicomStudyTime = self.dicomStudyTime { + try encodeContainer.encode(dicomStudyTime, forKey: .dicomStudyTime) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let dicomPatientIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomPatientId) + dicomPatientId = dicomPatientIdDecoded + let dicomPatientNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomPatientName) + dicomPatientName = dicomPatientNameDecoded + let dicomPatientBirthDateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomPatientBirthDate) + dicomPatientBirthDate = dicomPatientBirthDateDecoded + let dicomPatientSexDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomPatientSex) + dicomPatientSex = dicomPatientSexDecoded + let dicomStudyInstanceUIDDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomStudyInstanceUID) + dicomStudyInstanceUID = dicomStudyInstanceUIDDecoded + let dicomStudyIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomStudyId) + dicomStudyId = dicomStudyIdDecoded + let dicomStudyDescriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomStudyDescription) + dicomStudyDescription = dicomStudyDescriptionDecoded + let dicomNumberOfStudyRelatedSeriesDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dicomNumberOfStudyRelatedSeries) ?? 0 + dicomNumberOfStudyRelatedSeries = dicomNumberOfStudyRelatedSeriesDecoded + let dicomNumberOfStudyRelatedInstancesDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dicomNumberOfStudyRelatedInstances) ?? 0 + dicomNumberOfStudyRelatedInstances = dicomNumberOfStudyRelatedInstancesDecoded + let dicomAccessionNumberDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomAccessionNumber) + dicomAccessionNumber = dicomAccessionNumberDecoded + let dicomStudyDateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomStudyDate) + dicomStudyDate = dicomStudyDateDecoded + let dicomStudyTimeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dicomStudyTime) + dicomStudyTime = dicomStudyTimeDecoded + } +} + +extension MedicalImagingClientTypes.DICOMTags: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "DICOMTags(dicomNumberOfStudyRelatedInstances: \(Swift.String(describing: dicomNumberOfStudyRelatedInstances)), dicomNumberOfStudyRelatedSeries: \(Swift.String(describing: dicomNumberOfStudyRelatedSeries)), dicomAccessionNumber: \"CONTENT_REDACTED\", dicomPatientBirthDate: \"CONTENT_REDACTED\", dicomPatientId: \"CONTENT_REDACTED\", dicomPatientName: \"CONTENT_REDACTED\", dicomPatientSex: \"CONTENT_REDACTED\", dicomStudyDate: \"CONTENT_REDACTED\", dicomStudyDescription: \"CONTENT_REDACTED\", dicomStudyId: \"CONTENT_REDACTED\", dicomStudyInstanceUID: \"CONTENT_REDACTED\", dicomStudyTime: \"CONTENT_REDACTED\")"} +} + +extension MedicalImagingClientTypes { + /// The DICOM attributes returned as a part of a response. Each image set has these properties as part of a search result. + public struct DICOMTags: Swift.Equatable { + /// The accession number for the DICOM study. + public var dicomAccessionNumber: Swift.String? + /// The total number of instances in the DICOM study. + public var dicomNumberOfStudyRelatedInstances: Swift.Int + /// The total number of series in the DICOM study. + public var dicomNumberOfStudyRelatedSeries: Swift.Int + /// The patient birth date. + public var dicomPatientBirthDate: Swift.String? + /// The unique identifier for a patient in a DICOM Study. + public var dicomPatientId: Swift.String? + /// The patient name. + public var dicomPatientName: Swift.String? + /// The patient sex. + public var dicomPatientSex: Swift.String? + /// The study date. + public var dicomStudyDate: Swift.String? + /// The description of the study. + public var dicomStudyDescription: Swift.String? + /// The DICOM provided studyId. + public var dicomStudyId: Swift.String? + /// The DICOM provided identifier for studyInstanceUid.> + public var dicomStudyInstanceUID: Swift.String? + /// The study time. + public var dicomStudyTime: Swift.String? + + public init( + dicomAccessionNumber: Swift.String? = nil, + dicomNumberOfStudyRelatedInstances: Swift.Int = 0, + dicomNumberOfStudyRelatedSeries: Swift.Int = 0, + dicomPatientBirthDate: Swift.String? = nil, + dicomPatientId: Swift.String? = nil, + dicomPatientName: Swift.String? = nil, + dicomPatientSex: Swift.String? = nil, + dicomStudyDate: Swift.String? = nil, + dicomStudyDescription: Swift.String? = nil, + dicomStudyId: Swift.String? = nil, + dicomStudyInstanceUID: Swift.String? = nil, + dicomStudyTime: Swift.String? = nil + ) + { + self.dicomAccessionNumber = dicomAccessionNumber + self.dicomNumberOfStudyRelatedInstances = dicomNumberOfStudyRelatedInstances + self.dicomNumberOfStudyRelatedSeries = dicomNumberOfStudyRelatedSeries + self.dicomPatientBirthDate = dicomPatientBirthDate + self.dicomPatientId = dicomPatientId + self.dicomPatientName = dicomPatientName + self.dicomPatientSex = dicomPatientSex + self.dicomStudyDate = dicomStudyDate + self.dicomStudyDescription = dicomStudyDescription + self.dicomStudyId = dicomStudyId + self.dicomStudyInstanceUID = dicomStudyInstanceUID + self.dicomStudyTime = dicomStudyTime + } + } + +} + +extension MedicalImagingClientTypes.DICOMUpdates: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case removableAttributes + case updatableAttributes + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let removableAttributes = self.removableAttributes { + try encodeContainer.encode(removableAttributes.base64EncodedString(), forKey: .removableAttributes) + } + if let updatableAttributes = self.updatableAttributes { + try encodeContainer.encode(updatableAttributes.base64EncodedString(), forKey: .updatableAttributes) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let removableAttributesDecoded = try containerValues.decodeIfPresent(ClientRuntime.Data.self, forKey: .removableAttributes) + removableAttributes = removableAttributesDecoded + let updatableAttributesDecoded = try containerValues.decodeIfPresent(ClientRuntime.Data.self, forKey: .updatableAttributes) + updatableAttributes = updatableAttributesDecoded + } +} + +extension MedicalImagingClientTypes.DICOMUpdates: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "DICOMUpdates(removableAttributes: \"CONTENT_REDACTED\", updatableAttributes: \"CONTENT_REDACTED\")"} +} + +extension MedicalImagingClientTypes { + /// The object containing removableAttributes and updatableAttributes. + public struct DICOMUpdates: Swift.Equatable { + /// The DICOM tags to be removed from ImageSetMetadata. + public var removableAttributes: ClientRuntime.Data? + /// The DICOM tags that need to be updated in ImageSetMetadata. + public var updatableAttributes: ClientRuntime.Data? + + public init( + removableAttributes: ClientRuntime.Data? = nil, + updatableAttributes: ClientRuntime.Data? = nil + ) + { + self.removableAttributes = removableAttributes + self.updatableAttributes = updatableAttributes + } + } + +} + +extension MedicalImagingClientTypes.DatastoreProperties: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdAt + case datastoreArn + case datastoreId + case datastoreName + case datastoreStatus + case kmsKeyArn + case updatedAt + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let createdAt = self.createdAt { + try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) + } + if let datastoreArn = self.datastoreArn { + try encodeContainer.encode(datastoreArn, forKey: .datastoreArn) + } + if let datastoreId = self.datastoreId { + try encodeContainer.encode(datastoreId, forKey: .datastoreId) + } + if let datastoreName = self.datastoreName { + try encodeContainer.encode(datastoreName, forKey: .datastoreName) + } + if let datastoreStatus = self.datastoreStatus { + try encodeContainer.encode(datastoreStatus.rawValue, forKey: .datastoreStatus) + } + if let kmsKeyArn = self.kmsKeyArn { + try encodeContainer.encode(kmsKeyArn, forKey: .kmsKeyArn) + } + if let updatedAt = self.updatedAt { + try encodeContainer.encodeTimestamp(updatedAt, format: .epochSeconds, forKey: .updatedAt) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastoreIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreId) + datastoreId = datastoreIdDecoded + let datastoreNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreName) + datastoreName = datastoreNameDecoded + let datastoreStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.DatastoreStatus.self, forKey: .datastoreStatus) + datastoreStatus = datastoreStatusDecoded + let kmsKeyArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kmsKeyArn) + kmsKeyArn = kmsKeyArnDecoded + let datastoreArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreArn) + datastoreArn = datastoreArnDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + } +} + +extension MedicalImagingClientTypes { + /// The properties associated with the data store. + public struct DatastoreProperties: Swift.Equatable { + /// The timestamp when the data store was created. + public var createdAt: ClientRuntime.Date? + /// The Amazon Resource Name (ARN) for the data store. + public var datastoreArn: Swift.String? + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The data store name. + /// This member is required. + public var datastoreName: Swift.String? + /// The data store status. + /// This member is required. + public var datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? + /// The Amazon Resource Name (ARN) assigned to the AWS Key Management Service (AWS KMS) key for accessing encrypted data. + public var kmsKeyArn: Swift.String? + /// The timestamp when the data store was last updated. + public var updatedAt: ClientRuntime.Date? + + public init( + createdAt: ClientRuntime.Date? = nil, + datastoreArn: Swift.String? = nil, + datastoreId: Swift.String? = nil, + datastoreName: Swift.String? = nil, + datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? = nil, + kmsKeyArn: Swift.String? = nil, + updatedAt: ClientRuntime.Date? = nil + ) + { + self.createdAt = createdAt + self.datastoreArn = datastoreArn + self.datastoreId = datastoreId + self.datastoreName = datastoreName + self.datastoreStatus = datastoreStatus + self.kmsKeyArn = kmsKeyArn + self.updatedAt = updatedAt + } + } + +} + +extension MedicalImagingClientTypes { + public enum DatastoreStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case active + case createFailed + case creating + case deleted + case deleting + case sdkUnknown(Swift.String) + + public static var allCases: [DatastoreStatus] { + return [ + .active, + .createFailed, + .creating, + .deleted, + .deleting, + .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 .createFailed: return "CREATE_FAILED" + case .creating: return "CREATING" + case .deleted: return "DELETED" + case .deleting: return "DELETING" + 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 = DatastoreStatus(rawValue: rawValue) ?? DatastoreStatus.sdkUnknown(rawValue) + } + } +} + +extension MedicalImagingClientTypes.DatastoreSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdAt + case datastoreArn + case datastoreId + case datastoreName + case datastoreStatus + case updatedAt + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let createdAt = self.createdAt { + try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) + } + if let datastoreArn = self.datastoreArn { + try encodeContainer.encode(datastoreArn, forKey: .datastoreArn) + } + if let datastoreId = self.datastoreId { + try encodeContainer.encode(datastoreId, forKey: .datastoreId) + } + if let datastoreName = self.datastoreName { + try encodeContainer.encode(datastoreName, forKey: .datastoreName) + } + if let datastoreStatus = self.datastoreStatus { + try encodeContainer.encode(datastoreStatus.rawValue, forKey: .datastoreStatus) + } + if let updatedAt = self.updatedAt { + try encodeContainer.encodeTimestamp(updatedAt, format: .epochSeconds, forKey: .updatedAt) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastoreIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreId) + datastoreId = datastoreIdDecoded + let datastoreNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreName) + datastoreName = datastoreNameDecoded + let datastoreStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.DatastoreStatus.self, forKey: .datastoreStatus) + datastoreStatus = datastoreStatusDecoded + let datastoreArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreArn) + datastoreArn = datastoreArnDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + } +} + +extension MedicalImagingClientTypes { + /// List of summaries of data stores. + public struct DatastoreSummary: Swift.Equatable { + /// The timestamp when the data store was created. + public var createdAt: ClientRuntime.Date? + /// The Amazon Resource Name (ARN) for the data store. + public var datastoreArn: Swift.String? + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The data store name. + /// This member is required. + public var datastoreName: Swift.String? + /// The data store status. + /// This member is required. + public var datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? + /// The timestamp when the data store was last updated. + public var updatedAt: ClientRuntime.Date? + + public init( + createdAt: ClientRuntime.Date? = nil, + datastoreArn: Swift.String? = nil, + datastoreId: Swift.String? = nil, + datastoreName: Swift.String? = nil, + datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? = nil, + updatedAt: ClientRuntime.Date? = nil + ) + { + self.createdAt = createdAt + self.datastoreArn = datastoreArn + self.datastoreId = datastoreId + self.datastoreName = datastoreName + self.datastoreStatus = datastoreStatus + self.updatedAt = updatedAt + } + } + +} + +extension DeleteDatastoreInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + return "/datastore/\(datastoreId.urlPercentEncoding())" + } +} + +public struct DeleteDatastoreInput: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + + public init( + datastoreId: Swift.String? = nil + ) + { + self.datastoreId = datastoreId + } +} + +struct DeleteDatastoreInputBody: Swift.Equatable { +} + +extension DeleteDatastoreInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteDatastoreOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteDatastoreOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DeleteDatastoreOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.datastoreId = output.datastoreId + self.datastoreStatus = output.datastoreStatus + } else { + self.datastoreId = nil + self.datastoreStatus = nil + } + } +} + +public struct DeleteDatastoreOutputResponse: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The data store status. + /// This member is required. + public var datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? + + public init( + datastoreId: Swift.String? = nil, + datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? = nil + ) + { + self.datastoreId = datastoreId + self.datastoreStatus = datastoreStatus + } +} + +struct DeleteDatastoreOutputResponseBody: Swift.Equatable { + let datastoreId: Swift.String? + let datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? +} + +extension DeleteDatastoreOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datastoreId + case datastoreStatus + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastoreIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreId) + datastoreId = datastoreIdDecoded + let datastoreStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.DatastoreStatus.self, forKey: .datastoreStatus) + datastoreStatus = datastoreStatusDecoded + } +} + +extension DeleteImageSetInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + guard let imageSetId = imageSetId else { + return nil + } + return "/datastore/\(datastoreId.urlPercentEncoding())/imageSet/\(imageSetId.urlPercentEncoding())/deleteImageSet" + } +} + +public struct DeleteImageSetInput: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The image set identifier. + /// This member is required. + public var imageSetId: Swift.String? + + public init( + datastoreId: Swift.String? = nil, + imageSetId: Swift.String? = nil + ) + { + self.datastoreId = datastoreId + self.imageSetId = imageSetId + } +} + +struct DeleteImageSetInputBody: Swift.Equatable { +} + +extension DeleteImageSetInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DeleteImageSetOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteImageSetOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DeleteImageSetOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.datastoreId = output.datastoreId + self.imageSetId = output.imageSetId + self.imageSetState = output.imageSetState + self.imageSetWorkflowStatus = output.imageSetWorkflowStatus + } else { + self.datastoreId = nil + self.imageSetId = nil + self.imageSetState = nil + self.imageSetWorkflowStatus = nil + } + } +} + +public struct DeleteImageSetOutputResponse: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The image set identifier. + /// This member is required. + public var imageSetId: Swift.String? + /// The image set state. + /// This member is required. + public var imageSetState: MedicalImagingClientTypes.ImageSetState? + /// The image set workflow status. + /// This member is required. + public var imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? + + public init( + datastoreId: Swift.String? = nil, + imageSetId: Swift.String? = nil, + imageSetState: MedicalImagingClientTypes.ImageSetState? = nil, + imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? = nil + ) + { + self.datastoreId = datastoreId + self.imageSetId = imageSetId + self.imageSetState = imageSetState + self.imageSetWorkflowStatus = imageSetWorkflowStatus + } +} + +struct DeleteImageSetOutputResponseBody: Swift.Equatable { + let datastoreId: Swift.String? + let imageSetId: Swift.String? + let imageSetState: MedicalImagingClientTypes.ImageSetState? + let imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? +} + +extension DeleteImageSetOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datastoreId + case imageSetId + case imageSetState + case imageSetWorkflowStatus + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastoreIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreId) + datastoreId = datastoreIdDecoded + let imageSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageSetId) + imageSetId = imageSetIdDecoded + let imageSetStateDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetState.self, forKey: .imageSetState) + imageSetState = imageSetStateDecoded + let imageSetWorkflowStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetWorkflowStatus.self, forKey: .imageSetWorkflowStatus) + imageSetWorkflowStatus = imageSetWorkflowStatusDecoded + } +} + +extension GetDICOMImportJobInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + guard let jobId = jobId else { + return nil + } + return "/getDICOMImportJob/datastore/\(datastoreId.urlPercentEncoding())/job/\(jobId.urlPercentEncoding())" + } +} + +public struct GetDICOMImportJobInput: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The import job identifier. + /// This member is required. + public var jobId: Swift.String? + + public init( + datastoreId: Swift.String? = nil, + jobId: Swift.String? = nil + ) + { + self.datastoreId = datastoreId + self.jobId = jobId + } +} + +struct GetDICOMImportJobInputBody: Swift.Equatable { +} + +extension GetDICOMImportJobInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum GetDICOMImportJobOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetDICOMImportJobOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetDICOMImportJobOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.jobProperties = output.jobProperties + } else { + self.jobProperties = nil + } + } +} + +public struct GetDICOMImportJobOutputResponse: Swift.Equatable { + /// The properties of the import job. + /// This member is required. + public var jobProperties: MedicalImagingClientTypes.DICOMImportJobProperties? + + public init( + jobProperties: MedicalImagingClientTypes.DICOMImportJobProperties? = nil + ) + { + self.jobProperties = jobProperties + } +} + +struct GetDICOMImportJobOutputResponseBody: Swift.Equatable { + let jobProperties: MedicalImagingClientTypes.DICOMImportJobProperties? +} + +extension GetDICOMImportJobOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case jobProperties + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let jobPropertiesDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.DICOMImportJobProperties.self, forKey: .jobProperties) + jobProperties = jobPropertiesDecoded + } +} + +extension GetDatastoreInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + return "/datastore/\(datastoreId.urlPercentEncoding())" + } +} + +public struct GetDatastoreInput: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + + public init( + datastoreId: Swift.String? = nil + ) + { + self.datastoreId = datastoreId + } +} + +struct GetDatastoreInputBody: Swift.Equatable { +} + +extension GetDatastoreInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum GetDatastoreOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetDatastoreOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetDatastoreOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.datastoreProperties = output.datastoreProperties + } else { + self.datastoreProperties = nil + } + } +} + +public struct GetDatastoreOutputResponse: Swift.Equatable { + /// The data store properties. + /// This member is required. + public var datastoreProperties: MedicalImagingClientTypes.DatastoreProperties? + + public init( + datastoreProperties: MedicalImagingClientTypes.DatastoreProperties? = nil + ) + { + self.datastoreProperties = datastoreProperties + } +} + +struct GetDatastoreOutputResponseBody: Swift.Equatable { + let datastoreProperties: MedicalImagingClientTypes.DatastoreProperties? +} + +extension GetDatastoreOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datastoreProperties + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastorePropertiesDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.DatastoreProperties.self, forKey: .datastoreProperties) + datastoreProperties = datastorePropertiesDecoded + } +} + +public struct GetImageFrameInputBodyMiddleware: ClientRuntime.Middleware { + public let id: Swift.String = "GetImageFrameInputBodyMiddleware" + + public init() {} + + public func handle(context: Context, + input: ClientRuntime.SerializeStepInput, + next: H) async throws -> ClientRuntime.OperationOutput + where H: Handler, + Self.MInput == H.Input, + Self.MOutput == H.Output, + Self.Context == H.Context + { + do { + let encoder = context.getEncoder() + if let imageFrameInformation = input.operationInput.imageFrameInformation { + let imageFrameInformationData = try encoder.encode(imageFrameInformation) + let imageFrameInformationBody = ClientRuntime.HttpBody.data(imageFrameInformationData) + input.builder.withBody(imageFrameInformationBody) + } else { + if encoder is JSONEncoder { + // Encode an empty body as an empty structure in JSON + let imageFrameInformationData = "{}".data(using: .utf8)! + let imageFrameInformationBody = ClientRuntime.HttpBody.data(imageFrameInformationData) + input.builder.withBody(imageFrameInformationBody) + } + } + } catch let err { + throw ClientRuntime.ClientError.unknownError(err.localizedDescription) + } + return try await next.handle(context: context, input: input) + } + + public typealias MInput = ClientRuntime.SerializeStepInput + public typealias MOutput = ClientRuntime.OperationOutput + public typealias Context = ClientRuntime.HttpContext +} + +extension GetImageFrameInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case imageFrameInformation + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let imageFrameInformation = self.imageFrameInformation { + try encodeContainer.encode(imageFrameInformation, forKey: .imageFrameInformation) + } + } +} + +extension GetImageFrameInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + guard let imageSetId = imageSetId else { + return nil + } + return "/datastore/\(datastoreId.urlPercentEncoding())/imageSet/\(imageSetId.urlPercentEncoding())/getImageFrame" + } +} + +public struct GetImageFrameInput: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// Information about the image frame (pixel data) identifier. + /// This member is required. + public var imageFrameInformation: MedicalImagingClientTypes.ImageFrameInformation? + /// The image set identifier. + /// This member is required. + public var imageSetId: Swift.String? + + public init( + datastoreId: Swift.String? = nil, + imageFrameInformation: MedicalImagingClientTypes.ImageFrameInformation? = nil, + imageSetId: Swift.String? = nil + ) + { + self.datastoreId = datastoreId + self.imageFrameInformation = imageFrameInformation + self.imageSetId = imageSetId + } +} + +struct GetImageFrameInputBody: Swift.Equatable { + let imageFrameInformation: MedicalImagingClientTypes.ImageFrameInformation? +} + +extension GetImageFrameInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case imageFrameInformation + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let imageFrameInformationDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageFrameInformation.self, forKey: .imageFrameInformation) + imageFrameInformation = imageFrameInformationDecoded + } +} + +public enum GetImageFrameOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetImageFrameOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let contentTypeHeaderValue = httpResponse.headers.value(for: "Content-Type") { + self.contentType = contentTypeHeaderValue + } else { + self.contentType = nil + } + switch httpResponse.body { + case .data(let data): + self.imageFrameBlob = .data(data) + case .stream(let stream): + self.imageFrameBlob = .stream(stream) + case .none: + self.imageFrameBlob = nil + } + } +} + +public struct GetImageFrameOutputResponse: Swift.Equatable { + /// The format in which the image frame information is returned to the customer. Default is application/octet-stream. + public var contentType: Swift.String? + /// The blob containing the aggregated image frame information. + /// This member is required. + public var imageFrameBlob: ClientRuntime.ByteStream? + + public init( + contentType: Swift.String? = nil, + imageFrameBlob: ClientRuntime.ByteStream? = nil + ) + { + self.contentType = contentType + self.imageFrameBlob = imageFrameBlob + } +} + +struct GetImageFrameOutputResponseBody: Swift.Equatable { + let imageFrameBlob: ClientRuntime.ByteStream? +} + +extension GetImageFrameOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case imageFrameBlob + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let imageFrameBlobDecoded = try containerValues.decodeIfPresent(ClientRuntime.ByteStream.self, forKey: .imageFrameBlob) + imageFrameBlob = imageFrameBlobDecoded + } +} + +extension GetImageSetInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let versionId = versionId { + let versionIdQueryItem = ClientRuntime.URLQueryItem(name: "version".urlPercentEncoding(), value: Swift.String(versionId).urlPercentEncoding()) + items.append(versionIdQueryItem) + } + return items + } + } +} + +extension GetImageSetInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + guard let imageSetId = imageSetId else { + return nil + } + return "/datastore/\(datastoreId.urlPercentEncoding())/imageSet/\(imageSetId.urlPercentEncoding())/getImageSet" + } +} + +public struct GetImageSetInput: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The image set identifier. + /// This member is required. + public var imageSetId: Swift.String? + /// The image set version identifier. + public var versionId: Swift.String? + + public init( + datastoreId: Swift.String? = nil, + imageSetId: Swift.String? = nil, + versionId: Swift.String? = nil + ) + { + self.datastoreId = datastoreId + self.imageSetId = imageSetId + self.versionId = versionId + } +} + +struct GetImageSetInputBody: Swift.Equatable { +} + +extension GetImageSetInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +extension GetImageSetMetadataInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let versionId = versionId { + let versionIdQueryItem = ClientRuntime.URLQueryItem(name: "version".urlPercentEncoding(), value: Swift.String(versionId).urlPercentEncoding()) + items.append(versionIdQueryItem) + } + return items + } + } +} + +extension GetImageSetMetadataInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + guard let imageSetId = imageSetId else { + return nil + } + return "/datastore/\(datastoreId.urlPercentEncoding())/imageSet/\(imageSetId.urlPercentEncoding())/getImageSetMetadata" + } +} + +public struct GetImageSetMetadataInput: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The image set identifier. + /// This member is required. + public var imageSetId: Swift.String? + /// The image set version identifier. + public var versionId: Swift.String? + + public init( + datastoreId: Swift.String? = nil, + imageSetId: Swift.String? = nil, + versionId: Swift.String? = nil + ) + { + self.datastoreId = datastoreId + self.imageSetId = imageSetId + self.versionId = versionId + } +} + +struct GetImageSetMetadataInputBody: Swift.Equatable { +} + +extension GetImageSetMetadataInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum GetImageSetMetadataOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetImageSetMetadataOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let contentEncodingHeaderValue = httpResponse.headers.value(for: "Content-Encoding") { + self.contentEncoding = contentEncodingHeaderValue + } else { + self.contentEncoding = nil + } + if let contentTypeHeaderValue = httpResponse.headers.value(for: "Content-Type") { + self.contentType = contentTypeHeaderValue + } else { + self.contentType = nil + } + switch httpResponse.body { + case .data(let data): + self.imageSetMetadataBlob = .data(data) + case .stream(let stream): + self.imageSetMetadataBlob = .stream(stream) + case .none: + self.imageSetMetadataBlob = nil + } + } +} + +public struct GetImageSetMetadataOutputResponse: Swift.Equatable { + /// The compression format in which image set metadata attributes are returned. + public var contentEncoding: Swift.String? + /// The format in which the study metadata is returned to the customer. Default is text/plain. + public var contentType: Swift.String? + /// The blob containing the aggregated metadata information for the image set. + /// This member is required. + public var imageSetMetadataBlob: ClientRuntime.ByteStream? + + public init( + contentEncoding: Swift.String? = nil, + contentType: Swift.String? = nil, + imageSetMetadataBlob: ClientRuntime.ByteStream? = nil + ) + { + self.contentEncoding = contentEncoding + self.contentType = contentType + self.imageSetMetadataBlob = imageSetMetadataBlob + } +} + +struct GetImageSetMetadataOutputResponseBody: Swift.Equatable { + let imageSetMetadataBlob: ClientRuntime.ByteStream? +} + +extension GetImageSetMetadataOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case imageSetMetadataBlob + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let imageSetMetadataBlobDecoded = try containerValues.decodeIfPresent(ClientRuntime.ByteStream.self, forKey: .imageSetMetadataBlob) + imageSetMetadataBlob = imageSetMetadataBlobDecoded + } +} + +public enum GetImageSetOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetImageSetOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetImageSetOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.createdAt = output.createdAt + self.datastoreId = output.datastoreId + self.deletedAt = output.deletedAt + self.imageSetArn = output.imageSetArn + self.imageSetId = output.imageSetId + self.imageSetState = output.imageSetState + self.imageSetWorkflowStatus = output.imageSetWorkflowStatus + self.message = output.message + self.updatedAt = output.updatedAt + self.versionId = output.versionId + } else { + self.createdAt = nil + self.datastoreId = nil + self.deletedAt = nil + self.imageSetArn = nil + self.imageSetId = nil + self.imageSetState = nil + self.imageSetWorkflowStatus = nil + self.message = nil + self.updatedAt = nil + self.versionId = nil + } + } +} + +public struct GetImageSetOutputResponse: Swift.Equatable { + /// The timestamp when image set properties were created. + public var createdAt: ClientRuntime.Date? + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The timestamp when the image set properties were deleted. + public var deletedAt: ClientRuntime.Date? + /// The Amazon Resource Name (ARN) assigned to the image set. + public var imageSetArn: Swift.String? + /// The image set identifier. + /// This member is required. + public var imageSetId: Swift.String? + /// The image set state. + /// This member is required. + public var imageSetState: MedicalImagingClientTypes.ImageSetState? + /// The image set workflow status. + public var imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? + /// The error message thrown if an image set action fails. + public var message: Swift.String? + /// The timestamp when image set properties were updated. + public var updatedAt: ClientRuntime.Date? + /// The image set version identifier. + /// This member is required. + public var versionId: Swift.String? + + public init( + createdAt: ClientRuntime.Date? = nil, + datastoreId: Swift.String? = nil, + deletedAt: ClientRuntime.Date? = nil, + imageSetArn: Swift.String? = nil, + imageSetId: Swift.String? = nil, + imageSetState: MedicalImagingClientTypes.ImageSetState? = nil, + imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? = nil, + message: Swift.String? = nil, + updatedAt: ClientRuntime.Date? = nil, + versionId: Swift.String? = nil + ) + { + self.createdAt = createdAt + self.datastoreId = datastoreId + self.deletedAt = deletedAt + self.imageSetArn = imageSetArn + self.imageSetId = imageSetId + self.imageSetState = imageSetState + self.imageSetWorkflowStatus = imageSetWorkflowStatus + self.message = message + self.updatedAt = updatedAt + self.versionId = versionId + } +} + +struct GetImageSetOutputResponseBody: Swift.Equatable { + let datastoreId: Swift.String? + let imageSetId: Swift.String? + let versionId: Swift.String? + let imageSetState: MedicalImagingClientTypes.ImageSetState? + let imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? + let createdAt: ClientRuntime.Date? + let updatedAt: ClientRuntime.Date? + let deletedAt: ClientRuntime.Date? + let message: Swift.String? + let imageSetArn: Swift.String? +} + +extension GetImageSetOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdAt + case datastoreId + case deletedAt + case imageSetArn + case imageSetId + case imageSetState + case imageSetWorkflowStatus + case message + case updatedAt + case versionId + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastoreIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreId) + datastoreId = datastoreIdDecoded + let imageSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageSetId) + imageSetId = imageSetIdDecoded + let versionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .versionId) + versionId = versionIdDecoded + let imageSetStateDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetState.self, forKey: .imageSetState) + imageSetState = imageSetStateDecoded + let imageSetWorkflowStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetWorkflowStatus.self, forKey: .imageSetWorkflowStatus) + imageSetWorkflowStatus = imageSetWorkflowStatusDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + let deletedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .deletedAt) + deletedAt = deletedAtDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + let imageSetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageSetArn) + imageSetArn = imageSetArnDecoded + } +} + +extension MedicalImagingClientTypes.ImageFrameInformation: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case imageFrameId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let imageFrameId = self.imageFrameId { + try encodeContainer.encode(imageFrameId, forKey: .imageFrameId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let imageFrameIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageFrameId) + imageFrameId = imageFrameIdDecoded + } +} + +extension MedicalImagingClientTypes { + /// Information about the image frame (pixel data) identifier. + public struct ImageFrameInformation: Swift.Equatable { + /// The image frame (pixel data) identifier. + /// This member is required. + public var imageFrameId: Swift.String? + + public init( + imageFrameId: Swift.String? = nil + ) + { + self.imageFrameId = imageFrameId + } + } + +} + +extension MedicalImagingClientTypes.ImageSetProperties: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case imageSetWorkflowStatus = "ImageSetWorkflowStatus" + case createdAt + case deletedAt + case imageSetId + case imageSetState + case message + case updatedAt + case versionId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let imageSetWorkflowStatus = self.imageSetWorkflowStatus { + try encodeContainer.encode(imageSetWorkflowStatus.rawValue, forKey: .imageSetWorkflowStatus) + } + if let createdAt = self.createdAt { + try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) + } + if let deletedAt = self.deletedAt { + try encodeContainer.encodeTimestamp(deletedAt, format: .epochSeconds, forKey: .deletedAt) + } + if let imageSetId = self.imageSetId { + try encodeContainer.encode(imageSetId, forKey: .imageSetId) + } + if let imageSetState = self.imageSetState { + try encodeContainer.encode(imageSetState.rawValue, forKey: .imageSetState) + } + if let message = self.message { + try encodeContainer.encode(message, forKey: .message) + } + if let updatedAt = self.updatedAt { + try encodeContainer.encodeTimestamp(updatedAt, format: .epochSeconds, forKey: .updatedAt) + } + if let versionId = self.versionId { + try encodeContainer.encode(versionId, forKey: .versionId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let imageSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageSetId) + imageSetId = imageSetIdDecoded + let versionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .versionId) + versionId = versionIdDecoded + let imageSetStateDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetState.self, forKey: .imageSetState) + imageSetState = imageSetStateDecoded + let imageSetWorkflowStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetWorkflowStatus.self, forKey: .imageSetWorkflowStatus) + imageSetWorkflowStatus = imageSetWorkflowStatusDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + let deletedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .deletedAt) + deletedAt = deletedAtDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension MedicalImagingClientTypes { + /// The image set properties. + public struct ImageSetProperties: Swift.Equatable { + /// The timestamp when the image set properties were created. + public var createdAt: ClientRuntime.Date? + /// The timestamp when the image set properties were deleted. + public var deletedAt: ClientRuntime.Date? + /// The image set identifier. + /// This member is required. + public var imageSetId: Swift.String? + /// The image set state. + /// This member is required. + public var imageSetState: MedicalImagingClientTypes.ImageSetState? + /// The image set workflow status. + public var imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? + /// The error message thrown if an image set action fails. + public var message: Swift.String? + /// The timestamp when the image set properties were updated. + public var updatedAt: ClientRuntime.Date? + /// The image set version identifier. + /// This member is required. + public var versionId: Swift.String? + + public init( + createdAt: ClientRuntime.Date? = nil, + deletedAt: ClientRuntime.Date? = nil, + imageSetId: Swift.String? = nil, + imageSetState: MedicalImagingClientTypes.ImageSetState? = nil, + imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? = nil, + message: Swift.String? = nil, + updatedAt: ClientRuntime.Date? = nil, + versionId: Swift.String? = nil + ) + { + self.createdAt = createdAt + self.deletedAt = deletedAt + self.imageSetId = imageSetId + self.imageSetState = imageSetState + self.imageSetWorkflowStatus = imageSetWorkflowStatus + self.message = message + self.updatedAt = updatedAt + self.versionId = versionId + } + } + +} + +extension MedicalImagingClientTypes { + public enum ImageSetState: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case active + case deleted + case locked + case sdkUnknown(Swift.String) + + public static var allCases: [ImageSetState] { + return [ + .active, + .deleted, + .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 .active: return "ACTIVE" + case .deleted: return "DELETED" + 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 = ImageSetState(rawValue: rawValue) ?? ImageSetState.sdkUnknown(rawValue) + } + } +} + +extension MedicalImagingClientTypes { + public enum ImageSetWorkflowStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case copied + case copying + case copyingWithReadOnlyAccess + case copyFailed + case created + case deleted + case deleting + case updated + case updateFailed + case updating + case sdkUnknown(Swift.String) + + public static var allCases: [ImageSetWorkflowStatus] { + return [ + .copied, + .copying, + .copyingWithReadOnlyAccess, + .copyFailed, + .created, + .deleted, + .deleting, + .updated, + .updateFailed, + .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 .copied: return "COPIED" + case .copying: return "COPYING" + case .copyingWithReadOnlyAccess: return "COPYING_WITH_READ_ONLY_ACCESS" + case .copyFailed: return "COPY_FAILED" + case .created: return "CREATED" + case .deleted: return "DELETED" + case .deleting: return "DELETING" + case .updated: return "UPDATED" + case .updateFailed: return "UPDATE_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 = ImageSetWorkflowStatus(rawValue: rawValue) ?? ImageSetWorkflowStatus.sdkUnknown(rawValue) + } + } +} + +extension MedicalImagingClientTypes.ImageSetsMetadataSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dicomTags = "DICOMTags" + case createdAt + case imageSetId + case updatedAt + case version + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let dicomTags = self.dicomTags { + try encodeContainer.encode(dicomTags, forKey: .dicomTags) + } + if let createdAt = self.createdAt { + try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) + } + if let imageSetId = self.imageSetId { + try encodeContainer.encode(imageSetId, forKey: .imageSetId) + } + if let updatedAt = self.updatedAt { + try encodeContainer.encodeTimestamp(updatedAt, format: .epochSeconds, forKey: .updatedAt) + } + if let version = self.version { + try encodeContainer.encode(version, forKey: .version) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let imageSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageSetId) + imageSetId = imageSetIdDecoded + let versionDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .version) + version = versionDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + let dicomTagsDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.DICOMTags.self, forKey: .dicomTags) + dicomTags = dicomTagsDecoded + } +} + +extension MedicalImagingClientTypes { + /// Summary of the image set metadata. + public struct ImageSetsMetadataSummary: Swift.Equatable { + /// The time an image set is created in AWS HealthImaging. Sample creation date is provided in 1985-04-12T23:20:50.52Z format. + public var createdAt: ClientRuntime.Date? + /// The DICOM tags associated with the image set. + public var dicomTags: MedicalImagingClientTypes.DICOMTags? + /// The image set identifier. + /// This member is required. + public var imageSetId: Swift.String? + /// The time when an image was last updated in AWS HealthImaging. + public var updatedAt: ClientRuntime.Date? + /// The image set version. + public var version: Swift.Int? + + public init( + createdAt: ClientRuntime.Date? = nil, + dicomTags: MedicalImagingClientTypes.DICOMTags? = nil, + imageSetId: Swift.String? = nil, + updatedAt: ClientRuntime.Date? = nil, + version: Swift.Int? = nil + ) + { + self.createdAt = createdAt + self.dicomTags = dicomTags + self.imageSetId = imageSetId + self.updatedAt = updatedAt + self.version = version + } + } + +} + +extension InternalServerException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: InternalServerExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// An unexpected error occurred during processing of the request. +public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "InternalServerException" } + public static var fault: ErrorFault { .server } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct InternalServerExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension InternalServerExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 MedicalImagingClientTypes { + public enum JobStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case completed + case failed + case inProgress + case submitted + case sdkUnknown(Swift.String) + + public static var allCases: [JobStatus] { + return [ + .completed, + .failed, + .inProgress, + .submitted, + .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 .completed: return "COMPLETED" + case .failed: return "FAILED" + case .inProgress: return "IN_PROGRESS" + case .submitted: return "SUBMITTED" + 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 = JobStatus(rawValue: rawValue) ?? JobStatus.sdkUnknown(rawValue) + } + } +} + +extension ListDICOMImportJobsInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let jobStatus = jobStatus { + let jobStatusQueryItem = ClientRuntime.URLQueryItem(name: "jobStatus".urlPercentEncoding(), value: Swift.String(jobStatus.rawValue).urlPercentEncoding()) + items.append(jobStatusQueryItem) + } + 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 ListDICOMImportJobsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + return "/listDICOMImportJobs/datastore/\(datastoreId.urlPercentEncoding())" + } +} + +public struct ListDICOMImportJobsInput: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The filters for listing import jobs based on status. + public var jobStatus: MedicalImagingClientTypes.JobStatus? + /// The max results count. The upper bound is determined by load testing. + public var maxResults: Swift.Int? + /// The pagination token used to request the list of import jobs on the next page. + public var nextToken: Swift.String? + + public init( + datastoreId: Swift.String? = nil, + jobStatus: MedicalImagingClientTypes.JobStatus? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.datastoreId = datastoreId + self.jobStatus = jobStatus + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListDICOMImportJobsInputBody: Swift.Equatable { +} + +extension ListDICOMImportJobsInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum ListDICOMImportJobsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListDICOMImportJobsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListDICOMImportJobsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.jobSummaries = output.jobSummaries + self.nextToken = output.nextToken + } else { + self.jobSummaries = nil + self.nextToken = nil + } + } +} + +public struct ListDICOMImportJobsOutputResponse: Swift.Equatable { + /// A list of job summaries. + /// This member is required. + public var jobSummaries: [MedicalImagingClientTypes.DICOMImportJobSummary]? + /// The pagination token used to retrieve the list of import jobs on the next page. + public var nextToken: Swift.String? + + public init( + jobSummaries: [MedicalImagingClientTypes.DICOMImportJobSummary]? = nil, + nextToken: Swift.String? = nil + ) + { + self.jobSummaries = jobSummaries + self.nextToken = nextToken + } +} + +struct ListDICOMImportJobsOutputResponseBody: Swift.Equatable { + let jobSummaries: [MedicalImagingClientTypes.DICOMImportJobSummary]? + let nextToken: Swift.String? +} + +extension ListDICOMImportJobsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case jobSummaries + case nextToken + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let jobSummariesContainer = try containerValues.decodeIfPresent([MedicalImagingClientTypes.DICOMImportJobSummary?].self, forKey: .jobSummaries) + var jobSummariesDecoded0:[MedicalImagingClientTypes.DICOMImportJobSummary]? = nil + if let jobSummariesContainer = jobSummariesContainer { + jobSummariesDecoded0 = [MedicalImagingClientTypes.DICOMImportJobSummary]() + for structure0 in jobSummariesContainer { + if let structure0 = structure0 { + jobSummariesDecoded0?.append(structure0) + } + } + } + jobSummaries = jobSummariesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ListDatastoresInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let datastoreStatus = datastoreStatus { + let datastoreStatusQueryItem = ClientRuntime.URLQueryItem(name: "datastoreStatus".urlPercentEncoding(), value: Swift.String(datastoreStatus.rawValue).urlPercentEncoding()) + items.append(datastoreStatusQueryItem) + } + 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 ListDatastoresInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/datastore" + } +} + +public struct ListDatastoresInput: Swift.Equatable { + /// The data store status. + public var datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? + /// Valid Range: Minimum value of 1. Maximum value of 50. + public var maxResults: Swift.Int? + /// The pagination token used to request the list of data stores on the next page. + public var nextToken: Swift.String? + + public init( + datastoreStatus: MedicalImagingClientTypes.DatastoreStatus? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.datastoreStatus = datastoreStatus + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListDatastoresInputBody: Swift.Equatable { +} + +extension ListDatastoresInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum ListDatastoresOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListDatastoresOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListDatastoresOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.datastoreSummaries = output.datastoreSummaries + self.nextToken = output.nextToken + } else { + self.datastoreSummaries = nil + self.nextToken = nil + } + } +} + +public struct ListDatastoresOutputResponse: Swift.Equatable { + /// The list of summaries of data stores. + public var datastoreSummaries: [MedicalImagingClientTypes.DatastoreSummary]? + /// The pagination token used to retrieve the list of data stores on the next page. + public var nextToken: Swift.String? + + public init( + datastoreSummaries: [MedicalImagingClientTypes.DatastoreSummary]? = nil, + nextToken: Swift.String? = nil + ) + { + self.datastoreSummaries = datastoreSummaries + self.nextToken = nextToken + } +} + +struct ListDatastoresOutputResponseBody: Swift.Equatable { + let datastoreSummaries: [MedicalImagingClientTypes.DatastoreSummary]? + let nextToken: Swift.String? +} + +extension ListDatastoresOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datastoreSummaries + case nextToken + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastoreSummariesContainer = try containerValues.decodeIfPresent([MedicalImagingClientTypes.DatastoreSummary?].self, forKey: .datastoreSummaries) + var datastoreSummariesDecoded0:[MedicalImagingClientTypes.DatastoreSummary]? = nil + if let datastoreSummariesContainer = datastoreSummariesContainer { + datastoreSummariesDecoded0 = [MedicalImagingClientTypes.DatastoreSummary]() + for structure0 in datastoreSummariesContainer { + if let structure0 = structure0 { + datastoreSummariesDecoded0?.append(structure0) + } + } + } + datastoreSummaries = datastoreSummariesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ListImageSetVersionsInput: 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 ListImageSetVersionsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + guard let imageSetId = imageSetId else { + return nil + } + return "/datastore/\(datastoreId.urlPercentEncoding())/imageSet/\(imageSetId.urlPercentEncoding())/listImageSetVersions" + } +} + +public struct ListImageSetVersionsInput: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The image set identifier. + /// This member is required. + public var imageSetId: Swift.String? + /// The max results count. + public var maxResults: Swift.Int? + /// The pagination token used to request the list of image set versions on the next page. + public var nextToken: Swift.String? + + public init( + datastoreId: Swift.String? = nil, + imageSetId: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.datastoreId = datastoreId + self.imageSetId = imageSetId + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListImageSetVersionsInputBody: Swift.Equatable { +} + +extension ListImageSetVersionsInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum ListImageSetVersionsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListImageSetVersionsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListImageSetVersionsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.imageSetPropertiesList = output.imageSetPropertiesList + self.nextToken = output.nextToken + } else { + self.imageSetPropertiesList = nil + self.nextToken = nil + } + } +} + +public struct ListImageSetVersionsOutputResponse: Swift.Equatable { + /// Lists all properties associated with an image set. + /// This member is required. + public var imageSetPropertiesList: [MedicalImagingClientTypes.ImageSetProperties]? + /// The pagination token used to retrieve the list of image set versions on the next page. + public var nextToken: Swift.String? + + public init( + imageSetPropertiesList: [MedicalImagingClientTypes.ImageSetProperties]? = nil, + nextToken: Swift.String? = nil + ) + { + self.imageSetPropertiesList = imageSetPropertiesList + self.nextToken = nextToken + } +} + +struct ListImageSetVersionsOutputResponseBody: Swift.Equatable { + let imageSetPropertiesList: [MedicalImagingClientTypes.ImageSetProperties]? + let nextToken: Swift.String? +} + +extension ListImageSetVersionsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case imageSetPropertiesList + case nextToken + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let imageSetPropertiesListContainer = try containerValues.decodeIfPresent([MedicalImagingClientTypes.ImageSetProperties?].self, forKey: .imageSetPropertiesList) + var imageSetPropertiesListDecoded0:[MedicalImagingClientTypes.ImageSetProperties]? = nil + if let imageSetPropertiesListContainer = imageSetPropertiesListContainer { + imageSetPropertiesListDecoded0 = [MedicalImagingClientTypes.ImageSetProperties]() + for structure0 in imageSetPropertiesListContainer { + if let structure0 = structure0 { + imageSetPropertiesListDecoded0?.append(structure0) + } + } + } + imageSetPropertiesList = imageSetPropertiesListDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +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) of the medical imaging resource to list tags for. + /// 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 { + } +} + +public enum ListTagsForResourceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListTagsForResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListTagsForResourceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.tags = output.tags + } else { + self.tags = nil + } + } +} + +public struct ListTagsForResourceOutputResponse: Swift.Equatable { + /// A list of all tags associated with a medical imaging resource. + /// This member is required. + 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 + } + + 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 + } +} + +extension MedicalImagingClientTypes.MetadataUpdates: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dicomupdates = "DICOMUpdates" + case sdkUnknown + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + switch self { + case let .dicomupdates(dicomupdates): + try container.encode(dicomupdates, forKey: .dicomupdates) + case let .sdkUnknown(sdkUnknown): + try container.encode(sdkUnknown, forKey: .sdkUnknown) + } + } + + public init(from decoder: Swift.Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + let dicomupdatesDecoded = try values.decodeIfPresent(MedicalImagingClientTypes.DICOMUpdates.self, forKey: .dicomupdates) + if let dicomupdates = dicomupdatesDecoded { + self = .dicomupdates(dicomupdates) + return + } + self = .sdkUnknown("") + } +} + +extension MedicalImagingClientTypes { + /// Contains DICOMUpdates. + public enum MetadataUpdates: Swift.Equatable { + /// The object containing removableAttributes and updatableAttributes. + case dicomupdates(MedicalImagingClientTypes.DICOMUpdates) + case sdkUnknown(Swift.String) + } + +} + +extension MedicalImagingClientTypes { + public enum Operator: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case between + case equal + case sdkUnknown(Swift.String) + + public static var allCases: [Operator] { + return [ + .between, + .equal, + .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 .between: return "BETWEEN" + case .equal: return "EQUAL" + 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 = Operator(rawValue: rawValue) ?? Operator.sdkUnknown(rawValue) + } + } +} + +extension ResourceNotFoundException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ResourceNotFoundExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The request references a resource which does not exist. +public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ResourceNotFoundException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ResourceNotFoundExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ResourceNotFoundExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 MedicalImagingClientTypes.SearchByAttributeValue: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dicomaccessionnumber = "DICOMAccessionNumber" + case dicompatientid = "DICOMPatientId" + case dicomstudydateandtime = "DICOMStudyDateAndTime" + case dicomstudyid = "DICOMStudyId" + case dicomstudyinstanceuid = "DICOMStudyInstanceUID" + case createdat = "createdAt" + case sdkUnknown + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + switch self { + case let .dicomaccessionnumber(dicomaccessionnumber): + try container.encode(dicomaccessionnumber, forKey: .dicomaccessionnumber) + case let .dicompatientid(dicompatientid): + try container.encode(dicompatientid, forKey: .dicompatientid) + case let .dicomstudydateandtime(dicomstudydateandtime): + try container.encode(dicomstudydateandtime, forKey: .dicomstudydateandtime) + case let .dicomstudyid(dicomstudyid): + try container.encode(dicomstudyid, forKey: .dicomstudyid) + case let .dicomstudyinstanceuid(dicomstudyinstanceuid): + try container.encode(dicomstudyinstanceuid, forKey: .dicomstudyinstanceuid) + case let .createdat(createdat): + try container.encodeTimestamp(createdat, format: .epochSeconds, forKey: .createdat) + case let .sdkUnknown(sdkUnknown): + try container.encode(sdkUnknown, forKey: .sdkUnknown) + } + } + + public init(from decoder: Swift.Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + let dicompatientidDecoded = try values.decodeIfPresent(Swift.String.self, forKey: .dicompatientid) + if let dicompatientid = dicompatientidDecoded { + self = .dicompatientid(dicompatientid) + return + } + let dicomaccessionnumberDecoded = try values.decodeIfPresent(Swift.String.self, forKey: .dicomaccessionnumber) + if let dicomaccessionnumber = dicomaccessionnumberDecoded { + self = .dicomaccessionnumber(dicomaccessionnumber) + return + } + let dicomstudyidDecoded = try values.decodeIfPresent(Swift.String.self, forKey: .dicomstudyid) + if let dicomstudyid = dicomstudyidDecoded { + self = .dicomstudyid(dicomstudyid) + return + } + let dicomstudyinstanceuidDecoded = try values.decodeIfPresent(Swift.String.self, forKey: .dicomstudyinstanceuid) + if let dicomstudyinstanceuid = dicomstudyinstanceuidDecoded { + self = .dicomstudyinstanceuid(dicomstudyinstanceuid) + return + } + let createdatDecoded = try values.decodeTimestampIfPresent(.epochSeconds, forKey: .createdat) + if let createdat = createdatDecoded { + self = .createdat(createdat) + return + } + let dicomstudydateandtimeDecoded = try values.decodeIfPresent(MedicalImagingClientTypes.DICOMStudyDateAndTime.self, forKey: .dicomstudydateandtime) + if let dicomstudydateandtime = dicomstudydateandtimeDecoded { + self = .dicomstudydateandtime(dicomstudydateandtime) + return + } + self = .sdkUnknown("") + } +} + +extension MedicalImagingClientTypes { + /// The search input attribute value. + public enum SearchByAttributeValue: Swift.Equatable { + /// The patient ID input for search. + case dicompatientid(Swift.String) + /// The DICOM accession number for search. + case dicomaccessionnumber(Swift.String) + /// The DICOM study ID for search. + case dicomstudyid(Swift.String) + /// The DICOM study instance UID for search. + case dicomstudyinstanceuid(Swift.String) + /// The created at time of the image set provided for search. + case createdat(ClientRuntime.Date) + /// The aggregated structure containing DICOM study date and study time for search. + case dicomstudydateandtime(MedicalImagingClientTypes.DICOMStudyDateAndTime) + case sdkUnknown(Swift.String) + } + +} + +extension MedicalImagingClientTypes.SearchCriteria: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case filters + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let filters = filters { + var filtersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .filters) + for searchfilter0 in filters { + try filtersContainer.encode(searchfilter0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let filtersContainer = try containerValues.decodeIfPresent([MedicalImagingClientTypes.SearchFilter?].self, forKey: .filters) + var filtersDecoded0:[MedicalImagingClientTypes.SearchFilter]? = nil + if let filtersContainer = filtersContainer { + filtersDecoded0 = [MedicalImagingClientTypes.SearchFilter]() + for structure0 in filtersContainer { + if let structure0 = structure0 { + filtersDecoded0?.append(structure0) + } + } + } + filters = filtersDecoded0 + } +} + +extension MedicalImagingClientTypes.SearchCriteria: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "CONTENT_REDACTED" + } +} + +extension MedicalImagingClientTypes { + /// The search criteria. + public struct SearchCriteria: Swift.Equatable { + /// The filters for the search criteria. + public var filters: [MedicalImagingClientTypes.SearchFilter]? + + public init( + filters: [MedicalImagingClientTypes.SearchFilter]? = nil + ) + { + self.filters = filters + } + } + +} + +extension MedicalImagingClientTypes.SearchFilter: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case `operator` = "operator" + case values + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let `operator` = self.`operator` { + try encodeContainer.encode(`operator`.rawValue, forKey: .`operator`) + } + if let values = values { + var valuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .values) + for searchbyattributevalue0 in values { + try valuesContainer.encode(searchbyattributevalue0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let valuesContainer = try containerValues.decodeIfPresent([MedicalImagingClientTypes.SearchByAttributeValue?].self, forKey: .values) + var valuesDecoded0:[MedicalImagingClientTypes.SearchByAttributeValue]? = nil + if let valuesContainer = valuesContainer { + valuesDecoded0 = [MedicalImagingClientTypes.SearchByAttributeValue]() + for union0 in valuesContainer { + if let union0 = union0 { + valuesDecoded0?.append(union0) + } + } + } + values = valuesDecoded0 + let operatorDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.Operator.self, forKey: .operator) + `operator` = operatorDecoded + } +} + +extension MedicalImagingClientTypes { + /// The search filter. + public struct SearchFilter: Swift.Equatable { + /// The search filter operator for imageSetDateTime. + /// This member is required. + public var `operator`: MedicalImagingClientTypes.Operator? + /// The search filter values. + /// This member is required. + public var values: [MedicalImagingClientTypes.SearchByAttributeValue]? + + public init( + `operator`: MedicalImagingClientTypes.Operator? = nil, + values: [MedicalImagingClientTypes.SearchByAttributeValue]? = nil + ) + { + self.`operator` = `operator` + self.values = values + } + } + +} + +public struct SearchImageSetsInputBodyMiddleware: ClientRuntime.Middleware { + public let id: Swift.String = "SearchImageSetsInputBodyMiddleware" + + public init() {} + + public func handle(context: Context, + input: ClientRuntime.SerializeStepInput, + next: H) async throws -> ClientRuntime.OperationOutput + where H: Handler, + Self.MInput == H.Input, + Self.MOutput == H.Output, + Self.Context == H.Context + { + do { + let encoder = context.getEncoder() + if let searchCriteria = input.operationInput.searchCriteria { + let searchCriteriaData = try encoder.encode(searchCriteria) + let searchCriteriaBody = ClientRuntime.HttpBody.data(searchCriteriaData) + input.builder.withBody(searchCriteriaBody) + } else { + if encoder is JSONEncoder { + // Encode an empty body as an empty structure in JSON + let searchCriteriaData = "{}".data(using: .utf8)! + let searchCriteriaBody = ClientRuntime.HttpBody.data(searchCriteriaData) + input.builder.withBody(searchCriteriaBody) + } + } + } catch let err { + throw ClientRuntime.ClientError.unknownError(err.localizedDescription) + } + return try await next.handle(context: context, input: input) + } + + public typealias MInput = ClientRuntime.SerializeStepInput + public typealias MOutput = ClientRuntime.OperationOutput + public typealias Context = ClientRuntime.HttpContext +} + +extension SearchImageSetsInput: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "SearchImageSetsInput(datastoreId: \(Swift.String(describing: datastoreId)), maxResults: \(Swift.String(describing: maxResults)), nextToken: \(Swift.String(describing: nextToken)), searchCriteria: \"CONTENT_REDACTED\")"} +} + +extension SearchImageSetsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case searchCriteria + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let searchCriteria = self.searchCriteria { + try encodeContainer.encode(searchCriteria, forKey: .searchCriteria) + } + } +} + +extension SearchImageSetsInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + if let maxResults = maxResults { + let maxResultsQueryItem = ClientRuntime.URLQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let nextToken = nextToken { + let nextTokenQueryItem = ClientRuntime.URLQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + return items + } + } +} + +extension SearchImageSetsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + return "/datastore/\(datastoreId.urlPercentEncoding())/searchImageSets" + } +} + +public struct SearchImageSetsInput: Swift.Equatable { + /// The identifier of the data store where the image sets reside. + /// This member is required. + public var datastoreId: Swift.String? + /// The maximum number of results that can be returned in a search. + public var maxResults: Swift.Int? + /// The token used for pagination of results returned in the response. Use the token returned from the previous request to continue results where the previous request ended. + public var nextToken: Swift.String? + /// The search criteria that filters by applying a maximum of 1 item to SearchByAttribute. + public var searchCriteria: MedicalImagingClientTypes.SearchCriteria? + + public init( + datastoreId: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + searchCriteria: MedicalImagingClientTypes.SearchCriteria? = nil + ) + { + self.datastoreId = datastoreId + self.maxResults = maxResults + self.nextToken = nextToken + self.searchCriteria = searchCriteria + } +} + +struct SearchImageSetsInputBody: Swift.Equatable { + let searchCriteria: MedicalImagingClientTypes.SearchCriteria? +} + +extension SearchImageSetsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case searchCriteria + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let searchCriteriaDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.SearchCriteria.self, forKey: .searchCriteria) + searchCriteria = searchCriteriaDecoded + } +} + +public enum SearchImageSetsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension SearchImageSetsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: SearchImageSetsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.imageSetsMetadataSummaries = output.imageSetsMetadataSummaries + self.nextToken = output.nextToken + } else { + self.imageSetsMetadataSummaries = nil + self.nextToken = nil + } + } +} + +public struct SearchImageSetsOutputResponse: Swift.Equatable { + /// The model containing the image set results. + /// This member is required. + public var imageSetsMetadataSummaries: [MedicalImagingClientTypes.ImageSetsMetadataSummary]? + /// The token for pagination results. + public var nextToken: Swift.String? + + public init( + imageSetsMetadataSummaries: [MedicalImagingClientTypes.ImageSetsMetadataSummary]? = nil, + nextToken: Swift.String? = nil + ) + { + self.imageSetsMetadataSummaries = imageSetsMetadataSummaries + self.nextToken = nextToken + } +} + +struct SearchImageSetsOutputResponseBody: Swift.Equatable { + let imageSetsMetadataSummaries: [MedicalImagingClientTypes.ImageSetsMetadataSummary]? + let nextToken: Swift.String? +} + +extension SearchImageSetsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case imageSetsMetadataSummaries + case nextToken + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let imageSetsMetadataSummariesContainer = try containerValues.decodeIfPresent([MedicalImagingClientTypes.ImageSetsMetadataSummary?].self, forKey: .imageSetsMetadataSummaries) + var imageSetsMetadataSummariesDecoded0:[MedicalImagingClientTypes.ImageSetsMetadataSummary]? = nil + if let imageSetsMetadataSummariesContainer = imageSetsMetadataSummariesContainer { + imageSetsMetadataSummariesDecoded0 = [MedicalImagingClientTypes.ImageSetsMetadataSummary]() + for structure0 in imageSetsMetadataSummariesContainer { + if let structure0 = structure0 { + imageSetsMetadataSummariesDecoded0?.append(structure0) + } + } + } + imageSetsMetadataSummaries = imageSetsMetadataSummariesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +extension ServiceQuotaExceededException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ServiceQuotaExceededExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The request caused a service quota to be exceeded. +public struct ServiceQuotaExceededException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ServiceQuotaExceededException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ServiceQuotaExceededExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ServiceQuotaExceededExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 StartDICOMImportJobInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken + case dataAccessRoleArn + case inputS3Uri + case jobName + case outputS3Uri + } + + 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 dataAccessRoleArn = self.dataAccessRoleArn { + try encodeContainer.encode(dataAccessRoleArn, forKey: .dataAccessRoleArn) + } + if let inputS3Uri = self.inputS3Uri { + try encodeContainer.encode(inputS3Uri, forKey: .inputS3Uri) + } + if let jobName = self.jobName { + try encodeContainer.encode(jobName, forKey: .jobName) + } + if let outputS3Uri = self.outputS3Uri { + try encodeContainer.encode(outputS3Uri, forKey: .outputS3Uri) + } + } +} + +extension StartDICOMImportJobInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + return "/startDICOMImportJob/datastore/\(datastoreId.urlPercentEncoding())" + } +} + +public struct StartDICOMImportJobInput: Swift.Equatable { + /// A unique identifier for API idempotency. + /// This member is required. + public var clientToken: Swift.String? + /// The Amazon Resource Name (ARN) of the IAM role that grants permission to access medical imaging resources. + /// This member is required. + public var dataAccessRoleArn: Swift.String? + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The input prefix path for the S3 bucket that contains the DICOM files to be imported. + /// This member is required. + public var inputS3Uri: Swift.String? + /// The import job name. + public var jobName: Swift.String? + /// The output prefix of the S3 bucket to upload the results of the DICOM import job. + /// This member is required. + public var outputS3Uri: Swift.String? + + public init( + clientToken: Swift.String? = nil, + dataAccessRoleArn: Swift.String? = nil, + datastoreId: Swift.String? = nil, + inputS3Uri: Swift.String? = nil, + jobName: Swift.String? = nil, + outputS3Uri: Swift.String? = nil + ) + { + self.clientToken = clientToken + self.dataAccessRoleArn = dataAccessRoleArn + self.datastoreId = datastoreId + self.inputS3Uri = inputS3Uri + self.jobName = jobName + self.outputS3Uri = outputS3Uri + } +} + +struct StartDICOMImportJobInputBody: Swift.Equatable { + let jobName: Swift.String? + let dataAccessRoleArn: Swift.String? + let clientToken: Swift.String? + let inputS3Uri: Swift.String? + let outputS3Uri: Swift.String? +} + +extension StartDICOMImportJobInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clientToken + case dataAccessRoleArn + case inputS3Uri + case jobName + case outputS3Uri + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let jobNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .jobName) + jobName = jobNameDecoded + let dataAccessRoleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dataAccessRoleArn) + dataAccessRoleArn = dataAccessRoleArnDecoded + let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) + clientToken = clientTokenDecoded + let inputS3UriDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inputS3Uri) + inputS3Uri = inputS3UriDecoded + let outputS3UriDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outputS3Uri) + outputS3Uri = outputS3UriDecoded + } +} + +public enum StartDICOMImportJobOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension StartDICOMImportJobOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: StartDICOMImportJobOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.datastoreId = output.datastoreId + self.jobId = output.jobId + self.jobStatus = output.jobStatus + self.submittedAt = output.submittedAt + } else { + self.datastoreId = nil + self.jobId = nil + self.jobStatus = nil + self.submittedAt = nil + } + } +} + +public struct StartDICOMImportJobOutputResponse: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The import job identifier. + /// This member is required. + public var jobId: Swift.String? + /// The import job status. + /// This member is required. + public var jobStatus: MedicalImagingClientTypes.JobStatus? + /// The timestamp when the import job was submitted. + /// This member is required. + public var submittedAt: ClientRuntime.Date? + + public init( + datastoreId: Swift.String? = nil, + jobId: Swift.String? = nil, + jobStatus: MedicalImagingClientTypes.JobStatus? = nil, + submittedAt: ClientRuntime.Date? = nil + ) + { + self.datastoreId = datastoreId + self.jobId = jobId + self.jobStatus = jobStatus + self.submittedAt = submittedAt + } +} + +struct StartDICOMImportJobOutputResponseBody: Swift.Equatable { + let datastoreId: Swift.String? + let jobId: Swift.String? + let jobStatus: MedicalImagingClientTypes.JobStatus? + let submittedAt: ClientRuntime.Date? +} + +extension StartDICOMImportJobOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datastoreId + case jobId + case jobStatus + case submittedAt + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastoreIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreId) + datastoreId = datastoreIdDecoded + let jobIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .jobId) + jobId = jobIdDecoded + let jobStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.JobStatus.self, forKey: .jobStatus) + jobStatus = jobStatusDecoded + let submittedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .submittedAt) + submittedAt = submittedAtDecoded + } +} + +extension TagResourceInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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, tagMap0) in tags { + try tagsContainer.encode(tagMap0, 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())" + } +} + +public struct TagResourceInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the medical imaging resource that tags are being added to. + /// This member is required. + public var resourceArn: Swift.String? + /// The user-specified key and value tag pairs added to a medical imaging resource. + /// This member is required. + public var tags: [Swift.String:Swift.String]? + + public init( + resourceArn: Swift.String? = nil, + tags: [Swift.String:Swift.String]? = nil + ) + { + self.resourceArn = resourceArn + self.tags = tags + } +} + +struct TagResourceInputBody: Swift.Equatable { + let tags: [Swift.String:Swift.String]? +} + +extension TagResourceInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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, tagvalue0) in tagsContainer { + if let tagvalue0 = tagvalue0 { + tagsDecoded0?[key0] = tagvalue0 + } + } + } + tags = tagsDecoded0 + } +} + +public enum TagResourceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension TagResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct TagResourceOutputResponse: Swift.Equatable { + + public init() { } +} + +extension ThrottlingException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ThrottlingExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The request was denied due to throttling. +public struct ThrottlingException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ThrottlingException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ThrottlingExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ThrottlingExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 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.unknownError(message) + } + tagKeys.forEach { queryItemValue in + let queryItem = ClientRuntime.URLQueryItem(name: "tagKeys".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) + items.append(queryItem) + } + return items + } + } +} + +extension UntagResourceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let resourceArn = resourceArn else { + return nil + } + return "/tags/\(resourceArn.urlPercentEncoding())" + } +} + +public struct UntagResourceInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the medical imaging resource that tags are being removed from. + /// This member is required. + public var resourceArn: Swift.String? + /// The keys for the tags to be removed from the medical imaging resource. + /// This member is required. + public var tagKeys: [Swift.String]? + + public init( + resourceArn: Swift.String? = nil, + tagKeys: [Swift.String]? = nil + ) + { + self.resourceArn = resourceArn + self.tagKeys = tagKeys + } +} + +struct UntagResourceInputBody: Swift.Equatable { +} + +extension UntagResourceInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum UntagResourceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UntagResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct UntagResourceOutputResponse: Swift.Equatable { + + public init() { } +} + +public struct UpdateImageSetMetadataInputBodyMiddleware: ClientRuntime.Middleware { + public let id: Swift.String = "UpdateImageSetMetadataInputBodyMiddleware" + + public init() {} + + public func handle(context: Context, + input: ClientRuntime.SerializeStepInput, + next: H) async throws -> ClientRuntime.OperationOutput + where H: Handler, + Self.MInput == H.Input, + Self.MOutput == H.Output, + Self.Context == H.Context + { + do { + let encoder = context.getEncoder() + if let updateImageSetMetadataUpdates = input.operationInput.updateImageSetMetadataUpdates { + let updateImageSetMetadataUpdatesData = try encoder.encode(updateImageSetMetadataUpdates) + let updateImageSetMetadataUpdatesBody = ClientRuntime.HttpBody.data(updateImageSetMetadataUpdatesData) + input.builder.withBody(updateImageSetMetadataUpdatesBody) + } else { + if encoder is JSONEncoder { + // Encode an empty body as an empty structure in JSON + let updateImageSetMetadataUpdatesData = "{}".data(using: .utf8)! + let updateImageSetMetadataUpdatesBody = ClientRuntime.HttpBody.data(updateImageSetMetadataUpdatesData) + input.builder.withBody(updateImageSetMetadataUpdatesBody) + } + } + } catch let err { + throw ClientRuntime.ClientError.unknownError(err.localizedDescription) + } + return try await next.handle(context: context, input: input) + } + + public typealias MInput = ClientRuntime.SerializeStepInput + public typealias MOutput = ClientRuntime.OperationOutput + public typealias Context = ClientRuntime.HttpContext +} + +extension UpdateImageSetMetadataInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case updateImageSetMetadataUpdates + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let updateImageSetMetadataUpdates = self.updateImageSetMetadataUpdates { + try encodeContainer.encode(updateImageSetMetadataUpdates, forKey: .updateImageSetMetadataUpdates) + } + } +} + +extension UpdateImageSetMetadataInput: ClientRuntime.QueryItemProvider { + public var queryItems: [ClientRuntime.URLQueryItem] { + get throws { + var items = [ClientRuntime.URLQueryItem]() + guard let latestVersionId = latestVersionId else { + let message = "Creating a URL Query Item failed. latestVersionId is required and must not be nil." + throw ClientRuntime.ClientError.unknownError(message) + } + let latestVersionIdQueryItem = ClientRuntime.URLQueryItem(name: "latestVersion".urlPercentEncoding(), value: Swift.String(latestVersionId).urlPercentEncoding()) + items.append(latestVersionIdQueryItem) + return items + } + } +} + +extension UpdateImageSetMetadataInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let datastoreId = datastoreId else { + return nil + } + guard let imageSetId = imageSetId else { + return nil + } + return "/datastore/\(datastoreId.urlPercentEncoding())/imageSet/\(imageSetId.urlPercentEncoding())/updateImageSetMetadata" + } +} + +public struct UpdateImageSetMetadataInput: Swift.Equatable { + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The image set identifier. + /// This member is required. + public var imageSetId: Swift.String? + /// The latest image set version identifier. + /// This member is required. + public var latestVersionId: Swift.String? + /// Update image set metadata updates. + /// This member is required. + public var updateImageSetMetadataUpdates: MedicalImagingClientTypes.MetadataUpdates? + + public init( + datastoreId: Swift.String? = nil, + imageSetId: Swift.String? = nil, + latestVersionId: Swift.String? = nil, + updateImageSetMetadataUpdates: MedicalImagingClientTypes.MetadataUpdates? = nil + ) + { + self.datastoreId = datastoreId + self.imageSetId = imageSetId + self.latestVersionId = latestVersionId + self.updateImageSetMetadataUpdates = updateImageSetMetadataUpdates + } +} + +struct UpdateImageSetMetadataInputBody: Swift.Equatable { + let updateImageSetMetadataUpdates: MedicalImagingClientTypes.MetadataUpdates? +} + +extension UpdateImageSetMetadataInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case updateImageSetMetadataUpdates + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let updateImageSetMetadataUpdatesDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.MetadataUpdates.self, forKey: .updateImageSetMetadataUpdates) + updateImageSetMetadataUpdates = updateImageSetMetadataUpdatesDecoded + } +} + +public enum UpdateImageSetMetadataOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UpdateImageSetMetadataOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: UpdateImageSetMetadataOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.createdAt = output.createdAt + self.datastoreId = output.datastoreId + self.imageSetId = output.imageSetId + self.imageSetState = output.imageSetState + self.imageSetWorkflowStatus = output.imageSetWorkflowStatus + self.latestVersionId = output.latestVersionId + self.message = output.message + self.updatedAt = output.updatedAt + } else { + self.createdAt = nil + self.datastoreId = nil + self.imageSetId = nil + self.imageSetState = nil + self.imageSetWorkflowStatus = nil + self.latestVersionId = nil + self.message = nil + self.updatedAt = nil + } + } +} + +public struct UpdateImageSetMetadataOutputResponse: Swift.Equatable { + /// The timestamp when image set metadata was created. + public var createdAt: ClientRuntime.Date? + /// The data store identifier. + /// This member is required. + public var datastoreId: Swift.String? + /// The image set identifier. + /// This member is required. + public var imageSetId: Swift.String? + /// The image set state. + /// This member is required. + public var imageSetState: MedicalImagingClientTypes.ImageSetState? + /// The image set workflow status. + public var imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? + /// The latest image set version identifier. + /// This member is required. + public var latestVersionId: Swift.String? + /// The error message thrown if an update image set metadata action fails. + public var message: Swift.String? + /// The timestamp when image set metadata was updated. + public var updatedAt: ClientRuntime.Date? + + public init( + createdAt: ClientRuntime.Date? = nil, + datastoreId: Swift.String? = nil, + imageSetId: Swift.String? = nil, + imageSetState: MedicalImagingClientTypes.ImageSetState? = nil, + imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? = nil, + latestVersionId: Swift.String? = nil, + message: Swift.String? = nil, + updatedAt: ClientRuntime.Date? = nil + ) + { + self.createdAt = createdAt + self.datastoreId = datastoreId + self.imageSetId = imageSetId + self.imageSetState = imageSetState + self.imageSetWorkflowStatus = imageSetWorkflowStatus + self.latestVersionId = latestVersionId + self.message = message + self.updatedAt = updatedAt + } +} + +struct UpdateImageSetMetadataOutputResponseBody: Swift.Equatable { + let datastoreId: Swift.String? + let imageSetId: Swift.String? + let latestVersionId: Swift.String? + let imageSetState: MedicalImagingClientTypes.ImageSetState? + let imageSetWorkflowStatus: MedicalImagingClientTypes.ImageSetWorkflowStatus? + let createdAt: ClientRuntime.Date? + let updatedAt: ClientRuntime.Date? + let message: Swift.String? +} + +extension UpdateImageSetMetadataOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case createdAt + case datastoreId + case imageSetId + case imageSetState + case imageSetWorkflowStatus + case latestVersionId + case message + case updatedAt + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datastoreIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datastoreId) + datastoreId = datastoreIdDecoded + let imageSetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageSetId) + imageSetId = imageSetIdDecoded + let latestVersionIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .latestVersionId) + latestVersionId = latestVersionIdDecoded + let imageSetStateDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetState.self, forKey: .imageSetState) + imageSetState = imageSetStateDecoded + let imageSetWorkflowStatusDecoded = try containerValues.decodeIfPresent(MedicalImagingClientTypes.ImageSetWorkflowStatus.self, forKey: .imageSetWorkflowStatus) + imageSetWorkflowStatus = imageSetWorkflowStatusDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let updatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .updatedAt) + updatedAt = updatedAtDecoded + let messageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .message) + message = messageDecoded + } +} + +extension ValidationException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ValidationExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The input fails to satisfy the constraints specified by an AWS service. +public struct ValidationException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + /// This member is required. + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ValidationException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ValidationExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ValidationExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 + } +} diff --git a/Sources/Services/AWSOmics/OmicsClientProtocol.swift b/Sources/Services/AWSOmics/OmicsClientProtocol.swift index 0f186417c49..4ba55c2fd68 100644 --- a/Sources/Services/AWSOmics/OmicsClientProtocol.swift +++ b/Sources/Services/AWSOmics/OmicsClientProtocol.swift @@ -2,7 +2,7 @@ import ClientRuntime -/// This is the Amazon Omics API Reference. For an introduction to the service, see [What is Amazon Omics?](https://docs.aws.amazon.com/omics/latest/dev/) in the Amazon Omics User Guide. +/// This is the AWS HealthOmics API Reference. For an introduction to the service, see [What is AWS HealthOmics?](https://docs.aws.amazon.com/omics/latest/dev/) in the AWS HealthOmics User Guide. public protocol OmicsClientProtocol { /// Stops a multipart upload. func abortMultipartReadSetUpload(input: AbortMultipartReadSetUploadInput) async throws -> AbortMultipartReadSetUploadOutputResponse diff --git a/Sources/Services/AWSOmics/models/Models.swift b/Sources/Services/AWSOmics/models/Models.swift index 45dedcc8880..7b19cdcbc21 100644 --- a/Sources/Services/AWSOmics/models/Models.swift +++ b/Sources/Services/AWSOmics/models/Models.swift @@ -3093,6 +3093,38 @@ extension CreateWorkflowOutputResponseBody: Swift.Decodable { } } +extension OmicsClientTypes { + public enum CreationType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case `import` + case upload + case sdkUnknown(Swift.String) + + public static var allCases: [CreationType] { + return [ + .import, + .upload, + .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 .import: return "IMPORT" + case .upload: return "UPLOAD" + 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 = CreationType(rawValue: rawValue) ?? CreationType.sdkUnknown(rawValue) + } + } +} + extension DeleteAnnotationStoreInput: ClientRuntime.QueryItemProvider { public var queryItems: [ClientRuntime.URLQueryItem] { get throws { @@ -5229,6 +5261,7 @@ extension GetReadSetMetadataOutputResponse: ClientRuntime.HttpResponseBinding { let output: GetReadSetMetadataOutputResponseBody = try responseDecoder.decode(responseBody: data) self.arn = output.arn self.creationTime = output.creationTime + self.creationType = output.creationType self.description = output.description self.fileType = output.fileType self.files = output.files @@ -5244,6 +5277,7 @@ extension GetReadSetMetadataOutputResponse: ClientRuntime.HttpResponseBinding { } else { self.arn = nil self.creationTime = nil + self.creationType = nil self.description = nil self.fileType = nil self.files = nil @@ -5267,6 +5301,8 @@ public struct GetReadSetMetadataOutputResponse: Swift.Equatable { /// When the read set was created. /// This member is required. public var creationTime: ClientRuntime.Date? + /// The creation type of the read set. + public var creationType: OmicsClientTypes.CreationType? /// The read set's description. public var description: Swift.String? /// The read set's file type. @@ -5299,6 +5335,7 @@ public struct GetReadSetMetadataOutputResponse: Swift.Equatable { public init( arn: Swift.String? = nil, creationTime: ClientRuntime.Date? = nil, + creationType: OmicsClientTypes.CreationType? = nil, description: Swift.String? = nil, fileType: OmicsClientTypes.FileType? = nil, files: OmicsClientTypes.ReadSetFiles? = nil, @@ -5315,6 +5352,7 @@ public struct GetReadSetMetadataOutputResponse: Swift.Equatable { { self.arn = arn self.creationTime = creationTime + self.creationType = creationType self.description = description self.fileType = fileType self.files = files @@ -5345,12 +5383,14 @@ struct GetReadSetMetadataOutputResponseBody: Swift.Equatable { let referenceArn: Swift.String? let files: OmicsClientTypes.ReadSetFiles? let statusMessage: Swift.String? + let creationType: OmicsClientTypes.CreationType? } extension GetReadSetMetadataOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn case creationTime + case creationType case description case fileType case files @@ -5395,6 +5435,8 @@ extension GetReadSetMetadataOutputResponseBody: Swift.Decodable { files = filesDecoded let statusMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .statusMessage) statusMessage = statusMessageDecoded + let creationTypeDecoded = try containerValues.decodeIfPresent(OmicsClientTypes.CreationType.self, forKey: .creationType) + creationType = creationTypeDecoded } } @@ -12111,6 +12153,7 @@ extension OmicsClientTypes.ReadSetFilter: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case createdAfter case createdBefore + case creationType case generatedFrom case name case referenceArn @@ -12127,6 +12170,9 @@ extension OmicsClientTypes.ReadSetFilter: Swift.Codable { if let createdBefore = self.createdBefore { try encodeContainer.encodeTimestamp(createdBefore, format: .dateTime, forKey: .createdBefore) } + if let creationType = self.creationType { + try encodeContainer.encode(creationType.rawValue, forKey: .creationType) + } if let generatedFrom = self.generatedFrom { try encodeContainer.encode(generatedFrom, forKey: .generatedFrom) } @@ -12165,6 +12211,8 @@ extension OmicsClientTypes.ReadSetFilter: Swift.Codable { subjectId = subjectIdDecoded let generatedFromDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .generatedFrom) generatedFrom = generatedFromDecoded + let creationTypeDecoded = try containerValues.decodeIfPresent(OmicsClientTypes.CreationType.self, forKey: .creationType) + creationType = creationTypeDecoded } } @@ -12175,6 +12223,8 @@ extension OmicsClientTypes { public var createdAfter: ClientRuntime.Date? /// The filter's end date. public var createdBefore: ClientRuntime.Date? + /// The creation type of the read set. + public var creationType: OmicsClientTypes.CreationType? /// Where the source originated. public var generatedFrom: Swift.String? /// A name to filter on. @@ -12191,6 +12241,7 @@ extension OmicsClientTypes { public init( createdAfter: ClientRuntime.Date? = nil, createdBefore: ClientRuntime.Date? = nil, + creationType: OmicsClientTypes.CreationType? = nil, generatedFrom: Swift.String? = nil, name: Swift.String? = nil, referenceArn: Swift.String? = nil, @@ -12201,6 +12252,7 @@ extension OmicsClientTypes { { self.createdAfter = createdAfter self.createdBefore = createdBefore + self.creationType = creationType self.generatedFrom = generatedFrom self.name = name self.referenceArn = referenceArn @@ -12301,6 +12353,7 @@ extension OmicsClientTypes.ReadSetListItem: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn case creationTime + case creationType case description case fileType case id @@ -12322,6 +12375,9 @@ extension OmicsClientTypes.ReadSetListItem: Swift.Codable { if let creationTime = self.creationTime { try encodeContainer.encodeTimestamp(creationTime, format: .dateTime, forKey: .creationTime) } + if let creationType = self.creationType { + try encodeContainer.encode(creationType.rawValue, forKey: .creationType) + } if let description = self.description { try encodeContainer.encode(description, forKey: .description) } @@ -12385,6 +12441,8 @@ extension OmicsClientTypes.ReadSetListItem: Swift.Codable { creationTime = creationTimeDecoded let statusMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .statusMessage) statusMessage = statusMessageDecoded + let creationTypeDecoded = try containerValues.decodeIfPresent(OmicsClientTypes.CreationType.self, forKey: .creationType) + creationType = creationTypeDecoded } } @@ -12397,6 +12455,8 @@ extension OmicsClientTypes { /// When the read set was created. /// This member is required. public var creationTime: ClientRuntime.Date? + /// The creation type of the read set. + public var creationType: OmicsClientTypes.CreationType? /// The read set's description. public var description: Swift.String? /// The read set's file type. @@ -12427,6 +12487,7 @@ extension OmicsClientTypes { public init( arn: Swift.String? = nil, creationTime: ClientRuntime.Date? = nil, + creationType: OmicsClientTypes.CreationType? = nil, description: Swift.String? = nil, fileType: OmicsClientTypes.FileType? = nil, id: Swift.String? = nil, @@ -12442,6 +12503,7 @@ extension OmicsClientTypes { { self.arn = arn self.creationTime = creationTime + self.creationType = creationType self.description = description self.fileType = fileType self.id = id diff --git a/Sources/Services/AWSOpenSearchServerless/models/Models.swift b/Sources/Services/AWSOpenSearchServerless/models/Models.swift index 36e40f6e9fc..5dab1c73a39 100644 --- a/Sources/Services/AWSOpenSearchServerless/models/Models.swift +++ b/Sources/Services/AWSOpenSearchServerless/models/Models.swift @@ -988,12 +988,15 @@ extension OpenSearchServerlessClientTypes { case search /// Timeseries collection type case timeseries + /// Vectorsearch collection type + case vectorsearch case sdkUnknown(Swift.String) public static var allCases: [CollectionType] { return [ .search, .timeseries, + .vectorsearch, .sdkUnknown("") ] } @@ -1005,6 +1008,7 @@ extension OpenSearchServerlessClientTypes { switch self { case .search: return "SEARCH" case .timeseries: return "TIMESERIES" + case .vectorsearch: return "VECTORSEARCH" case let .sdkUnknown(s): return s } } @@ -4110,7 +4114,7 @@ extension OcuLimitExceededException { } } -/// OCU Limit Exceeded for service limits +/// Thrown when the collection you're attempting to create results in a number of search or indexing OCUs that exceeds the account limit. public struct OcuLimitExceededException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { diff --git a/Sources/Services/AWSPersonalize/PersonalizeClient.swift b/Sources/Services/AWSPersonalize/PersonalizeClient.swift index c1d41fbe5eb..c0501326542 100644 --- a/Sources/Services/AWSPersonalize/PersonalizeClient.swift +++ b/Sources/Services/AWSPersonalize/PersonalizeClient.swift @@ -2642,6 +2642,43 @@ extension PersonalizeClient: PersonalizeClientProtocol { return result } + /// Update a dataset to replace its schema with a new or existing one. For more information, see [Replacing a dataset's schema](https://docs.aws.amazon.com/personalize/latest/dg/updating-dataset-schema.html). + public func updateDataset(input: UpdateDatasetInput) async throws -> UpdateDatasetOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "updateDataset") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "personalize") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateDataset") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AmazonPersonalize.UpdateDataset")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateDatasetRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Updates a metric attribution. public func updateMetricAttribution(input: UpdateMetricAttributionInput) async throws -> UpdateMetricAttributionOutputResponse { diff --git a/Sources/Services/AWSPersonalize/PersonalizeClientProtocol.swift b/Sources/Services/AWSPersonalize/PersonalizeClientProtocol.swift index 6d4e7bc3d6e..3e5c1d4486c 100644 --- a/Sources/Services/AWSPersonalize/PersonalizeClientProtocol.swift +++ b/Sources/Services/AWSPersonalize/PersonalizeClientProtocol.swift @@ -339,6 +339,8 @@ public protocol PersonalizeClientProtocol { func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse /// Updates a campaign by either deploying a new solution or changing the value of the campaign's minProvisionedTPS parameter. To update a campaign, the campaign status must be ACTIVE or CREATE FAILED. Check the campaign status using the [DescribeCampaign](https://docs.aws.amazon.com/personalize/latest/dg/API_DescribeCampaign.html) operation. You can still get recommendations from a campaign while an update is in progress. The campaign will use the previous solution version and campaign configuration to generate recommendations until the latest campaign update status is Active. For more information on campaigns, see [CreateCampaign](https://docs.aws.amazon.com/personalize/latest/dg/API_CreateCampaign.html). func updateCampaign(input: UpdateCampaignInput) async throws -> UpdateCampaignOutputResponse + /// Update a dataset to replace its schema with a new or existing one. For more information, see [Replacing a dataset's schema](https://docs.aws.amazon.com/personalize/latest/dg/updating-dataset-schema.html). + func updateDataset(input: UpdateDatasetInput) async throws -> UpdateDatasetOutputResponse /// Updates a metric attribution. func updateMetricAttribution(input: UpdateMetricAttributionInput) async throws -> UpdateMetricAttributionOutputResponse /// Updates the recommender to modify the recommender configuration. If you update the recommender to modify the columns used in training, Amazon Personalize automatically starts a full retraining of the models backing your recommender. While the update completes, you can still get recommendations from the recommender. The recommender uses the previous configuration until the update completes. To track the status of this update, use the latestRecommenderUpdate returned in the [DescribeRecommender](https://docs.aws.amazon.com/personalize/latest/dg/API_DescribeRecommender.html) operation. diff --git a/Sources/Services/AWSPersonalize/models/Models.swift b/Sources/Services/AWSPersonalize/models/Models.swift index 0493b60478c..bd91f631bef 100644 --- a/Sources/Services/AWSPersonalize/models/Models.swift +++ b/Sources/Services/AWSPersonalize/models/Models.swift @@ -3600,7 +3600,7 @@ public struct CreateSolutionInput: Swift.Equatable { public var performAutoML: Swift.Bool? /// Whether to perform hyperparameter optimization (HPO) on the specified or selected recipe. The default is false. When performing AutoML, this parameter is always true and you should not set it to false. public var performHPO: Swift.Bool? - /// The ARN of the recipe to use for model training. Only specified when performAutoML is false. + /// The ARN of the recipe to use for model training. This is required when performAutoML is false. public var recipeArn: Swift.String? /// The configuration to use with the solution. When performAutoML is set to true, Amazon Personalize only evaluates the autoMLConfig section of the solution configuration. Amazon Personalize doesn't support configuring the hpoObjective at this time. public var solutionConfig: PersonalizeClientTypes.SolutionConfig? @@ -3932,6 +3932,7 @@ extension PersonalizeClientTypes.Dataset: Swift.Codable { case datasetGroupArn case datasetType case lastUpdatedDateTime + case latestDatasetUpdate case name case schemaArn case status @@ -3954,6 +3955,9 @@ extension PersonalizeClientTypes.Dataset: Swift.Codable { if let lastUpdatedDateTime = self.lastUpdatedDateTime { try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) } + if let latestDatasetUpdate = self.latestDatasetUpdate { + try encodeContainer.encode(latestDatasetUpdate, forKey: .latestDatasetUpdate) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -3983,6 +3987,8 @@ extension PersonalizeClientTypes.Dataset: Swift.Codable { creationDateTime = creationDateTimeDecoded let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) lastUpdatedDateTime = lastUpdatedDateTimeDecoded + let latestDatasetUpdateDecoded = try containerValues.decodeIfPresent(PersonalizeClientTypes.DatasetUpdateSummary.self, forKey: .latestDatasetUpdate) + latestDatasetUpdate = latestDatasetUpdateDecoded } } @@ -4005,6 +4011,8 @@ extension PersonalizeClientTypes { public var datasetType: Swift.String? /// A time stamp that shows when the dataset was updated. public var lastUpdatedDateTime: ClientRuntime.Date? + /// Describes the latest update to the dataset. + public var latestDatasetUpdate: PersonalizeClientTypes.DatasetUpdateSummary? /// The name of the dataset. public var name: Swift.String? /// The ARN of the associated schema. @@ -4022,6 +4030,7 @@ extension PersonalizeClientTypes { datasetGroupArn: Swift.String? = nil, datasetType: Swift.String? = nil, lastUpdatedDateTime: ClientRuntime.Date? = nil, + latestDatasetUpdate: PersonalizeClientTypes.DatasetUpdateSummary? = nil, name: Swift.String? = nil, schemaArn: Swift.String? = nil, status: Swift.String? = nil @@ -4032,6 +4041,7 @@ extension PersonalizeClientTypes { self.datasetGroupArn = datasetGroupArn self.datasetType = datasetType self.lastUpdatedDateTime = lastUpdatedDateTime + self.latestDatasetUpdate = latestDatasetUpdate self.name = name self.schemaArn = schemaArn self.status = status @@ -5003,6 +5013,81 @@ extension PersonalizeClientTypes { } +extension PersonalizeClientTypes.DatasetUpdateSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationDateTime + case failureReason + case lastUpdatedDateTime + case schemaArn + case status + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let creationDateTime = self.creationDateTime { + try encodeContainer.encodeTimestamp(creationDateTime, format: .epochSeconds, forKey: .creationDateTime) + } + if let failureReason = self.failureReason { + try encodeContainer.encode(failureReason, forKey: .failureReason) + } + if let lastUpdatedDateTime = self.lastUpdatedDateTime { + try encodeContainer.encodeTimestamp(lastUpdatedDateTime, format: .epochSeconds, forKey: .lastUpdatedDateTime) + } + if let schemaArn = self.schemaArn { + try encodeContainer.encode(schemaArn, forKey: .schemaArn) + } + if let status = self.status { + try encodeContainer.encode(status, forKey: .status) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let schemaArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schemaArn) + schemaArn = schemaArnDecoded + let statusDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .status) + status = statusDecoded + let failureReasonDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .failureReason) + failureReason = failureReasonDecoded + let creationDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationDateTime) + creationDateTime = creationDateTimeDecoded + let lastUpdatedDateTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedDateTime) + lastUpdatedDateTime = lastUpdatedDateTimeDecoded + } +} + +extension PersonalizeClientTypes { + /// Describes an update to a dataset. + public struct DatasetUpdateSummary: Swift.Equatable { + /// The creation date and time (in Unix time) of the dataset update. + public var creationDateTime: ClientRuntime.Date? + /// If updating a dataset fails, provides the reason why. + public var failureReason: Swift.String? + /// The last update date and time (in Unix time) of the dataset. + public var lastUpdatedDateTime: ClientRuntime.Date? + /// The Amazon Resource Name (ARN) of the schema that replaced the previous schema of the dataset. + public var schemaArn: Swift.String? + /// The status of the dataset update. + public var status: Swift.String? + + public init( + creationDateTime: ClientRuntime.Date? = nil, + failureReason: Swift.String? = nil, + lastUpdatedDateTime: ClientRuntime.Date? = nil, + schemaArn: Swift.String? = nil, + status: Swift.String? = nil + ) + { + self.creationDateTime = creationDateTime + self.failureReason = failureReason + self.lastUpdatedDateTime = lastUpdatedDateTime + self.schemaArn = schemaArn + self.status = status + } + } + +} + extension PersonalizeClientTypes.DefaultCategoricalHyperParameterRange: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case isTunable @@ -12539,7 +12624,7 @@ extension PersonalizeClientTypes { public var performAutoML: Swift.Bool /// Whether to perform hyperparameter optimization (HPO) on the chosen recipe. The default is false. public var performHPO: Swift.Bool - /// The ARN of the recipe used to create the solution. + /// The ARN of the recipe used to create the solution. This is required when performAutoML is false. public var recipeArn: Swift.String? /// The ARN of the solution. public var solutionArn: Swift.String? @@ -13966,6 +14051,120 @@ extension UpdateCampaignOutputResponseBody: Swift.Decodable { } } +extension UpdateDatasetInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datasetArn + case schemaArn + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let datasetArn = self.datasetArn { + try encodeContainer.encode(datasetArn, forKey: .datasetArn) + } + if let schemaArn = self.schemaArn { + try encodeContainer.encode(schemaArn, forKey: .schemaArn) + } + } +} + +extension UpdateDatasetInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct UpdateDatasetInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the dataset that you want to update. + /// This member is required. + public var datasetArn: Swift.String? + /// The Amazon Resource Name (ARN) of the new schema you want use. + /// This member is required. + public var schemaArn: Swift.String? + + public init( + datasetArn: Swift.String? = nil, + schemaArn: Swift.String? = nil + ) + { + self.datasetArn = datasetArn + self.schemaArn = schemaArn + } +} + +struct UpdateDatasetInputBody: Swift.Equatable { + let datasetArn: Swift.String? + let schemaArn: Swift.String? +} + +extension UpdateDatasetInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datasetArn + case schemaArn + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datasetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetArn) + datasetArn = datasetArnDecoded + let schemaArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .schemaArn) + schemaArn = schemaArnDecoded + } +} + +public enum UpdateDatasetOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InvalidInputException": return try await InvalidInputException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceInUseException": return try await ResourceInUseException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UpdateDatasetOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: UpdateDatasetOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.datasetArn = output.datasetArn + } else { + self.datasetArn = nil + } + } +} + +public struct UpdateDatasetOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the dataset you updated. + public var datasetArn: Swift.String? + + public init( + datasetArn: Swift.String? = nil + ) + { + self.datasetArn = datasetArn + } +} + +struct UpdateDatasetOutputResponseBody: Swift.Equatable { + let datasetArn: Swift.String? +} + +extension UpdateDatasetOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case datasetArn + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let datasetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .datasetArn) + datasetArn = datasetArnDecoded + } +} + extension UpdateMetricAttributionInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case addMetrics diff --git a/Sources/Services/AWSPinpoint/models/Models.swift b/Sources/Services/AWSPinpoint/models/Models.swift index b1706d420dc..c220ba3abef 100644 --- a/Sources/Services/AWSPinpoint/models/Models.swift +++ b/Sources/Services/AWSPinpoint/models/Models.swift @@ -2640,10 +2640,66 @@ extension PinpointClientTypes { } +extension PinpointClientTypes.ApplicationSettingsJourneyLimits: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dailyCap = "DailyCap" + case timeframeCap = "TimeframeCap" + case totalCap = "TotalCap" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let dailyCap = self.dailyCap { + try encodeContainer.encode(dailyCap, forKey: .dailyCap) + } + if let timeframeCap = self.timeframeCap { + try encodeContainer.encode(timeframeCap, forKey: .timeframeCap) + } + if let totalCap = self.totalCap { + try encodeContainer.encode(totalCap, forKey: .totalCap) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let dailyCapDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .dailyCap) + dailyCap = dailyCapDecoded + let timeframeCapDecoded = try containerValues.decodeIfPresent(PinpointClientTypes.JourneyTimeframeCap.self, forKey: .timeframeCap) + timeframeCap = timeframeCapDecoded + let totalCapDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .totalCap) + totalCap = totalCapDecoded + } +} + +extension PinpointClientTypes { + /// The default sending limits for journeys in the application. To override these limits and define custom limits for a specific journey, use the Journey resource. + public struct ApplicationSettingsJourneyLimits: Swift.Equatable { + /// The daily number of messages that an endpoint can receive from all journeys. The maximum value is 100. If set to 0, this limit will not apply. + public var dailyCap: Swift.Int? + /// The default maximum number of messages that can be sent to an endpoint during the specified timeframe for all journeys. + public var timeframeCap: PinpointClientTypes.JourneyTimeframeCap? + /// The default maximum number of messages that a single journey can sent to a single endpoint. The maximum value is 100. If set to 0, this limit will not apply. + public var totalCap: Swift.Int? + + public init( + dailyCap: Swift.Int? = nil, + timeframeCap: PinpointClientTypes.JourneyTimeframeCap? = nil, + totalCap: Swift.Int? = nil + ) + { + self.dailyCap = dailyCap + self.timeframeCap = timeframeCap + self.totalCap = totalCap + } + } + +} + extension PinpointClientTypes.ApplicationSettingsResource: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case applicationId = "ApplicationId" case campaignHook = "CampaignHook" + case journeyLimits = "JourneyLimits" case lastModifiedDate = "LastModifiedDate" case limits = "Limits" case quietTime = "QuietTime" @@ -2657,6 +2713,9 @@ extension PinpointClientTypes.ApplicationSettingsResource: Swift.Codable { if let campaignHook = self.campaignHook { try encodeContainer.encode(campaignHook, forKey: .campaignHook) } + if let journeyLimits = self.journeyLimits { + try encodeContainer.encode(journeyLimits, forKey: .journeyLimits) + } if let lastModifiedDate = self.lastModifiedDate { try encodeContainer.encode(lastModifiedDate, forKey: .lastModifiedDate) } @@ -2680,6 +2739,8 @@ extension PinpointClientTypes.ApplicationSettingsResource: Swift.Codable { limits = limitsDecoded let quietTimeDecoded = try containerValues.decodeIfPresent(PinpointClientTypes.QuietTime.self, forKey: .quietTime) quietTime = quietTimeDecoded + let journeyLimitsDecoded = try containerValues.decodeIfPresent(PinpointClientTypes.ApplicationSettingsJourneyLimits.self, forKey: .journeyLimits) + journeyLimits = journeyLimitsDecoded } } @@ -2691,6 +2752,8 @@ extension PinpointClientTypes { public var applicationId: Swift.String? /// The settings for the AWS Lambda function to invoke by default as a code hook for campaigns in the application. You can use this hook to customize segments that are used by campaigns in the application. public var campaignHook: PinpointClientTypes.CampaignHook? + /// The default sending limits for journeys in the application. These limits apply to each journey for the application but can be overridden, on a per journey basis, with the JourneyLimits resource. + public var journeyLimits: PinpointClientTypes.ApplicationSettingsJourneyLimits? /// The date and time, in ISO 8601 format, when the application's settings were last modified. public var lastModifiedDate: Swift.String? /// The default sending limits for campaigns in the application. @@ -2710,6 +2773,7 @@ extension PinpointClientTypes { public init( applicationId: Swift.String? = nil, campaignHook: PinpointClientTypes.CampaignHook? = nil, + journeyLimits: PinpointClientTypes.ApplicationSettingsJourneyLimits? = nil, lastModifiedDate: Swift.String? = nil, limits: PinpointClientTypes.CampaignLimits? = nil, quietTime: PinpointClientTypes.QuietTime? = nil @@ -2717,6 +2781,7 @@ extension PinpointClientTypes { { self.applicationId = applicationId self.campaignHook = campaignHook + self.journeyLimits = journeyLimits self.lastModifiedDate = lastModifiedDate self.limits = limits self.quietTime = quietTime @@ -13286,7 +13351,9 @@ extension PinpointClientTypes { extension PinpointClientTypes.GCMChannelRequest: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case apiKey = "ApiKey" + case defaultAuthenticationMethod = "DefaultAuthenticationMethod" case enabled = "Enabled" + case serviceJson = "ServiceJson" } public func encode(to encoder: Swift.Encoder) throws { @@ -13294,17 +13361,27 @@ extension PinpointClientTypes.GCMChannelRequest: Swift.Codable { if let apiKey = self.apiKey { try encodeContainer.encode(apiKey, forKey: .apiKey) } + if let defaultAuthenticationMethod = self.defaultAuthenticationMethod { + try encodeContainer.encode(defaultAuthenticationMethod, forKey: .defaultAuthenticationMethod) + } if let enabled = self.enabled { try encodeContainer.encode(enabled, forKey: .enabled) } + if let serviceJson = self.serviceJson { + try encodeContainer.encode(serviceJson, forKey: .serviceJson) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let apiKeyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .apiKey) apiKey = apiKeyDecoded + let defaultAuthenticationMethodDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .defaultAuthenticationMethod) + defaultAuthenticationMethod = defaultAuthenticationMethodDecoded let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) enabled = enabledDecoded + let serviceJsonDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceJson) + serviceJson = serviceJsonDecoded } } @@ -13312,18 +13389,25 @@ extension PinpointClientTypes { /// Specifies the status and settings of the GCM channel for an application. This channel enables Amazon Pinpoint to send push notifications through the Firebase Cloud Messaging (FCM), formerly Google Cloud Messaging (GCM), service. public struct GCMChannelRequest: Swift.Equatable { /// The Web API Key, also referred to as an API_KEY or server key, that you received from Google to communicate with Google services. - /// This member is required. public var apiKey: Swift.String? + /// The default authentication method used for GCM. Values are either "TOKEN" or "KEY". Defaults to "KEY". + public var defaultAuthenticationMethod: Swift.String? /// Specifies whether to enable the GCM channel for the application. public var enabled: Swift.Bool? + /// The contents of the JSON file provided by Google during registration in order to generate an access token for authentication. For more information see [Migrate from legacy FCM APIs to HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1). + public var serviceJson: Swift.String? public init( apiKey: Swift.String? = nil, - enabled: Swift.Bool? = nil + defaultAuthenticationMethod: Swift.String? = nil, + enabled: Swift.Bool? = nil, + serviceJson: Swift.String? = nil ) { self.apiKey = apiKey + self.defaultAuthenticationMethod = defaultAuthenticationMethod self.enabled = enabled + self.serviceJson = serviceJson } } @@ -13334,8 +13418,10 @@ extension PinpointClientTypes.GCMChannelResponse: Swift.Codable { case applicationId = "ApplicationId" case creationDate = "CreationDate" case credential = "Credential" + case defaultAuthenticationMethod = "DefaultAuthenticationMethod" case enabled = "Enabled" case hasCredential = "HasCredential" + case hasFcmServiceCredentials = "HasFcmServiceCredentials" case id = "Id" case isArchived = "IsArchived" case lastModifiedBy = "LastModifiedBy" @@ -13355,12 +13441,18 @@ extension PinpointClientTypes.GCMChannelResponse: Swift.Codable { if let credential = self.credential { try encodeContainer.encode(credential, forKey: .credential) } + if let defaultAuthenticationMethod = self.defaultAuthenticationMethod { + try encodeContainer.encode(defaultAuthenticationMethod, forKey: .defaultAuthenticationMethod) + } if let enabled = self.enabled { try encodeContainer.encode(enabled, forKey: .enabled) } if let hasCredential = self.hasCredential { try encodeContainer.encode(hasCredential, forKey: .hasCredential) } + if let hasFcmServiceCredentials = self.hasFcmServiceCredentials { + try encodeContainer.encode(hasFcmServiceCredentials, forKey: .hasFcmServiceCredentials) + } if let id = self.id { try encodeContainer.encode(id, forKey: .id) } @@ -13389,10 +13481,14 @@ extension PinpointClientTypes.GCMChannelResponse: Swift.Codable { creationDate = creationDateDecoded let credentialDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .credential) credential = credentialDecoded + let defaultAuthenticationMethodDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .defaultAuthenticationMethod) + defaultAuthenticationMethod = defaultAuthenticationMethodDecoded let enabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enabled) enabled = enabledDecoded let hasCredentialDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .hasCredential) hasCredential = hasCredentialDecoded + let hasFcmServiceCredentialsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .hasFcmServiceCredentials) + hasFcmServiceCredentials = hasFcmServiceCredentialsDecoded let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) id = idDecoded let isArchivedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .isArchived) @@ -13416,12 +13512,15 @@ extension PinpointClientTypes { /// The date and time when the GCM channel was enabled. public var creationDate: Swift.String? /// The Web API Key, also referred to as an API_KEY or server key, that you received from Google to communicate with Google services. - /// This member is required. public var credential: Swift.String? + /// The default authentication method used for GCM. Values are either "TOKEN" or "KEY". Defaults to "KEY". + public var defaultAuthenticationMethod: Swift.String? /// Specifies whether the GCM channel is enabled for the application. public var enabled: Swift.Bool? /// (Not used) This property is retained only for backward compatibility. public var hasCredential: Swift.Bool? + /// Returns true if the JSON file provided by Google during registration process was used in the ServiceJson field of the request. + public var hasFcmServiceCredentials: Swift.Bool? /// (Deprecated) An identifier for the GCM channel. This property is retained only for backward compatibility. public var id: Swift.String? /// Specifies whether the GCM channel is archived. @@ -13440,8 +13539,10 @@ extension PinpointClientTypes { applicationId: Swift.String? = nil, creationDate: Swift.String? = nil, credential: Swift.String? = nil, + defaultAuthenticationMethod: Swift.String? = nil, enabled: Swift.Bool? = nil, hasCredential: Swift.Bool? = nil, + hasFcmServiceCredentials: Swift.Bool? = nil, id: Swift.String? = nil, isArchived: Swift.Bool? = nil, lastModifiedBy: Swift.String? = nil, @@ -13453,8 +13554,10 @@ extension PinpointClientTypes { self.applicationId = applicationId self.creationDate = creationDate self.credential = credential + self.defaultAuthenticationMethod = defaultAuthenticationMethod self.enabled = enabled self.hasCredential = hasCredential + self.hasFcmServiceCredentials = hasFcmServiceCredentials self.id = id self.isArchived = isArchived self.lastModifiedBy = lastModifiedBy @@ -13475,6 +13578,7 @@ extension PinpointClientTypes.GCMMessage: Swift.Codable { case iconReference = "IconReference" case imageIconUrl = "ImageIconUrl" case imageUrl = "ImageUrl" + case preferredAuthenticationMethod = "PreferredAuthenticationMethod" case priority = "Priority" case rawContent = "RawContent" case restrictedPackageName = "RestrictedPackageName" @@ -13513,6 +13617,9 @@ extension PinpointClientTypes.GCMMessage: Swift.Codable { if let imageUrl = self.imageUrl { try encodeContainer.encode(imageUrl, forKey: .imageUrl) } + if let preferredAuthenticationMethod = self.preferredAuthenticationMethod { + try encodeContainer.encode(preferredAuthenticationMethod, forKey: .preferredAuthenticationMethod) + } if let priority = self.priority { try encodeContainer.encode(priority, forKey: .priority) } @@ -13576,6 +13683,8 @@ extension PinpointClientTypes.GCMMessage: Swift.Codable { imageIconUrl = imageIconUrlDecoded let imageUrlDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .imageUrl) imageUrl = imageUrlDecoded + let preferredAuthenticationMethodDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .preferredAuthenticationMethod) + preferredAuthenticationMethod = preferredAuthenticationMethodDecoded let priorityDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .priority) priority = priorityDecoded let rawContentDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .rawContent) @@ -13638,8 +13747,10 @@ extension PinpointClientTypes { public var imageIconUrl: Swift.String? /// The URL of an image to display in the push notification. public var imageUrl: Swift.String? - /// para>normal - The notification might be delayed. Delivery is optimized for battery usage on the recipient's device. Use this value unless immediate delivery is required./listitem> - /// * high - The notification is sent immediately and might wake a sleeping device. + /// The preferred authentication method, with valid values "KEY" or "TOKEN". If a value isn't provided then the DefaultAuthenticationMethod is used. + public var preferredAuthenticationMethod: Swift.String? + /// para>normal – The notification might be delayed. Delivery is optimized for battery usage on the recipient's device. Use this value unless immediate delivery is required./listitem> + /// * high – The notification is sent immediately and might wake a sleeping device. /// /para> Amazon Pinpoint specifies this value in the FCM priority parameter when it sends the notification message to FCM. The equivalent values for Apple Push Notification service (APNs) are 5, for normal, and 10, for high. If you specify an APNs value for this property, Amazon Pinpoint accepts and converts the value to the corresponding FCM value. public var priority: Swift.String? /// The raw, JSON-formatted string to use as the payload for the notification message. If specified, this value overrides all other content for the message. @@ -13669,6 +13780,7 @@ extension PinpointClientTypes { iconReference: Swift.String? = nil, imageIconUrl: Swift.String? = nil, imageUrl: Swift.String? = nil, + preferredAuthenticationMethod: Swift.String? = nil, priority: Swift.String? = nil, rawContent: Swift.String? = nil, restrictedPackageName: Swift.String? = nil, @@ -13688,6 +13800,7 @@ extension PinpointClientTypes { self.iconReference = iconReference self.imageIconUrl = imageIconUrl self.imageUrl = imageUrl + self.preferredAuthenticationMethod = preferredAuthenticationMethod self.priority = priority self.rawContent = rawContent self.restrictedPackageName = restrictedPackageName @@ -20938,6 +21051,8 @@ extension PinpointClientTypes.JourneyLimits: Swift.Codable { case endpointReentryCap = "EndpointReentryCap" case endpointReentryInterval = "EndpointReentryInterval" case messagesPerSecond = "MessagesPerSecond" + case timeframeCap = "TimeframeCap" + case totalCap = "TotalCap" } public func encode(to encoder: Swift.Encoder) throws { @@ -20954,6 +21069,12 @@ extension PinpointClientTypes.JourneyLimits: Swift.Codable { if let messagesPerSecond = self.messagesPerSecond { try encodeContainer.encode(messagesPerSecond, forKey: .messagesPerSecond) } + if let timeframeCap = self.timeframeCap { + try encodeContainer.encode(timeframeCap, forKey: .timeframeCap) + } + if let totalCap = self.totalCap { + try encodeContainer.encode(totalCap, forKey: .totalCap) + } } public init(from decoder: Swift.Decoder) throws { @@ -20966,6 +21087,10 @@ extension PinpointClientTypes.JourneyLimits: Swift.Codable { messagesPerSecond = messagesPerSecondDecoded let endpointReentryIntervalDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .endpointReentryInterval) endpointReentryInterval = endpointReentryIntervalDecoded + let timeframeCapDecoded = try containerValues.decodeIfPresent(PinpointClientTypes.JourneyTimeframeCap.self, forKey: .timeframeCap) + timeframeCap = timeframeCapDecoded + let totalCapDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .totalCap) + totalCap = totalCapDecoded } } @@ -20980,18 +21105,26 @@ extension PinpointClientTypes { public var endpointReentryInterval: Swift.String? /// The maximum number of messages that the journey can send each second. public var messagesPerSecond: Swift.Int? + /// The number of messages that an endpoint can receive during the specified timeframe. + public var timeframeCap: PinpointClientTypes.JourneyTimeframeCap? + /// The maximum number of messages a journey can sent to a single endpoint. The maximum value is 100. If set to 0, this limit will not apply. + public var totalCap: Swift.Int? public init( dailyCap: Swift.Int? = nil, endpointReentryCap: Swift.Int? = nil, endpointReentryInterval: Swift.String? = nil, - messagesPerSecond: Swift.Int? = nil + messagesPerSecond: Swift.Int? = nil, + timeframeCap: PinpointClientTypes.JourneyTimeframeCap? = nil, + totalCap: Swift.Int? = nil ) { self.dailyCap = dailyCap self.endpointReentryCap = endpointReentryCap self.endpointReentryInterval = endpointReentryInterval self.messagesPerSecond = messagesPerSecond + self.timeframeCap = timeframeCap + self.totalCap = totalCap } } @@ -21887,6 +22020,51 @@ extension PinpointClientTypes { } +extension PinpointClientTypes.JourneyTimeframeCap: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case cap = "Cap" + case days = "Days" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let cap = self.cap { + try encodeContainer.encode(cap, forKey: .cap) + } + if let days = self.days { + try encodeContainer.encode(days, forKey: .days) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let capDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .cap) + cap = capDecoded + let daysDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .days) + days = daysDecoded + } +} + +extension PinpointClientTypes { + /// The number of messages that can be sent to an endpoint during the specified timeframe for all journeys. + public struct JourneyTimeframeCap: Swift.Equatable { + /// The maximum number of messages that all journeys can send to an endpoint during the specified timeframe. The maximum value is 100. If set to 0, this limit will not apply. + public var cap: Swift.Int? + /// The length of the timeframe in days. The maximum value is 30. If set to 0, this limit will not apply. + public var days: Swift.Int? + + public init( + cap: Swift.Int? = nil, + days: Swift.Int? = nil + ) + { + self.cap = cap + self.days = days + } + } + +} + extension PinpointClientTypes.JourneysResponse: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case item = "Item" @@ -28813,6 +28991,7 @@ extension PinpointClientTypes { extension PinpointClientTypes.TemplateConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case emailTemplate = "EmailTemplate" + case inAppTemplate = "InAppTemplate" case pushTemplate = "PushTemplate" case smsTemplate = "SMSTemplate" case voiceTemplate = "VoiceTemplate" @@ -28823,6 +29002,9 @@ extension PinpointClientTypes.TemplateConfiguration: Swift.Codable { if let emailTemplate = self.emailTemplate { try encodeContainer.encode(emailTemplate, forKey: .emailTemplate) } + if let inAppTemplate = self.inAppTemplate { + try encodeContainer.encode(inAppTemplate, forKey: .inAppTemplate) + } if let pushTemplate = self.pushTemplate { try encodeContainer.encode(pushTemplate, forKey: .pushTemplate) } @@ -28844,6 +29026,8 @@ extension PinpointClientTypes.TemplateConfiguration: Swift.Codable { smsTemplate = smsTemplateDecoded let voiceTemplateDecoded = try containerValues.decodeIfPresent(PinpointClientTypes.Template.self, forKey: .voiceTemplate) voiceTemplate = voiceTemplateDecoded + let inAppTemplateDecoded = try containerValues.decodeIfPresent(PinpointClientTypes.Template.self, forKey: .inAppTemplate) + inAppTemplate = inAppTemplateDecoded } } @@ -28852,6 +29036,8 @@ extension PinpointClientTypes { public struct TemplateConfiguration: Swift.Equatable { /// The email template to use for the message. public var emailTemplate: PinpointClientTypes.Template? + /// The InApp template to use for the message. The InApp template object is not supported for SendMessages. + public var inAppTemplate: PinpointClientTypes.Template? /// The push notification template to use for the message. public var pushTemplate: PinpointClientTypes.Template? /// The SMS template to use for the message. @@ -28861,12 +29047,14 @@ extension PinpointClientTypes { public init( emailTemplate: PinpointClientTypes.Template? = nil, + inAppTemplate: PinpointClientTypes.Template? = nil, pushTemplate: PinpointClientTypes.Template? = nil, smsTemplate: PinpointClientTypes.Template? = nil, voiceTemplate: PinpointClientTypes.Template? = nil ) { self.emailTemplate = emailTemplate + self.inAppTemplate = inAppTemplate self.pushTemplate = pushTemplate self.smsTemplate = smsTemplate self.voiceTemplate = voiceTemplate @@ -29029,7 +29217,7 @@ extension PinpointClientTypes { /// The name of the message template. /// This member is required. public var templateName: Swift.String? - /// The type of channel that the message template is designed for. Possible values are: EMAIL, PUSH, SMS, and VOICE. + /// The type of channel that the message template is designed for. Possible values are: EMAIL, PUSH, SMS, INAPP, and VOICE. /// This member is required. public var templateType: PinpointClientTypes.TemplateType? /// The unique identifier, as an integer, for the active version of the message template. @@ -29173,7 +29361,7 @@ extension PinpointClientTypes { /// The name of the message template. /// This member is required. public var templateName: Swift.String? - /// The type of channel that the message template is designed for. Possible values are: EMAIL, PUSH, SMS, and VOICE. + /// The type of channel that the message template is designed for. Possible values are: EMAIL, PUSH, SMS, INAPP, and VOICE. /// This member is required. public var templateType: Swift.String? /// The unique identifier for the version of the message template. This value is an integer that Amazon Pinpoint automatically increments and assigns to each new version of a template. @@ -34498,6 +34686,7 @@ extension PinpointClientTypes.WriteApplicationSettingsRequest: Swift.Codable { case campaignHook = "CampaignHook" case cloudWatchMetricsEnabled = "CloudWatchMetricsEnabled" case eventTaggingEnabled = "EventTaggingEnabled" + case journeyLimits = "JourneyLimits" case limits = "Limits" case quietTime = "QuietTime" } @@ -34513,6 +34702,9 @@ extension PinpointClientTypes.WriteApplicationSettingsRequest: Swift.Codable { if let eventTaggingEnabled = self.eventTaggingEnabled { try encodeContainer.encode(eventTaggingEnabled, forKey: .eventTaggingEnabled) } + if let journeyLimits = self.journeyLimits { + try encodeContainer.encode(journeyLimits, forKey: .journeyLimits) + } if let limits = self.limits { try encodeContainer.encode(limits, forKey: .limits) } @@ -34533,6 +34725,8 @@ extension PinpointClientTypes.WriteApplicationSettingsRequest: Swift.Codable { limits = limitsDecoded let quietTimeDecoded = try containerValues.decodeIfPresent(PinpointClientTypes.QuietTime.self, forKey: .quietTime) quietTime = quietTimeDecoded + let journeyLimitsDecoded = try containerValues.decodeIfPresent(PinpointClientTypes.ApplicationSettingsJourneyLimits.self, forKey: .journeyLimits) + journeyLimits = journeyLimitsDecoded } } @@ -34544,6 +34738,8 @@ extension PinpointClientTypes { /// Specifies whether to enable application-related alarms in Amazon CloudWatch. public var cloudWatchMetricsEnabled: Swift.Bool? public var eventTaggingEnabled: Swift.Bool? + /// The default sending limits for journeys in the application. These limits apply to each journey for the application but can be overridden, on a per journey basis, with the JourneyLimits resource. + public var journeyLimits: PinpointClientTypes.ApplicationSettingsJourneyLimits? /// The default sending limits for campaigns in the application. To override these limits and define custom limits for a specific campaign or journey, use the Campaign resource or the Journey resource, respectively. public var limits: PinpointClientTypes.CampaignLimits? /// The default quiet time for campaigns in the application. Quiet time is a specific time range when messages aren't sent to endpoints, if all the following conditions are met: @@ -34562,6 +34758,7 @@ extension PinpointClientTypes { campaignHook: PinpointClientTypes.CampaignHook? = nil, cloudWatchMetricsEnabled: Swift.Bool? = nil, eventTaggingEnabled: Swift.Bool? = nil, + journeyLimits: PinpointClientTypes.ApplicationSettingsJourneyLimits? = nil, limits: PinpointClientTypes.CampaignLimits? = nil, quietTime: PinpointClientTypes.QuietTime? = nil ) @@ -34569,6 +34766,7 @@ extension PinpointClientTypes { self.campaignHook = campaignHook self.cloudWatchMetricsEnabled = cloudWatchMetricsEnabled self.eventTaggingEnabled = eventTaggingEnabled + self.journeyLimits = journeyLimits self.limits = limits self.quietTime = quietTime } diff --git a/Sources/Services/AWSPolly/models/Models.swift b/Sources/Services/AWSPolly/models/Models.swift index b39f92c0702..830aa26046f 100644 --- a/Sources/Services/AWSPolly/models/Models.swift +++ b/Sources/Services/AWSPolly/models/Models.swift @@ -949,6 +949,7 @@ extension PollyClientTypes { case esMx case esUs case fiFi + case frBe case frCa case frFr case hiIn @@ -957,6 +958,7 @@ extension PollyClientTypes { case jaJp case koKr case nbNo + case nlBe case nlNl case plPl case ptBr @@ -990,6 +992,7 @@ extension PollyClientTypes { .esMx, .esUs, .fiFi, + .frBe, .frCa, .frFr, .hiIn, @@ -998,6 +1001,7 @@ extension PollyClientTypes { .jaJp, .koKr, .nbNo, + .nlBe, .nlNl, .plPl, .ptBr, @@ -1036,6 +1040,7 @@ extension PollyClientTypes { case .esMx: return "es-MX" case .esUs: return "es-US" case .fiFi: return "fi-FI" + case .frBe: return "fr-BE" case .frCa: return "fr-CA" case .frFr: return "fr-FR" case .hiIn: return "hi-IN" @@ -1044,6 +1049,7 @@ extension PollyClientTypes { case .jaJp: return "ja-JP" case .koKr: return "ko-KR" case .nbNo: return "nb-NO" + case .nlBe: return "nl-BE" case .nlNl: return "nl-NL" case .plPl: return "pl-PL" case .ptBr: return "pt-BR" @@ -3407,6 +3413,7 @@ extension PollyClientTypes { case hiujin case ida case ines + case isabelle case ivy case jacek case jan @@ -3422,6 +3429,7 @@ extension PollyClientTypes { case laura case lea case liam + case lisa case liv case lotte case lucia @@ -3501,6 +3509,7 @@ extension PollyClientTypes { .hiujin, .ida, .ines, + .isabelle, .ivy, .jacek, .jan, @@ -3516,6 +3525,7 @@ extension PollyClientTypes { .laura, .lea, .liam, + .lisa, .liv, .lotte, .lucia, @@ -3600,6 +3610,7 @@ extension PollyClientTypes { case .hiujin: return "Hiujin" case .ida: return "Ida" case .ines: return "Ines" + case .isabelle: return "Isabelle" case .ivy: return "Ivy" case .jacek: return "Jacek" case .jan: return "Jan" @@ -3615,6 +3626,7 @@ extension PollyClientTypes { case .laura: return "Laura" case .lea: return "Lea" case .liam: return "Liam" + case .lisa: return "Lisa" case .liv: return "Liv" case .lotte: return "Lotte" case .lucia: return "Lucia" diff --git a/Sources/Services/AWSProton/ProtonClient.swift b/Sources/Services/AWSProton/ProtonClient.swift index 184def7eebc..234c48b81e6 100644 --- a/Sources/Services/AWSProton/ProtonClient.swift +++ b/Sources/Services/AWSProton/ProtonClient.swift @@ -802,6 +802,43 @@ extension ProtonClient: ProtonClientProtocol { return result } + /// Delete the deployment. + public func deleteDeployment(input: DeleteDeploymentInput) async throws -> DeleteDeploymentOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "deleteDeployment") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "proton") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteDeployment") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AwsProton20200720.DeleteDeployment")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "DeleteDeploymentInput")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.0")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Delete an environment. public func deleteEnvironment(input: DeleteEnvironmentInput) async throws -> DeleteEnvironmentOutputResponse { @@ -1246,6 +1283,43 @@ extension ProtonClient: ProtonClientProtocol { return result } + /// Get detailed data for a deployment. + public func getDeployment(input: GetDeploymentInput) async throws -> GetDeploymentOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getDeployment") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "proton") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getDeployment") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AwsProton20200720.GetDeployment")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "GetDeploymentInput")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.0")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Get detailed data for an environment. public func getEnvironment(input: GetEnvironmentInput) async throws -> GetEnvironmentOutputResponse { @@ -1949,6 +2023,43 @@ extension ProtonClient: ProtonClientProtocol { return result } + /// List deployments. You can filter the result list by environment, service, or a single service instance. + public func listDeployments(input: ListDeploymentsInput) async throws -> ListDeploymentsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listDeployments") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "proton") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listDeployments") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AwsProton20200720.ListDeployments")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "ListDeploymentsInput")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.0")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// View a list of environment account connections. For more information, see [Environment account connections](https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html) in the Proton User guide. public func listEnvironmentAccountConnections(input: ListEnvironmentAccountConnectionsInput) async throws -> ListEnvironmentAccountConnectionsOutputResponse { diff --git a/Sources/Services/AWSProton/ProtonClientProtocol.swift b/Sources/Services/AWSProton/ProtonClientProtocol.swift index 0a0d9bbe89b..b02fad0aee1 100644 --- a/Sources/Services/AWSProton/ProtonClientProtocol.swift +++ b/Sources/Services/AWSProton/ProtonClientProtocol.swift @@ -106,6 +106,8 @@ public protocol ProtonClientProtocol { func createTemplateSyncConfig(input: CreateTemplateSyncConfigInput) async throws -> CreateTemplateSyncConfigOutputResponse /// Delete an Proton component resource. For more information about components, see [Proton components](https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html) in the Proton User Guide. func deleteComponent(input: DeleteComponentInput) async throws -> DeleteComponentOutputResponse + /// Delete the deployment. + func deleteDeployment(input: DeleteDeploymentInput) async throws -> DeleteDeploymentOutputResponse /// Delete an environment. func deleteEnvironment(input: DeleteEnvironmentInput) async throws -> DeleteEnvironmentOutputResponse /// In an environment account, delete an environment account connection. After you delete an environment account connection that’s in use by an Proton environment, Proton can’t manage the environment infrastructure resources until a new environment account connection is accepted for the environment account and associated environment. You're responsible for cleaning up provisioned resources that remain without an environment connection. For more information, see [Environment account connections](https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html) in the Proton User guide. @@ -130,6 +132,8 @@ public protocol ProtonClientProtocol { func getAccountSettings(input: GetAccountSettingsInput) async throws -> GetAccountSettingsOutputResponse /// Get detailed data for a component. For more information about components, see [Proton components](https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html) in the Proton User Guide. func getComponent(input: GetComponentInput) async throws -> GetComponentOutputResponse + /// Get detailed data for a deployment. + func getDeployment(input: GetDeploymentInput) async throws -> GetDeploymentOutputResponse /// Get detailed data for an environment. func getEnvironment(input: GetEnvironmentInput) async throws -> GetEnvironmentOutputResponse /// In an environment account, get the detailed data for an environment account connection. For more information, see [Environment account connections](https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html) in the Proton User guide. @@ -168,6 +172,8 @@ public protocol ProtonClientProtocol { func listComponentProvisionedResources(input: ListComponentProvisionedResourcesInput) async throws -> ListComponentProvisionedResourcesOutputResponse /// List components with summary data. You can filter the result list by environment, service, or a single service instance. For more information about components, see [Proton components](https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html) in the Proton User Guide. func listComponents(input: ListComponentsInput) async throws -> ListComponentsOutputResponse + /// List deployments. You can filter the result list by environment, service, or a single service instance. + func listDeployments(input: ListDeploymentsInput) async throws -> ListDeploymentsOutputResponse /// View a list of environment account connections. For more information, see [Environment account connections](https://docs.aws.amazon.com/proton/latest/userguide/ag-env-account-connections.html) in the Proton User guide. func listEnvironmentAccountConnections(input: ListEnvironmentAccountConnectionsInput) async throws -> ListEnvironmentAccountConnectionsOutputResponse /// List the infrastructure as code outputs for your environment. diff --git a/Sources/Services/AWSProton/models/Models.swift b/Sources/Services/AWSProton/models/Models.swift index bfe00902ff2..48a4954f2c0 100644 --- a/Sources/Services/AWSProton/models/Models.swift +++ b/Sources/Services/AWSProton/models/Models.swift @@ -819,10 +819,12 @@ extension ProtonClientTypes.Component: Swift.Codable { case deploymentStatusMessage case description case environmentName + case lastAttemptedDeploymentId case lastClientRequestToken case lastDeploymentAttemptedAt case lastDeploymentSucceededAt case lastModifiedAt + case lastSucceededDeploymentId case name case serviceInstanceName case serviceName @@ -849,6 +851,9 @@ extension ProtonClientTypes.Component: Swift.Codable { if let environmentName = self.environmentName { try encodeContainer.encode(environmentName, forKey: .environmentName) } + if let lastAttemptedDeploymentId = self.lastAttemptedDeploymentId { + try encodeContainer.encode(lastAttemptedDeploymentId, forKey: .lastAttemptedDeploymentId) + } if let lastClientRequestToken = self.lastClientRequestToken { try encodeContainer.encode(lastClientRequestToken, forKey: .lastClientRequestToken) } @@ -861,6 +866,9 @@ extension ProtonClientTypes.Component: Swift.Codable { if let lastModifiedAt = self.lastModifiedAt { try encodeContainer.encodeTimestamp(lastModifiedAt, format: .epochSeconds, forKey: .lastModifiedAt) } + if let lastSucceededDeploymentId = self.lastSucceededDeploymentId { + try encodeContainer.encode(lastSucceededDeploymentId, forKey: .lastSucceededDeploymentId) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -905,12 +913,16 @@ extension ProtonClientTypes.Component: Swift.Codable { serviceSpec = serviceSpecDecoded let lastClientRequestTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastClientRequestToken) lastClientRequestToken = lastClientRequestTokenDecoded + let lastAttemptedDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastAttemptedDeploymentId) + lastAttemptedDeploymentId = lastAttemptedDeploymentIdDecoded + let lastSucceededDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastSucceededDeploymentId) + lastSucceededDeploymentId = lastSucceededDeploymentIdDecoded } } extension ProtonClientTypes.Component: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "Component(arn: \(Swift.String(describing: arn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentName: \(Swift.String(describing: environmentName)), lastClientRequestToken: \(Swift.String(describing: lastClientRequestToken)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), lastModifiedAt: \(Swift.String(describing: lastModifiedAt)), name: \(Swift.String(describing: name)), serviceInstanceName: \(Swift.String(describing: serviceInstanceName)), serviceName: \(Swift.String(describing: serviceName)), deploymentStatusMessage: \"CONTENT_REDACTED\", description: \"CONTENT_REDACTED\", serviceSpec: \"CONTENT_REDACTED\")"} + "Component(arn: \(Swift.String(describing: arn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentName: \(Swift.String(describing: environmentName)), lastAttemptedDeploymentId: \(Swift.String(describing: lastAttemptedDeploymentId)), lastClientRequestToken: \(Swift.String(describing: lastClientRequestToken)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), lastModifiedAt: \(Swift.String(describing: lastModifiedAt)), lastSucceededDeploymentId: \(Swift.String(describing: lastSucceededDeploymentId)), name: \(Swift.String(describing: name)), serviceInstanceName: \(Swift.String(describing: serviceInstanceName)), serviceName: \(Swift.String(describing: serviceName)), deploymentStatusMessage: \"CONTENT_REDACTED\", description: \"CONTENT_REDACTED\", serviceSpec: \"CONTENT_REDACTED\")"} } extension ProtonClientTypes { @@ -932,6 +944,8 @@ extension ProtonClientTypes { /// The name of the Proton environment that this component is associated with. /// This member is required. public var environmentName: Swift.String? + /// The ID of the last attempted deployment of this component. + public var lastAttemptedDeploymentId: Swift.String? /// The last token the client requested. public var lastClientRequestToken: Swift.String? /// The time when a deployment of the component was last attempted. @@ -941,6 +955,8 @@ extension ProtonClientTypes { /// The time when the component was last modified. /// This member is required. public var lastModifiedAt: ClientRuntime.Date? + /// The ID of the last successful deployment of this component. + public var lastSucceededDeploymentId: Swift.String? /// The name of the component. /// This member is required. public var name: Swift.String? @@ -958,10 +974,12 @@ extension ProtonClientTypes { deploymentStatusMessage: Swift.String? = nil, description: Swift.String? = nil, environmentName: Swift.String? = nil, + lastAttemptedDeploymentId: Swift.String? = nil, lastClientRequestToken: Swift.String? = nil, lastDeploymentAttemptedAt: ClientRuntime.Date? = nil, lastDeploymentSucceededAt: ClientRuntime.Date? = nil, lastModifiedAt: ClientRuntime.Date? = nil, + lastSucceededDeploymentId: Swift.String? = nil, name: Swift.String? = nil, serviceInstanceName: Swift.String? = nil, serviceName: Swift.String? = nil, @@ -974,10 +992,12 @@ extension ProtonClientTypes { self.deploymentStatusMessage = deploymentStatusMessage self.description = description self.environmentName = environmentName + self.lastAttemptedDeploymentId = lastAttemptedDeploymentId self.lastClientRequestToken = lastClientRequestToken self.lastDeploymentAttemptedAt = lastDeploymentAttemptedAt self.lastDeploymentSucceededAt = lastDeploymentSucceededAt self.lastModifiedAt = lastModifiedAt + self.lastSucceededDeploymentId = lastSucceededDeploymentId self.name = name self.serviceInstanceName = serviceInstanceName self.serviceName = serviceName @@ -1019,6 +1039,76 @@ extension ProtonClientTypes { } } +extension ProtonClientTypes.ComponentState: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case serviceInstanceName + case serviceName + case serviceSpec + case templateFile + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let serviceInstanceName = self.serviceInstanceName { + try encodeContainer.encode(serviceInstanceName, forKey: .serviceInstanceName) + } + if let serviceName = self.serviceName { + try encodeContainer.encode(serviceName, forKey: .serviceName) + } + if let serviceSpec = self.serviceSpec { + try encodeContainer.encode(serviceSpec, forKey: .serviceSpec) + } + if let templateFile = self.templateFile { + try encodeContainer.encode(templateFile, forKey: .templateFile) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let serviceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceName) + serviceName = serviceNameDecoded + let serviceInstanceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceInstanceName) + serviceInstanceName = serviceInstanceNameDecoded + let serviceSpecDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceSpec) + serviceSpec = serviceSpecDecoded + let templateFileDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .templateFile) + templateFile = templateFileDecoded + } +} + +extension ProtonClientTypes.ComponentState: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "ComponentState(serviceInstanceName: \(Swift.String(describing: serviceInstanceName)), serviceName: \(Swift.String(describing: serviceName)), serviceSpec: \"CONTENT_REDACTED\", templateFile: \"CONTENT_REDACTED\")"} +} + +extension ProtonClientTypes { + /// The detailed data about the current state of the component. + public struct ComponentState: Swift.Equatable { + /// The name of the service instance that this component is attached to. Provided when a component is attached to a service instance. + public var serviceInstanceName: Swift.String? + /// The name of the service that serviceInstanceName is associated with. Provided when a component is attached to a service instance. + public var serviceName: Swift.String? + /// The service spec that the component uses to access service inputs. Provided when a component is attached to a service instance. + public var serviceSpec: Swift.String? + /// The template file used. + public var templateFile: Swift.String? + + public init( + serviceInstanceName: Swift.String? = nil, + serviceName: Swift.String? = nil, + serviceSpec: Swift.String? = nil, + templateFile: Swift.String? = nil + ) + { + self.serviceInstanceName = serviceInstanceName + self.serviceName = serviceName + self.serviceSpec = serviceSpec + self.templateFile = templateFile + } + } + +} + extension ProtonClientTypes.ComponentSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn @@ -1026,9 +1116,11 @@ extension ProtonClientTypes.ComponentSummary: Swift.Codable { case deploymentStatus case deploymentStatusMessage case environmentName + case lastAttemptedDeploymentId case lastDeploymentAttemptedAt case lastDeploymentSucceededAt case lastModifiedAt + case lastSucceededDeploymentId case name case serviceInstanceName case serviceName @@ -1051,6 +1143,9 @@ extension ProtonClientTypes.ComponentSummary: Swift.Codable { if let environmentName = self.environmentName { try encodeContainer.encode(environmentName, forKey: .environmentName) } + if let lastAttemptedDeploymentId = self.lastAttemptedDeploymentId { + try encodeContainer.encode(lastAttemptedDeploymentId, forKey: .lastAttemptedDeploymentId) + } if let lastDeploymentAttemptedAt = self.lastDeploymentAttemptedAt { try encodeContainer.encodeTimestamp(lastDeploymentAttemptedAt, format: .epochSeconds, forKey: .lastDeploymentAttemptedAt) } @@ -1060,6 +1155,9 @@ extension ProtonClientTypes.ComponentSummary: Swift.Codable { if let lastModifiedAt = self.lastModifiedAt { try encodeContainer.encodeTimestamp(lastModifiedAt, format: .epochSeconds, forKey: .lastModifiedAt) } + if let lastSucceededDeploymentId = self.lastSucceededDeploymentId { + try encodeContainer.encode(lastSucceededDeploymentId, forKey: .lastSucceededDeploymentId) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -1095,12 +1193,16 @@ extension ProtonClientTypes.ComponentSummary: Swift.Codable { deploymentStatus = deploymentStatusDecoded let deploymentStatusMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .deploymentStatusMessage) deploymentStatusMessage = deploymentStatusMessageDecoded + let lastAttemptedDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastAttemptedDeploymentId) + lastAttemptedDeploymentId = lastAttemptedDeploymentIdDecoded + let lastSucceededDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastSucceededDeploymentId) + lastSucceededDeploymentId = lastSucceededDeploymentIdDecoded } } extension ProtonClientTypes.ComponentSummary: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "ComponentSummary(arn: \(Swift.String(describing: arn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentName: \(Swift.String(describing: environmentName)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), lastModifiedAt: \(Swift.String(describing: lastModifiedAt)), name: \(Swift.String(describing: name)), serviceInstanceName: \(Swift.String(describing: serviceInstanceName)), serviceName: \(Swift.String(describing: serviceName)), deploymentStatusMessage: \"CONTENT_REDACTED\")"} + "ComponentSummary(arn: \(Swift.String(describing: arn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentName: \(Swift.String(describing: environmentName)), lastAttemptedDeploymentId: \(Swift.String(describing: lastAttemptedDeploymentId)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), lastModifiedAt: \(Swift.String(describing: lastModifiedAt)), lastSucceededDeploymentId: \(Swift.String(describing: lastSucceededDeploymentId)), name: \(Swift.String(describing: name)), serviceInstanceName: \(Swift.String(describing: serviceInstanceName)), serviceName: \(Swift.String(describing: serviceName)), deploymentStatusMessage: \"CONTENT_REDACTED\")"} } extension ProtonClientTypes { @@ -1120,6 +1222,8 @@ extension ProtonClientTypes { /// The name of the Proton environment that this component is associated with. /// This member is required. public var environmentName: Swift.String? + /// The ID of the last attempted deployment of this component. + public var lastAttemptedDeploymentId: Swift.String? /// The time when a deployment of the component was last attempted. public var lastDeploymentAttemptedAt: ClientRuntime.Date? /// The time when the component was last deployed successfully. @@ -1127,6 +1231,8 @@ extension ProtonClientTypes { /// The time when the component was last modified. /// This member is required. public var lastModifiedAt: ClientRuntime.Date? + /// The ID of the last successful deployment of this component. + public var lastSucceededDeploymentId: Swift.String? /// The name of the component. /// This member is required. public var name: Swift.String? @@ -1141,9 +1247,11 @@ extension ProtonClientTypes { deploymentStatus: ProtonClientTypes.DeploymentStatus? = nil, deploymentStatusMessage: Swift.String? = nil, environmentName: Swift.String? = nil, + lastAttemptedDeploymentId: Swift.String? = nil, lastDeploymentAttemptedAt: ClientRuntime.Date? = nil, lastDeploymentSucceededAt: ClientRuntime.Date? = nil, lastModifiedAt: ClientRuntime.Date? = nil, + lastSucceededDeploymentId: Swift.String? = nil, name: Swift.String? = nil, serviceInstanceName: Swift.String? = nil, serviceName: Swift.String? = nil @@ -1154,9 +1262,11 @@ extension ProtonClientTypes { self.deploymentStatus = deploymentStatus self.deploymentStatusMessage = deploymentStatusMessage self.environmentName = environmentName + self.lastAttemptedDeploymentId = lastAttemptedDeploymentId self.lastDeploymentAttemptedAt = lastDeploymentAttemptedAt self.lastDeploymentSucceededAt = lastDeploymentSucceededAt self.lastModifiedAt = lastModifiedAt + self.lastSucceededDeploymentId = lastSucceededDeploymentId self.name = name self.serviceInstanceName = serviceInstanceName self.serviceName = serviceName @@ -3808,6 +3918,109 @@ extension DeleteComponentOutputResponseBody: Swift.Decodable { } } +extension DeleteDeploymentInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case id + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) + } + } +} + +extension DeleteDeploymentInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct DeleteDeploymentInput: Swift.Equatable { + /// The ID of the deployment to delete. + /// This member is required. + public var id: Swift.String? + + public init( + id: Swift.String? = nil + ) + { + self.id = id + } +} + +struct DeleteDeploymentInputBody: Swift.Equatable { + let id: Swift.String? +} + +extension DeleteDeploymentInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case id + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + } +} + +public enum DeleteDeploymentOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteDeploymentOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DeleteDeploymentOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.deployment = output.deployment + } else { + self.deployment = nil + } + } +} + +public struct DeleteDeploymentOutputResponse: Swift.Equatable { + /// The detailed data of the deployment being deleted. + public var deployment: ProtonClientTypes.Deployment? + + public init( + deployment: ProtonClientTypes.Deployment? = nil + ) + { + self.deployment = deployment + } +} + +struct DeleteDeploymentOutputResponseBody: Swift.Equatable { + let deployment: ProtonClientTypes.Deployment? +} + +extension DeleteDeploymentOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case deployment + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let deploymentDecoded = try containerValues.decodeIfPresent(ProtonClientTypes.Deployment.self, forKey: .deployment) + deployment = deploymentDecoded + } +} + extension DeleteEnvironmentAccountConnectionInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case id @@ -4926,115 +5139,26 @@ extension DeleteTemplateSyncConfigOutputResponseBody: Swift.Decodable { } } -extension ProtonClientTypes { - public enum DeploymentStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case cancelled - case cancelling - case deleteComplete - case deleteFailed - case deleteInProgress - case failed - case inProgress - case succeeded - case sdkUnknown(Swift.String) - - public static var allCases: [DeploymentStatus] { - return [ - .cancelled, - .cancelling, - .deleteComplete, - .deleteFailed, - .deleteInProgress, - .failed, - .inProgress, - .succeeded, - .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 .cancelled: return "CANCELLED" - case .cancelling: return "CANCELLING" - case .deleteComplete: return "DELETE_COMPLETE" - case .deleteFailed: return "DELETE_FAILED" - case .deleteInProgress: return "DELETE_IN_PROGRESS" - case .failed: return "FAILED" - case .inProgress: return "IN_PROGRESS" - case .succeeded: return "SUCCEEDED" - 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 = DeploymentStatus(rawValue: rawValue) ?? DeploymentStatus.sdkUnknown(rawValue) - } - } -} - -extension ProtonClientTypes { - public enum DeploymentUpdateType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case currentVersion - case majorVersion - case minorVersion - case `none` - case sdkUnknown(Swift.String) - - public static var allCases: [DeploymentUpdateType] { - return [ - .currentVersion, - .majorVersion, - .minorVersion, - .none, - .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 .currentVersion: return "CURRENT_VERSION" - case .majorVersion: return "MAJOR_VERSION" - case .minorVersion: return "MINOR_VERSION" - case .none: return "NONE" - 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 = DeploymentUpdateType(rawValue: rawValue) ?? DeploymentUpdateType.sdkUnknown(rawValue) - } - } -} - -extension ProtonClientTypes.Environment: Swift.Codable { +extension ProtonClientTypes.Deployment: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn - case codebuildRoleArn - case componentRoleArn + case completedAt + case componentName case createdAt case deploymentStatus case deploymentStatusMessage - case description - case environmentAccountConnectionId - case environmentAccountId - case lastDeploymentAttemptedAt - case lastDeploymentSucceededAt - case name - case protonServiceRoleArn - case provisioning - case provisioningRepository - case spec - case templateMajorVersion - case templateMinorVersion - case templateName + case environmentName + case id + case initialState + case lastAttemptedDeploymentId + case lastModifiedAt + case lastSucceededDeploymentId + case serviceInstanceName + case serviceName + case targetArn + case targetResourceCreatedAt + case targetResourceType + case targetState } public func encode(to encoder: Swift.Encoder) throws { @@ -5042,7 +5166,606 @@ extension ProtonClientTypes.Environment: Swift.Codable { if let arn = self.arn { try encodeContainer.encode(arn, forKey: .arn) } - if let codebuildRoleArn = self.codebuildRoleArn { + if let completedAt = self.completedAt { + try encodeContainer.encodeTimestamp(completedAt, format: .epochSeconds, forKey: .completedAt) + } + if let componentName = self.componentName { + try encodeContainer.encode(componentName, forKey: .componentName) + } + if let createdAt = self.createdAt { + try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) + } + if let deploymentStatus = self.deploymentStatus { + try encodeContainer.encode(deploymentStatus.rawValue, forKey: .deploymentStatus) + } + if let deploymentStatusMessage = self.deploymentStatusMessage { + try encodeContainer.encode(deploymentStatusMessage, forKey: .deploymentStatusMessage) + } + if let environmentName = self.environmentName { + try encodeContainer.encode(environmentName, forKey: .environmentName) + } + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) + } + if let initialState = self.initialState { + try encodeContainer.encode(initialState, forKey: .initialState) + } + if let lastAttemptedDeploymentId = self.lastAttemptedDeploymentId { + try encodeContainer.encode(lastAttemptedDeploymentId, forKey: .lastAttemptedDeploymentId) + } + if let lastModifiedAt = self.lastModifiedAt { + try encodeContainer.encodeTimestamp(lastModifiedAt, format: .epochSeconds, forKey: .lastModifiedAt) + } + if let lastSucceededDeploymentId = self.lastSucceededDeploymentId { + try encodeContainer.encode(lastSucceededDeploymentId, forKey: .lastSucceededDeploymentId) + } + if let serviceInstanceName = self.serviceInstanceName { + try encodeContainer.encode(serviceInstanceName, forKey: .serviceInstanceName) + } + if let serviceName = self.serviceName { + try encodeContainer.encode(serviceName, forKey: .serviceName) + } + if let targetArn = self.targetArn { + try encodeContainer.encode(targetArn, forKey: .targetArn) + } + if let targetResourceCreatedAt = self.targetResourceCreatedAt { + try encodeContainer.encodeTimestamp(targetResourceCreatedAt, format: .epochSeconds, forKey: .targetResourceCreatedAt) + } + if let targetResourceType = self.targetResourceType { + try encodeContainer.encode(targetResourceType.rawValue, forKey: .targetResourceType) + } + if let targetState = self.targetState { + try encodeContainer.encode(targetState, forKey: .targetState) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let targetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .targetArn) + targetArn = targetArnDecoded + let targetResourceCreatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .targetResourceCreatedAt) + targetResourceCreatedAt = targetResourceCreatedAtDecoded + let targetResourceTypeDecoded = try containerValues.decodeIfPresent(ProtonClientTypes.DeploymentTargetResourceType.self, forKey: .targetResourceType) + targetResourceType = targetResourceTypeDecoded + let environmentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .environmentName) + environmentName = environmentNameDecoded + let serviceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceName) + serviceName = serviceNameDecoded + let serviceInstanceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceInstanceName) + serviceInstanceName = serviceInstanceNameDecoded + let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) + componentName = componentNameDecoded + let deploymentStatusDecoded = try containerValues.decodeIfPresent(ProtonClientTypes.DeploymentStatus.self, forKey: .deploymentStatus) + deploymentStatus = deploymentStatusDecoded + let deploymentStatusMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .deploymentStatusMessage) + deploymentStatusMessage = deploymentStatusMessageDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let lastModifiedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastModifiedAt) + lastModifiedAt = lastModifiedAtDecoded + let completedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .completedAt) + completedAt = completedAtDecoded + let lastAttemptedDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastAttemptedDeploymentId) + lastAttemptedDeploymentId = lastAttemptedDeploymentIdDecoded + let lastSucceededDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastSucceededDeploymentId) + lastSucceededDeploymentId = lastSucceededDeploymentIdDecoded + let initialStateDecoded = try containerValues.decodeIfPresent(ProtonClientTypes.DeploymentState.self, forKey: .initialState) + initialState = initialStateDecoded + let targetStateDecoded = try containerValues.decodeIfPresent(ProtonClientTypes.DeploymentState.self, forKey: .targetState) + targetState = targetStateDecoded + } +} + +extension ProtonClientTypes.Deployment: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "Deployment(arn: \(Swift.String(describing: arn)), completedAt: \(Swift.String(describing: completedAt)), componentName: \(Swift.String(describing: componentName)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentName: \(Swift.String(describing: environmentName)), id: \(Swift.String(describing: id)), initialState: \(Swift.String(describing: initialState)), lastAttemptedDeploymentId: \(Swift.String(describing: lastAttemptedDeploymentId)), lastModifiedAt: \(Swift.String(describing: lastModifiedAt)), lastSucceededDeploymentId: \(Swift.String(describing: lastSucceededDeploymentId)), serviceInstanceName: \(Swift.String(describing: serviceInstanceName)), serviceName: \(Swift.String(describing: serviceName)), targetArn: \(Swift.String(describing: targetArn)), targetResourceCreatedAt: \(Swift.String(describing: targetResourceCreatedAt)), targetResourceType: \(Swift.String(describing: targetResourceType)), targetState: \(Swift.String(describing: targetState)), deploymentStatusMessage: \"CONTENT_REDACTED\")"} +} + +extension ProtonClientTypes { + /// The detailed information about a deployment. + public struct Deployment: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the deployment. + /// This member is required. + public var arn: Swift.String? + /// The date and time the deployment was completed. + public var completedAt: ClientRuntime.Date? + /// The name of the component associated with this deployment. + public var componentName: Swift.String? + /// The date and time the deployment was created. + /// This member is required. + public var createdAt: ClientRuntime.Date? + /// The status of the deployment. + /// This member is required. + public var deploymentStatus: ProtonClientTypes.DeploymentStatus? + /// The deployment status message. + public var deploymentStatusMessage: Swift.String? + /// The name of the environment associated with this deployment. + /// This member is required. + public var environmentName: Swift.String? + /// The ID of the deployment. + /// This member is required. + public var id: Swift.String? + /// The initial state of the target resource at the time of the deployment. + public var initialState: ProtonClientTypes.DeploymentState? + /// The ID of the last attempted deployment. + public var lastAttemptedDeploymentId: Swift.String? + /// The date and time the deployment was last modified. + /// This member is required. + public var lastModifiedAt: ClientRuntime.Date? + /// The ID of the last successful deployment. + public var lastSucceededDeploymentId: Swift.String? + /// The name of the deployment's service instance. + public var serviceInstanceName: Swift.String? + /// The name of the service in this deployment. + public var serviceName: Swift.String? + /// The Amazon Resource Name (ARN) of the target of the deployment. + /// This member is required. + public var targetArn: Swift.String? + /// The date and time the depoyment target was created. + /// This member is required. + public var targetResourceCreatedAt: ClientRuntime.Date? + /// The resource type of the deployment target. It can be an environment, service, service instance, or component. + /// This member is required. + public var targetResourceType: ProtonClientTypes.DeploymentTargetResourceType? + /// The target state of the target resource at the time of the deployment. + public var targetState: ProtonClientTypes.DeploymentState? + + public init( + arn: Swift.String? = nil, + completedAt: ClientRuntime.Date? = nil, + componentName: Swift.String? = nil, + createdAt: ClientRuntime.Date? = nil, + deploymentStatus: ProtonClientTypes.DeploymentStatus? = nil, + deploymentStatusMessage: Swift.String? = nil, + environmentName: Swift.String? = nil, + id: Swift.String? = nil, + initialState: ProtonClientTypes.DeploymentState? = nil, + lastAttemptedDeploymentId: Swift.String? = nil, + lastModifiedAt: ClientRuntime.Date? = nil, + lastSucceededDeploymentId: Swift.String? = nil, + serviceInstanceName: Swift.String? = nil, + serviceName: Swift.String? = nil, + targetArn: Swift.String? = nil, + targetResourceCreatedAt: ClientRuntime.Date? = nil, + targetResourceType: ProtonClientTypes.DeploymentTargetResourceType? = nil, + targetState: ProtonClientTypes.DeploymentState? = nil + ) + { + self.arn = arn + self.completedAt = completedAt + self.componentName = componentName + self.createdAt = createdAt + self.deploymentStatus = deploymentStatus + self.deploymentStatusMessage = deploymentStatusMessage + self.environmentName = environmentName + self.id = id + self.initialState = initialState + self.lastAttemptedDeploymentId = lastAttemptedDeploymentId + self.lastModifiedAt = lastModifiedAt + self.lastSucceededDeploymentId = lastSucceededDeploymentId + self.serviceInstanceName = serviceInstanceName + self.serviceName = serviceName + self.targetArn = targetArn + self.targetResourceCreatedAt = targetResourceCreatedAt + self.targetResourceType = targetResourceType + self.targetState = targetState + } + } + +} + +extension ProtonClientTypes.DeploymentState: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case component + case environment + case sdkUnknown + case serviceinstance = "serviceInstance" + case servicepipeline = "servicePipeline" + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + switch self { + case let .component(component): + try container.encode(component, forKey: .component) + case let .environment(environment): + try container.encode(environment, forKey: .environment) + case let .serviceinstance(serviceinstance): + try container.encode(serviceinstance, forKey: .serviceinstance) + case let .servicepipeline(servicepipeline): + try container.encode(servicepipeline, forKey: .servicepipeline) + case let .sdkUnknown(sdkUnknown): + try container.encode(sdkUnknown, forKey: .sdkUnknown) + } + } + + public init(from decoder: Swift.Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + let serviceinstanceDecoded = try values.decodeIfPresent(ProtonClientTypes.ServiceInstanceState.self, forKey: .serviceinstance) + if let serviceinstance = serviceinstanceDecoded { + self = .serviceinstance(serviceinstance) + return + } + let environmentDecoded = try values.decodeIfPresent(ProtonClientTypes.EnvironmentState.self, forKey: .environment) + if let environment = environmentDecoded { + self = .environment(environment) + return + } + let servicepipelineDecoded = try values.decodeIfPresent(ProtonClientTypes.ServicePipelineState.self, forKey: .servicepipeline) + if let servicepipeline = servicepipelineDecoded { + self = .servicepipeline(servicepipeline) + return + } + let componentDecoded = try values.decodeIfPresent(ProtonClientTypes.ComponentState.self, forKey: .component) + if let component = componentDecoded { + self = .component(component) + return + } + self = .sdkUnknown("") + } +} + +extension ProtonClientTypes { + /// The detailed data about the current state of the deployment. + public enum DeploymentState: Swift.Equatable { + /// The state of the service instance associated with the deployment. + case serviceinstance(ProtonClientTypes.ServiceInstanceState) + /// The state of the environment associated with the deployment. + case environment(ProtonClientTypes.EnvironmentState) + /// The state of the service pipeline associated with the deployment. + case servicepipeline(ProtonClientTypes.ServicePipelineState) + /// The state of the component associated with the deployment. + case component(ProtonClientTypes.ComponentState) + case sdkUnknown(Swift.String) + } + +} + +extension ProtonClientTypes { + public enum DeploymentStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case cancelled + case cancelling + case deleteComplete + case deleteFailed + case deleteInProgress + case failed + case inProgress + case succeeded + case sdkUnknown(Swift.String) + + public static var allCases: [DeploymentStatus] { + return [ + .cancelled, + .cancelling, + .deleteComplete, + .deleteFailed, + .deleteInProgress, + .failed, + .inProgress, + .succeeded, + .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 .cancelled: return "CANCELLED" + case .cancelling: return "CANCELLING" + case .deleteComplete: return "DELETE_COMPLETE" + case .deleteFailed: return "DELETE_FAILED" + case .deleteInProgress: return "DELETE_IN_PROGRESS" + case .failed: return "FAILED" + case .inProgress: return "IN_PROGRESS" + case .succeeded: return "SUCCEEDED" + 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 = DeploymentStatus(rawValue: rawValue) ?? DeploymentStatus.sdkUnknown(rawValue) + } + } +} + +extension ProtonClientTypes.DeploymentSummary: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case arn + case completedAt + case componentName + case createdAt + case deploymentStatus + case environmentName + case id + case lastAttemptedDeploymentId + case lastModifiedAt + case lastSucceededDeploymentId + case serviceInstanceName + case serviceName + case targetArn + case targetResourceCreatedAt + case targetResourceType + } + + 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 completedAt = self.completedAt { + try encodeContainer.encodeTimestamp(completedAt, format: .epochSeconds, forKey: .completedAt) + } + if let componentName = self.componentName { + try encodeContainer.encode(componentName, forKey: .componentName) + } + if let createdAt = self.createdAt { + try encodeContainer.encodeTimestamp(createdAt, format: .epochSeconds, forKey: .createdAt) + } + if let deploymentStatus = self.deploymentStatus { + try encodeContainer.encode(deploymentStatus.rawValue, forKey: .deploymentStatus) + } + if let environmentName = self.environmentName { + try encodeContainer.encode(environmentName, forKey: .environmentName) + } + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) + } + if let lastAttemptedDeploymentId = self.lastAttemptedDeploymentId { + try encodeContainer.encode(lastAttemptedDeploymentId, forKey: .lastAttemptedDeploymentId) + } + if let lastModifiedAt = self.lastModifiedAt { + try encodeContainer.encodeTimestamp(lastModifiedAt, format: .epochSeconds, forKey: .lastModifiedAt) + } + if let lastSucceededDeploymentId = self.lastSucceededDeploymentId { + try encodeContainer.encode(lastSucceededDeploymentId, forKey: .lastSucceededDeploymentId) + } + if let serviceInstanceName = self.serviceInstanceName { + try encodeContainer.encode(serviceInstanceName, forKey: .serviceInstanceName) + } + if let serviceName = self.serviceName { + try encodeContainer.encode(serviceName, forKey: .serviceName) + } + if let targetArn = self.targetArn { + try encodeContainer.encode(targetArn, forKey: .targetArn) + } + if let targetResourceCreatedAt = self.targetResourceCreatedAt { + try encodeContainer.encodeTimestamp(targetResourceCreatedAt, format: .epochSeconds, forKey: .targetResourceCreatedAt) + } + if let targetResourceType = self.targetResourceType { + try encodeContainer.encode(targetResourceType.rawValue, forKey: .targetResourceType) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let targetArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .targetArn) + targetArn = targetArnDecoded + let targetResourceCreatedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .targetResourceCreatedAt) + targetResourceCreatedAt = targetResourceCreatedAtDecoded + let targetResourceTypeDecoded = try containerValues.decodeIfPresent(ProtonClientTypes.DeploymentTargetResourceType.self, forKey: .targetResourceType) + targetResourceType = targetResourceTypeDecoded + let createdAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdAt) + createdAt = createdAtDecoded + let lastModifiedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastModifiedAt) + lastModifiedAt = lastModifiedAtDecoded + let completedAtDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .completedAt) + completedAt = completedAtDecoded + let environmentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .environmentName) + environmentName = environmentNameDecoded + let serviceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceName) + serviceName = serviceNameDecoded + let serviceInstanceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceInstanceName) + serviceInstanceName = serviceInstanceNameDecoded + let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) + componentName = componentNameDecoded + let lastAttemptedDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastAttemptedDeploymentId) + lastAttemptedDeploymentId = lastAttemptedDeploymentIdDecoded + let lastSucceededDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastSucceededDeploymentId) + lastSucceededDeploymentId = lastSucceededDeploymentIdDecoded + let deploymentStatusDecoded = try containerValues.decodeIfPresent(ProtonClientTypes.DeploymentStatus.self, forKey: .deploymentStatus) + deploymentStatus = deploymentStatusDecoded + } +} + +extension ProtonClientTypes { + /// Summary data of the deployment. + public struct DeploymentSummary: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the deployment. + /// This member is required. + public var arn: Swift.String? + /// The date and time the deployment was completed. + public var completedAt: ClientRuntime.Date? + /// The name of the component associated with the deployment. + public var componentName: Swift.String? + /// The date and time the deployment was created. + /// This member is required. + public var createdAt: ClientRuntime.Date? + /// The current status of the deployment. + /// This member is required. + public var deploymentStatus: ProtonClientTypes.DeploymentStatus? + /// The name of the environment associated with the deployment. + /// This member is required. + public var environmentName: Swift.String? + /// The ID of the deployment. + /// This member is required. + public var id: Swift.String? + /// The ID of the last attempted deployment. + public var lastAttemptedDeploymentId: Swift.String? + /// The date and time the deployment was last modified. + /// This member is required. + public var lastModifiedAt: ClientRuntime.Date? + /// The ID of the last successful deployment. + public var lastSucceededDeploymentId: Swift.String? + /// The name of the service instance associated with the deployment. + public var serviceInstanceName: Swift.String? + /// The name of the service associated with the deployment. + public var serviceName: Swift.String? + /// The Amazon Resource Name (ARN) of the target of the deployment. + /// This member is required. + public var targetArn: Swift.String? + /// The date and time the target resource was created. + /// This member is required. + public var targetResourceCreatedAt: ClientRuntime.Date? + /// The resource type of the deployment target. It can be an environment, service, service instance, or component. + /// This member is required. + public var targetResourceType: ProtonClientTypes.DeploymentTargetResourceType? + + public init( + arn: Swift.String? = nil, + completedAt: ClientRuntime.Date? = nil, + componentName: Swift.String? = nil, + createdAt: ClientRuntime.Date? = nil, + deploymentStatus: ProtonClientTypes.DeploymentStatus? = nil, + environmentName: Swift.String? = nil, + id: Swift.String? = nil, + lastAttemptedDeploymentId: Swift.String? = nil, + lastModifiedAt: ClientRuntime.Date? = nil, + lastSucceededDeploymentId: Swift.String? = nil, + serviceInstanceName: Swift.String? = nil, + serviceName: Swift.String? = nil, + targetArn: Swift.String? = nil, + targetResourceCreatedAt: ClientRuntime.Date? = nil, + targetResourceType: ProtonClientTypes.DeploymentTargetResourceType? = nil + ) + { + self.arn = arn + self.completedAt = completedAt + self.componentName = componentName + self.createdAt = createdAt + self.deploymentStatus = deploymentStatus + self.environmentName = environmentName + self.id = id + self.lastAttemptedDeploymentId = lastAttemptedDeploymentId + self.lastModifiedAt = lastModifiedAt + self.lastSucceededDeploymentId = lastSucceededDeploymentId + self.serviceInstanceName = serviceInstanceName + self.serviceName = serviceName + self.targetArn = targetArn + self.targetResourceCreatedAt = targetResourceCreatedAt + self.targetResourceType = targetResourceType + } + } + +} + +extension ProtonClientTypes { + public enum DeploymentTargetResourceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case component + case environment + case serviceInstance + case servicePipeline + case sdkUnknown(Swift.String) + + public static var allCases: [DeploymentTargetResourceType] { + return [ + .component, + .environment, + .serviceInstance, + .servicePipeline, + .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 .component: return "COMPONENT" + case .environment: return "ENVIRONMENT" + case .serviceInstance: return "SERVICE_INSTANCE" + case .servicePipeline: return "SERVICE_PIPELINE" + 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 = DeploymentTargetResourceType(rawValue: rawValue) ?? DeploymentTargetResourceType.sdkUnknown(rawValue) + } + } +} + +extension ProtonClientTypes { + public enum DeploymentUpdateType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case currentVersion + case majorVersion + case minorVersion + case `none` + case sdkUnknown(Swift.String) + + public static var allCases: [DeploymentUpdateType] { + return [ + .currentVersion, + .majorVersion, + .minorVersion, + .none, + .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 .currentVersion: return "CURRENT_VERSION" + case .majorVersion: return "MAJOR_VERSION" + case .minorVersion: return "MINOR_VERSION" + case .none: return "NONE" + 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 = DeploymentUpdateType(rawValue: rawValue) ?? DeploymentUpdateType.sdkUnknown(rawValue) + } + } +} + +extension ProtonClientTypes.Environment: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case arn + case codebuildRoleArn + case componentRoleArn + case createdAt + case deploymentStatus + case deploymentStatusMessage + case description + case environmentAccountConnectionId + case environmentAccountId + case lastAttemptedDeploymentId + case lastDeploymentAttemptedAt + case lastDeploymentSucceededAt + case lastSucceededDeploymentId + case name + case protonServiceRoleArn + case provisioning + case provisioningRepository + case spec + case templateMajorVersion + case templateMinorVersion + case templateName + } + + 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 codebuildRoleArn = self.codebuildRoleArn { try encodeContainer.encode(codebuildRoleArn, forKey: .codebuildRoleArn) } if let componentRoleArn = self.componentRoleArn { @@ -5066,12 +5789,18 @@ extension ProtonClientTypes.Environment: Swift.Codable { if let environmentAccountId = self.environmentAccountId { try encodeContainer.encode(environmentAccountId, forKey: .environmentAccountId) } + if let lastAttemptedDeploymentId = self.lastAttemptedDeploymentId { + try encodeContainer.encode(lastAttemptedDeploymentId, forKey: .lastAttemptedDeploymentId) + } if let lastDeploymentAttemptedAt = self.lastDeploymentAttemptedAt { try encodeContainer.encodeTimestamp(lastDeploymentAttemptedAt, format: .epochSeconds, forKey: .lastDeploymentAttemptedAt) } if let lastDeploymentSucceededAt = self.lastDeploymentSucceededAt { try encodeContainer.encodeTimestamp(lastDeploymentSucceededAt, format: .epochSeconds, forKey: .lastDeploymentSucceededAt) } + if let lastSucceededDeploymentId = self.lastSucceededDeploymentId { + try encodeContainer.encode(lastSucceededDeploymentId, forKey: .lastSucceededDeploymentId) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -5138,12 +5867,16 @@ extension ProtonClientTypes.Environment: Swift.Codable { componentRoleArn = componentRoleArnDecoded let codebuildRoleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .codebuildRoleArn) codebuildRoleArn = codebuildRoleArnDecoded + let lastAttemptedDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastAttemptedDeploymentId) + lastAttemptedDeploymentId = lastAttemptedDeploymentIdDecoded + let lastSucceededDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastSucceededDeploymentId) + lastSucceededDeploymentId = lastSucceededDeploymentIdDecoded } } extension ProtonClientTypes.Environment: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "Environment(arn: \(Swift.String(describing: arn)), codebuildRoleArn: \(Swift.String(describing: codebuildRoleArn)), componentRoleArn: \(Swift.String(describing: componentRoleArn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentAccountConnectionId: \(Swift.String(describing: environmentAccountConnectionId)), environmentAccountId: \(Swift.String(describing: environmentAccountId)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), name: \(Swift.String(describing: name)), protonServiceRoleArn: \(Swift.String(describing: protonServiceRoleArn)), provisioning: \(Swift.String(describing: provisioning)), provisioningRepository: \(Swift.String(describing: provisioningRepository)), templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), deploymentStatusMessage: \"CONTENT_REDACTED\", description: \"CONTENT_REDACTED\", spec: \"CONTENT_REDACTED\")"} + "Environment(arn: \(Swift.String(describing: arn)), codebuildRoleArn: \(Swift.String(describing: codebuildRoleArn)), componentRoleArn: \(Swift.String(describing: componentRoleArn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentAccountConnectionId: \(Swift.String(describing: environmentAccountConnectionId)), environmentAccountId: \(Swift.String(describing: environmentAccountId)), lastAttemptedDeploymentId: \(Swift.String(describing: lastAttemptedDeploymentId)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), lastSucceededDeploymentId: \(Swift.String(describing: lastSucceededDeploymentId)), name: \(Swift.String(describing: name)), protonServiceRoleArn: \(Swift.String(describing: protonServiceRoleArn)), provisioning: \(Swift.String(describing: provisioning)), provisioningRepository: \(Swift.String(describing: provisioningRepository)), templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), deploymentStatusMessage: \"CONTENT_REDACTED\", description: \"CONTENT_REDACTED\", spec: \"CONTENT_REDACTED\")"} } extension ProtonClientTypes { @@ -5170,12 +5903,16 @@ extension ProtonClientTypes { public var environmentAccountConnectionId: Swift.String? /// The ID of the environment account that the environment infrastructure resources are provisioned in. public var environmentAccountId: Swift.String? + /// The ID of the last attempted deployment of this environment. + public var lastAttemptedDeploymentId: Swift.String? /// The time when a deployment of the environment was last attempted. /// This member is required. public var lastDeploymentAttemptedAt: ClientRuntime.Date? /// The time when the environment was last deployed successfully. /// This member is required. public var lastDeploymentSucceededAt: ClientRuntime.Date? + /// The ID of the last successful deployment of this environment. + public var lastSucceededDeploymentId: Swift.String? /// The name of the environment. /// This member is required. public var name: Swift.String? @@ -5207,8 +5944,10 @@ extension ProtonClientTypes { description: Swift.String? = nil, environmentAccountConnectionId: Swift.String? = nil, environmentAccountId: Swift.String? = nil, + lastAttemptedDeploymentId: Swift.String? = nil, lastDeploymentAttemptedAt: ClientRuntime.Date? = nil, lastDeploymentSucceededAt: ClientRuntime.Date? = nil, + lastSucceededDeploymentId: Swift.String? = nil, name: Swift.String? = nil, protonServiceRoleArn: Swift.String? = nil, provisioning: ProtonClientTypes.Provisioning? = nil, @@ -5228,8 +5967,10 @@ extension ProtonClientTypes { self.description = description self.environmentAccountConnectionId = environmentAccountConnectionId self.environmentAccountId = environmentAccountId + self.lastAttemptedDeploymentId = lastAttemptedDeploymentId self.lastDeploymentAttemptedAt = lastDeploymentAttemptedAt self.lastDeploymentSucceededAt = lastDeploymentSucceededAt + self.lastSucceededDeploymentId = lastSucceededDeploymentId self.name = name self.protonServiceRoleArn = protonServiceRoleArn self.provisioning = provisioning @@ -5588,6 +6329,79 @@ extension ProtonClientTypes { } +extension ProtonClientTypes.EnvironmentState: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case spec + case templateMajorVersion + case templateMinorVersion + case templateName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let spec = self.spec { + try encodeContainer.encode(spec, forKey: .spec) + } + if let templateMajorVersion = self.templateMajorVersion { + try encodeContainer.encode(templateMajorVersion, forKey: .templateMajorVersion) + } + if let templateMinorVersion = self.templateMinorVersion { + try encodeContainer.encode(templateMinorVersion, forKey: .templateMinorVersion) + } + if let templateName = self.templateName { + try encodeContainer.encode(templateName, forKey: .templateName) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let specDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .spec) + spec = specDecoded + let templateNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .templateName) + templateName = templateNameDecoded + let templateMajorVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .templateMajorVersion) + templateMajorVersion = templateMajorVersionDecoded + let templateMinorVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .templateMinorVersion) + templateMinorVersion = templateMinorVersionDecoded + } +} + +extension ProtonClientTypes.EnvironmentState: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "EnvironmentState(templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), spec: \"CONTENT_REDACTED\")"} +} + +extension ProtonClientTypes { + /// The detailed data about the current state of the environment. + public struct EnvironmentState: Swift.Equatable { + /// The environment spec that was used to create the environment. + public var spec: Swift.String? + /// The major version of the environment template that was used to create the environment. + /// This member is required. + public var templateMajorVersion: Swift.String? + /// The minor version of the environment template that was used to create the environment. + /// This member is required. + public var templateMinorVersion: Swift.String? + /// The name of the environment template that was used to create the environment. + /// This member is required. + public var templateName: Swift.String? + + public init( + spec: Swift.String? = nil, + templateMajorVersion: Swift.String? = nil, + templateMinorVersion: Swift.String? = nil, + templateName: Swift.String? = nil + ) + { + self.spec = spec + self.templateMajorVersion = templateMajorVersion + self.templateMinorVersion = templateMinorVersion + self.templateName = templateName + } + } + +} + extension ProtonClientTypes.EnvironmentSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn @@ -5598,8 +6412,10 @@ extension ProtonClientTypes.EnvironmentSummary: Swift.Codable { case description case environmentAccountConnectionId case environmentAccountId + case lastAttemptedDeploymentId case lastDeploymentAttemptedAt case lastDeploymentSucceededAt + case lastSucceededDeploymentId case name case protonServiceRoleArn case provisioning @@ -5634,12 +6450,18 @@ extension ProtonClientTypes.EnvironmentSummary: Swift.Codable { if let environmentAccountId = self.environmentAccountId { try encodeContainer.encode(environmentAccountId, forKey: .environmentAccountId) } + if let lastAttemptedDeploymentId = self.lastAttemptedDeploymentId { + try encodeContainer.encode(lastAttemptedDeploymentId, forKey: .lastAttemptedDeploymentId) + } if let lastDeploymentAttemptedAt = self.lastDeploymentAttemptedAt { try encodeContainer.encodeTimestamp(lastDeploymentAttemptedAt, format: .epochSeconds, forKey: .lastDeploymentAttemptedAt) } if let lastDeploymentSucceededAt = self.lastDeploymentSucceededAt { try encodeContainer.encodeTimestamp(lastDeploymentSucceededAt, format: .epochSeconds, forKey: .lastDeploymentSucceededAt) } + if let lastSucceededDeploymentId = self.lastSucceededDeploymentId { + try encodeContainer.encode(lastSucceededDeploymentId, forKey: .lastSucceededDeploymentId) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -5694,12 +6516,16 @@ extension ProtonClientTypes.EnvironmentSummary: Swift.Codable { provisioning = provisioningDecoded let componentRoleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentRoleArn) componentRoleArn = componentRoleArnDecoded + let lastAttemptedDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastAttemptedDeploymentId) + lastAttemptedDeploymentId = lastAttemptedDeploymentIdDecoded + let lastSucceededDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastSucceededDeploymentId) + lastSucceededDeploymentId = lastSucceededDeploymentIdDecoded } } extension ProtonClientTypes.EnvironmentSummary: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "EnvironmentSummary(arn: \(Swift.String(describing: arn)), componentRoleArn: \(Swift.String(describing: componentRoleArn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentAccountConnectionId: \(Swift.String(describing: environmentAccountConnectionId)), environmentAccountId: \(Swift.String(describing: environmentAccountId)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), name: \(Swift.String(describing: name)), protonServiceRoleArn: \(Swift.String(describing: protonServiceRoleArn)), provisioning: \(Swift.String(describing: provisioning)), templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), deploymentStatusMessage: \"CONTENT_REDACTED\", description: \"CONTENT_REDACTED\")"} + "EnvironmentSummary(arn: \(Swift.String(describing: arn)), componentRoleArn: \(Swift.String(describing: componentRoleArn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentAccountConnectionId: \(Swift.String(describing: environmentAccountConnectionId)), environmentAccountId: \(Swift.String(describing: environmentAccountId)), lastAttemptedDeploymentId: \(Swift.String(describing: lastAttemptedDeploymentId)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), lastSucceededDeploymentId: \(Swift.String(describing: lastSucceededDeploymentId)), name: \(Swift.String(describing: name)), protonServiceRoleArn: \(Swift.String(describing: protonServiceRoleArn)), provisioning: \(Swift.String(describing: provisioning)), templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), deploymentStatusMessage: \"CONTENT_REDACTED\", description: \"CONTENT_REDACTED\")"} } extension ProtonClientTypes { @@ -5724,12 +6550,16 @@ extension ProtonClientTypes { public var environmentAccountConnectionId: Swift.String? /// The ID of the environment account that the environment infrastructure resources are provisioned in. public var environmentAccountId: Swift.String? + /// The ID of the last attempted deployment of this environment. + public var lastAttemptedDeploymentId: Swift.String? /// The time when a deployment of the environment was last attempted. /// This member is required. public var lastDeploymentAttemptedAt: ClientRuntime.Date? /// The time when the environment was last deployed successfully. /// This member is required. public var lastDeploymentSucceededAt: ClientRuntime.Date? + /// The ID of the last successful deployment of this environment. + public var lastSucceededDeploymentId: Swift.String? /// The name of the environment. /// This member is required. public var name: Swift.String? @@ -5756,8 +6586,10 @@ extension ProtonClientTypes { description: Swift.String? = nil, environmentAccountConnectionId: Swift.String? = nil, environmentAccountId: Swift.String? = nil, + lastAttemptedDeploymentId: Swift.String? = nil, lastDeploymentAttemptedAt: ClientRuntime.Date? = nil, lastDeploymentSucceededAt: ClientRuntime.Date? = nil, + lastSucceededDeploymentId: Swift.String? = nil, name: Swift.String? = nil, protonServiceRoleArn: Swift.String? = nil, provisioning: ProtonClientTypes.Provisioning? = nil, @@ -5774,8 +6606,10 @@ extension ProtonClientTypes { self.description = description self.environmentAccountConnectionId = environmentAccountConnectionId self.environmentAccountId = environmentAccountId + self.lastAttemptedDeploymentId = lastAttemptedDeploymentId self.lastDeploymentAttemptedAt = lastDeploymentAttemptedAt self.lastDeploymentSucceededAt = lastDeploymentSucceededAt + self.lastSucceededDeploymentId = lastSucceededDeploymentId self.name = name self.protonServiceRoleArn = protonServiceRoleArn self.provisioning = provisioning @@ -6452,42 +7286,193 @@ extension GetComponentInput: Swift.Encodable { } } -extension GetComponentInput: ClientRuntime.URLPathProvider { +extension GetComponentInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct GetComponentInput: Swift.Equatable { + /// The name of the component that you want to get the detailed data for. + /// This member is required. + public var name: Swift.String? + + public init( + name: Swift.String? = nil + ) + { + self.name = name + } +} + +struct GetComponentInputBody: Swift.Equatable { + let name: Swift.String? +} + +extension GetComponentInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case name + } + + 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 + } +} + +public enum GetComponentOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetComponentOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetComponentOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.component = output.component + } else { + self.component = nil + } + } +} + +public struct GetComponentOutputResponse: Swift.Equatable { + /// The detailed data of the requested component. + public var component: ProtonClientTypes.Component? + + public init( + component: ProtonClientTypes.Component? = nil + ) + { + self.component = component + } +} + +struct GetComponentOutputResponseBody: Swift.Equatable { + let component: ProtonClientTypes.Component? +} + +extension GetComponentOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case component + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let componentDecoded = try containerValues.decodeIfPresent(ProtonClientTypes.Component.self, forKey: .component) + component = componentDecoded + } +} + +extension GetDeploymentInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case componentName + case environmentName + case id + case serviceInstanceName + case serviceName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let componentName = self.componentName { + try encodeContainer.encode(componentName, forKey: .componentName) + } + if let environmentName = self.environmentName { + try encodeContainer.encode(environmentName, forKey: .environmentName) + } + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) + } + if let serviceInstanceName = self.serviceInstanceName { + try encodeContainer.encode(serviceInstanceName, forKey: .serviceInstanceName) + } + if let serviceName = self.serviceName { + try encodeContainer.encode(serviceName, forKey: .serviceName) + } + } +} + +extension GetDeploymentInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { return "/" } } -public struct GetComponentInput: Swift.Equatable { - /// The name of the component that you want to get the detailed data for. +public struct GetDeploymentInput: Swift.Equatable { + /// The name of a component that you want to get the detailed data for. + public var componentName: Swift.String? + /// The name of a environment that you want to get the detailed data for. + public var environmentName: Swift.String? + /// The ID of the deployment that you want to get the detailed data for. /// This member is required. - public var name: Swift.String? + public var id: Swift.String? + /// The name of the service instance associated with the given deployment ID. serviceName must be specified to identify the service instance. + public var serviceInstanceName: Swift.String? + /// The name of the service associated with the given deployment ID. + public var serviceName: Swift.String? public init( - name: Swift.String? = nil + componentName: Swift.String? = nil, + environmentName: Swift.String? = nil, + id: Swift.String? = nil, + serviceInstanceName: Swift.String? = nil, + serviceName: Swift.String? = nil ) { - self.name = name + self.componentName = componentName + self.environmentName = environmentName + self.id = id + self.serviceInstanceName = serviceInstanceName + self.serviceName = serviceName } } -struct GetComponentInputBody: Swift.Equatable { - let name: Swift.String? +struct GetDeploymentInputBody: Swift.Equatable { + let id: Swift.String? + let environmentName: Swift.String? + let serviceName: Swift.String? + let serviceInstanceName: Swift.String? + let componentName: Swift.String? } -extension GetComponentInputBody: Swift.Decodable { +extension GetDeploymentInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case name + case componentName + case environmentName + case id + case serviceInstanceName + case serviceName } 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 idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + let environmentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .environmentName) + environmentName = environmentNameDecoded + let serviceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceName) + serviceName = serviceNameDecoded + let serviceInstanceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceInstanceName) + serviceInstanceName = serviceInstanceNameDecoded + let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) + componentName = componentNameDecoded } } -public enum GetComponentOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum GetDeploymentOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId @@ -6502,43 +7487,43 @@ public enum GetComponentOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension GetComponentOutputResponse: ClientRuntime.HttpResponseBinding { +extension GetDeploymentOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: GetComponentOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.component = output.component + let output: GetDeploymentOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.deployment = output.deployment } else { - self.component = nil + self.deployment = nil } } } -public struct GetComponentOutputResponse: Swift.Equatable { - /// The detailed data of the requested component. - public var component: ProtonClientTypes.Component? +public struct GetDeploymentOutputResponse: Swift.Equatable { + /// The detailed data of the requested deployment. + public var deployment: ProtonClientTypes.Deployment? public init( - component: ProtonClientTypes.Component? = nil + deployment: ProtonClientTypes.Deployment? = nil ) { - self.component = component + self.deployment = deployment } } -struct GetComponentOutputResponseBody: Swift.Equatable { - let component: ProtonClientTypes.Component? +struct GetDeploymentOutputResponseBody: Swift.Equatable { + let deployment: ProtonClientTypes.Deployment? } -extension GetComponentOutputResponseBody: Swift.Decodable { +extension GetDeploymentOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case component + case deployment } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let componentDecoded = try containerValues.decodeIfPresent(ProtonClientTypes.Component.self, forKey: .component) - component = componentDecoded + let deploymentDecoded = try containerValues.decodeIfPresent(ProtonClientTypes.Deployment.self, forKey: .deployment) + deployment = deploymentDecoded } } @@ -8463,6 +9448,7 @@ extension InternalServerExceptionBody: Swift.Decodable { extension ListComponentOutputsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case componentName + case deploymentId case nextToken } @@ -8471,6 +9457,9 @@ extension ListComponentOutputsInput: Swift.Encodable { if let componentName = self.componentName { try encodeContainer.encode(componentName, forKey: .componentName) } + if let deploymentId = self.deploymentId { + try encodeContainer.encode(deploymentId, forKey: .deploymentId) + } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } @@ -8487,15 +9476,19 @@ public struct ListComponentOutputsInput: Swift.Equatable { /// The name of the component whose outputs you want. /// This member is required. public var componentName: Swift.String? + /// The ID of the deployment whose outputs you want. + public var deploymentId: Swift.String? /// A token that indicates the location of the next output in the array of outputs, after the list of outputs that was previously requested. public var nextToken: Swift.String? public init( componentName: Swift.String? = nil, + deploymentId: Swift.String? = nil, nextToken: Swift.String? = nil ) { self.componentName = componentName + self.deploymentId = deploymentId self.nextToken = nextToken } } @@ -8503,11 +9496,13 @@ public struct ListComponentOutputsInput: Swift.Equatable { struct ListComponentOutputsInputBody: Swift.Equatable { let componentName: Swift.String? let nextToken: Swift.String? + let deploymentId: Swift.String? } extension ListComponentOutputsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case componentName + case deploymentId case nextToken } @@ -8517,6 +9512,8 @@ extension ListComponentOutputsInputBody: Swift.Decodable { componentName = componentNameDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let deploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .deploymentId) + deploymentId = deploymentIdDecoded } } @@ -8692,46 +9689,216 @@ public struct ListComponentProvisionedResourcesOutputResponse: Swift.Equatable { public var provisionedResources: [ProtonClientTypes.ProvisionedResource]? public init( - nextToken: Swift.String? = nil, - provisionedResources: [ProtonClientTypes.ProvisionedResource]? = nil + nextToken: Swift.String? = nil, + provisionedResources: [ProtonClientTypes.ProvisionedResource]? = nil + ) + { + self.nextToken = nextToken + self.provisionedResources = provisionedResources + } +} + +struct ListComponentProvisionedResourcesOutputResponseBody: Swift.Equatable { + let nextToken: Swift.String? + let provisionedResources: [ProtonClientTypes.ProvisionedResource]? +} + +extension ListComponentProvisionedResourcesOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextToken + case provisionedResources + } + + 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 provisionedResourcesContainer = try containerValues.decodeIfPresent([ProtonClientTypes.ProvisionedResource?].self, forKey: .provisionedResources) + var provisionedResourcesDecoded0:[ProtonClientTypes.ProvisionedResource]? = nil + if let provisionedResourcesContainer = provisionedResourcesContainer { + provisionedResourcesDecoded0 = [ProtonClientTypes.ProvisionedResource]() + for structure0 in provisionedResourcesContainer { + if let structure0 = structure0 { + provisionedResourcesDecoded0?.append(structure0) + } + } + } + provisionedResources = provisionedResourcesDecoded0 + } +} + +extension ListComponentsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case environmentName + case maxResults + case nextToken + case serviceInstanceName + case serviceName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let environmentName = self.environmentName { + try encodeContainer.encode(environmentName, forKey: .environmentName) + } + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + if let serviceInstanceName = self.serviceInstanceName { + try encodeContainer.encode(serviceInstanceName, forKey: .serviceInstanceName) + } + if let serviceName = self.serviceName { + try encodeContainer.encode(serviceName, forKey: .serviceName) + } + } +} + +extension ListComponentsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct ListComponentsInput: Swift.Equatable { + /// The name of an environment for result list filtering. Proton returns components associated with the environment or attached to service instances running in it. + public var environmentName: Swift.String? + /// The maximum number of components to list. + public var maxResults: Swift.Int? + /// A token that indicates the location of the next component in the array of components, after the list of components that was previously requested. + public var nextToken: Swift.String? + /// The name of a service instance for result list filtering. Proton returns the component attached to the service instance, if any. + public var serviceInstanceName: Swift.String? + /// The name of a service for result list filtering. Proton returns components attached to service instances of the service. + public var serviceName: Swift.String? + + public init( + environmentName: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + serviceInstanceName: Swift.String? = nil, + serviceName: Swift.String? = nil + ) + { + self.environmentName = environmentName + self.maxResults = maxResults + self.nextToken = nextToken + self.serviceInstanceName = serviceInstanceName + self.serviceName = serviceName + } +} + +struct ListComponentsInputBody: Swift.Equatable { + let nextToken: Swift.String? + let environmentName: Swift.String? + let serviceName: Swift.String? + let serviceInstanceName: Swift.String? + let maxResults: Swift.Int? +} + +extension ListComponentsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case environmentName + case maxResults + case nextToken + case serviceInstanceName + case serviceName + } + + 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 environmentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .environmentName) + environmentName = environmentNameDecoded + let serviceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceName) + serviceName = serviceNameDecoded + let serviceInstanceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceInstanceName) + serviceInstanceName = serviceInstanceNameDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + } +} + +public enum ListComponentsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListComponentsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListComponentsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.components = output.components + self.nextToken = output.nextToken + } else { + self.components = nil + self.nextToken = nil + } + } +} + +public struct ListComponentsOutputResponse: Swift.Equatable { + /// An array of components with summary data. + /// This member is required. + public var components: [ProtonClientTypes.ComponentSummary]? + /// A token that indicates the location of the next component in the array of components, after the current requested list of components. + public var nextToken: Swift.String? + + public init( + components: [ProtonClientTypes.ComponentSummary]? = nil, + nextToken: Swift.String? = nil ) { + self.components = components self.nextToken = nextToken - self.provisionedResources = provisionedResources } } -struct ListComponentProvisionedResourcesOutputResponseBody: Swift.Equatable { +struct ListComponentsOutputResponseBody: Swift.Equatable { let nextToken: Swift.String? - let provisionedResources: [ProtonClientTypes.ProvisionedResource]? + let components: [ProtonClientTypes.ComponentSummary]? } -extension ListComponentProvisionedResourcesOutputResponseBody: Swift.Decodable { +extension ListComponentsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case components case nextToken - case provisionedResources } 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 provisionedResourcesContainer = try containerValues.decodeIfPresent([ProtonClientTypes.ProvisionedResource?].self, forKey: .provisionedResources) - var provisionedResourcesDecoded0:[ProtonClientTypes.ProvisionedResource]? = nil - if let provisionedResourcesContainer = provisionedResourcesContainer { - provisionedResourcesDecoded0 = [ProtonClientTypes.ProvisionedResource]() - for structure0 in provisionedResourcesContainer { + let componentsContainer = try containerValues.decodeIfPresent([ProtonClientTypes.ComponentSummary?].self, forKey: .components) + var componentsDecoded0:[ProtonClientTypes.ComponentSummary]? = nil + if let componentsContainer = componentsContainer { + componentsDecoded0 = [ProtonClientTypes.ComponentSummary]() + for structure0 in componentsContainer { if let structure0 = structure0 { - provisionedResourcesDecoded0?.append(structure0) + componentsDecoded0?.append(structure0) } } } - provisionedResources = provisionedResourcesDecoded0 + components = componentsDecoded0 } } -extension ListComponentsInput: Swift.Encodable { +extension ListDeploymentsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case componentName case environmentName case maxResults case nextToken @@ -8741,6 +9908,9 @@ extension ListComponentsInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let componentName = self.componentName { + try encodeContainer.encode(componentName, forKey: .componentName) + } if let environmentName = self.environmentName { try encodeContainer.encode(environmentName, forKey: .environmentName) } @@ -8759,25 +9929,28 @@ extension ListComponentsInput: Swift.Encodable { } } -extension ListComponentsInput: ClientRuntime.URLPathProvider { +extension ListDeploymentsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { return "/" } } -public struct ListComponentsInput: Swift.Equatable { - /// The name of an environment for result list filtering. Proton returns components associated with the environment or attached to service instances running in it. +public struct ListDeploymentsInput: Swift.Equatable { + /// The name of a component for result list filtering. Proton returns deployments associated with that component. + public var componentName: Swift.String? + /// The name of an environment for result list filtering. Proton returns deployments associated with the environment. public var environmentName: Swift.String? - /// The maximum number of components to list. + /// The maximum number of deployments to list. public var maxResults: Swift.Int? - /// A token that indicates the location of the next component in the array of components, after the list of components that was previously requested. + /// A token that indicates the location of the next deployment in the array of deployment, after the list of deployment that was previously requested. public var nextToken: Swift.String? - /// The name of a service instance for result list filtering. Proton returns the component attached to the service instance, if any. + /// The name of a service instance for result list filtering. Proton returns the deployments associated with the service instance. public var serviceInstanceName: Swift.String? - /// The name of a service for result list filtering. Proton returns components attached to service instances of the service. + /// The name of a service for result list filtering. Proton returns deployments associated with service instances of the service. public var serviceName: Swift.String? public init( + componentName: Swift.String? = nil, environmentName: Swift.String? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, @@ -8785,6 +9958,7 @@ public struct ListComponentsInput: Swift.Equatable { serviceName: Swift.String? = nil ) { + self.componentName = componentName self.environmentName = environmentName self.maxResults = maxResults self.nextToken = nextToken @@ -8793,16 +9967,18 @@ public struct ListComponentsInput: Swift.Equatable { } } -struct ListComponentsInputBody: Swift.Equatable { +struct ListDeploymentsInputBody: Swift.Equatable { let nextToken: Swift.String? let environmentName: Swift.String? let serviceName: Swift.String? let serviceInstanceName: Swift.String? + let componentName: Swift.String? let maxResults: Swift.Int? } -extension ListComponentsInputBody: Swift.Decodable { +extension ListDeploymentsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case componentName case environmentName case maxResults case nextToken @@ -8820,18 +9996,21 @@ extension ListComponentsInputBody: Swift.Decodable { serviceName = serviceNameDecoded let serviceInstanceNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .serviceInstanceName) serviceInstanceName = serviceInstanceNameDecoded + let componentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentName) + componentName = componentNameDecoded let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded } } -public enum ListComponentsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListDeploymentsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -8839,45 +10018,45 @@ public enum ListComponentsOutputError: ClientRuntime.HttpResponseErrorBinding { } } -extension ListComponentsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListDeploymentsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListComponentsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.components = output.components + let output: ListDeploymentsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.deployments = output.deployments self.nextToken = output.nextToken } else { - self.components = nil + self.deployments = nil self.nextToken = nil } } } -public struct ListComponentsOutputResponse: Swift.Equatable { - /// An array of components with summary data. +public struct ListDeploymentsOutputResponse: Swift.Equatable { + /// An array of deployment with summary data. /// This member is required. - public var components: [ProtonClientTypes.ComponentSummary]? - /// A token that indicates the location of the next component in the array of components, after the current requested list of components. + public var deployments: [ProtonClientTypes.DeploymentSummary]? + /// A token that indicates the location of the next deployment in the array of deployment, after the current requested list of deployment. public var nextToken: Swift.String? public init( - components: [ProtonClientTypes.ComponentSummary]? = nil, + deployments: [ProtonClientTypes.DeploymentSummary]? = nil, nextToken: Swift.String? = nil ) { - self.components = components + self.deployments = deployments self.nextToken = nextToken } } -struct ListComponentsOutputResponseBody: Swift.Equatable { +struct ListDeploymentsOutputResponseBody: Swift.Equatable { let nextToken: Swift.String? - let components: [ProtonClientTypes.ComponentSummary]? + let deployments: [ProtonClientTypes.DeploymentSummary]? } -extension ListComponentsOutputResponseBody: Swift.Decodable { +extension ListDeploymentsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case components + case deployments case nextToken } @@ -8885,17 +10064,17 @@ extension ListComponentsOutputResponseBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded - let componentsContainer = try containerValues.decodeIfPresent([ProtonClientTypes.ComponentSummary?].self, forKey: .components) - var componentsDecoded0:[ProtonClientTypes.ComponentSummary]? = nil - if let componentsContainer = componentsContainer { - componentsDecoded0 = [ProtonClientTypes.ComponentSummary]() - for structure0 in componentsContainer { + let deploymentsContainer = try containerValues.decodeIfPresent([ProtonClientTypes.DeploymentSummary?].self, forKey: .deployments) + var deploymentsDecoded0:[ProtonClientTypes.DeploymentSummary]? = nil + if let deploymentsContainer = deploymentsContainer { + deploymentsDecoded0 = [ProtonClientTypes.DeploymentSummary]() + for structure0 in deploymentsContainer { if let structure0 = structure0 { - componentsDecoded0?.append(structure0) + deploymentsDecoded0?.append(structure0) } } } - components = componentsDecoded0 + deployments = deploymentsDecoded0 } } @@ -9083,12 +10262,16 @@ extension ListEnvironmentAccountConnectionsOutputResponseBody: Swift.Decodable { extension ListEnvironmentOutputsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case deploymentId case environmentName case nextToken } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let deploymentId = self.deploymentId { + try encodeContainer.encode(deploymentId, forKey: .deploymentId) + } if let environmentName = self.environmentName { try encodeContainer.encode(environmentName, forKey: .environmentName) } @@ -9105,6 +10288,8 @@ extension ListEnvironmentOutputsInput: ClientRuntime.URLPathProvider { } public struct ListEnvironmentOutputsInput: Swift.Equatable { + /// The ID of the deployment whose outputs you want. + public var deploymentId: Swift.String? /// The environment name. /// This member is required. public var environmentName: Swift.String? @@ -9112,10 +10297,12 @@ public struct ListEnvironmentOutputsInput: Swift.Equatable { public var nextToken: Swift.String? public init( + deploymentId: Swift.String? = nil, environmentName: Swift.String? = nil, nextToken: Swift.String? = nil ) { + self.deploymentId = deploymentId self.environmentName = environmentName self.nextToken = nextToken } @@ -9124,10 +10311,12 @@ public struct ListEnvironmentOutputsInput: Swift.Equatable { struct ListEnvironmentOutputsInputBody: Swift.Equatable { let environmentName: Swift.String? let nextToken: Swift.String? + let deploymentId: Swift.String? } extension ListEnvironmentOutputsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case deploymentId case environmentName case nextToken } @@ -9138,6 +10327,8 @@ extension ListEnvironmentOutputsInputBody: Swift.Decodable { environmentName = environmentNameDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let deploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .deploymentId) + deploymentId = deploymentIdDecoded } } @@ -10097,6 +11288,7 @@ extension ListRepositorySyncDefinitionsOutputResponseBody: Swift.Decodable { extension ListServiceInstanceOutputsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case deploymentId case nextToken case serviceInstanceName case serviceName @@ -10104,6 +11296,9 @@ extension ListServiceInstanceOutputsInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let deploymentId = self.deploymentId { + try encodeContainer.encode(deploymentId, forKey: .deploymentId) + } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } @@ -10123,6 +11318,8 @@ extension ListServiceInstanceOutputsInput: ClientRuntime.URLPathProvider { } public struct ListServiceInstanceOutputsInput: Swift.Equatable { + /// The ID of the deployment whose outputs you want. + public var deploymentId: Swift.String? /// A token that indicates the location of the next output in the array of outputs, after the list of outputs that was previously requested. public var nextToken: Swift.String? /// The name of the service instance whose outputs you want. @@ -10133,11 +11330,13 @@ public struct ListServiceInstanceOutputsInput: Swift.Equatable { public var serviceName: Swift.String? public init( + deploymentId: Swift.String? = nil, nextToken: Swift.String? = nil, serviceInstanceName: Swift.String? = nil, serviceName: Swift.String? = nil ) { + self.deploymentId = deploymentId self.nextToken = nextToken self.serviceInstanceName = serviceInstanceName self.serviceName = serviceName @@ -10148,10 +11347,12 @@ struct ListServiceInstanceOutputsInputBody: Swift.Equatable { let serviceInstanceName: Swift.String? let serviceName: Swift.String? let nextToken: Swift.String? + let deploymentId: Swift.String? } extension ListServiceInstanceOutputsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case deploymentId case nextToken case serviceInstanceName case serviceName @@ -10165,6 +11366,8 @@ extension ListServiceInstanceOutputsInputBody: Swift.Decodable { serviceName = serviceNameDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let deploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .deploymentId) + deploymentId = deploymentIdDecoded } } @@ -10735,12 +11938,16 @@ extension ProtonClientTypes { extension ListServicePipelineOutputsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case deploymentId case nextToken case serviceName } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let deploymentId = self.deploymentId { + try encodeContainer.encode(deploymentId, forKey: .deploymentId) + } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } @@ -10757,6 +11964,8 @@ extension ListServicePipelineOutputsInput: ClientRuntime.URLPathProvider { } public struct ListServicePipelineOutputsInput: Swift.Equatable { + /// The ID of the deployment you want the outputs for. + public var deploymentId: Swift.String? /// A token that indicates the location of the next output in the array of outputs, after the list of outputs that was previously requested. public var nextToken: Swift.String? /// The name of the service whose pipeline's outputs you want. @@ -10764,10 +11973,12 @@ public struct ListServicePipelineOutputsInput: Swift.Equatable { public var serviceName: Swift.String? public init( + deploymentId: Swift.String? = nil, nextToken: Swift.String? = nil, serviceName: Swift.String? = nil ) { + self.deploymentId = deploymentId self.nextToken = nextToken self.serviceName = serviceName } @@ -10776,10 +11987,12 @@ public struct ListServicePipelineOutputsInput: Swift.Equatable { struct ListServicePipelineOutputsInputBody: Swift.Equatable { let serviceName: Swift.String? let nextToken: Swift.String? + let deploymentId: Swift.String? } extension ListServicePipelineOutputsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case deploymentId case nextToken case serviceName } @@ -10790,6 +12003,8 @@ extension ListServicePipelineOutputsInputBody: Swift.Decodable { serviceName = serviceNameDecoded let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded + let deploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .deploymentId) + deploymentId = deploymentIdDecoded } } @@ -13210,9 +14425,11 @@ extension ProtonClientTypes.ServiceInstance: Swift.Codable { case deploymentStatus case deploymentStatusMessage case environmentName + case lastAttemptedDeploymentId case lastClientRequestToken case lastDeploymentAttemptedAt case lastDeploymentSucceededAt + case lastSucceededDeploymentId case name case serviceName case spec @@ -13238,6 +14455,9 @@ extension ProtonClientTypes.ServiceInstance: Swift.Codable { if let environmentName = self.environmentName { try encodeContainer.encode(environmentName, forKey: .environmentName) } + if let lastAttemptedDeploymentId = self.lastAttemptedDeploymentId { + try encodeContainer.encode(lastAttemptedDeploymentId, forKey: .lastAttemptedDeploymentId) + } if let lastClientRequestToken = self.lastClientRequestToken { try encodeContainer.encode(lastClientRequestToken, forKey: .lastClientRequestToken) } @@ -13247,6 +14467,9 @@ extension ProtonClientTypes.ServiceInstance: Swift.Codable { if let lastDeploymentSucceededAt = self.lastDeploymentSucceededAt { try encodeContainer.encodeTimestamp(lastDeploymentSucceededAt, format: .epochSeconds, forKey: .lastDeploymentSucceededAt) } + if let lastSucceededDeploymentId = self.lastSucceededDeploymentId { + try encodeContainer.encode(lastSucceededDeploymentId, forKey: .lastSucceededDeploymentId) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -13297,12 +14520,16 @@ extension ProtonClientTypes.ServiceInstance: Swift.Codable { spec = specDecoded let lastClientRequestTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastClientRequestToken) lastClientRequestToken = lastClientRequestTokenDecoded + let lastAttemptedDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastAttemptedDeploymentId) + lastAttemptedDeploymentId = lastAttemptedDeploymentIdDecoded + let lastSucceededDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastSucceededDeploymentId) + lastSucceededDeploymentId = lastSucceededDeploymentIdDecoded } } extension ProtonClientTypes.ServiceInstance: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "ServiceInstance(arn: \(Swift.String(describing: arn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentName: \(Swift.String(describing: environmentName)), lastClientRequestToken: \(Swift.String(describing: lastClientRequestToken)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), name: \(Swift.String(describing: name)), serviceName: \(Swift.String(describing: serviceName)), templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), deploymentStatusMessage: \"CONTENT_REDACTED\", spec: \"CONTENT_REDACTED\")"} + "ServiceInstance(arn: \(Swift.String(describing: arn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentName: \(Swift.String(describing: environmentName)), lastAttemptedDeploymentId: \(Swift.String(describing: lastAttemptedDeploymentId)), lastClientRequestToken: \(Swift.String(describing: lastClientRequestToken)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), lastSucceededDeploymentId: \(Swift.String(describing: lastSucceededDeploymentId)), name: \(Swift.String(describing: name)), serviceName: \(Swift.String(describing: serviceName)), templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), deploymentStatusMessage: \"CONTENT_REDACTED\", spec: \"CONTENT_REDACTED\")"} } extension ProtonClientTypes { @@ -13322,6 +14549,8 @@ extension ProtonClientTypes { /// The name of the environment that the service instance was deployed into. /// This member is required. public var environmentName: Swift.String? + /// The ID of the last attempted deployment of this service instance. + public var lastAttemptedDeploymentId: Swift.String? /// The last client request token received. public var lastClientRequestToken: Swift.String? /// The time when a deployment of the service instance was last attempted. @@ -13330,6 +14559,8 @@ extension ProtonClientTypes { /// The time when the service instance was last deployed successfully. /// This member is required. public var lastDeploymentSucceededAt: ClientRuntime.Date? + /// The ID of the last successful deployment of this service instance. + public var lastSucceededDeploymentId: Swift.String? /// The name of the service instance. /// This member is required. public var name: Swift.String? @@ -13354,9 +14585,11 @@ extension ProtonClientTypes { deploymentStatus: ProtonClientTypes.DeploymentStatus? = nil, deploymentStatusMessage: Swift.String? = nil, environmentName: Swift.String? = nil, + lastAttemptedDeploymentId: Swift.String? = nil, lastClientRequestToken: Swift.String? = nil, lastDeploymentAttemptedAt: ClientRuntime.Date? = nil, lastDeploymentSucceededAt: ClientRuntime.Date? = nil, + lastSucceededDeploymentId: Swift.String? = nil, name: Swift.String? = nil, serviceName: Swift.String? = nil, spec: Swift.String? = nil, @@ -13370,9 +14603,11 @@ extension ProtonClientTypes { self.deploymentStatus = deploymentStatus self.deploymentStatusMessage = deploymentStatusMessage self.environmentName = environmentName + self.lastAttemptedDeploymentId = lastAttemptedDeploymentId self.lastClientRequestToken = lastClientRequestToken self.lastDeploymentAttemptedAt = lastDeploymentAttemptedAt self.lastDeploymentSucceededAt = lastDeploymentSucceededAt + self.lastSucceededDeploymentId = lastSucceededDeploymentId self.name = name self.serviceName = serviceName self.spec = spec @@ -13384,6 +14619,122 @@ extension ProtonClientTypes { } +extension ProtonClientTypes.ServiceInstanceState: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case lastSuccessfulComponentDeploymentIds + case lastSuccessfulEnvironmentDeploymentId + case lastSuccessfulServicePipelineDeploymentId + case spec + case templateMajorVersion + case templateMinorVersion + case templateName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let lastSuccessfulComponentDeploymentIds = lastSuccessfulComponentDeploymentIds { + var lastSuccessfulComponentDeploymentIdsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .lastSuccessfulComponentDeploymentIds) + for deploymentid0 in lastSuccessfulComponentDeploymentIds { + try lastSuccessfulComponentDeploymentIdsContainer.encode(deploymentid0) + } + } + if let lastSuccessfulEnvironmentDeploymentId = self.lastSuccessfulEnvironmentDeploymentId { + try encodeContainer.encode(lastSuccessfulEnvironmentDeploymentId, forKey: .lastSuccessfulEnvironmentDeploymentId) + } + if let lastSuccessfulServicePipelineDeploymentId = self.lastSuccessfulServicePipelineDeploymentId { + try encodeContainer.encode(lastSuccessfulServicePipelineDeploymentId, forKey: .lastSuccessfulServicePipelineDeploymentId) + } + if let spec = self.spec { + try encodeContainer.encode(spec, forKey: .spec) + } + if let templateMajorVersion = self.templateMajorVersion { + try encodeContainer.encode(templateMajorVersion, forKey: .templateMajorVersion) + } + if let templateMinorVersion = self.templateMinorVersion { + try encodeContainer.encode(templateMinorVersion, forKey: .templateMinorVersion) + } + if let templateName = self.templateName { + try encodeContainer.encode(templateName, forKey: .templateName) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let specDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .spec) + spec = specDecoded + let templateNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .templateName) + templateName = templateNameDecoded + let templateMajorVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .templateMajorVersion) + templateMajorVersion = templateMajorVersionDecoded + let templateMinorVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .templateMinorVersion) + templateMinorVersion = templateMinorVersionDecoded + let lastSuccessfulComponentDeploymentIdsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .lastSuccessfulComponentDeploymentIds) + var lastSuccessfulComponentDeploymentIdsDecoded0:[Swift.String]? = nil + if let lastSuccessfulComponentDeploymentIdsContainer = lastSuccessfulComponentDeploymentIdsContainer { + lastSuccessfulComponentDeploymentIdsDecoded0 = [Swift.String]() + for string0 in lastSuccessfulComponentDeploymentIdsContainer { + if let string0 = string0 { + lastSuccessfulComponentDeploymentIdsDecoded0?.append(string0) + } + } + } + lastSuccessfulComponentDeploymentIds = lastSuccessfulComponentDeploymentIdsDecoded0 + let lastSuccessfulEnvironmentDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastSuccessfulEnvironmentDeploymentId) + lastSuccessfulEnvironmentDeploymentId = lastSuccessfulEnvironmentDeploymentIdDecoded + let lastSuccessfulServicePipelineDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastSuccessfulServicePipelineDeploymentId) + lastSuccessfulServicePipelineDeploymentId = lastSuccessfulServicePipelineDeploymentIdDecoded + } +} + +extension ProtonClientTypes.ServiceInstanceState: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "ServiceInstanceState(lastSuccessfulComponentDeploymentIds: \(Swift.String(describing: lastSuccessfulComponentDeploymentIds)), lastSuccessfulEnvironmentDeploymentId: \(Swift.String(describing: lastSuccessfulEnvironmentDeploymentId)), lastSuccessfulServicePipelineDeploymentId: \(Swift.String(describing: lastSuccessfulServicePipelineDeploymentId)), templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), spec: \"CONTENT_REDACTED\")"} +} + +extension ProtonClientTypes { + /// The detailed data about the current state of this service instance. + public struct ServiceInstanceState: Swift.Equatable { + /// The IDs for the last successful components deployed for this service instance. + public var lastSuccessfulComponentDeploymentIds: [Swift.String]? + /// The ID for the last successful environment deployed for this service instance. + public var lastSuccessfulEnvironmentDeploymentId: Swift.String? + /// The ID for the last successful service pipeline deployed for this service instance. + public var lastSuccessfulServicePipelineDeploymentId: Swift.String? + /// The service spec that was used to create the service instance. + /// This member is required. + public var spec: Swift.String? + /// The major version of the service template that was used to create the service pipeline. + /// This member is required. + public var templateMajorVersion: Swift.String? + /// The minor version of the service template that was used to create the service pipeline. + /// This member is required. + public var templateMinorVersion: Swift.String? + /// The name of the service template that was used to create the service instance. + /// This member is required. + public var templateName: Swift.String? + + public init( + lastSuccessfulComponentDeploymentIds: [Swift.String]? = nil, + lastSuccessfulEnvironmentDeploymentId: Swift.String? = nil, + lastSuccessfulServicePipelineDeploymentId: Swift.String? = nil, + spec: Swift.String? = nil, + templateMajorVersion: Swift.String? = nil, + templateMinorVersion: Swift.String? = nil, + templateName: Swift.String? = nil + ) + { + self.lastSuccessfulComponentDeploymentIds = lastSuccessfulComponentDeploymentIds + self.lastSuccessfulEnvironmentDeploymentId = lastSuccessfulEnvironmentDeploymentId + self.lastSuccessfulServicePipelineDeploymentId = lastSuccessfulServicePipelineDeploymentId + self.spec = spec + self.templateMajorVersion = templateMajorVersion + self.templateMinorVersion = templateMinorVersion + self.templateName = templateName + } + } + +} + extension ProtonClientTypes.ServiceInstanceSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn @@ -13391,8 +14742,10 @@ extension ProtonClientTypes.ServiceInstanceSummary: Swift.Codable { case deploymentStatus case deploymentStatusMessage case environmentName + case lastAttemptedDeploymentId case lastDeploymentAttemptedAt case lastDeploymentSucceededAt + case lastSucceededDeploymentId case name case serviceName case templateMajorVersion @@ -13417,12 +14770,18 @@ extension ProtonClientTypes.ServiceInstanceSummary: Swift.Codable { if let environmentName = self.environmentName { try encodeContainer.encode(environmentName, forKey: .environmentName) } + if let lastAttemptedDeploymentId = self.lastAttemptedDeploymentId { + try encodeContainer.encode(lastAttemptedDeploymentId, forKey: .lastAttemptedDeploymentId) + } if let lastDeploymentAttemptedAt = self.lastDeploymentAttemptedAt { try encodeContainer.encodeTimestamp(lastDeploymentAttemptedAt, format: .epochSeconds, forKey: .lastDeploymentAttemptedAt) } if let lastDeploymentSucceededAt = self.lastDeploymentSucceededAt { try encodeContainer.encodeTimestamp(lastDeploymentSucceededAt, format: .epochSeconds, forKey: .lastDeploymentSucceededAt) } + if let lastSucceededDeploymentId = self.lastSucceededDeploymentId { + try encodeContainer.encode(lastSucceededDeploymentId, forKey: .lastSucceededDeploymentId) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -13466,12 +14825,16 @@ extension ProtonClientTypes.ServiceInstanceSummary: Swift.Codable { deploymentStatus = deploymentStatusDecoded let deploymentStatusMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .deploymentStatusMessage) deploymentStatusMessage = deploymentStatusMessageDecoded + let lastAttemptedDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastAttemptedDeploymentId) + lastAttemptedDeploymentId = lastAttemptedDeploymentIdDecoded + let lastSucceededDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastSucceededDeploymentId) + lastSucceededDeploymentId = lastSucceededDeploymentIdDecoded } } extension ProtonClientTypes.ServiceInstanceSummary: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "ServiceInstanceSummary(arn: \(Swift.String(describing: arn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentName: \(Swift.String(describing: environmentName)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), name: \(Swift.String(describing: name)), serviceName: \(Swift.String(describing: serviceName)), templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), deploymentStatusMessage: \"CONTENT_REDACTED\")"} + "ServiceInstanceSummary(arn: \(Swift.String(describing: arn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), environmentName: \(Swift.String(describing: environmentName)), lastAttemptedDeploymentId: \(Swift.String(describing: lastAttemptedDeploymentId)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), lastSucceededDeploymentId: \(Swift.String(describing: lastSucceededDeploymentId)), name: \(Swift.String(describing: name)), serviceName: \(Swift.String(describing: serviceName)), templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), deploymentStatusMessage: \"CONTENT_REDACTED\")"} } extension ProtonClientTypes { @@ -13491,12 +14854,16 @@ extension ProtonClientTypes { /// The name of the environment that the service instance was deployed into. /// This member is required. public var environmentName: Swift.String? + /// The ID of the last attempted deployment of this service instance. + public var lastAttemptedDeploymentId: Swift.String? /// The time when a deployment of the service was last attempted. /// This member is required. public var lastDeploymentAttemptedAt: ClientRuntime.Date? /// The time when the service was last deployed successfully. /// This member is required. public var lastDeploymentSucceededAt: ClientRuntime.Date? + /// The ID of the last successful deployment of this service instance. + public var lastSucceededDeploymentId: Swift.String? /// The name of the service instance. /// This member is required. public var name: Swift.String? @@ -13519,8 +14886,10 @@ extension ProtonClientTypes { deploymentStatus: ProtonClientTypes.DeploymentStatus? = nil, deploymentStatusMessage: Swift.String? = nil, environmentName: Swift.String? = nil, + lastAttemptedDeploymentId: Swift.String? = nil, lastDeploymentAttemptedAt: ClientRuntime.Date? = nil, lastDeploymentSucceededAt: ClientRuntime.Date? = nil, + lastSucceededDeploymentId: Swift.String? = nil, name: Swift.String? = nil, serviceName: Swift.String? = nil, templateMajorVersion: Swift.String? = nil, @@ -13533,8 +14902,10 @@ extension ProtonClientTypes { self.deploymentStatus = deploymentStatus self.deploymentStatusMessage = deploymentStatusMessage self.environmentName = environmentName + self.lastAttemptedDeploymentId = lastAttemptedDeploymentId self.lastDeploymentAttemptedAt = lastDeploymentAttemptedAt self.lastDeploymentSucceededAt = lastDeploymentSucceededAt + self.lastSucceededDeploymentId = lastSucceededDeploymentId self.name = name self.serviceName = serviceName self.templateMajorVersion = templateMajorVersion @@ -13551,8 +14922,10 @@ extension ProtonClientTypes.ServicePipeline: Swift.Codable { case createdAt case deploymentStatus case deploymentStatusMessage + case lastAttemptedDeploymentId case lastDeploymentAttemptedAt case lastDeploymentSucceededAt + case lastSucceededDeploymentId case spec case templateMajorVersion case templateMinorVersion @@ -13573,12 +14946,18 @@ extension ProtonClientTypes.ServicePipeline: Swift.Codable { if let deploymentStatusMessage = self.deploymentStatusMessage { try encodeContainer.encode(deploymentStatusMessage, forKey: .deploymentStatusMessage) } + if let lastAttemptedDeploymentId = self.lastAttemptedDeploymentId { + try encodeContainer.encode(lastAttemptedDeploymentId, forKey: .lastAttemptedDeploymentId) + } if let lastDeploymentAttemptedAt = self.lastDeploymentAttemptedAt { try encodeContainer.encodeTimestamp(lastDeploymentAttemptedAt, format: .epochSeconds, forKey: .lastDeploymentAttemptedAt) } if let lastDeploymentSucceededAt = self.lastDeploymentSucceededAt { try encodeContainer.encodeTimestamp(lastDeploymentSucceededAt, format: .epochSeconds, forKey: .lastDeploymentSucceededAt) } + if let lastSucceededDeploymentId = self.lastSucceededDeploymentId { + try encodeContainer.encode(lastSucceededDeploymentId, forKey: .lastSucceededDeploymentId) + } if let spec = self.spec { try encodeContainer.encode(spec, forKey: .spec) } @@ -13615,12 +14994,16 @@ extension ProtonClientTypes.ServicePipeline: Swift.Codable { deploymentStatusMessage = deploymentStatusMessageDecoded let specDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .spec) spec = specDecoded + let lastAttemptedDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastAttemptedDeploymentId) + lastAttemptedDeploymentId = lastAttemptedDeploymentIdDecoded + let lastSucceededDeploymentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .lastSucceededDeploymentId) + lastSucceededDeploymentId = lastSucceededDeploymentIdDecoded } } extension ProtonClientTypes.ServicePipeline: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "ServicePipeline(arn: \(Swift.String(describing: arn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), deploymentStatusMessage: \"CONTENT_REDACTED\", spec: \"CONTENT_REDACTED\")"} + "ServicePipeline(arn: \(Swift.String(describing: arn)), createdAt: \(Swift.String(describing: createdAt)), deploymentStatus: \(Swift.String(describing: deploymentStatus)), lastAttemptedDeploymentId: \(Swift.String(describing: lastAttemptedDeploymentId)), lastDeploymentAttemptedAt: \(Swift.String(describing: lastDeploymentAttemptedAt)), lastDeploymentSucceededAt: \(Swift.String(describing: lastDeploymentSucceededAt)), lastSucceededDeploymentId: \(Swift.String(describing: lastSucceededDeploymentId)), templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), deploymentStatusMessage: \"CONTENT_REDACTED\", spec: \"CONTENT_REDACTED\")"} } extension ProtonClientTypes { @@ -13637,12 +15020,16 @@ extension ProtonClientTypes { public var deploymentStatus: ProtonClientTypes.DeploymentStatus? /// A service pipeline deployment status message. public var deploymentStatusMessage: Swift.String? + /// The ID of the last attempted deployment of this service pipeline. + public var lastAttemptedDeploymentId: Swift.String? /// The time when a deployment of the service pipeline was last attempted. /// This member is required. public var lastDeploymentAttemptedAt: ClientRuntime.Date? /// The time when the service pipeline was last deployed successfully. /// This member is required. public var lastDeploymentSucceededAt: ClientRuntime.Date? + /// The ID of the last successful deployment of this service pipeline. + public var lastSucceededDeploymentId: Swift.String? /// The service spec that was used to create the service pipeline. public var spec: Swift.String? /// The major version of the service template that was used to create the service pipeline. @@ -13660,8 +15047,10 @@ extension ProtonClientTypes { createdAt: ClientRuntime.Date? = nil, deploymentStatus: ProtonClientTypes.DeploymentStatus? = nil, deploymentStatusMessage: Swift.String? = nil, + lastAttemptedDeploymentId: Swift.String? = nil, lastDeploymentAttemptedAt: ClientRuntime.Date? = nil, lastDeploymentSucceededAt: ClientRuntime.Date? = nil, + lastSucceededDeploymentId: Swift.String? = nil, spec: Swift.String? = nil, templateMajorVersion: Swift.String? = nil, templateMinorVersion: Swift.String? = nil, @@ -13672,8 +15061,83 @@ extension ProtonClientTypes { self.createdAt = createdAt self.deploymentStatus = deploymentStatus self.deploymentStatusMessage = deploymentStatusMessage + self.lastAttemptedDeploymentId = lastAttemptedDeploymentId self.lastDeploymentAttemptedAt = lastDeploymentAttemptedAt self.lastDeploymentSucceededAt = lastDeploymentSucceededAt + self.lastSucceededDeploymentId = lastSucceededDeploymentId + self.spec = spec + self.templateMajorVersion = templateMajorVersion + self.templateMinorVersion = templateMinorVersion + self.templateName = templateName + } + } + +} + +extension ProtonClientTypes.ServicePipelineState: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case spec + case templateMajorVersion + case templateMinorVersion + case templateName + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let spec = self.spec { + try encodeContainer.encode(spec, forKey: .spec) + } + if let templateMajorVersion = self.templateMajorVersion { + try encodeContainer.encode(templateMajorVersion, forKey: .templateMajorVersion) + } + if let templateMinorVersion = self.templateMinorVersion { + try encodeContainer.encode(templateMinorVersion, forKey: .templateMinorVersion) + } + if let templateName = self.templateName { + try encodeContainer.encode(templateName, forKey: .templateName) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let specDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .spec) + spec = specDecoded + let templateNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .templateName) + templateName = templateNameDecoded + let templateMajorVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .templateMajorVersion) + templateMajorVersion = templateMajorVersionDecoded + let templateMinorVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .templateMinorVersion) + templateMinorVersion = templateMinorVersionDecoded + } +} + +extension ProtonClientTypes.ServicePipelineState: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "ServicePipelineState(templateMajorVersion: \(Swift.String(describing: templateMajorVersion)), templateMinorVersion: \(Swift.String(describing: templateMinorVersion)), templateName: \(Swift.String(describing: templateName)), spec: \"CONTENT_REDACTED\")"} +} + +extension ProtonClientTypes { + /// The detailed data about the current state of the service pipeline. + public struct ServicePipelineState: Swift.Equatable { + /// The service spec that was used to create the service pipeline. + public var spec: Swift.String? + /// The major version of the service template that was used to create the service pipeline. + /// This member is required. + public var templateMajorVersion: Swift.String? + /// The minor version of the service template that was used to create the service pipeline. + /// This member is required. + public var templateMinorVersion: Swift.String? + /// The name of the service template that was used to create the service pipeline. + /// This member is required. + public var templateName: Swift.String? + + public init( + spec: Swift.String? = nil, + templateMajorVersion: Swift.String? = nil, + templateMinorVersion: Swift.String? = nil, + templateName: Swift.String? = nil + ) + { self.spec = spec self.templateMajorVersion = templateMajorVersion self.templateMinorVersion = templateMinorVersion diff --git a/Sources/Services/AWSQuickSight/Paginators.swift b/Sources/Services/AWSQuickSight/Paginators.swift index 446723de182..263a4e90dbc 100644 --- a/Sources/Services/AWSQuickSight/Paginators.swift +++ b/Sources/Services/AWSQuickSight/Paginators.swift @@ -220,6 +220,137 @@ extension PaginatorSequence where Input == ListDataSourcesInput, Output == ListD return try await self.asyncCompactMap { item in item.dataSources } } } +extension QuickSightClient { + /// Paginate over `[ListGroupMembershipsOutputResponse]` 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 `[ListGroupMembershipsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListGroupMembershipsOutputResponse` + public func listGroupMembershipsPaginated(input: ListGroupMembershipsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListGroupMembershipsInput.nextToken, outputKey: \ListGroupMembershipsOutputResponse.nextToken, paginationFunction: self.listGroupMemberships(input:)) + } +} + +extension ListGroupMembershipsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListGroupMembershipsInput { + return ListGroupMembershipsInput( + awsAccountId: self.awsAccountId, + groupName: self.groupName, + maxResults: self.maxResults, + namespace: self.namespace, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListGroupMembershipsInput, Output == ListGroupMembershipsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listGroupMembershipsPaginated` + /// to access the nested member `[QuickSightClientTypes.GroupMember]` + /// - Returns: `[QuickSightClientTypes.GroupMember]` + public func groupMemberList() async throws -> [QuickSightClientTypes.GroupMember] { + return try await self.asyncCompactMap { item in item.groupMemberList } + } +} +extension QuickSightClient { + /// Paginate over `[ListGroupsOutputResponse]` 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 `[ListGroupsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListGroupsOutputResponse` + public func listGroupsPaginated(input: ListGroupsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListGroupsInput.nextToken, outputKey: \ListGroupsOutputResponse.nextToken, paginationFunction: self.listGroups(input:)) + } +} + +extension ListGroupsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListGroupsInput { + return ListGroupsInput( + awsAccountId: self.awsAccountId, + maxResults: self.maxResults, + namespace: self.namespace, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListGroupsInput, Output == ListGroupsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listGroupsPaginated` + /// to access the nested member `[QuickSightClientTypes.Group]` + /// - Returns: `[QuickSightClientTypes.Group]` + public func groupList() async throws -> [QuickSightClientTypes.Group] { + return try await self.asyncCompactMap { item in item.groupList } + } +} +extension QuickSightClient { + /// Paginate over `[ListIAMPolicyAssignmentsOutputResponse]` 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 `[ListIAMPolicyAssignmentsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListIAMPolicyAssignmentsOutputResponse` + public func listIAMPolicyAssignmentsPaginated(input: ListIAMPolicyAssignmentsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListIAMPolicyAssignmentsInput.nextToken, outputKey: \ListIAMPolicyAssignmentsOutputResponse.nextToken, paginationFunction: self.listIAMPolicyAssignments(input:)) + } +} + +extension ListIAMPolicyAssignmentsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListIAMPolicyAssignmentsInput { + return ListIAMPolicyAssignmentsInput( + assignmentStatus: self.assignmentStatus, + awsAccountId: self.awsAccountId, + maxResults: self.maxResults, + namespace: self.namespace, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListIAMPolicyAssignmentsInput, Output == ListIAMPolicyAssignmentsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listIAMPolicyAssignmentsPaginated` + /// to access the nested member `[QuickSightClientTypes.IAMPolicyAssignmentSummary]` + /// - Returns: `[QuickSightClientTypes.IAMPolicyAssignmentSummary]` + public func iamPolicyAssignments() async throws -> [QuickSightClientTypes.IAMPolicyAssignmentSummary] { + return try await self.asyncCompactMap { item in item.iamPolicyAssignments } + } +} +extension QuickSightClient { + /// Paginate over `[ListIAMPolicyAssignmentsForUserOutputResponse]` 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 `[ListIAMPolicyAssignmentsForUserInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListIAMPolicyAssignmentsForUserOutputResponse` + public func listIAMPolicyAssignmentsForUserPaginated(input: ListIAMPolicyAssignmentsForUserInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListIAMPolicyAssignmentsForUserInput.nextToken, outputKey: \ListIAMPolicyAssignmentsForUserOutputResponse.nextToken, paginationFunction: self.listIAMPolicyAssignmentsForUser(input:)) + } +} + +extension ListIAMPolicyAssignmentsForUserInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListIAMPolicyAssignmentsForUserInput { + return ListIAMPolicyAssignmentsForUserInput( + awsAccountId: self.awsAccountId, + maxResults: self.maxResults, + namespace: self.namespace, + nextToken: token, + userName: self.userName + )} +} + +extension PaginatorSequence where Input == ListIAMPolicyAssignmentsForUserInput, Output == ListIAMPolicyAssignmentsForUserOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listIAMPolicyAssignmentsForUserPaginated` + /// to access the nested member `[QuickSightClientTypes.ActiveIAMPolicyAssignment]` + /// - Returns: `[QuickSightClientTypes.ActiveIAMPolicyAssignment]` + public func activeAssignments() async throws -> [QuickSightClientTypes.ActiveIAMPolicyAssignment] { + return try await self.asyncCompactMap { item in item.activeAssignments } + } +} extension QuickSightClient { /// Paginate over `[ListIngestionsOutputResponse]` results. /// @@ -464,6 +595,71 @@ extension ListTopicsInput: ClientRuntime.PaginateToken { nextToken: token )} } +extension QuickSightClient { + /// Paginate over `[ListUserGroupsOutputResponse]` 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 `[ListUserGroupsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListUserGroupsOutputResponse` + public func listUserGroupsPaginated(input: ListUserGroupsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListUserGroupsInput.nextToken, outputKey: \ListUserGroupsOutputResponse.nextToken, paginationFunction: self.listUserGroups(input:)) + } +} + +extension ListUserGroupsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListUserGroupsInput { + return ListUserGroupsInput( + awsAccountId: self.awsAccountId, + maxResults: self.maxResults, + namespace: self.namespace, + nextToken: token, + userName: self.userName + )} +} + +extension PaginatorSequence where Input == ListUserGroupsInput, Output == ListUserGroupsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listUserGroupsPaginated` + /// to access the nested member `[QuickSightClientTypes.Group]` + /// - Returns: `[QuickSightClientTypes.Group]` + public func groupList() async throws -> [QuickSightClientTypes.Group] { + return try await self.asyncCompactMap { item in item.groupList } + } +} +extension QuickSightClient { + /// Paginate over `[ListUsersOutputResponse]` 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 `[ListUsersInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListUsersOutputResponse` + public func listUsersPaginated(input: ListUsersInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListUsersInput.nextToken, outputKey: \ListUsersOutputResponse.nextToken, paginationFunction: self.listUsers(input:)) + } +} + +extension ListUsersInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListUsersInput { + return ListUsersInput( + awsAccountId: self.awsAccountId, + maxResults: self.maxResults, + namespace: self.namespace, + nextToken: token + )} +} + +extension PaginatorSequence where Input == ListUsersInput, Output == ListUsersOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listUsersPaginated` + /// to access the nested member `[QuickSightClientTypes.User]` + /// - Returns: `[QuickSightClientTypes.User]` + public func userList() async throws -> [QuickSightClientTypes.User] { + return try await self.asyncCompactMap { item in item.userList } + } +} extension QuickSightClient { /// Paginate over `[ListVPCConnectionsOutputResponse]` results. /// @@ -614,3 +810,36 @@ extension PaginatorSequence where Input == SearchDataSourcesInput, Output == Sea return try await self.asyncCompactMap { item in item.dataSourceSummaries } } } +extension QuickSightClient { + /// Paginate over `[SearchGroupsOutputResponse]` 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 `[SearchGroupsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `SearchGroupsOutputResponse` + public func searchGroupsPaginated(input: SearchGroupsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \SearchGroupsInput.nextToken, outputKey: \SearchGroupsOutputResponse.nextToken, paginationFunction: self.searchGroups(input:)) + } +} + +extension SearchGroupsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> SearchGroupsInput { + return SearchGroupsInput( + awsAccountId: self.awsAccountId, + filters: self.filters, + maxResults: self.maxResults, + namespace: self.namespace, + nextToken: token + )} +} + +extension PaginatorSequence where Input == SearchGroupsInput, Output == SearchGroupsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `searchGroupsPaginated` + /// to access the nested member `[QuickSightClientTypes.Group]` + /// - Returns: `[QuickSightClientTypes.Group]` + public func groupList() async throws -> [QuickSightClientTypes.Group] { + return try await self.asyncCompactMap { item in item.groupList } + } +} diff --git a/Sources/Services/AWSQuickSight/QuickSightClient.swift b/Sources/Services/AWSQuickSight/QuickSightClient.swift index 607faf7f54d..afcb3346ea6 100644 --- a/Sources/Services/AWSQuickSight/QuickSightClient.swift +++ b/Sources/Services/AWSQuickSight/QuickSightClient.swift @@ -1998,6 +1998,72 @@ extension QuickSightClient: QuickSightClientProtocol { return result } + /// Describes an existing snapshot job. Poll job descriptions after a job starts to know the status of the job. For information on available status codes, see JobStatus. + public func describeDashboardSnapshotJob(input: DescribeDashboardSnapshotJobInput) async throws -> DescribeDashboardSnapshotJobOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "describeDashboardSnapshotJob") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "quicksight") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "describeDashboardSnapshotJob") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Describes the result of an existing snapshot job that has finished running. A finished snapshot job will return a COMPLETED or FAILED status when you poll the job with a DescribeDashboardSnapshotJob API call. If the job has not finished running, this operation returns a message that says Dashboard Snapshot Job with id has not reached a terminal state.. + public func describeDashboardSnapshotJobResult(input: DescribeDashboardSnapshotJobResultInput) async throws -> DescribeDashboardSnapshotJobResultOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "describeDashboardSnapshotJobResult") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "quicksight") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "describeDashboardSnapshotJobResult") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Describes a dataset. This operation doesn't support datasets that include uploaded files as a source. public func describeDataSet(input: DescribeDataSetInput) async throws -> DescribeDataSetOutputResponse { @@ -4443,6 +4509,42 @@ extension QuickSightClient: QuickSightClientProtocol { return result } + /// Starts an asynchronous job that generates a dashboard snapshot. You can request up to one paginated PDF and up to five CSVs per API call. Poll job descriptions with a DescribeDashboardSnapshotJob API call. Once the job succeeds, use the DescribeDashboardSnapshotJobResult API to obtain the download URIs that the job generates. + public func startDashboardSnapshotJob(input: StartDashboardSnapshotJobInput) async throws -> StartDashboardSnapshotJobOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "startDashboardSnapshotJob") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "quicksight") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "startDashboardSnapshotJob") + 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.serviceSpecific.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: "StartDashboardSnapshotJobRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Assigns one or more tags (key-value pairs) to the specified Amazon QuickSight resource. Tags can help you organize and categorize your resources. You can also use them to scope user permissions, by granting a user permission to access or change only resources with certain tag values. You can use the TagResource operation with a resource that already has tags. If you specify a new tag key for the resource, this tag is appended to the list of tags associated with the resource. If you specify a tag key that is already associated with the resource, the new tag value that you specify replaces the previous value for that tag. You can associate as many as 50 tags with a resource. Amazon QuickSight supports tagging on data set, data source, dashboard, template, and topic. Tagging for Amazon QuickSight works in a similar way to tagging for other Amazon Web Services services, except for the following: /// /// * You can't use tags to track costs for Amazon QuickSight. This isn't possible because you can't tag the resources that Amazon QuickSight costs are based on, for example Amazon QuickSight storage capacity (SPICE), number of users, type of users, and usage metrics. diff --git a/Sources/Services/AWSQuickSight/QuickSightClientProtocol.swift b/Sources/Services/AWSQuickSight/QuickSightClientProtocol.swift index 06c5bc42e88..fb5896e4b4c 100644 --- a/Sources/Services/AWSQuickSight/QuickSightClientProtocol.swift +++ b/Sources/Services/AWSQuickSight/QuickSightClientProtocol.swift @@ -133,6 +133,10 @@ public protocol QuickSightClientProtocol { func describeDashboardDefinition(input: DescribeDashboardDefinitionInput) async throws -> DescribeDashboardDefinitionOutputResponse /// Describes read and write permissions for a dashboard. func describeDashboardPermissions(input: DescribeDashboardPermissionsInput) async throws -> DescribeDashboardPermissionsOutputResponse + /// Describes an existing snapshot job. Poll job descriptions after a job starts to know the status of the job. For information on available status codes, see JobStatus. + func describeDashboardSnapshotJob(input: DescribeDashboardSnapshotJobInput) async throws -> DescribeDashboardSnapshotJobOutputResponse + /// Describes the result of an existing snapshot job that has finished running. A finished snapshot job will return a COMPLETED or FAILED status when you poll the job with a DescribeDashboardSnapshotJob API call. If the job has not finished running, this operation returns a message that says Dashboard Snapshot Job with id has not reached a terminal state.. + func describeDashboardSnapshotJobResult(input: DescribeDashboardSnapshotJobResultInput) async throws -> DescribeDashboardSnapshotJobResultOutputResponse /// Describes a dataset. This operation doesn't support datasets that include uploaded files as a source. func describeDataSet(input: DescribeDataSetInput) async throws -> DescribeDataSetOutputResponse /// Describes the permissions on a dataset. The permissions resource is arn:aws:quicksight:region:aws-account-id:dataset/data-set-id. @@ -310,6 +314,8 @@ public protocol QuickSightClientProtocol { func startAssetBundleExportJob(input: StartAssetBundleExportJobInput) async throws -> StartAssetBundleExportJobOutputResponse /// Starts an Asset Bundle import job. An Asset Bundle import job imports specified Amazon QuickSight assets into an Amazon QuickSight account. You can also choose to import a naming prefix and specified configuration overrides. The assets that are contained in the bundle file that you provide are used to create or update a new or existing asset in your Amazon QuickSight account. Each Amazon QuickSight account can run up to 5 import jobs concurrently. The API caller must have the necessary "create", "describe", and "update" permissions in their IAM role to access each resource type that is contained in the bundle file before the resources can be imported. func startAssetBundleImportJob(input: StartAssetBundleImportJobInput) async throws -> StartAssetBundleImportJobOutputResponse + /// Starts an asynchronous job that generates a dashboard snapshot. You can request up to one paginated PDF and up to five CSVs per API call. Poll job descriptions with a DescribeDashboardSnapshotJob API call. Once the job succeeds, use the DescribeDashboardSnapshotJobResult API to obtain the download URIs that the job generates. + func startDashboardSnapshotJob(input: StartDashboardSnapshotJobInput) async throws -> StartDashboardSnapshotJobOutputResponse /// Assigns one or more tags (key-value pairs) to the specified Amazon QuickSight resource. Tags can help you organize and categorize your resources. You can also use them to scope user permissions, by granting a user permission to access or change only resources with certain tag values. You can use the TagResource operation with a resource that already has tags. If you specify a new tag key for the resource, this tag is appended to the list of tags associated with the resource. If you specify a tag key that is already associated with the resource, the new tag value that you specify replaces the previous value for that tag. You can associate as many as 50 tags with a resource. Amazon QuickSight supports tagging on data set, data source, dashboard, template, and topic. Tagging for Amazon QuickSight works in a similar way to tagging for other Amazon Web Services services, except for the following: /// /// * You can't use tags to track costs for Amazon QuickSight. This isn't possible because you can't tag the resources that Amazon QuickSight costs are based on, for example Amazon QuickSight storage capacity (SPICE), number of users, type of users, and usage metrics. diff --git a/Sources/Services/AWSQuickSight/models/Models.swift b/Sources/Services/AWSQuickSight/models/Models.swift index ff5fce7c338..7cee96eaec7 100644 --- a/Sources/Services/AWSQuickSight/models/Models.swift +++ b/Sources/Services/AWSQuickSight/models/Models.swift @@ -364,6 +364,7 @@ extension QuickSightClientTypes { extension QuickSightClientTypes.AggregationFunction: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case attributeAggregationFunction = "AttributeAggregationFunction" case categoricalAggregationFunction = "CategoricalAggregationFunction" case dateAggregationFunction = "DateAggregationFunction" case numericalAggregationFunction = "NumericalAggregationFunction" @@ -371,6 +372,9 @@ extension QuickSightClientTypes.AggregationFunction: Swift.Codable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attributeAggregationFunction = self.attributeAggregationFunction { + try encodeContainer.encode(attributeAggregationFunction, forKey: .attributeAggregationFunction) + } if let categoricalAggregationFunction = self.categoricalAggregationFunction { try encodeContainer.encode(categoricalAggregationFunction.rawValue, forKey: .categoricalAggregationFunction) } @@ -390,12 +394,16 @@ extension QuickSightClientTypes.AggregationFunction: Swift.Codable { categoricalAggregationFunction = categoricalAggregationFunctionDecoded let dateAggregationFunctionDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.DateAggregationFunction.self, forKey: .dateAggregationFunction) dateAggregationFunction = dateAggregationFunctionDecoded + let attributeAggregationFunctionDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.AttributeAggregationFunction.self, forKey: .attributeAggregationFunction) + attributeAggregationFunction = attributeAggregationFunctionDecoded } } extension QuickSightClientTypes { /// An aggregation function aggregates values from a dimension or measure. This is a union type structure. For this structure to be valid, only one of the attributes can be defined. public struct AggregationFunction: Swift.Equatable { + /// Aggregation for attributes. + public var attributeAggregationFunction: QuickSightClientTypes.AttributeAggregationFunction? /// Aggregation for categorical values. /// /// * COUNT: Aggregate by the total number of values, including duplicates. @@ -416,11 +424,13 @@ extension QuickSightClientTypes { public var numericalAggregationFunction: QuickSightClientTypes.NumericalAggregationFunction? public init( + attributeAggregationFunction: QuickSightClientTypes.AttributeAggregationFunction? = nil, categoricalAggregationFunction: QuickSightClientTypes.CategoricalAggregationFunction? = nil, dateAggregationFunction: QuickSightClientTypes.DateAggregationFunction? = nil, numericalAggregationFunction: QuickSightClientTypes.NumericalAggregationFunction? = nil ) { + self.attributeAggregationFunction = attributeAggregationFunction self.categoricalAggregationFunction = categoricalAggregationFunction self.dateAggregationFunction = dateAggregationFunction self.numericalAggregationFunction = numericalAggregationFunction @@ -1582,6 +1592,53 @@ extension QuickSightClientTypes { } +extension QuickSightClientTypes.AnonymousUserSnapshotJobResult: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case fileGroups = "FileGroups" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let fileGroups = fileGroups { + var fileGroupsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .fileGroups) + for snapshotjobresultfilegroup0 in fileGroups { + try fileGroupsContainer.encode(snapshotjobresultfilegroup0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let fileGroupsContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.SnapshotJobResultFileGroup?].self, forKey: .fileGroups) + var fileGroupsDecoded0:[QuickSightClientTypes.SnapshotJobResultFileGroup]? = nil + if let fileGroupsContainer = fileGroupsContainer { + fileGroupsDecoded0 = [QuickSightClientTypes.SnapshotJobResultFileGroup]() + for structure0 in fileGroupsContainer { + if let structure0 = structure0 { + fileGroupsDecoded0?.append(structure0) + } + } + } + fileGroups = fileGroupsDecoded0 + } +} + +extension QuickSightClientTypes { + /// A structure that contains the file groups that are requested for the artifact generation in a StartDashboardSnapshotJob API call. + public struct AnonymousUserSnapshotJobResult: Swift.Equatable { + /// A list of SnapshotJobResultFileGroup objects that contain information on the files that are requested during a StartDashboardSnapshotJob API call. If the job succeeds, these objects contain the location where the snapshot artifacts are stored. If the job fails, the objects contain information about the error that caused the job to fail. + public var fileGroups: [QuickSightClientTypes.SnapshotJobResultFileGroup]? + + public init( + fileGroups: [QuickSightClientTypes.SnapshotJobResultFileGroup]? = nil + ) + { + self.fileGroups = fileGroups + } + } + +} + extension QuickSightClientTypes.ArcAxisConfiguration: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case range = "Range" @@ -4082,6 +4139,53 @@ extension QuickSightClientTypes { } +extension QuickSightClientTypes.AttributeAggregationFunction: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case simpleAttributeAggregation = "SimpleAttributeAggregation" + case valueForMultipleValues = "ValueForMultipleValues" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let simpleAttributeAggregation = self.simpleAttributeAggregation { + try encodeContainer.encode(simpleAttributeAggregation.rawValue, forKey: .simpleAttributeAggregation) + } + if let valueForMultipleValues = self.valueForMultipleValues { + try encodeContainer.encode(valueForMultipleValues, forKey: .valueForMultipleValues) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let simpleAttributeAggregationDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SimpleAttributeAggregationFunction.self, forKey: .simpleAttributeAggregation) + simpleAttributeAggregation = simpleAttributeAggregationDecoded + let valueForMultipleValuesDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .valueForMultipleValues) + valueForMultipleValues = valueForMultipleValuesDecoded + } +} + +extension QuickSightClientTypes { + /// Aggregation for attributes. + public struct AttributeAggregationFunction: Swift.Equatable { + /// The built-in aggregation functions for attributes. + /// + /// * UNIQUE_VALUE: Returns the unique value for a field, aggregated by the dimension fields. + public var simpleAttributeAggregation: QuickSightClientTypes.SimpleAttributeAggregationFunction? + /// Used by the UNIQUE_VALUE aggregation function. If there are multiple values for the field used by the aggregation, the value for this property will be returned instead. Defaults to '*'. + public var valueForMultipleValues: Swift.String? + + public init( + simpleAttributeAggregation: QuickSightClientTypes.SimpleAttributeAggregationFunction? = nil, + valueForMultipleValues: Swift.String? = nil + ) + { + self.simpleAttributeAggregation = simpleAttributeAggregation + self.valueForMultipleValues = valueForMultipleValues + } + } + +} + extension QuickSightClientTypes.AuroraParameters: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case database = "Database" @@ -20853,6 +20957,7 @@ extension QuickSightClientTypes { extension QuickSightClientTypes.DateTimePickerControlDisplayOptions: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case dateTimeFormat = "DateTimeFormat" + case infoIconLabelOptions = "InfoIconLabelOptions" case titleOptions = "TitleOptions" } @@ -20861,6 +20966,9 @@ extension QuickSightClientTypes.DateTimePickerControlDisplayOptions: Swift.Codab if let dateTimeFormat = self.dateTimeFormat { try encodeContainer.encode(dateTimeFormat, forKey: .dateTimeFormat) } + if let infoIconLabelOptions = self.infoIconLabelOptions { + try encodeContainer.encode(infoIconLabelOptions, forKey: .infoIconLabelOptions) + } if let titleOptions = self.titleOptions { try encodeContainer.encode(titleOptions, forKey: .titleOptions) } @@ -20872,6 +20980,8 @@ extension QuickSightClientTypes.DateTimePickerControlDisplayOptions: Swift.Codab titleOptions = titleOptionsDecoded let dateTimeFormatDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dateTimeFormat) dateTimeFormat = dateTimeFormatDecoded + let infoIconLabelOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SheetControlInfoIconLabelOptions.self, forKey: .infoIconLabelOptions) + infoIconLabelOptions = infoIconLabelOptionsDecoded } } @@ -20880,15 +20990,19 @@ extension QuickSightClientTypes { public struct DateTimePickerControlDisplayOptions: Swift.Equatable { /// Customize how dates are formatted in controls. public var dateTimeFormat: Swift.String? + /// The configuration of info icon label options. + public var infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? /// The options to configure the title visibility, name, and font size. public var titleOptions: QuickSightClientTypes.LabelOptions? public init( dateTimeFormat: Swift.String? = nil, + infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? = nil, titleOptions: QuickSightClientTypes.LabelOptions? = nil ) { self.dateTimeFormat = dateTimeFormat + self.infoIconLabelOptions = infoIconLabelOptions self.titleOptions = titleOptions } } @@ -21795,6 +21909,8 @@ public enum DeleteAccountCustomizationOutputError: ClientRuntime.HttpResponseErr case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalFailureException": return try await InternalFailureException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InvalidParameterValueException": return try await InvalidParameterValueException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "LimitExceededException": return try await LimitExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionNotMetException": return try await PreconditionNotMetException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceUnavailableException": return try await ResourceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -26453,6 +26569,389 @@ extension DescribeDashboardPermissionsOutputResponseBody: Swift.Decodable { } } +extension DescribeDashboardSnapshotJobInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let awsAccountId = awsAccountId else { + return nil + } + guard let dashboardId = dashboardId else { + return nil + } + guard let snapshotJobId = snapshotJobId else { + return nil + } + return "/accounts/\(awsAccountId.urlPercentEncoding())/dashboards/\(dashboardId.urlPercentEncoding())/snapshot-jobs/\(snapshotJobId.urlPercentEncoding())" + } +} + +public struct DescribeDashboardSnapshotJobInput: Swift.Equatable { + /// The ID of the Amazon Web Services account that the dashboard snapshot job is executed in. + /// This member is required. + public var awsAccountId: Swift.String? + /// The ID of the dashboard that you have started a snapshot job for. + /// This member is required. + public var dashboardId: Swift.String? + /// The ID of the job to be described. The job ID is set when you start a new job with a StartDashboardSnapshotJob API call. + /// This member is required. + public var snapshotJobId: Swift.String? + + public init( + awsAccountId: Swift.String? = nil, + dashboardId: Swift.String? = nil, + snapshotJobId: Swift.String? = nil + ) + { + self.awsAccountId = awsAccountId + self.dashboardId = dashboardId + self.snapshotJobId = snapshotJobId + } +} + +struct DescribeDashboardSnapshotJobInputBody: Swift.Equatable { +} + +extension DescribeDashboardSnapshotJobInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DescribeDashboardSnapshotJobOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalFailureException": return try await InternalFailureException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "UnsupportedUserEditionException": return try await UnsupportedUserEditionException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DescribeDashboardSnapshotJobOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeDashboardSnapshotJobOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.arn = output.arn + self.awsAccountId = output.awsAccountId + self.createdTime = output.createdTime + self.dashboardId = output.dashboardId + self.jobStatus = output.jobStatus + self.lastUpdatedTime = output.lastUpdatedTime + self.requestId = output.requestId + self.snapshotConfiguration = output.snapshotConfiguration + self.snapshotJobId = output.snapshotJobId + self.status = output.status + self.userConfiguration = output.userConfiguration + } else { + self.arn = nil + self.awsAccountId = nil + self.createdTime = nil + self.dashboardId = nil + self.jobStatus = nil + self.lastUpdatedTime = nil + self.requestId = nil + self.snapshotConfiguration = nil + self.snapshotJobId = nil + self.status = 0 + self.userConfiguration = nil + } + } +} + +public struct DescribeDashboardSnapshotJobOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) for the snapshot job. The job ARN is generated when you start a new job with a StartDashboardSnapshotJob API call. + public var arn: Swift.String? + /// The ID of the Amazon Web Services account that the dashboard snapshot job is executed in. + public var awsAccountId: Swift.String? + /// The time that the snapshot job was created. + public var createdTime: ClientRuntime.Date? + /// The ID of the dashboard that you have started a snapshot job for. + public var dashboardId: Swift.String? + /// Indicates the status of a job. The status updates as the job executes. This shows one of the following values. + /// + /// * COMPLETED - The job was completed successfully. + /// + /// * FAILED - The job failed to execute. + /// + /// * QUEUED - The job is queued and hasn't started yet. + /// + /// * RUNNING - The job is still running. + public var jobStatus: QuickSightClientTypes.SnapshotJobStatus? + /// The time that the snapshot job status was last updated. + public var lastUpdatedTime: ClientRuntime.Date? + /// The Amazon Web Services request ID for this operation. + public var requestId: Swift.String? + /// The snapshot configuration of the job. This information is provided when you make a StartDashboardSnapshotJob API call. + public var snapshotConfiguration: QuickSightClientTypes.SnapshotConfiguration? + /// The ID of the job to be described. The job ID is set when you start a new job with a StartDashboardSnapshotJob API call. + public var snapshotJobId: Swift.String? + /// The HTTP status of the request + public var status: Swift.Int + /// The user configuration for the snapshot job. This information is provided when you make a StartDashboardSnapshotJob API call. + public var userConfiguration: QuickSightClientTypes.SnapshotUserConfigurationRedacted? + + public init( + arn: Swift.String? = nil, + awsAccountId: Swift.String? = nil, + createdTime: ClientRuntime.Date? = nil, + dashboardId: Swift.String? = nil, + jobStatus: QuickSightClientTypes.SnapshotJobStatus? = nil, + lastUpdatedTime: ClientRuntime.Date? = nil, + requestId: Swift.String? = nil, + snapshotConfiguration: QuickSightClientTypes.SnapshotConfiguration? = nil, + snapshotJobId: Swift.String? = nil, + status: Swift.Int = 0, + userConfiguration: QuickSightClientTypes.SnapshotUserConfigurationRedacted? = nil + ) + { + self.arn = arn + self.awsAccountId = awsAccountId + self.createdTime = createdTime + self.dashboardId = dashboardId + self.jobStatus = jobStatus + self.lastUpdatedTime = lastUpdatedTime + self.requestId = requestId + self.snapshotConfiguration = snapshotConfiguration + self.snapshotJobId = snapshotJobId + self.status = status + self.userConfiguration = userConfiguration + } +} + +struct DescribeDashboardSnapshotJobOutputResponseBody: Swift.Equatable { + let awsAccountId: Swift.String? + let dashboardId: Swift.String? + let snapshotJobId: Swift.String? + let userConfiguration: QuickSightClientTypes.SnapshotUserConfigurationRedacted? + let snapshotConfiguration: QuickSightClientTypes.SnapshotConfiguration? + let arn: Swift.String? + let jobStatus: QuickSightClientTypes.SnapshotJobStatus? + let createdTime: ClientRuntime.Date? + let lastUpdatedTime: ClientRuntime.Date? + let requestId: Swift.String? + let status: Swift.Int +} + +extension DescribeDashboardSnapshotJobOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case arn = "Arn" + case awsAccountId = "AwsAccountId" + case createdTime = "CreatedTime" + case dashboardId = "DashboardId" + case jobStatus = "JobStatus" + case lastUpdatedTime = "LastUpdatedTime" + case requestId = "RequestId" + case snapshotConfiguration = "SnapshotConfiguration" + case snapshotJobId = "SnapshotJobId" + case status = "Status" + case userConfiguration = "UserConfiguration" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let awsAccountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .awsAccountId) + awsAccountId = awsAccountIdDecoded + let dashboardIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dashboardId) + dashboardId = dashboardIdDecoded + let snapshotJobIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .snapshotJobId) + snapshotJobId = snapshotJobIdDecoded + let userConfigurationDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotUserConfigurationRedacted.self, forKey: .userConfiguration) + userConfiguration = userConfigurationDecoded + let snapshotConfigurationDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotConfiguration.self, forKey: .snapshotConfiguration) + snapshotConfiguration = snapshotConfigurationDecoded + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let jobStatusDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotJobStatus.self, forKey: .jobStatus) + jobStatus = jobStatusDecoded + let createdTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdTime) + createdTime = createdTimeDecoded + let lastUpdatedTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedTime) + lastUpdatedTime = lastUpdatedTimeDecoded + let requestIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .requestId) + requestId = requestIdDecoded + let statusDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .status) ?? 0 + status = statusDecoded + } +} + +extension DescribeDashboardSnapshotJobResultInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let awsAccountId = awsAccountId else { + return nil + } + guard let dashboardId = dashboardId else { + return nil + } + guard let snapshotJobId = snapshotJobId else { + return nil + } + return "/accounts/\(awsAccountId.urlPercentEncoding())/dashboards/\(dashboardId.urlPercentEncoding())/snapshot-jobs/\(snapshotJobId.urlPercentEncoding())/result" + } +} + +public struct DescribeDashboardSnapshotJobResultInput: Swift.Equatable { + /// The ID of the Amazon Web Services account that the dashboard snapshot job is executed in. + /// This member is required. + public var awsAccountId: Swift.String? + /// The ID of the dashboard that you have started a snapshot job for. + /// This member is required. + public var dashboardId: Swift.String? + /// The ID of the job to be described. The job ID is set when you start a new job with a StartDashboardSnapshotJob API call. + /// This member is required. + public var snapshotJobId: Swift.String? + + public init( + awsAccountId: Swift.String? = nil, + dashboardId: Swift.String? = nil, + snapshotJobId: Swift.String? = nil + ) + { + self.awsAccountId = awsAccountId + self.dashboardId = dashboardId + self.snapshotJobId = snapshotJobId + } +} + +struct DescribeDashboardSnapshotJobResultInputBody: Swift.Equatable { +} + +extension DescribeDashboardSnapshotJobResultInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum DescribeDashboardSnapshotJobResultOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalFailureException": return try await InternalFailureException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidParameterValueException": return try await InvalidParameterValueException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "PreconditionNotMetException": return try await PreconditionNotMetException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "UnsupportedUserEditionException": return try await UnsupportedUserEditionException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DescribeDashboardSnapshotJobResultOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeDashboardSnapshotJobResultOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.arn = output.arn + self.createdTime = output.createdTime + self.errorInfo = output.errorInfo + self.jobStatus = output.jobStatus + self.lastUpdatedTime = output.lastUpdatedTime + self.requestId = output.requestId + self.result = output.result + } else { + self.arn = nil + self.createdTime = nil + self.errorInfo = nil + self.jobStatus = nil + self.lastUpdatedTime = nil + self.requestId = nil + self.result = nil + } + self.status = httpResponse.statusCode.rawValue + } +} + +public struct DescribeDashboardSnapshotJobResultOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) for the snapshot job. The job ARN is generated when you start a new job with a StartDashboardSnapshotJob API call. + public var arn: Swift.String? + /// The time that a snapshot job was created. + public var createdTime: ClientRuntime.Date? + /// Displays information for the error that caused a job to fail. + public var errorInfo: QuickSightClientTypes.SnapshotJobErrorInfo? + /// Indicates the status of a job after it has reached a terminal state. A finished snapshot job will retuen a COMPLETED or FAILED status. + public var jobStatus: QuickSightClientTypes.SnapshotJobStatus? + /// The time that a snapshot job status was last updated. + public var lastUpdatedTime: ClientRuntime.Date? + /// The Amazon Web Services request ID for this operation. + public var requestId: Swift.String? + /// The result of the snapshot job. Jobs that have successfully completed will return the S3Uri where they are located. Jobs that have failedwill return information on the error that caused the job to fail. + public var result: QuickSightClientTypes.SnapshotJobResult? + /// The HTTP status of the request + public var status: Swift.Int + + public init( + arn: Swift.String? = nil, + createdTime: ClientRuntime.Date? = nil, + errorInfo: QuickSightClientTypes.SnapshotJobErrorInfo? = nil, + jobStatus: QuickSightClientTypes.SnapshotJobStatus? = nil, + lastUpdatedTime: ClientRuntime.Date? = nil, + requestId: Swift.String? = nil, + result: QuickSightClientTypes.SnapshotJobResult? = nil, + status: Swift.Int = 0 + ) + { + self.arn = arn + self.createdTime = createdTime + self.errorInfo = errorInfo + self.jobStatus = jobStatus + self.lastUpdatedTime = lastUpdatedTime + self.requestId = requestId + self.result = result + self.status = status + } +} + +struct DescribeDashboardSnapshotJobResultOutputResponseBody: Swift.Equatable { + let arn: Swift.String? + let jobStatus: QuickSightClientTypes.SnapshotJobStatus? + let createdTime: ClientRuntime.Date? + let lastUpdatedTime: ClientRuntime.Date? + let result: QuickSightClientTypes.SnapshotJobResult? + let errorInfo: QuickSightClientTypes.SnapshotJobErrorInfo? + let requestId: Swift.String? + let status: Swift.Int +} + +extension DescribeDashboardSnapshotJobResultOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case arn = "Arn" + case createdTime = "CreatedTime" + case errorInfo = "ErrorInfo" + case jobStatus = "JobStatus" + case lastUpdatedTime = "LastUpdatedTime" + case requestId = "RequestId" + case result = "Result" + case status = "Status" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let jobStatusDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotJobStatus.self, forKey: .jobStatus) + jobStatus = jobStatusDecoded + let createdTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .createdTime) + createdTime = createdTimeDecoded + let lastUpdatedTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdatedTime) + lastUpdatedTime = lastUpdatedTimeDecoded + let resultDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotJobResult.self, forKey: .result) + result = resultDecoded + let errorInfoDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotJobErrorInfo.self, forKey: .errorInfo) + errorInfo = errorInfoDecoded + let requestIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .requestId) + requestId = requestIdDecoded + let statusDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .status) ?? 0 + status = statusDecoded + } +} + extension DescribeDataSetInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { guard let awsAccountId = awsAccountId else { @@ -30696,12 +31195,16 @@ extension QuickSightClientTypes { extension QuickSightClientTypes.DropDownControlDisplayOptions: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case infoIconLabelOptions = "InfoIconLabelOptions" case selectAllOptions = "SelectAllOptions" case titleOptions = "TitleOptions" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let infoIconLabelOptions = self.infoIconLabelOptions { + try encodeContainer.encode(infoIconLabelOptions, forKey: .infoIconLabelOptions) + } if let selectAllOptions = self.selectAllOptions { try encodeContainer.encode(selectAllOptions, forKey: .selectAllOptions) } @@ -30716,22 +31219,28 @@ extension QuickSightClientTypes.DropDownControlDisplayOptions: Swift.Codable { selectAllOptions = selectAllOptionsDecoded let titleOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.LabelOptions.self, forKey: .titleOptions) titleOptions = titleOptionsDecoded + let infoIconLabelOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SheetControlInfoIconLabelOptions.self, forKey: .infoIconLabelOptions) + infoIconLabelOptions = infoIconLabelOptionsDecoded } } extension QuickSightClientTypes { /// The display options of a control. public struct DropDownControlDisplayOptions: Swift.Equatable { + /// The configuration of info icon label options. + public var infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? /// The configuration of the Select all options in a dropdown control. public var selectAllOptions: QuickSightClientTypes.ListControlSelectAllOptions? /// The options to configure the title visibility, name, and font size. public var titleOptions: QuickSightClientTypes.LabelOptions? public init( + infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? = nil, selectAllOptions: QuickSightClientTypes.ListControlSelectAllOptions? = nil, titleOptions: QuickSightClientTypes.LabelOptions? = nil ) { + self.infoIconLabelOptions = infoIconLabelOptions self.selectAllOptions = selectAllOptions self.titleOptions = titleOptions } @@ -43809,6 +44318,7 @@ extension ListAssetBundleImportJobsOutputResponseBody: Swift.Decodable { extension QuickSightClientTypes.ListControlDisplayOptions: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case infoIconLabelOptions = "InfoIconLabelOptions" case searchOptions = "SearchOptions" case selectAllOptions = "SelectAllOptions" case titleOptions = "TitleOptions" @@ -43816,6 +44326,9 @@ extension QuickSightClientTypes.ListControlDisplayOptions: Swift.Codable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let infoIconLabelOptions = self.infoIconLabelOptions { + try encodeContainer.encode(infoIconLabelOptions, forKey: .infoIconLabelOptions) + } if let searchOptions = self.searchOptions { try encodeContainer.encode(searchOptions, forKey: .searchOptions) } @@ -43835,12 +44348,16 @@ extension QuickSightClientTypes.ListControlDisplayOptions: Swift.Codable { selectAllOptions = selectAllOptionsDecoded let titleOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.LabelOptions.self, forKey: .titleOptions) titleOptions = titleOptionsDecoded + let infoIconLabelOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SheetControlInfoIconLabelOptions.self, forKey: .infoIconLabelOptions) + infoIconLabelOptions = infoIconLabelOptionsDecoded } } extension QuickSightClientTypes { /// The display options of a control. public struct ListControlDisplayOptions: Swift.Equatable { + /// The configuration of info icon label options. + public var infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? /// The configuration of the search options in a list control. public var searchOptions: QuickSightClientTypes.ListControlSearchOptions? /// The configuration of the Select all options in a list control. @@ -43849,11 +44366,13 @@ extension QuickSightClientTypes { public var titleOptions: QuickSightClientTypes.LabelOptions? public init( + infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? = nil, searchOptions: QuickSightClientTypes.ListControlSearchOptions? = nil, selectAllOptions: QuickSightClientTypes.ListControlSelectAllOptions? = nil, titleOptions: QuickSightClientTypes.LabelOptions? = nil ) { + self.infoIconLabelOptions = infoIconLabelOptions self.searchOptions = searchOptions self.selectAllOptions = selectAllOptions self.titleOptions = titleOptions @@ -57515,6 +58034,7 @@ extension QuickSightClientTypes { extension QuickSightClientTypes.RelativeDateTimeControlDisplayOptions: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case dateTimeFormat = "DateTimeFormat" + case infoIconLabelOptions = "InfoIconLabelOptions" case titleOptions = "TitleOptions" } @@ -57523,6 +58043,9 @@ extension QuickSightClientTypes.RelativeDateTimeControlDisplayOptions: Swift.Cod if let dateTimeFormat = self.dateTimeFormat { try encodeContainer.encode(dateTimeFormat, forKey: .dateTimeFormat) } + if let infoIconLabelOptions = self.infoIconLabelOptions { + try encodeContainer.encode(infoIconLabelOptions, forKey: .infoIconLabelOptions) + } if let titleOptions = self.titleOptions { try encodeContainer.encode(titleOptions, forKey: .titleOptions) } @@ -57534,6 +58057,8 @@ extension QuickSightClientTypes.RelativeDateTimeControlDisplayOptions: Swift.Cod titleOptions = titleOptionsDecoded let dateTimeFormatDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dateTimeFormat) dateTimeFormat = dateTimeFormatDecoded + let infoIconLabelOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SheetControlInfoIconLabelOptions.self, forKey: .infoIconLabelOptions) + infoIconLabelOptions = infoIconLabelOptionsDecoded } } @@ -57542,15 +58067,19 @@ extension QuickSightClientTypes { public struct RelativeDateTimeControlDisplayOptions: Swift.Equatable { /// Customize how dates are formatted in controls. public var dateTimeFormat: Swift.String? + /// The configuration of info icon label options. + public var infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? /// The options to configure the title visibility, name, and font size. public var titleOptions: QuickSightClientTypes.LabelOptions? public init( dateTimeFormat: Swift.String? = nil, + infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? = nil, titleOptions: QuickSightClientTypes.LabelOptions? = nil ) { self.dateTimeFormat = dateTimeFormat + self.infoIconLabelOptions = infoIconLabelOptions self.titleOptions = titleOptions } } @@ -58794,6 +59323,64 @@ extension QuickSightClientTypes { } +extension QuickSightClientTypes.S3BucketConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bucketName = "BucketName" + case bucketPrefix = "BucketPrefix" + case bucketRegion = "BucketRegion" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let bucketName = self.bucketName { + try encodeContainer.encode(bucketName, forKey: .bucketName) + } + if let bucketPrefix = self.bucketPrefix { + try encodeContainer.encode(bucketPrefix, forKey: .bucketPrefix) + } + if let bucketRegion = self.bucketRegion { + try encodeContainer.encode(bucketRegion, forKey: .bucketRegion) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bucketNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bucketName) + bucketName = bucketNameDecoded + let bucketPrefixDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bucketPrefix) + bucketPrefix = bucketPrefixDecoded + let bucketRegionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .bucketRegion) + bucketRegion = bucketRegionDecoded + } +} + +extension QuickSightClientTypes { + /// An optional structure that contains the Amazon S3 bucket configuration that the generated snapshots are stored in. If you don't provide this information, generated snapshots are stored in the default Amazon QuickSight bucket. + public struct S3BucketConfiguration: Swift.Equatable { + /// The name of an existing Amazon S3 bucket where the generated snapshot artifacts are sent. + /// This member is required. + public var bucketName: Swift.String? + /// The prefix of the Amazon S3 bucket that the generated snapshots are stored in. + /// This member is required. + public var bucketPrefix: Swift.String? + /// The region that the Amazon S3 bucket is located in. The bucket must be located in the same region that the StartDashboardSnapshotJob API call is made. + /// This member is required. + public var bucketRegion: Swift.String? + + public init( + bucketName: Swift.String? = nil, + bucketPrefix: Swift.String? = nil, + bucketRegion: Swift.String? = nil + ) + { + self.bucketName = bucketName + self.bucketPrefix = bucketPrefix + self.bucketRegion = bucketRegion + } + } + +} + extension QuickSightClientTypes.S3Parameters: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case manifestFileLocation = "ManifestFileLocation" @@ -62210,6 +62797,51 @@ extension QuickSightClientTypes { } } +extension QuickSightClientTypes.SheetControlInfoIconLabelOptions: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case infoIconText = "InfoIconText" + case visibility = "Visibility" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let infoIconText = self.infoIconText { + try encodeContainer.encode(infoIconText, forKey: .infoIconText) + } + if let visibility = self.visibility { + try encodeContainer.encode(visibility.rawValue, forKey: .visibility) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let visibilityDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.Visibility.self, forKey: .visibility) + visibility = visibilityDecoded + let infoIconTextDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .infoIconText) + infoIconText = infoIconTextDecoded + } +} + +extension QuickSightClientTypes { + /// A control to display info icons for filters and parameters. + public struct SheetControlInfoIconLabelOptions: Swift.Equatable { + /// The text content of info icon. + public var infoIconText: Swift.String? + /// The visibility configuration of info icon label options. + public var visibility: QuickSightClientTypes.Visibility? + + public init( + infoIconText: Swift.String? = nil, + visibility: QuickSightClientTypes.Visibility? = nil + ) + { + self.infoIconText = infoIconText + self.visibility = visibility + } + } + +} + extension QuickSightClientTypes.SheetControlLayout: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case configuration = "Configuration" @@ -62992,6 +63624,35 @@ extension QuickSightClientTypes { } +extension QuickSightClientTypes { + public enum SimpleAttributeAggregationFunction: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case uniqueValue + case sdkUnknown(Swift.String) + + public static var allCases: [SimpleAttributeAggregationFunction] { + return [ + .uniqueValue, + .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 .uniqueValue: return "UNIQUE_VALUE" + 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 = SimpleAttributeAggregationFunction(rawValue: rawValue) ?? SimpleAttributeAggregationFunction.sdkUnknown(rawValue) + } + } +} + extension QuickSightClientTypes.SimpleClusterMarker: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case color = "Color" @@ -63088,11 +63749,15 @@ extension QuickSightClientTypes { extension QuickSightClientTypes.SliderControlDisplayOptions: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case infoIconLabelOptions = "InfoIconLabelOptions" case titleOptions = "TitleOptions" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let infoIconLabelOptions = self.infoIconLabelOptions { + try encodeContainer.encode(infoIconLabelOptions, forKey: .infoIconLabelOptions) + } if let titleOptions = self.titleOptions { try encodeContainer.encode(titleOptions, forKey: .titleOptions) } @@ -63102,19 +63767,25 @@ extension QuickSightClientTypes.SliderControlDisplayOptions: Swift.Codable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let titleOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.LabelOptions.self, forKey: .titleOptions) titleOptions = titleOptionsDecoded + let infoIconLabelOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SheetControlInfoIconLabelOptions.self, forKey: .infoIconLabelOptions) + infoIconLabelOptions = infoIconLabelOptionsDecoded } } extension QuickSightClientTypes { /// The display options of a control. public struct SliderControlDisplayOptions: Swift.Equatable { + /// The configuration of info icon label options. + public var infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? /// The options to configure the title visibility, name, and font size. public var titleOptions: QuickSightClientTypes.LabelOptions? public init( + infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? = nil, titleOptions: QuickSightClientTypes.LabelOptions? = nil ) { + self.infoIconLabelOptions = infoIconLabelOptions self.titleOptions = titleOptions } } @@ -63305,6 +63976,903 @@ extension QuickSightClientTypes { } +extension QuickSightClientTypes.SnapshotAnonymousUser: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case rowLevelPermissionTags = "RowLevelPermissionTags" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let rowLevelPermissionTags = rowLevelPermissionTags { + var rowLevelPermissionTagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .rowLevelPermissionTags) + for sessiontag0 in rowLevelPermissionTags { + try rowLevelPermissionTagsContainer.encode(sessiontag0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let rowLevelPermissionTagsContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.SessionTag?].self, forKey: .rowLevelPermissionTags) + var rowLevelPermissionTagsDecoded0:[QuickSightClientTypes.SessionTag]? = nil + if let rowLevelPermissionTagsContainer = rowLevelPermissionTagsContainer { + rowLevelPermissionTagsDecoded0 = [QuickSightClientTypes.SessionTag]() + for structure0 in rowLevelPermissionTagsContainer { + if let structure0 = structure0 { + rowLevelPermissionTagsDecoded0?.append(structure0) + } + } + } + rowLevelPermissionTags = rowLevelPermissionTagsDecoded0 + } +} + +extension QuickSightClientTypes { + /// A structure that contains information on the anonymous user configuration. + public struct SnapshotAnonymousUser: Swift.Equatable { + /// The tags to be used for row-level security (RLS). Make sure that the relevant datasets have RLS tags configured before you start a snapshot export job. You can configure the RLS tags of a dataset with a DataSet$RowLevelPermissionTagConfiguration API call. These are not the tags that are used for Amazon Web Services resource tagging. For more information on row level security in Amazon QuickSight, see [Using Row-Level Security (RLS) with Tags](https://docs.aws.amazon.com/quicksight/latest/user/quicksight-dev-rls-tags.html)in the Amazon QuickSight User Guide. + public var rowLevelPermissionTags: [QuickSightClientTypes.SessionTag]? + + public init( + rowLevelPermissionTags: [QuickSightClientTypes.SessionTag]? = nil + ) + { + self.rowLevelPermissionTags = rowLevelPermissionTags + } + } + +} + +extension QuickSightClientTypes.SnapshotAnonymousUserRedacted: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case rowLevelPermissionTagKeys = "RowLevelPermissionTagKeys" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let rowLevelPermissionTagKeys = rowLevelPermissionTagKeys { + var rowLevelPermissionTagKeysContainer = encodeContainer.nestedUnkeyedContainer(forKey: .rowLevelPermissionTagKeys) + for sessiontagkey0 in rowLevelPermissionTagKeys { + try rowLevelPermissionTagKeysContainer.encode(sessiontagkey0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let rowLevelPermissionTagKeysContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .rowLevelPermissionTagKeys) + var rowLevelPermissionTagKeysDecoded0:[Swift.String]? = nil + if let rowLevelPermissionTagKeysContainer = rowLevelPermissionTagKeysContainer { + rowLevelPermissionTagKeysDecoded0 = [Swift.String]() + for string0 in rowLevelPermissionTagKeysContainer { + if let string0 = string0 { + rowLevelPermissionTagKeysDecoded0?.append(string0) + } + } + } + rowLevelPermissionTagKeys = rowLevelPermissionTagKeysDecoded0 + } +} + +extension QuickSightClientTypes { + /// Use this structure to redact sensitive information that you provide about an anonymous user from the snapshot. + public struct SnapshotAnonymousUserRedacted: Swift.Equatable { + /// The tag keys for the RowLevelPermissionTags. + public var rowLevelPermissionTagKeys: [Swift.String]? + + public init( + rowLevelPermissionTagKeys: [Swift.String]? = nil + ) + { + self.rowLevelPermissionTagKeys = rowLevelPermissionTagKeys + } + } + +} + +extension QuickSightClientTypes.SnapshotConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case destinationConfiguration = "DestinationConfiguration" + case fileGroups = "FileGroups" + case parameters = "Parameters" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let destinationConfiguration = self.destinationConfiguration { + try encodeContainer.encode(destinationConfiguration, forKey: .destinationConfiguration) + } + if let fileGroups = fileGroups { + var fileGroupsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .fileGroups) + for snapshotfilegroup0 in fileGroups { + try fileGroupsContainer.encode(snapshotfilegroup0) + } + } + if let parameters = self.parameters { + try encodeContainer.encode(parameters, forKey: .parameters) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let fileGroupsContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.SnapshotFileGroup?].self, forKey: .fileGroups) + var fileGroupsDecoded0:[QuickSightClientTypes.SnapshotFileGroup]? = nil + if let fileGroupsContainer = fileGroupsContainer { + fileGroupsDecoded0 = [QuickSightClientTypes.SnapshotFileGroup]() + for structure0 in fileGroupsContainer { + if let structure0 = structure0 { + fileGroupsDecoded0?.append(structure0) + } + } + } + fileGroups = fileGroupsDecoded0 + let destinationConfigurationDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotDestinationConfiguration.self, forKey: .destinationConfiguration) + destinationConfiguration = destinationConfigurationDecoded + let parametersDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.Parameters.self, forKey: .parameters) + parameters = parametersDecoded + } +} + +extension QuickSightClientTypes { + /// Describes the configuration of the dashboard snapshot. + public struct SnapshotConfiguration: Swift.Equatable { + /// A structure that contains information on the Amazon S3 bucket that the generated snapshot is stored in. + public var destinationConfiguration: QuickSightClientTypes.SnapshotDestinationConfiguration? + /// A list of SnapshotJobResultFileGroup objects that contain information about the snapshot that is generated. This list can hold a maximum of 6 FileGroup configurations. + /// This member is required. + public var fileGroups: [QuickSightClientTypes.SnapshotFileGroup]? + /// A list of Amazon QuickSight parameters and the list's override values. + public var parameters: QuickSightClientTypes.Parameters? + + public init( + destinationConfiguration: QuickSightClientTypes.SnapshotDestinationConfiguration? = nil, + fileGroups: [QuickSightClientTypes.SnapshotFileGroup]? = nil, + parameters: QuickSightClientTypes.Parameters? = nil + ) + { + self.destinationConfiguration = destinationConfiguration + self.fileGroups = fileGroups + self.parameters = parameters + } + } + +} + +extension QuickSightClientTypes.SnapshotDestinationConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case s3Destinations = "S3Destinations" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let s3Destinations = s3Destinations { + var s3DestinationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .s3Destinations) + for snapshots3destinationconfiguration0 in s3Destinations { + try s3DestinationsContainer.encode(snapshots3destinationconfiguration0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let s3DestinationsContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.SnapshotS3DestinationConfiguration?].self, forKey: .s3Destinations) + var s3DestinationsDecoded0:[QuickSightClientTypes.SnapshotS3DestinationConfiguration]? = nil + if let s3DestinationsContainer = s3DestinationsContainer { + s3DestinationsDecoded0 = [QuickSightClientTypes.SnapshotS3DestinationConfiguration]() + for structure0 in s3DestinationsContainer { + if let structure0 = structure0 { + s3DestinationsDecoded0?.append(structure0) + } + } + } + s3Destinations = s3DestinationsDecoded0 + } +} + +extension QuickSightClientTypes { + /// A structure that contains information on the Amazon S3 destinations of the generated snapshot. + public struct SnapshotDestinationConfiguration: Swift.Equatable { + /// A list of SnapshotS3DestinationConfiguration objects that contain Amazon S3 destination configurations. This structure can hold a maximum of 1 S3DestinationConfiguration. + public var s3Destinations: [QuickSightClientTypes.SnapshotS3DestinationConfiguration]? + + public init( + s3Destinations: [QuickSightClientTypes.SnapshotS3DestinationConfiguration]? = nil + ) + { + self.s3Destinations = s3Destinations + } + } + +} + +extension QuickSightClientTypes.SnapshotFile: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case formatType = "FormatType" + case sheetSelections = "SheetSelections" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let formatType = self.formatType { + try encodeContainer.encode(formatType.rawValue, forKey: .formatType) + } + if let sheetSelections = sheetSelections { + var sheetSelectionsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sheetSelections) + for snapshotfilesheetselection0 in sheetSelections { + try sheetSelectionsContainer.encode(snapshotfilesheetselection0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sheetSelectionsContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.SnapshotFileSheetSelection?].self, forKey: .sheetSelections) + var sheetSelectionsDecoded0:[QuickSightClientTypes.SnapshotFileSheetSelection]? = nil + if let sheetSelectionsContainer = sheetSelectionsContainer { + sheetSelectionsDecoded0 = [QuickSightClientTypes.SnapshotFileSheetSelection]() + for structure0 in sheetSelectionsContainer { + if let structure0 = structure0 { + sheetSelectionsDecoded0?.append(structure0) + } + } + } + sheetSelections = sheetSelectionsDecoded0 + let formatTypeDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotFileFormatType.self, forKey: .formatType) + formatType = formatTypeDecoded + } +} + +extension QuickSightClientTypes { + /// A structure that contains the information for the snapshot that you want to generate. This information is provided by you when you start a new snapshot job. + public struct SnapshotFile: Swift.Equatable { + /// The format of the snapshot file to be generated. You can choose between CSV and PDF. + /// This member is required. + public var formatType: QuickSightClientTypes.SnapshotFileFormatType? + /// A list of SnapshotFileSheetSelection objects that contain information on the dashboard sheet that is exported. These objects provide information about the snapshot artifacts that are generated during the job. This structure can hold a maximum of 5 CSV configurations or 1 configuration for PDF. + /// This member is required. + public var sheetSelections: [QuickSightClientTypes.SnapshotFileSheetSelection]? + + public init( + formatType: QuickSightClientTypes.SnapshotFileFormatType? = nil, + sheetSelections: [QuickSightClientTypes.SnapshotFileSheetSelection]? = nil + ) + { + self.formatType = formatType + self.sheetSelections = sheetSelections + } + } + +} + +extension QuickSightClientTypes { + public enum SnapshotFileFormatType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case csv + case pdf + case sdkUnknown(Swift.String) + + public static var allCases: [SnapshotFileFormatType] { + return [ + .csv, + .pdf, + .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 .csv: return "CSV" + case .pdf: return "PDF" + 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 = SnapshotFileFormatType(rawValue: rawValue) ?? SnapshotFileFormatType.sdkUnknown(rawValue) + } + } +} + +extension QuickSightClientTypes.SnapshotFileGroup: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case files = "Files" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let files = files { + var filesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .files) + for snapshotfile0 in files { + try filesContainer.encode(snapshotfile0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let filesContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.SnapshotFile?].self, forKey: .files) + var filesDecoded0:[QuickSightClientTypes.SnapshotFile]? = nil + if let filesContainer = filesContainer { + filesDecoded0 = [QuickSightClientTypes.SnapshotFile]() + for structure0 in filesContainer { + if let structure0 = structure0 { + filesDecoded0?.append(structure0) + } + } + } + files = filesDecoded0 + } +} + +extension QuickSightClientTypes { + /// A structure that contains the information on the snapshot files. + public struct SnapshotFileGroup: Swift.Equatable { + /// A list of SnapshotFile objects that contain the information on the snapshot files that need to be generated. This structure can hold 1 configuration at a time. + public var files: [QuickSightClientTypes.SnapshotFile]? + + public init( + files: [QuickSightClientTypes.SnapshotFile]? = nil + ) + { + self.files = files + } + } + +} + +extension QuickSightClientTypes.SnapshotFileSheetSelection: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case selectionScope = "SelectionScope" + case sheetId = "SheetId" + case visualIds = "VisualIds" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let selectionScope = self.selectionScope { + try encodeContainer.encode(selectionScope.rawValue, forKey: .selectionScope) + } + if let sheetId = self.sheetId { + try encodeContainer.encode(sheetId, forKey: .sheetId) + } + if let visualIds = visualIds { + var visualIdsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .visualIds) + for shortrestrictiveresourceid0 in visualIds { + try visualIdsContainer.encode(shortrestrictiveresourceid0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let sheetIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sheetId) + sheetId = sheetIdDecoded + let selectionScopeDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotFileSheetSelectionScope.self, forKey: .selectionScope) + selectionScope = selectionScopeDecoded + let visualIdsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .visualIds) + var visualIdsDecoded0:[Swift.String]? = nil + if let visualIdsContainer = visualIdsContainer { + visualIdsDecoded0 = [Swift.String]() + for string0 in visualIdsContainer { + if let string0 = string0 { + visualIdsDecoded0?.append(string0) + } + } + } + visualIds = visualIdsDecoded0 + } +} + +extension QuickSightClientTypes { + /// A structure that contains information that identifies the snapshot that needs to be generated. + public struct SnapshotFileSheetSelection: Swift.Equatable { + /// The selection scope of the visuals on a sheet of a dashboard that you are generating a snapthot of. You can choose one of the following options. + /// + /// * ALL_VISUALS - Selects all visuals that are on the sheet. This value is required if the snapshot is a PDF. + /// + /// * SELECTED_VISUALS - Select the visual that you want to add to the snapshot. This value is required if the snapshot is a CSV. + /// This member is required. + public var selectionScope: QuickSightClientTypes.SnapshotFileSheetSelectionScope? + /// The sheet ID of the dashboard to generate the snapshot artifact from. This value is required for CSV or PDF format types. + /// This member is required. + public var sheetId: Swift.String? + /// A structure that lists the IDs of the visuals in the selected sheet. Supported visual types are table, pivot table visuals. This value is required if you are generating a CSV. This value supports a maximum of 1 visual ID. + public var visualIds: [Swift.String]? + + public init( + selectionScope: QuickSightClientTypes.SnapshotFileSheetSelectionScope? = nil, + sheetId: Swift.String? = nil, + visualIds: [Swift.String]? = nil + ) + { + self.selectionScope = selectionScope + self.sheetId = sheetId + self.visualIds = visualIds + } + } + +} + +extension QuickSightClientTypes { + public enum SnapshotFileSheetSelectionScope: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case allVisuals + case selectedVisuals + case sdkUnknown(Swift.String) + + public static var allCases: [SnapshotFileSheetSelectionScope] { + return [ + .allVisuals, + .selectedVisuals, + .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 .allVisuals: return "ALL_VISUALS" + case .selectedVisuals: return "SELECTED_VISUALS" + 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 = SnapshotFileSheetSelectionScope(rawValue: rawValue) ?? SnapshotFileSheetSelectionScope.sdkUnknown(rawValue) + } + } +} + +extension QuickSightClientTypes.SnapshotJobErrorInfo: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case errorMessage = "ErrorMessage" + case errorType = "ErrorType" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let errorMessage = self.errorMessage { + try encodeContainer.encode(errorMessage, forKey: .errorMessage) + } + if let errorType = self.errorType { + try encodeContainer.encode(errorType, forKey: .errorType) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let errorMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorMessage) + errorMessage = errorMessageDecoded + let errorTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorType) + errorType = errorTypeDecoded + } +} + +extension QuickSightClientTypes { + /// An object that contains information on the error that caused the snapshot job to fail. + public struct SnapshotJobErrorInfo: Swift.Equatable { + /// The error message. + public var errorMessage: Swift.String? + /// The error type. + public var errorType: Swift.String? + + public init( + errorMessage: Swift.String? = nil, + errorType: Swift.String? = nil + ) + { + self.errorMessage = errorMessage + self.errorType = errorType + } + } + +} + +extension QuickSightClientTypes.SnapshotJobResult: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case anonymousUsers = "AnonymousUsers" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let anonymousUsers = anonymousUsers { + var anonymousUsersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .anonymousUsers) + for anonymoususersnapshotjobresult0 in anonymousUsers { + try anonymousUsersContainer.encode(anonymoususersnapshotjobresult0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let anonymousUsersContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.AnonymousUserSnapshotJobResult?].self, forKey: .anonymousUsers) + var anonymousUsersDecoded0:[QuickSightClientTypes.AnonymousUserSnapshotJobResult]? = nil + if let anonymousUsersContainer = anonymousUsersContainer { + anonymousUsersDecoded0 = [QuickSightClientTypes.AnonymousUserSnapshotJobResult]() + for structure0 in anonymousUsersContainer { + if let structure0 = structure0 { + anonymousUsersDecoded0?.append(structure0) + } + } + } + anonymousUsers = anonymousUsersDecoded0 + } +} + +extension QuickSightClientTypes { + /// An object that provides information on the result of a snapshot job. This object provides information about the job, the job status, and the location of the generated file. + public struct SnapshotJobResult: Swift.Equatable { + /// A list of AnonymousUserSnapshotJobResult objects that contain information on anonymous users and their user configurations. This data provided by you when you make a StartDashboardSnapshotJob API call. + public var anonymousUsers: [QuickSightClientTypes.AnonymousUserSnapshotJobResult]? + + public init( + anonymousUsers: [QuickSightClientTypes.AnonymousUserSnapshotJobResult]? = nil + ) + { + self.anonymousUsers = anonymousUsers + } + } + +} + +extension QuickSightClientTypes.SnapshotJobResultErrorInfo: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case errorMessage = "ErrorMessage" + case errorType = "ErrorType" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let errorMessage = self.errorMessage { + try encodeContainer.encode(errorMessage, forKey: .errorMessage) + } + if let errorType = self.errorType { + try encodeContainer.encode(errorType, forKey: .errorType) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let errorMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorMessage) + errorMessage = errorMessageDecoded + let errorTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorType) + errorType = errorTypeDecoded + } +} + +extension QuickSightClientTypes { + /// Information on the error that caused the snapshot job to fail. + public struct SnapshotJobResultErrorInfo: Swift.Equatable { + /// The error message. + public var errorMessage: Swift.String? + /// The error type. + public var errorType: Swift.String? + + public init( + errorMessage: Swift.String? = nil, + errorType: Swift.String? = nil + ) + { + self.errorMessage = errorMessage + self.errorType = errorType + } + } + +} + +extension QuickSightClientTypes.SnapshotJobResultFileGroup: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case files = "Files" + case s3Results = "S3Results" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let files = files { + var filesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .files) + for snapshotfile0 in files { + try filesContainer.encode(snapshotfile0) + } + } + if let s3Results = s3Results { + var s3ResultsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .s3Results) + for snapshotjobs3result0 in s3Results { + try s3ResultsContainer.encode(snapshotjobs3result0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let filesContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.SnapshotFile?].self, forKey: .files) + var filesDecoded0:[QuickSightClientTypes.SnapshotFile]? = nil + if let filesContainer = filesContainer { + filesDecoded0 = [QuickSightClientTypes.SnapshotFile]() + for structure0 in filesContainer { + if let structure0 = structure0 { + filesDecoded0?.append(structure0) + } + } + } + files = filesDecoded0 + let s3ResultsContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.SnapshotJobS3Result?].self, forKey: .s3Results) + var s3ResultsDecoded0:[QuickSightClientTypes.SnapshotJobS3Result]? = nil + if let s3ResultsContainer = s3ResultsContainer { + s3ResultsDecoded0 = [QuickSightClientTypes.SnapshotJobS3Result]() + for structure0 in s3ResultsContainer { + if let structure0 = structure0 { + s3ResultsDecoded0?.append(structure0) + } + } + } + s3Results = s3ResultsDecoded0 + } +} + +extension QuickSightClientTypes { + /// A structure that contains information on the generated snapshot file groups. + public struct SnapshotJobResultFileGroup: Swift.Equatable { + /// A list of SnapshotFile objects. + public var files: [QuickSightClientTypes.SnapshotFile]? + /// A list of SnapshotJobS3Result objects. + public var s3Results: [QuickSightClientTypes.SnapshotJobS3Result]? + + public init( + files: [QuickSightClientTypes.SnapshotFile]? = nil, + s3Results: [QuickSightClientTypes.SnapshotJobS3Result]? = nil + ) + { + self.files = files + self.s3Results = s3Results + } + } + +} + +extension QuickSightClientTypes.SnapshotJobS3Result: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case errorInfo = "ErrorInfo" + case s3DestinationConfiguration = "S3DestinationConfiguration" + case s3Uri = "S3Uri" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let errorInfo = errorInfo { + var errorInfoContainer = encodeContainer.nestedUnkeyedContainer(forKey: .errorInfo) + for snapshotjobresulterrorinfo0 in errorInfo { + try errorInfoContainer.encode(snapshotjobresulterrorinfo0) + } + } + if let s3DestinationConfiguration = self.s3DestinationConfiguration { + try encodeContainer.encode(s3DestinationConfiguration, forKey: .s3DestinationConfiguration) + } + if let s3Uri = self.s3Uri { + try encodeContainer.encode(s3Uri, forKey: .s3Uri) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let s3DestinationConfigurationDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotS3DestinationConfiguration.self, forKey: .s3DestinationConfiguration) + s3DestinationConfiguration = s3DestinationConfigurationDecoded + let s3UriDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .s3Uri) + s3Uri = s3UriDecoded + let errorInfoContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.SnapshotJobResultErrorInfo?].self, forKey: .errorInfo) + var errorInfoDecoded0:[QuickSightClientTypes.SnapshotJobResultErrorInfo]? = nil + if let errorInfoContainer = errorInfoContainer { + errorInfoDecoded0 = [QuickSightClientTypes.SnapshotJobResultErrorInfo]() + for structure0 in errorInfoContainer { + if let structure0 = structure0 { + errorInfoDecoded0?.append(structure0) + } + } + } + errorInfo = errorInfoDecoded0 + } +} + +extension QuickSightClientTypes.SnapshotJobS3Result: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "SnapshotJobS3Result(errorInfo: \(Swift.String(describing: errorInfo)), s3DestinationConfiguration: \(Swift.String(describing: s3DestinationConfiguration)), s3Uri: \"CONTENT_REDACTED\")"} +} + +extension QuickSightClientTypes { + /// The Amazon S3 result from the snapshot job. The result includes the DestinationConfiguration and the Amazon S3 Uri. If an error occured during the job, the result returns information on the error. + public struct SnapshotJobS3Result: Swift.Equatable { + /// An array of error records that describe any failures that occur while the dashboard snapshot job runs. + public var errorInfo: [QuickSightClientTypes.SnapshotJobResultErrorInfo]? + /// A list of Amazon S3 bucket configurations that are provided when you make a StartDashboardSnapshotJob API call. + public var s3DestinationConfiguration: QuickSightClientTypes.SnapshotS3DestinationConfiguration? + /// The Amazon S3 Uri. + public var s3Uri: Swift.String? + + public init( + errorInfo: [QuickSightClientTypes.SnapshotJobResultErrorInfo]? = nil, + s3DestinationConfiguration: QuickSightClientTypes.SnapshotS3DestinationConfiguration? = nil, + s3Uri: Swift.String? = nil + ) + { + self.errorInfo = errorInfo + self.s3DestinationConfiguration = s3DestinationConfiguration + self.s3Uri = s3Uri + } + } + +} + +extension QuickSightClientTypes { + public enum SnapshotJobStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case completed + case failed + case queued + case running + case sdkUnknown(Swift.String) + + public static var allCases: [SnapshotJobStatus] { + return [ + .completed, + .failed, + .queued, + .running, + .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 .completed: return "COMPLETED" + case .failed: return "FAILED" + case .queued: return "QUEUED" + case .running: return "RUNNING" + 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 = SnapshotJobStatus(rawValue: rawValue) ?? SnapshotJobStatus.sdkUnknown(rawValue) + } + } +} + +extension QuickSightClientTypes.SnapshotS3DestinationConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case bucketConfiguration = "BucketConfiguration" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let bucketConfiguration = self.bucketConfiguration { + try encodeContainer.encode(bucketConfiguration, forKey: .bucketConfiguration) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let bucketConfigurationDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.S3BucketConfiguration.self, forKey: .bucketConfiguration) + bucketConfiguration = bucketConfigurationDecoded + } +} + +extension QuickSightClientTypes { + /// A structure that describes the Amazon S3 settings to use to save the generated dashboard snapshot. + public struct SnapshotS3DestinationConfiguration: Swift.Equatable { + /// A structure that contains details about the Amazon S3 bucket that the generated dashboard snapshot is saved in. + public var bucketConfiguration: QuickSightClientTypes.S3BucketConfiguration? + + public init( + bucketConfiguration: QuickSightClientTypes.S3BucketConfiguration? = nil + ) + { + self.bucketConfiguration = bucketConfiguration + } + } + +} + +extension QuickSightClientTypes.SnapshotUserConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case anonymousUsers = "AnonymousUsers" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let anonymousUsers = anonymousUsers { + var anonymousUsersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .anonymousUsers) + for snapshotanonymoususer0 in anonymousUsers { + try anonymousUsersContainer.encode(snapshotanonymoususer0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let anonymousUsersContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.SnapshotAnonymousUser?].self, forKey: .anonymousUsers) + var anonymousUsersDecoded0:[QuickSightClientTypes.SnapshotAnonymousUser]? = nil + if let anonymousUsersContainer = anonymousUsersContainer { + anonymousUsersDecoded0 = [QuickSightClientTypes.SnapshotAnonymousUser]() + for structure0 in anonymousUsersContainer { + if let structure0 = structure0 { + anonymousUsersDecoded0?.append(structure0) + } + } + } + anonymousUsers = anonymousUsersDecoded0 + } +} + +extension QuickSightClientTypes { + /// A structure that contains information about the users that the dashboard snapshot is generated for. + public struct SnapshotUserConfiguration: Swift.Equatable { + /// An array of records that describe the anonymous users that the dashboard snapshot is generated for. + public var anonymousUsers: [QuickSightClientTypes.SnapshotAnonymousUser]? + + public init( + anonymousUsers: [QuickSightClientTypes.SnapshotAnonymousUser]? = nil + ) + { + self.anonymousUsers = anonymousUsers + } + } + +} + +extension QuickSightClientTypes.SnapshotUserConfigurationRedacted: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case anonymousUsers = "AnonymousUsers" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let anonymousUsers = anonymousUsers { + var anonymousUsersContainer = encodeContainer.nestedUnkeyedContainer(forKey: .anonymousUsers) + for snapshotanonymoususerredacted0 in anonymousUsers { + try anonymousUsersContainer.encode(snapshotanonymoususerredacted0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let anonymousUsersContainer = try containerValues.decodeIfPresent([QuickSightClientTypes.SnapshotAnonymousUserRedacted?].self, forKey: .anonymousUsers) + var anonymousUsersDecoded0:[QuickSightClientTypes.SnapshotAnonymousUserRedacted]? = nil + if let anonymousUsersContainer = anonymousUsersContainer { + anonymousUsersDecoded0 = [QuickSightClientTypes.SnapshotAnonymousUserRedacted]() + for structure0 in anonymousUsersContainer { + if let structure0 = structure0 { + anonymousUsersDecoded0?.append(structure0) + } + } + } + anonymousUsers = anonymousUsersDecoded0 + } +} + +extension QuickSightClientTypes { + /// A structure that contains information about the users that the dashboard snapshot is generated for. Sensitive user information is excluded. + public struct SnapshotUserConfigurationRedacted: Swift.Equatable { + /// An array of records that describe anonymous users that the dashboard snapshot is generated for. Sensitive user information is excluded. + public var anonymousUsers: [QuickSightClientTypes.SnapshotAnonymousUserRedacted]? + + public init( + anonymousUsers: [QuickSightClientTypes.SnapshotAnonymousUserRedacted]? = nil + ) + { + self.anonymousUsers = anonymousUsers + } + } + +} + extension QuickSightClientTypes.SnowflakeParameters: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case database = "Database" @@ -64035,6 +65603,184 @@ extension StartAssetBundleImportJobOutputResponseBody: Swift.Decodable { } } +extension StartDashboardSnapshotJobInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case snapshotConfiguration = "SnapshotConfiguration" + case snapshotJobId = "SnapshotJobId" + case userConfiguration = "UserConfiguration" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let snapshotConfiguration = self.snapshotConfiguration { + try encodeContainer.encode(snapshotConfiguration, forKey: .snapshotConfiguration) + } + if let snapshotJobId = self.snapshotJobId { + try encodeContainer.encode(snapshotJobId, forKey: .snapshotJobId) + } + if let userConfiguration = self.userConfiguration { + try encodeContainer.encode(userConfiguration, forKey: .userConfiguration) + } + } +} + +extension StartDashboardSnapshotJobInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let awsAccountId = awsAccountId else { + return nil + } + guard let dashboardId = dashboardId else { + return nil + } + return "/accounts/\(awsAccountId.urlPercentEncoding())/dashboards/\(dashboardId.urlPercentEncoding())/snapshot-jobs" + } +} + +public struct StartDashboardSnapshotJobInput: Swift.Equatable { + /// The ID of the Amazon Web Services account that the dashboard snapshot job is executed in. + /// This member is required. + public var awsAccountId: Swift.String? + /// The ID of the dashboard that you want to start a snapshot job for. + /// This member is required. + public var dashboardId: Swift.String? + /// A structure that describes the configuration of the dashboard snapshot. + /// This member is required. + public var snapshotConfiguration: QuickSightClientTypes.SnapshotConfiguration? + /// An ID for the dashboard snapshot job. This ID is unique to the dashboard while the job is running. This ID can be used to poll the status of a job with a DescribeDashboardSnapshotJob while the job runs. You can reuse this ID for another job 24 hours after the current job is completed. + /// This member is required. + public var snapshotJobId: Swift.String? + /// A structure that contains information about the anonymous users that the generated snapshot is for. This API will not return information about registered Amazon QuickSight. + /// This member is required. + public var userConfiguration: QuickSightClientTypes.SnapshotUserConfiguration? + + public init( + awsAccountId: Swift.String? = nil, + dashboardId: Swift.String? = nil, + snapshotConfiguration: QuickSightClientTypes.SnapshotConfiguration? = nil, + snapshotJobId: Swift.String? = nil, + userConfiguration: QuickSightClientTypes.SnapshotUserConfiguration? = nil + ) + { + self.awsAccountId = awsAccountId + self.dashboardId = dashboardId + self.snapshotConfiguration = snapshotConfiguration + self.snapshotJobId = snapshotJobId + self.userConfiguration = userConfiguration + } +} + +struct StartDashboardSnapshotJobInputBody: Swift.Equatable { + let snapshotJobId: Swift.String? + let userConfiguration: QuickSightClientTypes.SnapshotUserConfiguration? + let snapshotConfiguration: QuickSightClientTypes.SnapshotConfiguration? +} + +extension StartDashboardSnapshotJobInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case snapshotConfiguration = "SnapshotConfiguration" + case snapshotJobId = "SnapshotJobId" + case userConfiguration = "UserConfiguration" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let snapshotJobIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .snapshotJobId) + snapshotJobId = snapshotJobIdDecoded + let userConfigurationDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotUserConfiguration.self, forKey: .userConfiguration) + userConfiguration = userConfigurationDecoded + let snapshotConfigurationDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SnapshotConfiguration.self, forKey: .snapshotConfiguration) + snapshotConfiguration = snapshotConfigurationDecoded + } +} + +public enum StartDashboardSnapshotJobOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalFailureException": return try await InternalFailureException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidParameterValueException": return try await InvalidParameterValueException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "LimitExceededException": return try await LimitExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceExistsException": return try await ResourceExistsException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "UnsupportedPricingPlanException": return try await UnsupportedPricingPlanException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "UnsupportedUserEditionException": return try await UnsupportedUserEditionException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension StartDashboardSnapshotJobOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: StartDashboardSnapshotJobOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.arn = output.arn + self.requestId = output.requestId + self.snapshotJobId = output.snapshotJobId + } else { + self.arn = nil + self.requestId = nil + self.snapshotJobId = nil + } + self.status = httpResponse.statusCode.rawValue + } +} + +public struct StartDashboardSnapshotJobOutputResponse: Swift.Equatable { + /// The Amazon Resource Name (ARN) for the dashboard snapshot job. + public var arn: Swift.String? + /// The Amazon Web Services request ID for this operation. + public var requestId: Swift.String? + /// The ID of the job. The job ID is set when you start a new job with a StartDashboardSnapshotJob API call. + public var snapshotJobId: Swift.String? + /// The HTTP status of the request + public var status: Swift.Int + + public init( + arn: Swift.String? = nil, + requestId: Swift.String? = nil, + snapshotJobId: Swift.String? = nil, + status: Swift.Int = 0 + ) + { + self.arn = arn + self.requestId = requestId + self.snapshotJobId = snapshotJobId + self.status = status + } +} + +struct StartDashboardSnapshotJobOutputResponseBody: Swift.Equatable { + let arn: Swift.String? + let snapshotJobId: Swift.String? + let requestId: Swift.String? + let status: Swift.Int +} + +extension StartDashboardSnapshotJobOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case arn = "Arn" + case requestId = "RequestId" + case snapshotJobId = "SnapshotJobId" + case status = "Status" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let snapshotJobIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .snapshotJobId) + snapshotJobId = snapshotJobIdDecoded + let requestIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .requestId) + requestId = requestIdDecoded + let statusDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .status) ?? 0 + status = statusDecoded + } +} + extension QuickSightClientTypes.StatePersistenceConfigurations: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case enabled = "Enabled" @@ -67456,12 +69202,16 @@ extension QuickSightClientTypes { extension QuickSightClientTypes.TextAreaControlDisplayOptions: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case infoIconLabelOptions = "InfoIconLabelOptions" case placeholderOptions = "PlaceholderOptions" case titleOptions = "TitleOptions" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let infoIconLabelOptions = self.infoIconLabelOptions { + try encodeContainer.encode(infoIconLabelOptions, forKey: .infoIconLabelOptions) + } if let placeholderOptions = self.placeholderOptions { try encodeContainer.encode(placeholderOptions, forKey: .placeholderOptions) } @@ -67476,22 +69226,28 @@ extension QuickSightClientTypes.TextAreaControlDisplayOptions: Swift.Codable { titleOptions = titleOptionsDecoded let placeholderOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.TextControlPlaceholderOptions.self, forKey: .placeholderOptions) placeholderOptions = placeholderOptionsDecoded + let infoIconLabelOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SheetControlInfoIconLabelOptions.self, forKey: .infoIconLabelOptions) + infoIconLabelOptions = infoIconLabelOptionsDecoded } } extension QuickSightClientTypes { /// The display options of a control. public struct TextAreaControlDisplayOptions: Swift.Equatable { + /// The configuration of info icon label options. + public var infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? /// The configuration of the placeholder options in a text area control. public var placeholderOptions: QuickSightClientTypes.TextControlPlaceholderOptions? /// The options to configure the title visibility, name, and font size. public var titleOptions: QuickSightClientTypes.LabelOptions? public init( + infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? = nil, placeholderOptions: QuickSightClientTypes.TextControlPlaceholderOptions? = nil, titleOptions: QuickSightClientTypes.LabelOptions? = nil ) { + self.infoIconLabelOptions = infoIconLabelOptions self.placeholderOptions = placeholderOptions self.titleOptions = titleOptions } @@ -67591,12 +69347,16 @@ extension QuickSightClientTypes { extension QuickSightClientTypes.TextFieldControlDisplayOptions: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case infoIconLabelOptions = "InfoIconLabelOptions" case placeholderOptions = "PlaceholderOptions" case titleOptions = "TitleOptions" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let infoIconLabelOptions = self.infoIconLabelOptions { + try encodeContainer.encode(infoIconLabelOptions, forKey: .infoIconLabelOptions) + } if let placeholderOptions = self.placeholderOptions { try encodeContainer.encode(placeholderOptions, forKey: .placeholderOptions) } @@ -67611,22 +69371,28 @@ extension QuickSightClientTypes.TextFieldControlDisplayOptions: Swift.Codable { titleOptions = titleOptionsDecoded let placeholderOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.TextControlPlaceholderOptions.self, forKey: .placeholderOptions) placeholderOptions = placeholderOptionsDecoded + let infoIconLabelOptionsDecoded = try containerValues.decodeIfPresent(QuickSightClientTypes.SheetControlInfoIconLabelOptions.self, forKey: .infoIconLabelOptions) + infoIconLabelOptions = infoIconLabelOptionsDecoded } } extension QuickSightClientTypes { /// The display options of a control. public struct TextFieldControlDisplayOptions: Swift.Equatable { + /// The configuration of info icon label options. + public var infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? /// The configuration of the placeholder options in a text field control. public var placeholderOptions: QuickSightClientTypes.TextControlPlaceholderOptions? /// The options to configure the title visibility, name, and font size. public var titleOptions: QuickSightClientTypes.LabelOptions? public init( + infoIconLabelOptions: QuickSightClientTypes.SheetControlInfoIconLabelOptions? = nil, placeholderOptions: QuickSightClientTypes.TextControlPlaceholderOptions? = nil, titleOptions: QuickSightClientTypes.LabelOptions? = nil ) { + self.infoIconLabelOptions = infoIconLabelOptions self.placeholderOptions = placeholderOptions self.titleOptions = titleOptions } diff --git a/Sources/Services/AWSRAM/models/Models.swift b/Sources/Services/AWSRAM/models/Models.swift index 763520332ae..1176d3a113b 100644 --- a/Sources/Services/AWSRAM/models/Models.swift +++ b/Sources/Services/AWSRAM/models/Models.swift @@ -138,6 +138,7 @@ extension AssociateResourceShareInput: Swift.Encodable { case principals case resourceArns case resourceShareArn + case sources } public func encode(to encoder: Swift.Encoder) throws { @@ -160,6 +161,12 @@ extension AssociateResourceShareInput: Swift.Encodable { if let resourceShareArn = self.resourceShareArn { try encodeContainer.encode(resourceShareArn, forKey: .resourceShareArn) } + if let sources = sources { + var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) + for string0 in sources { + try sourcesContainer.encode(string0) + } + } } } @@ -192,18 +199,22 @@ public struct AssociateResourceShareInput: Swift.Equatable { /// Specifies the [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) of the resource share that you want to add principals or resources to. /// This member is required. public var resourceShareArn: Swift.String? + /// Specifies from which source accounts the service principal has access to the resources in this resource share. + public var sources: [Swift.String]? public init( clientToken: Swift.String? = nil, principals: [Swift.String]? = nil, resourceArns: [Swift.String]? = nil, - resourceShareArn: Swift.String? = nil + resourceShareArn: Swift.String? = nil, + sources: [Swift.String]? = nil ) { self.clientToken = clientToken self.principals = principals self.resourceArns = resourceArns self.resourceShareArn = resourceShareArn + self.sources = sources } } @@ -212,6 +223,7 @@ struct AssociateResourceShareInputBody: Swift.Equatable { let resourceArns: [Swift.String]? let principals: [Swift.String]? let clientToken: Swift.String? + let sources: [Swift.String]? } extension AssociateResourceShareInputBody: Swift.Decodable { @@ -220,6 +232,7 @@ extension AssociateResourceShareInputBody: Swift.Decodable { case principals case resourceArns case resourceShareArn + case sources } public init(from decoder: Swift.Decoder) throws { @@ -250,6 +263,17 @@ extension AssociateResourceShareInputBody: Swift.Decodable { principals = principalsDecoded0 let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) clientToken = clientTokenDecoded + let sourcesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .sources) + var sourcesDecoded0:[Swift.String]? = nil + if let sourcesContainer = sourcesContainer { + sourcesDecoded0 = [Swift.String]() + for string0 in sourcesContainer { + if let string0 = string0 { + sourcesDecoded0?.append(string0) + } + } + } + sources = sourcesDecoded0 } } @@ -965,6 +989,7 @@ extension CreateResourceShareInput: Swift.Encodable { case permissionArns case principals case resourceArns + case sources case tags } @@ -997,6 +1022,12 @@ extension CreateResourceShareInput: Swift.Encodable { try resourceArnsContainer.encode(string0) } } + if let sources = sources { + var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) + for string0 in sources { + try sourcesContainer.encode(string0) + } + } if let tags = tags { var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) for tag0 in tags { @@ -1039,6 +1070,8 @@ public struct CreateResourceShareInput: Swift.Equatable { public var principals: [Swift.String]? /// Specifies a list of one or more ARNs of the resources to associate with the resource share. public var resourceArns: [Swift.String]? + /// Specifies from which source accounts the service principal has access to the resources in this resource share. + public var sources: [Swift.String]? /// Specifies one or more tags to attach to the resource share itself. It doesn't attach the tags to the resources associated with the resource share. public var tags: [RAMClientTypes.Tag]? @@ -1049,6 +1082,7 @@ public struct CreateResourceShareInput: Swift.Equatable { permissionArns: [Swift.String]? = nil, principals: [Swift.String]? = nil, resourceArns: [Swift.String]? = nil, + sources: [Swift.String]? = nil, tags: [RAMClientTypes.Tag]? = nil ) { @@ -1058,6 +1092,7 @@ public struct CreateResourceShareInput: Swift.Equatable { self.permissionArns = permissionArns self.principals = principals self.resourceArns = resourceArns + self.sources = sources self.tags = tags } } @@ -1070,6 +1105,7 @@ struct CreateResourceShareInputBody: Swift.Equatable { let allowExternalPrincipals: Swift.Bool? let clientToken: Swift.String? let permissionArns: [Swift.String]? + let sources: [Swift.String]? } extension CreateResourceShareInputBody: Swift.Decodable { @@ -1080,6 +1116,7 @@ extension CreateResourceShareInputBody: Swift.Decodable { case permissionArns case principals case resourceArns + case sources case tags } @@ -1135,6 +1172,17 @@ extension CreateResourceShareInputBody: Swift.Decodable { } } permissionArns = permissionArnsDecoded0 + let sourcesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .sources) + var sourcesDecoded0:[Swift.String]? = nil + if let sourcesContainer = sourcesContainer { + sourcesDecoded0 = [Swift.String]() + for string0 in sourcesContainer { + if let string0 = string0 { + sourcesDecoded0?.append(string0) + } + } + } + sources = sourcesDecoded0 } } @@ -1152,6 +1200,7 @@ public enum CreateResourceShareOutputError: ClientRuntime.HttpResponseErrorBindi case "ResourceShareLimitExceeded": return try await ResourceShareLimitExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalError": return try await ServerInternalException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "Unavailable": return try await ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "TagLimitExceeded": return try await TagLimitExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "TagPolicyViolation": return try await TagPolicyViolationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InvalidResourceShareArn.NotFound": return try await UnknownResourceException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -1603,6 +1652,7 @@ extension DisassociateResourceShareInput: Swift.Encodable { case principals case resourceArns case resourceShareArn + case sources } public func encode(to encoder: Swift.Encoder) throws { @@ -1625,6 +1675,12 @@ extension DisassociateResourceShareInput: Swift.Encodable { if let resourceShareArn = self.resourceShareArn { try encodeContainer.encode(resourceShareArn, forKey: .resourceShareArn) } + if let sources = sources { + var sourcesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sources) + for string0 in sources { + try sourcesContainer.encode(string0) + } + } } } @@ -1657,18 +1713,22 @@ public struct DisassociateResourceShareInput: Swift.Equatable { /// Specifies [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) of the resource share that you want to remove resources or principals from. /// This member is required. public var resourceShareArn: Swift.String? + /// Specifies from which source accounts the service principal no longer has access to the resources in this resource share. + public var sources: [Swift.String]? public init( clientToken: Swift.String? = nil, principals: [Swift.String]? = nil, resourceArns: [Swift.String]? = nil, - resourceShareArn: Swift.String? = nil + resourceShareArn: Swift.String? = nil, + sources: [Swift.String]? = nil ) { self.clientToken = clientToken self.principals = principals self.resourceArns = resourceArns self.resourceShareArn = resourceShareArn + self.sources = sources } } @@ -1677,6 +1737,7 @@ struct DisassociateResourceShareInputBody: Swift.Equatable { let resourceArns: [Swift.String]? let principals: [Swift.String]? let clientToken: Swift.String? + let sources: [Swift.String]? } extension DisassociateResourceShareInputBody: Swift.Decodable { @@ -1685,6 +1746,7 @@ extension DisassociateResourceShareInputBody: Swift.Decodable { case principals case resourceArns case resourceShareArn + case sources } public init(from decoder: Swift.Decoder) throws { @@ -1715,6 +1777,17 @@ extension DisassociateResourceShareInputBody: Swift.Decodable { principals = principalsDecoded0 let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) clientToken = clientTokenDecoded + let sourcesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .sources) + var sourcesDecoded0:[Swift.String]? = nil + if let sourcesContainer = sourcesContainer { + sourcesDecoded0 = [Swift.String]() + for string0 in sourcesContainer { + if let string0 = string0 { + sourcesDecoded0?.append(string0) + } + } + } + sources = sourcesDecoded0 } } @@ -2358,7 +2431,7 @@ public struct GetResourceShareAssociationsInput: Swift.Equatable { public var maxResults: Swift.Int? /// Specifies that you want to receive the next page of results. Valid only if you received a NextToken response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's NextToken response to request the next page of results. public var nextToken: Swift.String? - /// Specifies the ID of the principal whose resource shares you want to retrieve. This can be an Amazon Web Services account ID, an organization ID, an organizational unit ID, or the [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) of an individual IAM user or role. You cannot specify this parameter if the association type is RESOURCE. + /// Specifies the ID of the principal whose resource shares you want to retrieve. This can be an Amazon Web Services account ID, an organization ID, an organizational unit ID, or the [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) of an individual IAM role or user. You cannot specify this parameter if the association type is RESOURCE. public var principal: Swift.String? /// Specifies the [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) of a resource whose resource shares you want to retrieve. You cannot specify this parameter if the association type is PRINCIPAL. public var resourceArn: Swift.String? diff --git a/Sources/Services/AWSRDS/EndpointResolver.swift b/Sources/Services/AWSRDS/EndpointResolver.swift index ce6faea6763..15f956380b7 100644 --- a/Sources/Services/AWSRDS/EndpointResolver.swift +++ b/Sources/Services/AWSRDS/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://rds-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://rds.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://rds-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://rds.{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://rds.{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\":[{\"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\":[{\"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\":[],\"endpoint\":{\"url\":\"https://rds-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\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://rds.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://rds-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\":[],\"endpoint\":{\"url\":\"https://rds.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://rds.{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/Paginators.swift b/Sources/Services/AWSRDS/Paginators.swift index 5f9cbc1af31..bb2aa58255c 100644 --- a/Sources/Services/AWSRDS/Paginators.swift +++ b/Sources/Services/AWSRDS/Paginators.swift @@ -248,6 +248,7 @@ extension DescribeDBClusterSnapshotsInput: ClientRuntime.PaginateToken { public func usingPaginationToken(_ token: Swift.String) -> DescribeDBClusterSnapshotsInput { return DescribeDBClusterSnapshotsInput( dbClusterIdentifier: self.dbClusterIdentifier, + dbClusterResourceId: self.dbClusterResourceId, dbClusterSnapshotIdentifier: self.dbClusterSnapshotIdentifier, filters: self.filters, includePublic: self.includePublic, diff --git a/Sources/Services/AWSRDS/RDSClient.swift b/Sources/Services/AWSRDS/RDSClient.swift index 12713d86997..225c3bfbfbc 100644 --- a/Sources/Services/AWSRDS/RDSClient.swift +++ b/Sources/Services/AWSRDS/RDSClient.swift @@ -1080,7 +1080,7 @@ extension RDSClient: RDSClientProtocol { return result } - /// Creates an Aurora global database spread across multiple Amazon Web Services Regions. The global database contains a single primary cluster with read-write capability, and a read-only secondary cluster that receives data from the primary cluster through high-speed replication performed by the Aurora storage subsystem. You can create a global database that is initially empty, and then add a primary cluster and a secondary cluster to it. Or you can specify an existing Aurora cluster during the create operation, and this cluster becomes the primary cluster of the global database. This operation applies only to Aurora DB clusters. + /// Creates an Aurora global database spread across multiple Amazon Web Services Regions. The global database contains a single primary cluster with read-write capability, and a read-only secondary cluster that receives data from the primary cluster through high-speed replication performed by the Aurora storage subsystem. You can create a global database that is initially empty, and then create the primary and secondary DB clusters in the global database. Or you can specify an existing Aurora cluster during the create operation, and this cluster becomes the primary cluster of the global database. This operation applies only to Aurora DB clusters. public func createGlobalCluster(input: CreateGlobalClusterInput) async throws -> CreateGlobalClusterOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1152,7 +1152,7 @@ extension RDSClient: RDSClientProtocol { return result } - /// Deletes a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. + /// Deletes a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. public func deleteBlueGreenDeployment(input: DeleteBlueGreenDeploymentInput) async throws -> DeleteBlueGreenDeploymentOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1267,6 +1267,42 @@ extension RDSClient: RDSClientProtocol { return result } + /// Deletes automated backups using the DbClusterResourceId value of the source DB cluster or the Amazon Resource Name (ARN) of the automated backups. + public func deleteDBClusterAutomatedBackup(input: DeleteDBClusterAutomatedBackupInput) async throws -> DeleteDBClusterAutomatedBackupOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "deleteDBClusterAutomatedBackup") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "rds") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteDBClusterAutomatedBackup") + 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.serviceSpecific.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.SerializableBodyMiddleware(xmlName: "DeleteDBClusterAutomatedBackupMessage")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-www-form-urlencoded")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Deletes a custom endpoint and removes it from an Amazon Aurora DB cluster. This action only applies to Aurora DB clusters. public func deleteDBClusterEndpoint(input: DeleteDBClusterEndpointInput) async throws -> DeleteDBClusterEndpointOutputResponse { @@ -1850,7 +1886,7 @@ extension RDSClient: RDSClientProtocol { return result } - /// Returns information about blue/green deployments. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. + /// Describes one or more blue/green deployments. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. public func describeBlueGreenDeployments(input: DescribeBlueGreenDeploymentsInput) async throws -> DescribeBlueGreenDeploymentsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1922,6 +1958,42 @@ extension RDSClient: RDSClientProtocol { return result } + /// Displays backups for both current and deleted DB clusters. For example, use this operation to find details about automated backups for previously deleted clusters. Current clusters are returned for both the DescribeDBClusterAutomatedBackups and DescribeDBClusters operations. All parameters are optional. + public func describeDBClusterAutomatedBackups(input: DescribeDBClusterAutomatedBackupsInput) async throws -> DescribeDBClusterAutomatedBackupsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "describeDBClusterAutomatedBackups") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "rds") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "describeDBClusterAutomatedBackups") + 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.serviceSpecific.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.SerializableBodyMiddleware(xmlName: "DescribeDBClusterAutomatedBackupsMessage")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-www-form-urlencoded")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Returns information about backtracks for a DB cluster. For more information on Amazon Aurora, see [ What is Amazon Aurora?](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) in the Amazon Aurora User Guide. This action only applies to Aurora MySQL DB clusters. public func describeDBClusterBacktracks(input: DescribeDBClusterBacktracksInput) async throws -> DescribeDBClusterBacktracksOutputResponse { @@ -3981,7 +4053,7 @@ extension RDSClient: RDSClientProtocol { return result } - /// Modify a setting for an Amazon Aurora global cluster. You can change one or more database configuration parameters by specifying these parameters and the new values in the request. For more information on Amazon Aurora, see [ What is Amazon Aurora?](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) in the Amazon Aurora User Guide. This action only applies to Aurora DB clusters. + /// Modifies a setting for an Amazon Aurora global cluster. You can change one or more database configuration parameters by specifying these parameters and the new values in the request. For more information on Amazon Aurora, see [ What is Amazon Aurora?](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) in the Amazon Aurora User Guide. This operation only applies to Aurora global database clusters. public func modifyGlobalCluster(input: ModifyGlobalClusterInput) async throws -> ModifyGlobalClusterOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -5101,7 +5173,7 @@ extension RDSClient: RDSClientProtocol { return result } - /// Switches over a blue/green deployment. Before you switch over, production traffic is routed to the databases in the blue environment. After you switch over, production traffic is routed to the databases in the green environment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. + /// Switches over a blue/green deployment. Before you switch over, production traffic is routed to the databases in the blue environment. After you switch over, production traffic is routed to the databases in the green environment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. public func switchoverBlueGreenDeployment(input: SwitchoverBlueGreenDeploymentInput) async throws -> SwitchoverBlueGreenDeploymentOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSRDS/RDSClientProtocol.swift b/Sources/Services/AWSRDS/RDSClientProtocol.swift index 83f1672077d..e5ef1a64d45 100644 --- a/Sources/Services/AWSRDS/RDSClientProtocol.swift +++ b/Sources/Services/AWSRDS/RDSClientProtocol.swift @@ -84,11 +84,11 @@ public protocol RDSClientProtocol { func createDBSubnetGroup(input: CreateDBSubnetGroupInput) async throws -> CreateDBSubnetGroupOutputResponse /// Creates an RDS event notification subscription. This operation requires a topic Amazon Resource Name (ARN) created by either the RDS console, the SNS console, or the SNS API. To obtain an ARN with SNS, you must create a topic in Amazon SNS and subscribe to the topic. The ARN is displayed in the SNS console. You can specify the type of source (SourceType) that you want to be notified of and provide a list of RDS sources (SourceIds) that triggers the events. You can also provide a list of event categories (EventCategories) for events that you want to be notified of. For example, you can specify SourceType = db-instance, SourceIds = mydbinstance1, mydbinstance2 and EventCategories = Availability, Backup. If you specify both the SourceType and SourceIds, such as SourceType = db-instance and SourceIds = myDBInstance1, you are notified of all the db-instance events for the specified source. If you specify a SourceType but do not specify SourceIds, you receive notice of the events for that source type for all your RDS sources. If you don't specify either the SourceType or the SourceIds, you are notified of events generated from all RDS sources belonging to your customer account. For more information about subscribing to an event for RDS DB engines, see [ Subscribing to Amazon RDS event notification](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.Subscribing.html) in the Amazon RDS User Guide. For more information about subscribing to an event for Aurora DB engines, see [ Subscribing to Amazon RDS event notification](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_Events.Subscribing.html) in the Amazon Aurora User Guide. func createEventSubscription(input: CreateEventSubscriptionInput) async throws -> CreateEventSubscriptionOutputResponse - /// Creates an Aurora global database spread across multiple Amazon Web Services Regions. The global database contains a single primary cluster with read-write capability, and a read-only secondary cluster that receives data from the primary cluster through high-speed replication performed by the Aurora storage subsystem. You can create a global database that is initially empty, and then add a primary cluster and a secondary cluster to it. Or you can specify an existing Aurora cluster during the create operation, and this cluster becomes the primary cluster of the global database. This operation applies only to Aurora DB clusters. + /// Creates an Aurora global database spread across multiple Amazon Web Services Regions. The global database contains a single primary cluster with read-write capability, and a read-only secondary cluster that receives data from the primary cluster through high-speed replication performed by the Aurora storage subsystem. You can create a global database that is initially empty, and then create the primary and secondary DB clusters in the global database. Or you can specify an existing Aurora cluster during the create operation, and this cluster becomes the primary cluster of the global database. This operation applies only to Aurora DB clusters. func createGlobalCluster(input: CreateGlobalClusterInput) async throws -> CreateGlobalClusterOutputResponse /// Creates a new option group. You can create up to 20 option groups. This command doesn't apply to RDS Custom. func createOptionGroup(input: CreateOptionGroupInput) async throws -> CreateOptionGroupOutputResponse - /// Deletes a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. + /// Deletes a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. func deleteBlueGreenDeployment(input: DeleteBlueGreenDeploymentInput) async throws -> DeleteBlueGreenDeploymentOutputResponse /// Deletes a custom engine version. To run this command, make sure you meet the following prerequisites: /// @@ -101,6 +101,8 @@ public protocol RDSClientProtocol { func deleteCustomDBEngineVersion(input: DeleteCustomDBEngineVersionInput) async throws -> DeleteCustomDBEngineVersionOutputResponse /// The DeleteDBCluster action deletes a previously provisioned DB cluster. When you delete a DB cluster, all automated backups for that DB cluster are deleted and can't be recovered. Manual DB cluster snapshots of the specified DB cluster are not deleted. If you're deleting a Multi-AZ DB cluster with read replicas, all cluster members are terminated and read replicas are promoted to standalone instances. For more information on Amazon Aurora, see [ What is Amazon Aurora?](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) in the Amazon Aurora User Guide. For more information on Multi-AZ DB clusters, see [ Multi-AZ DB cluster deployments](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html) in the Amazon RDS User Guide. func deleteDBCluster(input: DeleteDBClusterInput) async throws -> DeleteDBClusterOutputResponse + /// Deletes automated backups using the DbClusterResourceId value of the source DB cluster or the Amazon Resource Name (ARN) of the automated backups. + func deleteDBClusterAutomatedBackup(input: DeleteDBClusterAutomatedBackupInput) async throws -> DeleteDBClusterAutomatedBackupOutputResponse /// Deletes a custom endpoint and removes it from an Amazon Aurora DB cluster. This action only applies to Aurora DB clusters. func deleteDBClusterEndpoint(input: DeleteDBClusterEndpointInput) async throws -> DeleteDBClusterEndpointOutputResponse /// Deletes a specified DB cluster parameter group. The DB cluster parameter group to be deleted can't be associated with any DB clusters. For more information on Amazon Aurora, see [ What is Amazon Aurora?](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) in the Amazon Aurora User Guide. For more information on Multi-AZ DB clusters, see [ Multi-AZ DB cluster deployments](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html) in the Amazon RDS User Guide. @@ -140,10 +142,12 @@ public protocol RDSClientProtocol { func deregisterDBProxyTargets(input: DeregisterDBProxyTargetsInput) async throws -> DeregisterDBProxyTargetsOutputResponse /// Lists all of the attributes for a customer account. The attributes include Amazon RDS quotas for the account, such as the number of DB instances allowed. The description for a quota includes the quota name, current usage toward that quota, and the quota's maximum value. This command doesn't take any parameters. func describeAccountAttributes(input: DescribeAccountAttributesInput) async throws -> DescribeAccountAttributesOutputResponse - /// Returns information about blue/green deployments. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. + /// Describes one or more blue/green deployments. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. func describeBlueGreenDeployments(input: DescribeBlueGreenDeploymentsInput) async throws -> DescribeBlueGreenDeploymentsOutputResponse /// Lists the set of CA certificates provided by Amazon RDS for this Amazon Web Services account. For more information, see [Using SSL/TLS to encrypt a connection to a DB instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html) in the Amazon RDS User Guide and [ Using SSL/TLS to encrypt a connection to a DB cluster](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html) in the Amazon Aurora User Guide. func describeCertificates(input: DescribeCertificatesInput) async throws -> DescribeCertificatesOutputResponse + /// Displays backups for both current and deleted DB clusters. For example, use this operation to find details about automated backups for previously deleted clusters. Current clusters are returned for both the DescribeDBClusterAutomatedBackups and DescribeDBClusters operations. All parameters are optional. + func describeDBClusterAutomatedBackups(input: DescribeDBClusterAutomatedBackupsInput) async throws -> DescribeDBClusterAutomatedBackupsOutputResponse /// Returns information about backtracks for a DB cluster. For more information on Amazon Aurora, see [ What is Amazon Aurora?](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) in the Amazon Aurora User Guide. This action only applies to Aurora MySQL DB clusters. func describeDBClusterBacktracks(input: DescribeDBClusterBacktracksInput) async throws -> DescribeDBClusterBacktracksOutputResponse /// Returns information about endpoints for an Amazon Aurora DB cluster. This action only applies to Aurora DB clusters. @@ -265,7 +269,7 @@ public protocol RDSClientProtocol { func modifyDBSubnetGroup(input: ModifyDBSubnetGroupInput) async throws -> ModifyDBSubnetGroupOutputResponse /// Modifies an existing RDS event notification subscription. You can't modify the source identifiers using this call. To change source identifiers for a subscription, use the AddSourceIdentifierToSubscription and RemoveSourceIdentifierFromSubscription calls. You can see a list of the event categories for a given source type (SourceType) in [Events](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Events.html) in the Amazon RDS User Guide or by using the DescribeEventCategories operation. func modifyEventSubscription(input: ModifyEventSubscriptionInput) async throws -> ModifyEventSubscriptionOutputResponse - /// Modify a setting for an Amazon Aurora global cluster. You can change one or more database configuration parameters by specifying these parameters and the new values in the request. For more information on Amazon Aurora, see [ What is Amazon Aurora?](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) in the Amazon Aurora User Guide. This action only applies to Aurora DB clusters. + /// Modifies a setting for an Amazon Aurora global cluster. You can change one or more database configuration parameters by specifying these parameters and the new values in the request. For more information on Amazon Aurora, see [ What is Amazon Aurora?](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html) in the Amazon Aurora User Guide. This operation only applies to Aurora global database clusters. func modifyGlobalCluster(input: ModifyGlobalClusterInput) async throws -> ModifyGlobalClusterOutputResponse /// Modifies an existing option group. func modifyOptionGroup(input: ModifyOptionGroupInput) async throws -> ModifyOptionGroupOutputResponse @@ -331,7 +335,7 @@ public protocol RDSClientProtocol { func stopDBInstance(input: StopDBInstanceInput) async throws -> StopDBInstanceOutputResponse /// Stops automated backup replication for a DB instance. This command doesn't apply to RDS Custom, Aurora MySQL, and Aurora PostgreSQL. For more information, see [ Replicating Automated Backups to Another Amazon Web Services Region](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReplicateBackups.html) in the Amazon RDS User Guide. func stopDBInstanceAutomatedBackupsReplication(input: StopDBInstanceAutomatedBackupsReplicationInput) async throws -> StopDBInstanceAutomatedBackupsReplicationOutputResponse - /// Switches over a blue/green deployment. Before you switch over, production traffic is routed to the databases in the blue environment. After you switch over, production traffic is routed to the databases in the green environment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. + /// Switches over a blue/green deployment. Before you switch over, production traffic is routed to the databases in the blue environment. After you switch over, production traffic is routed to the databases in the green environment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. func switchoverBlueGreenDeployment(input: SwitchoverBlueGreenDeploymentInput) async throws -> SwitchoverBlueGreenDeploymentOutputResponse /// Switches over an Oracle standby database in an Oracle Data Guard environment, making it the new primary database. Issue this command in the Region that hosts the current standby database. func switchoverReadReplica(input: SwitchoverReadReplicaInput) async throws -> SwitchoverReadReplicaOutputResponse diff --git a/Sources/Services/AWSRDS/models/Models.swift b/Sources/Services/AWSRDS/models/Models.swift index d6eaedc7c19..575882c5dda 100644 --- a/Sources/Services/AWSRDS/models/Models.swift +++ b/Sources/Services/AWSRDS/models/Models.swift @@ -1696,19 +1696,19 @@ extension RDSClientTypes.BlueGreenDeployment: Swift.Codable { } extension RDSClientTypes { - /// Contains the details about a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. + /// Details about a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. public struct BlueGreenDeployment: Swift.Equatable { - /// The system-generated identifier of the blue/green deployment. + /// The unique identifier of the blue/green deployment. public var blueGreenDeploymentIdentifier: Swift.String? /// The user-supplied name of the blue/green deployment. public var blueGreenDeploymentName: Swift.String? - /// Specifies the time when the blue/green deployment was created, in Universal Coordinated Time (UTC). + /// The time when the blue/green deployment was created, in Universal Coordinated Time (UTC). public var createTime: ClientRuntime.Date? - /// Specifies the time when the blue/green deployment was deleted, in Universal Coordinated Time (UTC). + /// The time when the blue/green deployment was deleted, in Universal Coordinated Time (UTC). public var deleteTime: ClientRuntime.Date? /// The source database for the blue/green deployment. Before switchover, the source database is the production database in the blue environment. public var source: Swift.String? - /// The status of the blue/green deployment. Values: + /// The status of the blue/green deployment. Valid Values: /// /// * PROVISIONING - Resources are being created in the green environment. /// @@ -1899,13 +1899,13 @@ extension RDSClientTypes.BlueGreenDeploymentTask: Swift.Codable { } extension RDSClientTypes { - /// Contains the details about a task for a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. + /// Details about a task for a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. public struct BlueGreenDeploymentTask: Swift.Equatable { /// The name of the blue/green deployment task. public var name: Swift.String? - /// The status of the blue/green deployment task. Values: + /// The status of the blue/green deployment task. Valid Values: /// - /// * PENDING - The resources are being prepared for deployment. + /// * PENDING - The resource is being prepared for deployment. /// /// * IN_PROGRESS - The resource is being deployed. /// @@ -4052,7 +4052,7 @@ extension CreateBlueGreenDeploymentOutputResponse: ClientRuntime.HttpResponseBin } public struct CreateBlueGreenDeploymentOutputResponse: Swift.Equatable { - /// Contains the details about a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. + /// Details about a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. public var blueGreenDeployment: RDSClientTypes.BlueGreenDeployment? public init( @@ -4340,6 +4340,7 @@ extension CreateCustomDBEngineVersionOutputResponse: ClientRuntime.HttpResponseB self.supportsBabelfish = output.supportsBabelfish self.supportsCertificateRotationWithoutRestart = output.supportsCertificateRotationWithoutRestart self.supportsGlobalDatabases = output.supportsGlobalDatabases + self.supportsLocalWriteForwarding = output.supportsLocalWriteForwarding self.supportsLogExportsToCloudwatchLogs = output.supportsLogExportsToCloudwatchLogs self.supportsParallelQuery = output.supportsParallelQuery self.supportsReadReplica = output.supportsReadReplica @@ -4372,6 +4373,7 @@ extension CreateCustomDBEngineVersionOutputResponse: ClientRuntime.HttpResponseB self.supportsBabelfish = false self.supportsCertificateRotationWithoutRestart = nil self.supportsGlobalDatabases = false + self.supportsLocalWriteForwarding = nil self.supportsLogExportsToCloudwatchLogs = false self.supportsParallelQuery = false self.supportsReadReplica = false @@ -4435,6 +4437,8 @@ public struct CreateCustomDBEngineVersionOutputResponse: Swift.Equatable { public var supportsCertificateRotationWithoutRestart: Swift.Bool? /// A value that indicates whether you can use Aurora global databases with a specific DB engine version. public var supportsGlobalDatabases: Swift.Bool + /// A value that indicates whether the DB engine version supports forwarding write operations from reader DB instances to the writer DB instance in the DB cluster. By default, write operations aren't allowed on reader DB instances. Valid for: Aurora DB clusters only + public var supportsLocalWriteForwarding: Swift.Bool? /// A value that indicates whether the engine version supports exporting the log types specified by ExportableLogTypes to CloudWatch Logs. public var supportsLogExportsToCloudwatchLogs: Swift.Bool /// A value that indicates whether you can use Aurora parallel query with a specific DB engine version. @@ -4473,6 +4477,7 @@ public struct CreateCustomDBEngineVersionOutputResponse: Swift.Equatable { supportsBabelfish: Swift.Bool = false, supportsCertificateRotationWithoutRestart: Swift.Bool? = nil, supportsGlobalDatabases: Swift.Bool = false, + supportsLocalWriteForwarding: Swift.Bool? = nil, supportsLogExportsToCloudwatchLogs: Swift.Bool = false, supportsParallelQuery: Swift.Bool = false, supportsReadReplica: Swift.Bool = false, @@ -4506,6 +4511,7 @@ public struct CreateCustomDBEngineVersionOutputResponse: Swift.Equatable { self.supportsBabelfish = supportsBabelfish self.supportsCertificateRotationWithoutRestart = supportsCertificateRotationWithoutRestart self.supportsGlobalDatabases = supportsGlobalDatabases + self.supportsLocalWriteForwarding = supportsLocalWriteForwarding self.supportsLogExportsToCloudwatchLogs = supportsLogExportsToCloudwatchLogs self.supportsParallelQuery = supportsParallelQuery self.supportsReadReplica = supportsReadReplica @@ -4546,6 +4552,7 @@ struct CreateCustomDBEngineVersionOutputResponseBody: Swift.Equatable { let customDBEngineVersionManifest: Swift.String? let supportsCertificateRotationWithoutRestart: Swift.Bool? let supportedCACertificateIdentifiers: [Swift.String]? + let supportsLocalWriteForwarding: Swift.Bool? } extension CreateCustomDBEngineVersionOutputResponseBody: Swift.Decodable { @@ -4576,6 +4583,7 @@ extension CreateCustomDBEngineVersionOutputResponseBody: Swift.Decodable { case supportsBabelfish = "SupportsBabelfish" case supportsCertificateRotationWithoutRestart = "SupportsCertificateRotationWithoutRestart" case supportsGlobalDatabases = "SupportsGlobalDatabases" + case supportsLocalWriteForwarding = "SupportsLocalWriteForwarding" case supportsLogExportsToCloudwatchLogs = "SupportsLogExportsToCloudwatchLogs" case supportsParallelQuery = "SupportsParallelQuery" case supportsReadReplica = "SupportsReadReplica" @@ -4801,6 +4809,8 @@ extension CreateCustomDBEngineVersionOutputResponseBody: Swift.Decodable { } else { supportedCACertificateIdentifiers = nil } + let supportsLocalWriteForwardingDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .supportsLocalWriteForwarding) + supportsLocalWriteForwarding = supportsLocalWriteForwardingDecoded } } @@ -5258,6 +5268,9 @@ extension CreateDBClusterInput: Swift.Encodable { if let enableIAMDatabaseAuthentication = enableIAMDatabaseAuthentication { try container.encode(enableIAMDatabaseAuthentication, forKey: ClientRuntime.Key("EnableIAMDatabaseAuthentication")) } + if let enableLocalWriteForwarding = enableLocalWriteForwarding { + try container.encode(enableLocalWriteForwarding, forKey: ClientRuntime.Key("EnableLocalWriteForwarding")) + } if let enablePerformanceInsights = enablePerformanceInsights { try container.encode(enablePerformanceInsights, forKey: ClientRuntime.Key("EnablePerformanceInsights")) } @@ -5450,6 +5463,8 @@ public struct CreateDBClusterInput: Swift.Equatable { public var enableHttpEndpoint: Swift.Bool? /// Specifies whether to enable mapping of Amazon Web Services Identity and Access Management (IAM) accounts to database accounts. By default, mapping isn't enabled. For more information, see [ IAM Database Authentication](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.IAMDBAuth.html) in the Amazon Aurora User Guide. Valid for Cluster Type: Aurora DB clusters only public var enableIAMDatabaseAuthentication: Swift.Bool? + /// Specifies whether read replicas can forward write operations to the writer DB instance in the DB cluster. By default, write operations aren't allowed on reader DB instances. Valid for: Aurora DB clusters only + public var enableLocalWriteForwarding: Swift.Bool? /// Specifies 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 Cluster Type: Multi-AZ DB clusters only public var enablePerformanceInsights: Swift.Bool? /// The database engine to use for this DB cluster. Valid for Cluster Type: Aurora DB clusters and Multi-AZ DB clusters Valid Values: aurora-mysql | aurora-postgresql | mysql | postgres @@ -5632,6 +5647,7 @@ public struct CreateDBClusterInput: Swift.Equatable { enableGlobalWriteForwarding: Swift.Bool? = nil, enableHttpEndpoint: Swift.Bool? = nil, enableIAMDatabaseAuthentication: Swift.Bool? = nil, + enableLocalWriteForwarding: Swift.Bool? = nil, enablePerformanceInsights: Swift.Bool? = nil, engine: Swift.String? = nil, engineMode: Swift.String? = nil, @@ -5683,6 +5699,7 @@ public struct CreateDBClusterInput: Swift.Equatable { self.enableGlobalWriteForwarding = enableGlobalWriteForwarding self.enableHttpEndpoint = enableHttpEndpoint self.enableIAMDatabaseAuthentication = enableIAMDatabaseAuthentication + self.enableLocalWriteForwarding = enableLocalWriteForwarding self.enablePerformanceInsights = enablePerformanceInsights self.engine = engine self.engineMode = engineMode @@ -5765,6 +5782,7 @@ struct CreateDBClusterInputBody: Swift.Equatable { let dbSystemId: Swift.String? let manageMasterUserPassword: Swift.Bool? let masterUserSecretKmsKeyId: Swift.String? + let enableLocalWriteForwarding: Swift.Bool? } extension CreateDBClusterInputBody: Swift.Decodable { @@ -5789,6 +5807,7 @@ extension CreateDBClusterInputBody: Swift.Decodable { case enableGlobalWriteForwarding = "EnableGlobalWriteForwarding" case enableHttpEndpoint = "EnableHttpEndpoint" case enableIAMDatabaseAuthentication = "EnableIAMDatabaseAuthentication" + case enableLocalWriteForwarding = "EnableLocalWriteForwarding" case enablePerformanceInsights = "EnablePerformanceInsights" case engine = "Engine" case engineMode = "EngineMode" @@ -5988,6 +6007,8 @@ extension CreateDBClusterInputBody: Swift.Decodable { manageMasterUserPassword = manageMasterUserPasswordDecoded let masterUserSecretKmsKeyIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .masterUserSecretKmsKeyId) masterUserSecretKmsKeyId = masterUserSecretKmsKeyIdDecoded + let enableLocalWriteForwardingDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enableLocalWriteForwarding) + enableLocalWriteForwarding = enableLocalWriteForwardingDecoded } } @@ -6457,6 +6478,9 @@ extension CreateDBInstanceInput: Swift.Encodable { if let dbSubnetGroupName = dbSubnetGroupName { try container.encode(dbSubnetGroupName, forKey: ClientRuntime.Key("DBSubnetGroupName")) } + if let dbSystemId = dbSystemId { + try container.encode(dbSystemId, forKey: ClientRuntime.Key("DBSystemId")) + } if let deletionProtection = deletionProtection { try container.encode(deletionProtection, forKey: ClientRuntime.Key("DeletionProtection")) } @@ -6779,66 +6803,61 @@ public struct CreateDBInstanceInput: Swift.Equatable { /// Example: mydbinstance /// This member is required. public var dbInstanceIdentifier: Swift.String? - /// The meaning of this parameter differs depending on the database engine. Amazon Aurora MySQL The name of the database to create when the primary DB instance of the Aurora MySQL DB cluster is created. If you don't specify a value, Amazon RDS doesn't create a database in the DB cluster. Constraints: - /// - /// * Must contain 1 to 64 alphanumeric characters. - /// - /// * Can't be a word reserved by the database engine. - /// - /// - /// Amazon Aurora PostgreSQL The name of the database to create when the primary DB instance of the Aurora PostgreSQL DB cluster is created. Default: postgres Constraints: + /// The meaning of this parameter differs according to the database engine you use. MySQL The name of the database to create when the DB instance is created. If this parameter isn't specified, no database is created in the DB instance. Constraints: /// - /// * Must contain 1 to 63 alphanumeric characters. + /// * Must contain 1 to 64 letters or numbers. /// - /// * Must begin with a letter. Subsequent characters can be letters, underscores, or digits (0 to 9). + /// * Must begin with a letter. Subsequent characters can be letters, underscores, or digits (0-9). /// - /// * Can't be a word reserved by the database engine. + /// * Can't be a word reserved by the specified database engine /// /// - /// Amazon RDS Custom for Oracle The Oracle System ID (SID) of the created RDS Custom DB instance. Default: ORCL Constraints: + /// MariaDB The name of the database to create when the DB instance is created. If this parameter isn't specified, no database is created in the DB instance. Constraints: /// - /// * Must contain 1 to 8 alphanumeric characters. + /// * Must contain 1 to 64 letters or numbers. /// - /// * Must contain a letter. + /// * Must begin with a letter. Subsequent characters can be letters, underscores, or digits (0-9). /// - /// * Can't be a word reserved by the database engine. + /// * Can't be a word reserved by the specified database engine /// /// - /// Amazon RDS Custom for SQL Server Not applicable. Must be null. RDS for MariaDB The name of the database to create when the DB instance is created. If you don't specify a value, Amazon RDS doesn't create a database in the DB instance. Constraints: + /// PostgreSQL The name of the database to create when the DB instance is created. If this parameter isn't specified, a database named postgres is created in the DB instance. Constraints: /// - /// * Must contain 1 to 64 letters or numbers. + /// * Must contain 1 to 63 letters, numbers, or underscores. /// /// * Must begin with a letter. Subsequent characters can be letters, underscores, or digits (0-9). /// - /// * Can't be a word reserved by the database engine. + /// * Can't be a word reserved by the specified database engine /// /// - /// RDS for MySQL The name of the database to create when the DB instance is created. If you don't specify a value, Amazon RDS doesn't create a database in the DB instance. Constraints: + /// Oracle The Oracle System ID (SID) of the created DB instance. If you don't specify a value, the default value is ORCL. You can't specify the string null, or any other reserved word, for DBName. Default: ORCL Constraints: /// - /// * Must contain 1 to 64 letters or numbers. + /// * Can't be longer than 8 characters /// - /// * Must begin with a letter. Subsequent characters can be letters, underscores, or digits (0-9). /// - /// * Can't be a word reserved by the database engine. + /// Amazon RDS Custom for Oracle The Oracle System ID (SID) of the created RDS Custom DB instance. If you don't specify a value, the default value is ORCL for non-CDBs and RDSCDB for CDBs. Default: ORCL Constraints: /// + /// * It must contain 1 to 8 alphanumeric characters. /// - /// RDS for Oracle The Oracle System ID (SID) of the created DB instance. Default: ORCL Constraints: + /// * It must contain a letter. /// - /// * Can't be longer than 8 characters. + /// * It can't be a word reserved by the database engine. /// - /// * Can't be a word reserved by the database engine, such as the string NULL. /// + /// Amazon RDS Custom for SQL Server Not applicable. Must be null. SQL Server Not applicable. Must be null. Amazon Aurora MySQL The name of the database to create when the primary DB instance of the Aurora MySQL DB cluster is created. If this parameter isn't specified for an Aurora MySQL DB cluster, no database is created in the DB cluster. Constraints: /// - /// RDS for PostgreSQL The name of the database to create when the DB instance is created. Default: postgres Constraints: + /// * It must contain 1 to 64 alphanumeric characters. /// - /// * Must contain 1 to 63 letters, numbers, or underscores. + /// * It can't be a word reserved by the database engine. /// - /// * Must begin with a letter. Subsequent characters can be letters, underscores, or digits (0-9). /// - /// * Can't be a word reserved by the database engine. + /// Amazon Aurora PostgreSQL The name of the database to create when the primary DB instance of the Aurora PostgreSQL DB cluster is created. If this parameter isn't specified for an Aurora PostgreSQL DB cluster, a database named postgres is created in the DB cluster. Constraints: /// + /// * It must contain 1 to 63 alphanumeric characters. /// - /// RDS for SQL Server Not applicable. Must be null. + /// * It must begin with a letter. Subsequent characters can be letters, underscores, or digits (0 to 9). + /// + /// * It can't be a word reserved by the database engine. public var dbName: Swift.String? /// The name of the DB parameter group to associate with this DB instance. If you don't specify a value, then Amazon RDS uses the default DB parameter group for the specified DB engine and version. This setting doesn't apply to RDS Custom DB instances. Constraints: /// @@ -6859,6 +6878,8 @@ public struct CreateDBInstanceInput: Swift.Equatable { /// /// Example: mydbsubnetgroup public var dbSubnetGroupName: Swift.String? + /// The Oracle system identifier (SID), which is the name of the Oracle database instance that manages your database files. In this context, the term "Oracle database instance" refers exclusively to the system global area (SGA) and Oracle background processes. If you don't specify a SID, the value defaults to RDSCDB. The Oracle SID is also the name of your CDB. + public var dbSystemId: Swift.String? /// Specifies whether the DB instance has deletion protection enabled. The database can't be deleted when deletion protection is enabled. By default, deletion protection isn't enabled. For more information, see [ Deleting a DB Instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_DeleteInstance.html). This setting doesn't apply to Amazon Aurora DB instances. You can enable or disable deletion protection for the DB cluster. For more information, see CreateDBCluster. DB instances in a DB cluster can be deleted even when deletion protection is enabled for the DB cluster. public var deletionProtection: Swift.Bool? /// The Active Directory directory ID to create the DB instance in. Currently, only Microsoft SQL Server, MySQL, Oracle, and PostgreSQL DB instances can be created in an Active Directory Domain. For more information, see [ Kerberos Authentication](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/kerberos-authentication.html) in the Amazon RDS User Guide. This setting doesn't apply to the following DB instances: @@ -7146,6 +7167,7 @@ public struct CreateDBInstanceInput: Swift.Equatable { dbParameterGroupName: Swift.String? = nil, dbSecurityGroups: [Swift.String]? = nil, dbSubnetGroupName: Swift.String? = nil, + dbSystemId: Swift.String? = nil, deletionProtection: Swift.Bool? = nil, domain: Swift.String? = nil, domainAuthSecretArn: Swift.String? = nil, @@ -7207,6 +7229,7 @@ public struct CreateDBInstanceInput: Swift.Equatable { self.dbParameterGroupName = dbParameterGroupName self.dbSecurityGroups = dbSecurityGroups self.dbSubnetGroupName = dbSubnetGroupName + self.dbSystemId = dbSystemId self.deletionProtection = deletionProtection self.domain = domain self.domainAuthSecretArn = domainAuthSecretArn @@ -7313,6 +7336,7 @@ struct CreateDBInstanceInputBody: Swift.Equatable { let manageMasterUserPassword: Swift.Bool? let masterUserSecretKmsKeyId: Swift.String? let caCertificateIdentifier: Swift.String? + let dbSystemId: Swift.String? } extension CreateDBInstanceInputBody: Swift.Decodable { @@ -7333,6 +7357,7 @@ extension CreateDBInstanceInputBody: Swift.Decodable { case dbParameterGroupName = "DBParameterGroupName" case dbSecurityGroups = "DBSecurityGroups" case dbSubnetGroupName = "DBSubnetGroupName" + case dbSystemId = "DBSystemId" case deletionProtection = "DeletionProtection" case domain = "Domain" case domainAuthSecretArn = "DomainAuthSecretArn" @@ -7600,6 +7625,8 @@ extension CreateDBInstanceInputBody: Swift.Decodable { masterUserSecretKmsKeyId = masterUserSecretKmsKeyIdDecoded let caCertificateIdentifierDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .caCertificateIdentifier) caCertificateIdentifier = caCertificateIdentifierDecoded + let dbSystemIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbSystemId) + dbSystemId = dbSystemIdDecoded } } @@ -10731,6 +10758,7 @@ extension RDSClientTypes.DBCluster: Swift.Codable { case iops = "Iops" case kmsKeyId = "KmsKeyId" case latestRestorableTime = "LatestRestorableTime" + case localWriteForwardingStatus = "LocalWriteForwardingStatus" case masterUserSecret = "MasterUserSecret" case masterUsername = "MasterUsername" case monitoringInterval = "MonitoringInterval" @@ -10964,6 +10992,9 @@ extension RDSClientTypes.DBCluster: Swift.Codable { if let latestRestorableTime = latestRestorableTime { try container.encodeTimestamp(latestRestorableTime, format: .dateTime, forKey: ClientRuntime.Key("latestRestorableTime")) } + if let localWriteForwardingStatus = localWriteForwardingStatus { + try container.encode(localWriteForwardingStatus, forKey: ClientRuntime.Key("LocalWriteForwardingStatus")) + } if let masterUserSecret = masterUserSecret { try container.encode(masterUserSecret, forKey: ClientRuntime.Key("MasterUserSecret")) } @@ -11384,6 +11415,8 @@ extension RDSClientTypes.DBCluster: Swift.Codable { masterUserSecret = masterUserSecretDecoded let ioOptimizedNextAllowedModificationTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .ioOptimizedNextAllowedModificationTime) ioOptimizedNextAllowedModificationTime = ioOptimizedNextAllowedModificationTimeDecoded + let localWriteForwardingStatusDecoded = try containerValues.decodeIfPresent(RDSClientTypes.LocalWriteForwardingStatus.self, forKey: .localWriteForwardingStatus) + localWriteForwardingStatus = localWriteForwardingStatusDecoded } } @@ -11484,6 +11517,8 @@ extension RDSClientTypes { public var kmsKeyId: Swift.String? /// The latest time to which a database can be restored with point-in-time restore. public var latestRestorableTime: ClientRuntime.Date? + /// Specifies whether an Aurora DB cluster has in-cluster write forwarding enabled, not enabled, requested, or is in the process of enabling it. + public var localWriteForwardingStatus: RDSClientTypes.LocalWriteForwardingStatus? /// The secret managed by RDS in Amazon Web Services Secrets Manager for the master user password. For more information, see [Password management with Amazon Web Services Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html) in the Amazon RDS User Guide and [Password management with Amazon Web Services Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html) in the Amazon Aurora User Guide. public var masterUserSecret: RDSClientTypes.MasterUserSecret? /// The master username for the DB cluster. @@ -11592,6 +11627,7 @@ extension RDSClientTypes { iops: Swift.Int? = nil, kmsKeyId: Swift.String? = nil, latestRestorableTime: ClientRuntime.Date? = nil, + localWriteForwardingStatus: RDSClientTypes.LocalWriteForwardingStatus? = nil, masterUserSecret: RDSClientTypes.MasterUserSecret? = nil, masterUsername: Swift.String? = nil, monitoringInterval: Swift.Int? = nil, @@ -11666,6 +11702,7 @@ extension RDSClientTypes { self.iops = iops self.kmsKeyId = kmsKeyId self.latestRestorableTime = latestRestorableTime + self.localWriteForwardingStatus = localWriteForwardingStatus self.masterUserSecret = masterUserSecret self.masterUsername = masterUsername self.monitoringInterval = monitoringInterval @@ -11750,6 +11787,397 @@ extension DBClusterAlreadyExistsFaultBody: Swift.Decodable { } } +extension RDSClientTypes.DBClusterAutomatedBackup: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case allocatedStorage = "AllocatedStorage" + case availabilityZones = "AvailabilityZones" + case backupRetentionPeriod = "BackupRetentionPeriod" + case clusterCreateTime = "ClusterCreateTime" + case dbClusterArn = "DBClusterArn" + case dbClusterAutomatedBackupsArn = "DBClusterAutomatedBackupsArn" + case dbClusterIdentifier = "DBClusterIdentifier" + case dbClusterResourceId = "DbClusterResourceId" + case engine = "Engine" + case engineMode = "EngineMode" + case engineVersion = "EngineVersion" + case iamDatabaseAuthenticationEnabled = "IAMDatabaseAuthenticationEnabled" + case iops = "Iops" + case kmsKeyId = "KmsKeyId" + case licenseModel = "LicenseModel" + case masterUsername = "MasterUsername" + case port = "Port" + case region = "Region" + case restoreWindow = "RestoreWindow" + case status = "Status" + case storageEncrypted = "StorageEncrypted" + case storageType = "StorageType" + case vpcId = "VpcId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if allocatedStorage != 0 { + try container.encode(allocatedStorage, forKey: ClientRuntime.Key("AllocatedStorage")) + } + if let availabilityZones = availabilityZones { + if !availabilityZones.isEmpty { + var availabilityZonesContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("AvailabilityZones")) + for (index0, string0) in availabilityZones.enumerated() { + try availabilityZonesContainer.encode(string0, forKey: ClientRuntime.Key("AvailabilityZone.\(index0.advanced(by: 1))")) + } + } + else { + var availabilityZonesContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("AvailabilityZones")) + try availabilityZonesContainer.encode("", forKey: ClientRuntime.Key("")) + } + } + if let backupRetentionPeriod = backupRetentionPeriod { + try container.encode(backupRetentionPeriod, forKey: ClientRuntime.Key("BackupRetentionPeriod")) + } + if let clusterCreateTime = clusterCreateTime { + try container.encodeTimestamp(clusterCreateTime, format: .dateTime, forKey: ClientRuntime.Key("clusterCreateTime")) + } + if let dbClusterArn = dbClusterArn { + try container.encode(dbClusterArn, forKey: ClientRuntime.Key("DBClusterArn")) + } + if let dbClusterAutomatedBackupsArn = dbClusterAutomatedBackupsArn { + try container.encode(dbClusterAutomatedBackupsArn, forKey: ClientRuntime.Key("DBClusterAutomatedBackupsArn")) + } + if let dbClusterIdentifier = dbClusterIdentifier { + try container.encode(dbClusterIdentifier, forKey: ClientRuntime.Key("DBClusterIdentifier")) + } + if let dbClusterResourceId = dbClusterResourceId { + try container.encode(dbClusterResourceId, forKey: ClientRuntime.Key("DbClusterResourceId")) + } + if let engine = engine { + try container.encode(engine, forKey: ClientRuntime.Key("Engine")) + } + if let engineMode = engineMode { + try container.encode(engineMode, forKey: ClientRuntime.Key("EngineMode")) + } + if let engineVersion = engineVersion { + try container.encode(engineVersion, forKey: ClientRuntime.Key("EngineVersion")) + } + if iamDatabaseAuthenticationEnabled != false { + try container.encode(iamDatabaseAuthenticationEnabled, forKey: ClientRuntime.Key("IAMDatabaseAuthenticationEnabled")) + } + if let iops = iops { + try container.encode(iops, forKey: ClientRuntime.Key("Iops")) + } + if let kmsKeyId = kmsKeyId { + try container.encode(kmsKeyId, forKey: ClientRuntime.Key("KmsKeyId")) + } + if let licenseModel = licenseModel { + try container.encode(licenseModel, forKey: ClientRuntime.Key("LicenseModel")) + } + if let masterUsername = masterUsername { + try container.encode(masterUsername, forKey: ClientRuntime.Key("MasterUsername")) + } + if port != 0 { + try container.encode(port, forKey: ClientRuntime.Key("Port")) + } + if let region = region { + try container.encode(region, forKey: ClientRuntime.Key("Region")) + } + if let restoreWindow = restoreWindow { + try container.encode(restoreWindow, forKey: ClientRuntime.Key("RestoreWindow")) + } + if let status = status { + try container.encode(status, forKey: ClientRuntime.Key("Status")) + } + if storageEncrypted != false { + try container.encode(storageEncrypted, forKey: ClientRuntime.Key("StorageEncrypted")) + } + if let storageType = storageType { + try container.encode(storageType, forKey: ClientRuntime.Key("StorageType")) + } + if let vpcId = vpcId { + try container.encode(vpcId, forKey: ClientRuntime.Key("VpcId")) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let engineDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .engine) + engine = engineDecoded + let vpcIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .vpcId) + vpcId = vpcIdDecoded + let dbClusterAutomatedBackupsArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbClusterAutomatedBackupsArn) + dbClusterAutomatedBackupsArn = dbClusterAutomatedBackupsArnDecoded + let dbClusterIdentifierDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbClusterIdentifier) + dbClusterIdentifier = dbClusterIdentifierDecoded + let restoreWindowDecoded = try containerValues.decodeIfPresent(RDSClientTypes.RestoreWindow.self, forKey: .restoreWindow) + restoreWindow = restoreWindowDecoded + let masterUsernameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .masterUsername) + masterUsername = masterUsernameDecoded + let dbClusterResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbClusterResourceId) + dbClusterResourceId = dbClusterResourceIdDecoded + let regionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .region) + region = regionDecoded + let licenseModelDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .licenseModel) + licenseModel = licenseModelDecoded + let statusDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .status) + status = statusDecoded + let iamDatabaseAuthenticationEnabledDecoded = try containerValues.decode(Swift.Bool.self, forKey: .iamDatabaseAuthenticationEnabled) + iamDatabaseAuthenticationEnabled = iamDatabaseAuthenticationEnabledDecoded + let clusterCreateTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .clusterCreateTime) + clusterCreateTime = clusterCreateTimeDecoded + let storageEncryptedDecoded = try containerValues.decode(Swift.Bool.self, forKey: .storageEncrypted) + storageEncrypted = storageEncryptedDecoded + let allocatedStorageDecoded = try containerValues.decode(Swift.Int.self, forKey: .allocatedStorage) + allocatedStorage = allocatedStorageDecoded + let engineVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .engineVersion) + engineVersion = engineVersionDecoded + let dbClusterArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbClusterArn) + dbClusterArn = dbClusterArnDecoded + let backupRetentionPeriodDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .backupRetentionPeriod) + backupRetentionPeriod = backupRetentionPeriodDecoded + let engineModeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .engineMode) + engineMode = engineModeDecoded + if containerValues.contains(.availabilityZones) { + struct KeyVal0{struct AvailabilityZone{}} + let availabilityZonesWrappedContainer = containerValues.nestedContainerNonThrowable(keyedBy: CollectionMemberCodingKey.CodingKeys.self, forKey: .availabilityZones) + if let availabilityZonesWrappedContainer = availabilityZonesWrappedContainer { + let availabilityZonesContainer = try availabilityZonesWrappedContainer.decodeIfPresent([Swift.String].self, forKey: .member) + var availabilityZonesBuffer:[Swift.String]? = nil + if let availabilityZonesContainer = availabilityZonesContainer { + availabilityZonesBuffer = [Swift.String]() + for stringContainer0 in availabilityZonesContainer { + availabilityZonesBuffer?.append(stringContainer0) + } + } + availabilityZones = availabilityZonesBuffer + } else { + availabilityZones = [] + } + } else { + availabilityZones = nil + } + let portDecoded = try containerValues.decode(Swift.Int.self, forKey: .port) + port = portDecoded + let kmsKeyIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kmsKeyId) + kmsKeyId = kmsKeyIdDecoded + let storageTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .storageType) + storageType = storageTypeDecoded + let iopsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .iops) + iops = iopsDecoded + } +} + +extension RDSClientTypes { + /// An automated backup of a DB cluster. It consists of system backups, transaction logs, and the database cluster properties that existed at the time you deleted the source cluster. + public struct DBClusterAutomatedBackup: Swift.Equatable { + /// For all database engines except Amazon Aurora, AllocatedStorage specifies the allocated storage size in gibibytes (GiB). For Aurora, AllocatedStorage always returns 1, because Aurora DB cluster storage size isn't fixed, but instead automatically adjusts as needed. + public var allocatedStorage: Swift.Int + /// The Availability Zones where instances in the DB cluster can be created. For information on Amazon Web Services Regions and Availability Zones, see [Regions and Availability Zones](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.RegionsAndAvailabilityZones.html). + public var availabilityZones: [Swift.String]? + /// The retention period for the automated backups. + public var backupRetentionPeriod: Swift.Int? + /// The time when the DB cluster was created, in Universal Coordinated Time (UTC). + public var clusterCreateTime: ClientRuntime.Date? + /// The Amazon Resource Name (ARN) for the source DB cluster. + public var dbClusterArn: Swift.String? + /// The Amazon Resource Name (ARN) for the automated backups. + public var dbClusterAutomatedBackupsArn: Swift.String? + /// The identifier for the source DB cluster, which can't be changed and which is unique to an Amazon Web Services Region. + public var dbClusterIdentifier: Swift.String? + /// The resource ID for the source DB cluster, which can't be changed and which is unique to an Amazon Web Services Region. + public var dbClusterResourceId: Swift.String? + /// The name of the database engine for this automated backup. + public var engine: Swift.String? + /// The engine mode of the database engine for the automated backup. + public var engineMode: Swift.String? + /// The version of the database engine for the automated backup. + public var engineVersion: Swift.String? + /// True if mapping of Amazon Web Services Identity and Access Management (IAM) accounts to database accounts is enabled, and otherwise false. + public var iamDatabaseAuthenticationEnabled: Swift.Bool + /// The IOPS (I/O operations per second) value for the automated backup. This setting is only for non-Aurora Multi-AZ DB clusters. + public var iops: Swift.Int? + /// The Amazon Web Services KMS key ID for an automated backup. The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. + public var kmsKeyId: Swift.String? + /// The license model information for this DB cluster automated backup. + public var licenseModel: Swift.String? + /// The master user name of the automated backup. + public var masterUsername: Swift.String? + /// The port number that the automated backup used for connections. Default: Inherits from the source DB cluster Valid Values: 1150-65535 + public var port: Swift.Int + /// The Amazon Web Services Region associated with the automated backup. + public var region: Swift.String? + /// Earliest and latest time an instance can be restored to: + public var restoreWindow: RDSClientTypes.RestoreWindow? + /// A list of status information for an automated backup: + /// + /// * retained - Automated backups for deleted clusters. + public var status: Swift.String? + /// Specifies whether the source DB cluster is encrypted. + public var storageEncrypted: Swift.Bool + /// The storage type associated with the DB cluster. This setting is only for non-Aurora Multi-AZ DB clusters. + public var storageType: Swift.String? + /// The VPC ID associated with the DB cluster. + public var vpcId: Swift.String? + + public init( + allocatedStorage: Swift.Int = 0, + availabilityZones: [Swift.String]? = nil, + backupRetentionPeriod: Swift.Int? = nil, + clusterCreateTime: ClientRuntime.Date? = nil, + dbClusterArn: Swift.String? = nil, + dbClusterAutomatedBackupsArn: Swift.String? = nil, + dbClusterIdentifier: Swift.String? = nil, + dbClusterResourceId: Swift.String? = nil, + engine: Swift.String? = nil, + engineMode: Swift.String? = nil, + engineVersion: Swift.String? = nil, + iamDatabaseAuthenticationEnabled: Swift.Bool = false, + iops: Swift.Int? = nil, + kmsKeyId: Swift.String? = nil, + licenseModel: Swift.String? = nil, + masterUsername: Swift.String? = nil, + port: Swift.Int = 0, + region: Swift.String? = nil, + restoreWindow: RDSClientTypes.RestoreWindow? = nil, + status: Swift.String? = nil, + storageEncrypted: Swift.Bool = false, + storageType: Swift.String? = nil, + vpcId: Swift.String? = nil + ) + { + self.allocatedStorage = allocatedStorage + self.availabilityZones = availabilityZones + self.backupRetentionPeriod = backupRetentionPeriod + self.clusterCreateTime = clusterCreateTime + self.dbClusterArn = dbClusterArn + self.dbClusterAutomatedBackupsArn = dbClusterAutomatedBackupsArn + self.dbClusterIdentifier = dbClusterIdentifier + self.dbClusterResourceId = dbClusterResourceId + self.engine = engine + self.engineMode = engineMode + self.engineVersion = engineVersion + self.iamDatabaseAuthenticationEnabled = iamDatabaseAuthenticationEnabled + self.iops = iops + self.kmsKeyId = kmsKeyId + self.licenseModel = licenseModel + self.masterUsername = masterUsername + self.port = port + self.region = region + self.restoreWindow = restoreWindow + self.status = status + self.storageEncrypted = storageEncrypted + self.storageType = storageType + self.vpcId = vpcId + } + } + +} + +extension DBClusterAutomatedBackupNotFoundFault { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { + let output: AWSClientRuntime.ErrorResponseContainer = try responseDecoder.decode(responseBody: data) + self.properties.message = output.error.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// No automated backup for this DB cluster was found. +public struct DBClusterAutomatedBackupNotFoundFault: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "DBClusterAutomatedBackupNotFoundFault" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct DBClusterAutomatedBackupNotFoundFaultBody: Swift.Equatable { + let message: Swift.String? +} + +extension DBClusterAutomatedBackupNotFoundFaultBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 DBClusterAutomatedBackupQuotaExceededFault { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { + let output: AWSClientRuntime.ErrorResponseContainer = try responseDecoder.decode(responseBody: data) + self.properties.message = output.error.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The quota for retained automated backups was exceeded. This prevents you from retaining any additional automated backups. The retained automated backups quota is the same as your DB cluster quota. +public struct DBClusterAutomatedBackupQuotaExceededFault: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "DBClusterAutomatedBackupQuotaExceededFault" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct DBClusterAutomatedBackupQuotaExceededFaultBody: Swift.Equatable { + let message: Swift.String? +} + +extension DBClusterAutomatedBackupQuotaExceededFaultBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 RDSClientTypes.DBClusterBacktrack: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case backtrackIdentifier = "BacktrackIdentifier" @@ -12816,6 +13244,7 @@ extension RDSClientTypes.DBClusterSnapshot: Swift.Codable { case dbClusterSnapshotArn = "DBClusterSnapshotArn" case dbClusterSnapshotIdentifier = "DBClusterSnapshotIdentifier" case dbSystemId = "DBSystemId" + case dbClusterResourceId = "DbClusterResourceId" case engine = "Engine" case engineMode = "EngineMode" case engineVersion = "EngineVersion" @@ -12867,6 +13296,9 @@ extension RDSClientTypes.DBClusterSnapshot: Swift.Codable { if let dbSystemId = dbSystemId { try container.encode(dbSystemId, forKey: ClientRuntime.Key("DBSystemId")) } + if let dbClusterResourceId = dbClusterResourceId { + try container.encode(dbClusterResourceId, forKey: ClientRuntime.Key("DbClusterResourceId")) + } if let engine = engine { try container.encode(engine, forKey: ClientRuntime.Key("Engine")) } @@ -13013,6 +13445,8 @@ extension RDSClientTypes.DBClusterSnapshot: Swift.Codable { dbSystemId = dbSystemIdDecoded let storageTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .storageType) storageType = storageTypeDecoded + let dbClusterResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbClusterResourceId) + dbClusterResourceId = dbClusterResourceIdDecoded } } @@ -13027,7 +13461,9 @@ extension RDSClientTypes { public var clusterCreateTime: ClientRuntime.Date? /// Specifies the DB cluster identifier of the DB cluster that this DB cluster snapshot was created from. public var dbClusterIdentifier: Swift.String? - /// The Amazon Resource Name (ARN) for the DB cluster snapshot. + /// Specifies the resource ID of the DB cluster that this DB cluster snapshot was created from. + public var dbClusterResourceId: Swift.String? + /// Specifies the Amazon Resource Name (ARN) for the DB cluster snapshot. public var dbClusterSnapshotArn: Swift.String? /// Specifies the identifier for the DB cluster snapshot. public var dbClusterSnapshotIdentifier: Swift.String? @@ -13079,6 +13515,7 @@ extension RDSClientTypes { availabilityZones: [Swift.String]? = nil, clusterCreateTime: ClientRuntime.Date? = nil, dbClusterIdentifier: Swift.String? = nil, + dbClusterResourceId: Swift.String? = nil, dbClusterSnapshotArn: Swift.String? = nil, dbClusterSnapshotIdentifier: Swift.String? = nil, dbSystemId: Swift.String? = nil, @@ -13105,6 +13542,7 @@ extension RDSClientTypes { self.availabilityZones = availabilityZones self.clusterCreateTime = clusterCreateTime self.dbClusterIdentifier = dbClusterIdentifier + self.dbClusterResourceId = dbClusterResourceId self.dbClusterSnapshotArn = dbClusterSnapshotArn self.dbClusterSnapshotIdentifier = dbClusterSnapshotIdentifier self.dbSystemId = dbSystemId @@ -13408,6 +13846,7 @@ extension RDSClientTypes.DBEngineVersion: Swift.Codable { case supportsBabelfish = "SupportsBabelfish" case supportsCertificateRotationWithoutRestart = "SupportsCertificateRotationWithoutRestart" case supportsGlobalDatabases = "SupportsGlobalDatabases" + case supportsLocalWriteForwarding = "SupportsLocalWriteForwarding" case supportsLogExportsToCloudwatchLogs = "SupportsLogExportsToCloudwatchLogs" case supportsParallelQuery = "SupportsParallelQuery" case supportsReadReplica = "SupportsReadReplica" @@ -13558,6 +13997,9 @@ extension RDSClientTypes.DBEngineVersion: Swift.Codable { if supportsGlobalDatabases != false { try container.encode(supportsGlobalDatabases, forKey: ClientRuntime.Key("SupportsGlobalDatabases")) } + if let supportsLocalWriteForwarding = supportsLocalWriteForwarding { + try container.encode(supportsLocalWriteForwarding, forKey: ClientRuntime.Key("SupportsLocalWriteForwarding")) + } if supportsLogExportsToCloudwatchLogs != false { try container.encode(supportsLogExportsToCloudwatchLogs, forKey: ClientRuntime.Key("SupportsLogExportsToCloudwatchLogs")) } @@ -13810,6 +14252,8 @@ extension RDSClientTypes.DBEngineVersion: Swift.Codable { } else { supportedCACertificateIdentifiers = nil } + let supportsLocalWriteForwardingDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .supportsLocalWriteForwarding) + supportsLocalWriteForwarding = supportsLocalWriteForwardingDecoded } } @@ -13868,6 +14312,8 @@ extension RDSClientTypes { public var supportsCertificateRotationWithoutRestart: Swift.Bool? /// A value that indicates whether you can use Aurora global databases with a specific DB engine version. public var supportsGlobalDatabases: Swift.Bool + /// A value that indicates whether the DB engine version supports forwarding write operations from reader DB instances to the writer DB instance in the DB cluster. By default, write operations aren't allowed on reader DB instances. Valid for: Aurora DB clusters only + public var supportsLocalWriteForwarding: Swift.Bool? /// A value that indicates whether the engine version supports exporting the log types specified by ExportableLogTypes to CloudWatch Logs. public var supportsLogExportsToCloudwatchLogs: Swift.Bool /// A value that indicates whether you can use Aurora parallel query with a specific DB engine version. @@ -13906,6 +14352,7 @@ extension RDSClientTypes { supportsBabelfish: Swift.Bool = false, supportsCertificateRotationWithoutRestart: Swift.Bool? = nil, supportsGlobalDatabases: Swift.Bool = false, + supportsLocalWriteForwarding: Swift.Bool? = nil, supportsLogExportsToCloudwatchLogs: Swift.Bool = false, supportsParallelQuery: Swift.Bool = false, supportsReadReplica: Swift.Bool = false, @@ -13939,6 +14386,7 @@ extension RDSClientTypes { self.supportsBabelfish = supportsBabelfish self.supportsCertificateRotationWithoutRestart = supportsCertificateRotationWithoutRestart self.supportsGlobalDatabases = supportsGlobalDatabases + self.supportsLocalWriteForwarding = supportsLocalWriteForwarding self.supportsLogExportsToCloudwatchLogs = supportsLogExportsToCloudwatchLogs self.supportsParallelQuery = supportsParallelQuery self.supportsReadReplica = supportsReadReplica @@ -14009,6 +14457,7 @@ extension RDSClientTypes.DBInstance: Swift.Codable { case networkType = "NetworkType" case optionGroupMemberships = "OptionGroupMemberships" case pendingModifiedValues = "PendingModifiedValues" + case percentProgress = "PercentProgress" case performanceInsightsEnabled = "PerformanceInsightsEnabled" case performanceInsightsKMSKeyId = "PerformanceInsightsKMSKeyId" case performanceInsightsRetentionPeriod = "PerformanceInsightsRetentionPeriod" @@ -14273,6 +14722,9 @@ extension RDSClientTypes.DBInstance: Swift.Codable { if let pendingModifiedValues = pendingModifiedValues { try container.encode(pendingModifiedValues, forKey: ClientRuntime.Key("PendingModifiedValues")) } + if let percentProgress = percentProgress { + try container.encode(percentProgress, forKey: ClientRuntime.Key("PercentProgress")) + } if let performanceInsightsEnabled = performanceInsightsEnabled { try container.encode(performanceInsightsEnabled, forKey: ClientRuntime.Key("PerformanceInsightsEnabled")) } @@ -14783,6 +15235,8 @@ extension RDSClientTypes.DBInstance: Swift.Codable { certificateDetails = certificateDetailsDecoded let readReplicaSourceDBClusterIdentifierDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .readReplicaSourceDBClusterIdentifier) readReplicaSourceDBClusterIdentifier = readReplicaSourceDBClusterIdentifierDecoded + let percentProgressDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .percentProgress) + percentProgress = percentProgressDecoded } } @@ -14854,11 +15308,7 @@ extension RDSClientTypes { public var dbInstancePort: Swift.Int /// The current state of this database. For information about DB instance statuses, see [Viewing DB instance status](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/accessing-monitoring.html#Overview.DBInstance.Status) in the Amazon RDS User Guide. public var dbInstanceStatus: Swift.String? - /// The meaning of this parameter differs depending on the database engine. - /// - /// * For RDS for MariaDB, Microsoft SQL Server, MySQL, and PostgreSQL - The name of the initial database specified for this DB instance when it was created, if one was provided. This same name is returned for the life of the DB instance. - /// - /// * For RDS for Oracle - The Oracle System ID (SID) of the created DB instance. This value is only returned when the object returned is an Oracle DB instance. + /// Contains the initial database name that you provided (if required) when you created the DB instance. This name is returned for the life of your DB instance. For an RDS for Oracle CDB instance, the name identifies the PDB rather than the CDB. public var dbName: Swift.String? /// The list of DB parameter groups applied to this DB instance. public var dbParameterGroups: [RDSClientTypes.DBParameterGroupStatus]? @@ -14918,6 +15368,8 @@ extension RDSClientTypes { public var optionGroupMemberships: [RDSClientTypes.OptionGroupMembership]? /// Information about pending changes to the DB instance. This information is returned only when there are pending changes. Specific changes are identified by subelements. public var pendingModifiedValues: RDSClientTypes.PendingModifiedValues? + /// The progress of the storage optimization operation as a percentage. + public var percentProgress: Swift.String? /// Indicates whether Performance Insights is enabled for the DB instance. public var performanceInsightsEnabled: Swift.Bool? /// The Amazon Web Services KMS key identifier for encryption of Performance Insights data. The Amazon Web Services KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the KMS key. @@ -15033,6 +15485,7 @@ extension RDSClientTypes { networkType: Swift.String? = nil, optionGroupMemberships: [RDSClientTypes.OptionGroupMembership]? = nil, pendingModifiedValues: RDSClientTypes.PendingModifiedValues? = nil, + percentProgress: Swift.String? = nil, performanceInsightsEnabled: Swift.Bool? = nil, performanceInsightsKMSKeyId: Swift.String? = nil, performanceInsightsRetentionPeriod: Swift.Int? = nil, @@ -15116,6 +15569,7 @@ extension RDSClientTypes { self.networkType = networkType self.optionGroupMemberships = optionGroupMemberships self.pendingModifiedValues = pendingModifiedValues + self.percentProgress = percentProgress self.performanceInsightsEnabled = performanceInsightsEnabled self.performanceInsightsKMSKeyId = performanceInsightsKMSKeyId self.performanceInsightsRetentionPeriod = performanceInsightsRetentionPeriod @@ -15422,9 +15876,9 @@ extension RDSClientTypes { public var dbInstanceAutomatedBackupsArn: Swift.String? /// The list of replications to different Amazon Web Services Regions associated with the automated backup. public var dbInstanceAutomatedBackupsReplications: [RDSClientTypes.DBInstanceAutomatedBackupsReplication]? - /// The customer id of the instance that is/was associated with the automated backup. - public var dbInstanceIdentifier: Swift.String? /// The identifier for the source DB instance, which can't be changed and which is unique to an Amazon Web Services Region. + public var dbInstanceIdentifier: Swift.String? + /// The resource ID for the source DB instance, which can't be changed and which is unique to an Amazon Web Services Region. public var dbiResourceId: Swift.String? /// Specifies whether the automated backup is encrypted. public var encrypted: Swift.Bool @@ -15442,7 +15896,7 @@ extension RDSClientTypes { public var kmsKeyId: Swift.String? /// License model information for the automated backup. public var licenseModel: Swift.String? - /// The license model of an automated backup. + /// The master user name of an automated backup. public var masterUsername: Swift.String? /// The option group the automated backup is associated with. If omitted, the default option group for the engine specified is used. public var optionGroupName: Swift.String? @@ -15454,11 +15908,11 @@ extension RDSClientTypes { public var restoreWindow: RDSClientTypes.RestoreWindow? /// Provides a list of status information for an automated backup: /// - /// * active - automated backups for current instances + /// * active - Automated backups for current instances. /// - /// * retained - automated backups for deleted instances + /// * retained - Automated backups for deleted instances. /// - /// * creating - automated backups that are waiting for the first automated snapshot to be available. + /// * creating - Automated backups that are waiting for the first automated snapshot to be available. public var status: Swift.String? /// Specifies the storage throughput for the automated backup. public var storageThroughput: Swift.Int? @@ -15603,7 +16057,7 @@ extension DBInstanceAutomatedBackupQuotaExceededFault { } } -/// The quota for retained automated backups was exceeded. This prevents you from retaining any additional automated backups. The retained automated backups quota is the same as your DB Instance quota. +/// The quota for retained automated backups was exceeded. This prevents you from retaining any additional automated backups. The retained automated backups quota is the same as your DB instance quota. public struct DBInstanceAutomatedBackupQuotaExceededFault: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { @@ -18046,6 +18500,7 @@ extension RDSClientTypes.DBSnapshot: Swift.Codable { case dbInstanceIdentifier = "DBInstanceIdentifier" case dbSnapshotArn = "DBSnapshotArn" case dbSnapshotIdentifier = "DBSnapshotIdentifier" + case dbSystemId = "DBSystemId" case dbiResourceId = "DbiResourceId" case encrypted = "Encrypted" case engine = "Engine" @@ -18093,6 +18548,9 @@ extension RDSClientTypes.DBSnapshot: Swift.Codable { if let dbSnapshotIdentifier = dbSnapshotIdentifier { try container.encode(dbSnapshotIdentifier, forKey: ClientRuntime.Key("DBSnapshotIdentifier")) } + if let dbSystemId = dbSystemId { + try container.encode(dbSystemId, forKey: ClientRuntime.Key("DBSystemId")) + } if let dbiResourceId = dbiResourceId { try container.encode(dbiResourceId, forKey: ClientRuntime.Key("DbiResourceId")) } @@ -18299,6 +18757,8 @@ extension RDSClientTypes.DBSnapshot: Swift.Codable { snapshotTarget = snapshotTargetDecoded let storageThroughputDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .storageThroughput) storageThroughput = storageThroughputDecoded + let dbSystemIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbSystemId) + dbSystemId = dbSystemIdDecoded } } @@ -18315,6 +18775,8 @@ extension RDSClientTypes { public var dbSnapshotArn: Swift.String? /// Specifies the identifier for the DB snapshot. public var dbSnapshotIdentifier: Swift.String? + /// The Oracle system identifier (SID), which is the name of the Oracle database instance that manages your database files. The Oracle SID is also the name of your CDB. + public var dbSystemId: Swift.String? /// The identifier for the source DB instance, which can't be changed and which is unique to an Amazon Web Services Region. public var dbiResourceId: Swift.String? /// Specifies whether the DB snapshot is encrypted. @@ -18378,6 +18840,7 @@ extension RDSClientTypes { dbInstanceIdentifier: Swift.String? = nil, dbSnapshotArn: Swift.String? = nil, dbSnapshotIdentifier: Swift.String? = nil, + dbSystemId: Swift.String? = nil, dbiResourceId: Swift.String? = nil, encrypted: Swift.Bool = false, engine: Swift.String? = nil, @@ -18413,6 +18876,7 @@ extension RDSClientTypes { self.dbInstanceIdentifier = dbInstanceIdentifier self.dbSnapshotArn = dbSnapshotArn self.dbSnapshotIdentifier = dbSnapshotIdentifier + self.dbSystemId = dbSystemId self.dbiResourceId = dbiResourceId self.encrypted = encrypted self.engine = engine @@ -19249,12 +19713,12 @@ extension DeleteBlueGreenDeploymentInput: ClientRuntime.URLPathProvider { } public struct DeleteBlueGreenDeploymentInput: Swift.Equatable { - /// The blue/green deployment identifier of the deployment to be deleted. This parameter isn't case-sensitive. Constraints: + /// The unique identifier of the blue/green deployment to delete. This parameter isn't case-sensitive. Constraints: /// /// * Must match an existing blue/green deployment identifier. /// This member is required. public var blueGreenDeploymentIdentifier: Swift.String? - /// A value that indicates whether to delete the resources in the green environment. You can't specify this option if the blue/green deployment [status](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_BlueGreenDeployment.html) is SWITCHOVER_COMPLETED. + /// Specifies whether to delete the resources in the green environment. You can't specify this option if the blue/green deployment [status](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_BlueGreenDeployment.html) is SWITCHOVER_COMPLETED. public var deleteTarget: Swift.Bool? public init( @@ -19311,7 +19775,7 @@ extension DeleteBlueGreenDeploymentOutputResponse: ClientRuntime.HttpResponseBin } public struct DeleteBlueGreenDeploymentOutputResponse: Swift.Equatable { - /// Contains the details about a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. + /// Details about a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. public var blueGreenDeployment: RDSClientTypes.BlueGreenDeployment? public init( @@ -19439,6 +19903,7 @@ extension DeleteCustomDBEngineVersionOutputResponse: ClientRuntime.HttpResponseB self.supportsBabelfish = output.supportsBabelfish self.supportsCertificateRotationWithoutRestart = output.supportsCertificateRotationWithoutRestart self.supportsGlobalDatabases = output.supportsGlobalDatabases + self.supportsLocalWriteForwarding = output.supportsLocalWriteForwarding self.supportsLogExportsToCloudwatchLogs = output.supportsLogExportsToCloudwatchLogs self.supportsParallelQuery = output.supportsParallelQuery self.supportsReadReplica = output.supportsReadReplica @@ -19471,6 +19936,7 @@ extension DeleteCustomDBEngineVersionOutputResponse: ClientRuntime.HttpResponseB self.supportsBabelfish = false self.supportsCertificateRotationWithoutRestart = nil self.supportsGlobalDatabases = false + self.supportsLocalWriteForwarding = nil self.supportsLogExportsToCloudwatchLogs = false self.supportsParallelQuery = false self.supportsReadReplica = false @@ -19534,6 +20000,8 @@ public struct DeleteCustomDBEngineVersionOutputResponse: Swift.Equatable { public var supportsCertificateRotationWithoutRestart: Swift.Bool? /// A value that indicates whether you can use Aurora global databases with a specific DB engine version. public var supportsGlobalDatabases: Swift.Bool + /// A value that indicates whether the DB engine version supports forwarding write operations from reader DB instances to the writer DB instance in the DB cluster. By default, write operations aren't allowed on reader DB instances. Valid for: Aurora DB clusters only + public var supportsLocalWriteForwarding: Swift.Bool? /// A value that indicates whether the engine version supports exporting the log types specified by ExportableLogTypes to CloudWatch Logs. public var supportsLogExportsToCloudwatchLogs: Swift.Bool /// A value that indicates whether you can use Aurora parallel query with a specific DB engine version. @@ -19572,6 +20040,7 @@ public struct DeleteCustomDBEngineVersionOutputResponse: Swift.Equatable { supportsBabelfish: Swift.Bool = false, supportsCertificateRotationWithoutRestart: Swift.Bool? = nil, supportsGlobalDatabases: Swift.Bool = false, + supportsLocalWriteForwarding: Swift.Bool? = nil, supportsLogExportsToCloudwatchLogs: Swift.Bool = false, supportsParallelQuery: Swift.Bool = false, supportsReadReplica: Swift.Bool = false, @@ -19605,6 +20074,7 @@ public struct DeleteCustomDBEngineVersionOutputResponse: Swift.Equatable { self.supportsBabelfish = supportsBabelfish self.supportsCertificateRotationWithoutRestart = supportsCertificateRotationWithoutRestart self.supportsGlobalDatabases = supportsGlobalDatabases + self.supportsLocalWriteForwarding = supportsLocalWriteForwarding self.supportsLogExportsToCloudwatchLogs = supportsLogExportsToCloudwatchLogs self.supportsParallelQuery = supportsParallelQuery self.supportsReadReplica = supportsReadReplica @@ -19645,6 +20115,7 @@ struct DeleteCustomDBEngineVersionOutputResponseBody: Swift.Equatable { let customDBEngineVersionManifest: Swift.String? let supportsCertificateRotationWithoutRestart: Swift.Bool? let supportedCACertificateIdentifiers: [Swift.String]? + let supportsLocalWriteForwarding: Swift.Bool? } extension DeleteCustomDBEngineVersionOutputResponseBody: Swift.Decodable { @@ -19675,6 +20146,7 @@ extension DeleteCustomDBEngineVersionOutputResponseBody: Swift.Decodable { case supportsBabelfish = "SupportsBabelfish" case supportsCertificateRotationWithoutRestart = "SupportsCertificateRotationWithoutRestart" case supportsGlobalDatabases = "SupportsGlobalDatabases" + case supportsLocalWriteForwarding = "SupportsLocalWriteForwarding" case supportsLogExportsToCloudwatchLogs = "SupportsLogExportsToCloudwatchLogs" case supportsParallelQuery = "SupportsParallelQuery" case supportsReadReplica = "SupportsReadReplica" @@ -19900,6 +20372,106 @@ extension DeleteCustomDBEngineVersionOutputResponseBody: Swift.Decodable { } else { supportedCACertificateIdentifiers = nil } + let supportsLocalWriteForwardingDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .supportsLocalWriteForwarding) + supportsLocalWriteForwarding = supportsLocalWriteForwardingDecoded + } +} + +extension DeleteDBClusterAutomatedBackupInput: Swift.Encodable { + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let dbClusterResourceId = dbClusterResourceId { + try container.encode(dbClusterResourceId, forKey: ClientRuntime.Key("DbClusterResourceId")) + } + try container.encode("DeleteDBClusterAutomatedBackup", forKey:ClientRuntime.Key("Action")) + try container.encode("2014-10-31", forKey:ClientRuntime.Key("Version")) + } +} + +extension DeleteDBClusterAutomatedBackupInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct DeleteDBClusterAutomatedBackupInput: Swift.Equatable { + /// The identifier for the source DB cluster, which can't be changed and which is unique to an Amazon Web Services Region. + /// This member is required. + public var dbClusterResourceId: Swift.String? + + public init( + dbClusterResourceId: Swift.String? = nil + ) + { + self.dbClusterResourceId = dbClusterResourceId + } +} + +struct DeleteDBClusterAutomatedBackupInputBody: Swift.Equatable { + let dbClusterResourceId: Swift.String? +} + +extension DeleteDBClusterAutomatedBackupInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dbClusterResourceId = "DbClusterResourceId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let dbClusterResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbClusterResourceId) + dbClusterResourceId = dbClusterResourceIdDecoded + } +} + +public enum DeleteDBClusterAutomatedBackupOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restXMLError = try await AWSClientRuntime.RestXMLError(httpResponse: httpResponse) + switch restXMLError.errorCode { + case "DBClusterAutomatedBackupNotFoundFault": return try await DBClusterAutomatedBackupNotFoundFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + case "InvalidDBClusterAutomatedBackupStateFault": return try await InvalidDBClusterAutomatedBackupStateFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restXMLError.message, requestID: restXMLError.requestId, typeName: restXMLError.errorCode) + } + } +} + +extension DeleteDBClusterAutomatedBackupOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DeleteDBClusterAutomatedBackupOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.dbClusterAutomatedBackup = output.dbClusterAutomatedBackup + } else { + self.dbClusterAutomatedBackup = nil + } + } +} + +public struct DeleteDBClusterAutomatedBackupOutputResponse: Swift.Equatable { + /// An automated backup of a DB cluster. It consists of system backups, transaction logs, and the database cluster properties that existed at the time you deleted the source cluster. + public var dbClusterAutomatedBackup: RDSClientTypes.DBClusterAutomatedBackup? + + public init( + dbClusterAutomatedBackup: RDSClientTypes.DBClusterAutomatedBackup? = nil + ) + { + self.dbClusterAutomatedBackup = dbClusterAutomatedBackup + } +} + +struct DeleteDBClusterAutomatedBackupOutputResponseBody: Swift.Equatable { + let dbClusterAutomatedBackup: RDSClientTypes.DBClusterAutomatedBackup? +} + +extension DeleteDBClusterAutomatedBackupOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dbClusterAutomatedBackup = "DBClusterAutomatedBackup" + } + + public init(from decoder: Swift.Decoder) throws { + let topLevelContainer = try decoder.container(keyedBy: ClientRuntime.Key.self) + let containerValues = try topLevelContainer.nestedContainer(keyedBy: CodingKeys.self, forKey: ClientRuntime.Key("DeleteDBClusterAutomatedBackupResult")) + let dbClusterAutomatedBackupDecoded = try containerValues.decodeIfPresent(RDSClientTypes.DBClusterAutomatedBackup.self, forKey: .dbClusterAutomatedBackup) + dbClusterAutomatedBackup = dbClusterAutomatedBackupDecoded } } @@ -20144,10 +20716,13 @@ extension DeleteDBClusterInput: Swift.Encodable { if let dbClusterIdentifier = dbClusterIdentifier { try container.encode(dbClusterIdentifier, forKey: ClientRuntime.Key("DBClusterIdentifier")) } + if let deleteAutomatedBackups = deleteAutomatedBackups { + try container.encode(deleteAutomatedBackups, forKey: ClientRuntime.Key("DeleteAutomatedBackups")) + } if let finalDBSnapshotIdentifier = finalDBSnapshotIdentifier { try container.encode(finalDBSnapshotIdentifier, forKey: ClientRuntime.Key("FinalDBSnapshotIdentifier")) } - if skipFinalSnapshot != false { + if let skipFinalSnapshot = skipFinalSnapshot { try container.encode(skipFinalSnapshot, forKey: ClientRuntime.Key("SkipFinalSnapshot")) } try container.encode("DeleteDBCluster", forKey:ClientRuntime.Key("Action")) @@ -20168,6 +20743,8 @@ public struct DeleteDBClusterInput: Swift.Equatable { /// * Must match an existing DBClusterIdentifier. /// This member is required. public var dbClusterIdentifier: Swift.String? + /// A value that indicates whether to remove automated backups immediately after the DB cluster is deleted. This parameter isn't case-sensitive. The default is to remove automated backups immediately after the DB cluster is deleted. + public var deleteAutomatedBackups: Swift.Bool? /// The DB cluster snapshot identifier of the new DB cluster snapshot created when SkipFinalSnapshot is disabled. Specifying this parameter and also skipping the creation of a final DB cluster snapshot with the SkipFinalShapshot parameter results in an error. Constraints: /// /// * Must be 1 to 255 letters, numbers, or hyphens. @@ -20177,15 +20754,17 @@ public struct DeleteDBClusterInput: Swift.Equatable { /// * Can't end with a hyphen or contain two consecutive hyphens public var finalDBSnapshotIdentifier: Swift.String? /// A value that indicates whether to skip the creation of a final DB cluster snapshot before the DB cluster is deleted. If skip is specified, no DB cluster snapshot is created. If skip isn't specified, a DB cluster snapshot is created before the DB cluster is deleted. By default, skip isn't specified, and the DB cluster snapshot is created. By default, this parameter is disabled. You must specify a FinalDBSnapshotIdentifier parameter if SkipFinalSnapshot is disabled. - public var skipFinalSnapshot: Swift.Bool + public var skipFinalSnapshot: Swift.Bool? public init( dbClusterIdentifier: Swift.String? = nil, + deleteAutomatedBackups: Swift.Bool? = nil, finalDBSnapshotIdentifier: Swift.String? = nil, - skipFinalSnapshot: Swift.Bool = false + skipFinalSnapshot: Swift.Bool? = nil ) { self.dbClusterIdentifier = dbClusterIdentifier + self.deleteAutomatedBackups = deleteAutomatedBackups self.finalDBSnapshotIdentifier = finalDBSnapshotIdentifier self.skipFinalSnapshot = skipFinalSnapshot } @@ -20193,13 +20772,15 @@ public struct DeleteDBClusterInput: Swift.Equatable { struct DeleteDBClusterInputBody: Swift.Equatable { let dbClusterIdentifier: Swift.String? - let skipFinalSnapshot: Swift.Bool + let skipFinalSnapshot: Swift.Bool? let finalDBSnapshotIdentifier: Swift.String? + let deleteAutomatedBackups: Swift.Bool? } extension DeleteDBClusterInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case dbClusterIdentifier = "DBClusterIdentifier" + case deleteAutomatedBackups = "DeleteAutomatedBackups" case finalDBSnapshotIdentifier = "FinalDBSnapshotIdentifier" case skipFinalSnapshot = "SkipFinalSnapshot" } @@ -20208,10 +20789,12 @@ extension DeleteDBClusterInputBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let dbClusterIdentifierDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbClusterIdentifier) dbClusterIdentifier = dbClusterIdentifierDecoded - let skipFinalSnapshotDecoded = try containerValues.decode(Swift.Bool.self, forKey: .skipFinalSnapshot) + let skipFinalSnapshotDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .skipFinalSnapshot) skipFinalSnapshot = skipFinalSnapshotDecoded let finalDBSnapshotIdentifierDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .finalDBSnapshotIdentifier) finalDBSnapshotIdentifier = finalDBSnapshotIdentifierDecoded + let deleteAutomatedBackupsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .deleteAutomatedBackups) + deleteAutomatedBackups = deleteAutomatedBackupsDecoded } } @@ -20219,6 +20802,7 @@ public enum DeleteDBClusterOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restXMLError = try await AWSClientRuntime.RestXMLError(httpResponse: httpResponse) switch restXMLError.errorCode { + case "DBClusterAutomatedBackupQuotaExceededFault": return try await DBClusterAutomatedBackupQuotaExceededFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "DBClusterNotFoundFault": return try await DBClusterNotFoundFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "DBClusterSnapshotAlreadyExistsFault": return try await DBClusterSnapshotAlreadyExistsFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "InvalidDBClusterSnapshotStateFault": return try await InvalidDBClusterSnapshotStateFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) @@ -20564,7 +21148,7 @@ extension DeleteDBInstanceInput: Swift.Encodable { if let finalDBSnapshotIdentifier = finalDBSnapshotIdentifier { try container.encode(finalDBSnapshotIdentifier, forKey: ClientRuntime.Key("FinalDBSnapshotIdentifier")) } - if skipFinalSnapshot != false { + if let skipFinalSnapshot = skipFinalSnapshot { try container.encode(skipFinalSnapshot, forKey: ClientRuntime.Key("SkipFinalSnapshot")) } try container.encode("DeleteDBInstance", forKey:ClientRuntime.Key("Action")) @@ -20598,13 +21182,13 @@ public struct DeleteDBInstanceInput: Swift.Equatable { /// * Can't be specified when deleting a read replica. public var finalDBSnapshotIdentifier: Swift.String? /// A value that indicates whether to skip the creation of a final DB snapshot before deleting the instance. If you enable this parameter, RDS doesn't create a DB snapshot. If you don't enable this parameter, RDS creates a DB snapshot before the DB instance is deleted. By default, skip isn't enabled, and the DB snapshot is created. If you don't enable this parameter, you must specify the FinalDBSnapshotIdentifier parameter. When a DB instance is in a failure state and has a status of failed, incompatible-restore, or incompatible-network, RDS can delete the instance only if you enable this parameter. If you delete a read replica or an RDS Custom instance, you must enable this setting. This setting is required for RDS Custom. - public var skipFinalSnapshot: Swift.Bool + public var skipFinalSnapshot: Swift.Bool? public init( dbInstanceIdentifier: Swift.String? = nil, deleteAutomatedBackups: Swift.Bool? = nil, finalDBSnapshotIdentifier: Swift.String? = nil, - skipFinalSnapshot: Swift.Bool = false + skipFinalSnapshot: Swift.Bool? = nil ) { self.dbInstanceIdentifier = dbInstanceIdentifier @@ -20616,7 +21200,7 @@ public struct DeleteDBInstanceInput: Swift.Equatable { struct DeleteDBInstanceInputBody: Swift.Equatable { let dbInstanceIdentifier: Swift.String? - let skipFinalSnapshot: Swift.Bool + let skipFinalSnapshot: Swift.Bool? let finalDBSnapshotIdentifier: Swift.String? let deleteAutomatedBackups: Swift.Bool? } @@ -20633,7 +21217,7 @@ extension DeleteDBInstanceInputBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let dbInstanceIdentifierDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbInstanceIdentifier) dbInstanceIdentifier = dbInstanceIdentifierDecoded - let skipFinalSnapshotDecoded = try containerValues.decode(Swift.Bool.self, forKey: .skipFinalSnapshot) + let skipFinalSnapshotDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .skipFinalSnapshot) skipFinalSnapshot = skipFinalSnapshotDecoded let finalDBSnapshotIdentifierDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .finalDBSnapshotIdentifier) finalDBSnapshotIdentifier = finalDBSnapshotIdentifierDecoded @@ -21755,11 +22339,11 @@ extension DescribeBlueGreenDeploymentsInput: ClientRuntime.URLPathProvider { } public struct DescribeBlueGreenDeploymentsInput: Swift.Equatable { - /// The blue/green deployment identifier. If this parameter is specified, information from only the specific blue/green deployment is returned. This parameter isn't case-sensitive. Constraints: + /// The blue/green deployment identifier. If you specify this parameter, the response only includes information about the specific blue/green deployment. This parameter isn't case-sensitive. Constraints: /// - /// * If supplied, must match an existing blue/green deployment identifier. + /// * Must match an existing blue/green deployment identifier. public var blueGreenDeploymentIdentifier: Swift.String? - /// A filter that specifies one or more blue/green deployments to describe. Supported filters: + /// A filter that specifies one or more blue/green deployments to describe. Valid Values: /// /// * blue-green-deployment-identifier - Accepts system-generated identifiers for blue/green deployments. The results list only includes information about the blue/green deployments with the specified identifiers. /// @@ -21769,9 +22353,13 @@ public struct DescribeBlueGreenDeploymentsInput: Swift.Equatable { /// /// * target - Accepts target databases for a blue/green deployment. The results list only includes information about the blue/green deployments with the specified target databases. public var filters: [RDSClientTypes.Filter]? - /// An optional pagination token provided by a previous DescribeBlueGreenDeployments request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords. + /// An optional pagination token provided by a previous DescribeBlueGreenDeployments request. If you specify this parameter, the response only includes records beyond the marker, up to the value specified by MaxRecords. public var marker: Swift.String? - /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so you can retrieve the remaining results. Default: 100 Constraints: Minimum 20, maximum 100. + /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so you can retrieve the remaining results. Default: 100 Constraints: + /// + /// * Must be a minimum of 20. + /// + /// * Can't exceed 100. public var maxRecords: Swift.Int? public init( @@ -21858,7 +22446,7 @@ extension DescribeBlueGreenDeploymentsOutputResponse: ClientRuntime.HttpResponse } public struct DescribeBlueGreenDeploymentsOutputResponse: Swift.Equatable { - /// Contains a list of blue/green deployments for the user. + /// A list of blue/green deployments in the current account and Amazon Web Services Region. public var blueGreenDeployments: [RDSClientTypes.BlueGreenDeployment]? /// A pagination token that can be used in a later DescribeBlueGreenDeployments request. public var marker: Swift.String? @@ -22097,6 +22685,213 @@ extension DescribeCertificatesOutputResponseBody: Swift.Decodable { } } +extension DescribeDBClusterAutomatedBackupsInput: Swift.Encodable { + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let dbClusterIdentifier = dbClusterIdentifier { + try container.encode(dbClusterIdentifier, forKey: ClientRuntime.Key("DBClusterIdentifier")) + } + if let dbClusterResourceId = dbClusterResourceId { + try container.encode(dbClusterResourceId, forKey: ClientRuntime.Key("DbClusterResourceId")) + } + if let filters = filters { + if !filters.isEmpty { + var filtersContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("Filters")) + for (index0, filter0) in filters.enumerated() { + try filtersContainer.encode(filter0, forKey: ClientRuntime.Key("Filter.\(index0.advanced(by: 1))")) + } + } + else { + var filtersContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("Filters")) + try filtersContainer.encode("", forKey: ClientRuntime.Key("")) + } + } + if let marker = marker { + try container.encode(marker, forKey: ClientRuntime.Key("Marker")) + } + if let maxRecords = maxRecords { + try container.encode(maxRecords, forKey: ClientRuntime.Key("MaxRecords")) + } + try container.encode("DescribeDBClusterAutomatedBackups", forKey:ClientRuntime.Key("Action")) + try container.encode("2014-10-31", forKey:ClientRuntime.Key("Version")) + } +} + +extension DescribeDBClusterAutomatedBackupsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct DescribeDBClusterAutomatedBackupsInput: Swift.Equatable { + /// (Optional) The user-supplied DB cluster identifier. If this parameter is specified, it must match the identifier of an existing DB cluster. It returns information from the specific DB cluster's automated backup. This parameter isn't case-sensitive. + public var dbClusterIdentifier: Swift.String? + /// The resource ID of the DB cluster that is the source of the automated backup. This parameter isn't case-sensitive. + public var dbClusterResourceId: Swift.String? + /// A filter that specifies which resources to return based on status. Supported filters are the following: + /// + /// * status + /// + /// * retained - Automated backups for deleted clusters and after backup replication is stopped. + /// + /// + /// + /// + /// * db-cluster-id - Accepts DB cluster identifiers and Amazon Resource Names (ARNs). The results list includes only information about the DB cluster automated backups identified by these ARNs. + /// + /// * db-cluster-resource-id - Accepts DB resource identifiers and Amazon Resource Names (ARNs). The results list includes only information about the DB cluster resources identified by these ARNs. + /// + /// + /// Returns all resources by default. The status for each resource is specified in the response. + public var filters: [RDSClientTypes.Filter]? + /// The pagination token provided in the previous request. If this parameter is specified the response includes only records beyond the marker, up to MaxRecords. + public var marker: Swift.String? + /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that you can retrieve the remaining results. + public var maxRecords: Swift.Int? + + public init( + dbClusterIdentifier: Swift.String? = nil, + dbClusterResourceId: Swift.String? = nil, + filters: [RDSClientTypes.Filter]? = nil, + marker: Swift.String? = nil, + maxRecords: Swift.Int? = nil + ) + { + self.dbClusterIdentifier = dbClusterIdentifier + self.dbClusterResourceId = dbClusterResourceId + self.filters = filters + self.marker = marker + self.maxRecords = maxRecords + } +} + +struct DescribeDBClusterAutomatedBackupsInputBody: Swift.Equatable { + let dbClusterResourceId: Swift.String? + let dbClusterIdentifier: Swift.String? + let filters: [RDSClientTypes.Filter]? + let maxRecords: Swift.Int? + let marker: Swift.String? +} + +extension DescribeDBClusterAutomatedBackupsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dbClusterIdentifier = "DBClusterIdentifier" + case dbClusterResourceId = "DbClusterResourceId" + case filters = "Filters" + case marker = "Marker" + case maxRecords = "MaxRecords" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let dbClusterResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbClusterResourceId) + dbClusterResourceId = dbClusterResourceIdDecoded + let dbClusterIdentifierDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbClusterIdentifier) + dbClusterIdentifier = dbClusterIdentifierDecoded + if containerValues.contains(.filters) { + struct KeyVal0{struct Filter{}} + let filtersWrappedContainer = containerValues.nestedContainerNonThrowable(keyedBy: CollectionMemberCodingKey.CodingKeys.self, forKey: .filters) + if let filtersWrappedContainer = filtersWrappedContainer { + let filtersContainer = try filtersWrappedContainer.decodeIfPresent([RDSClientTypes.Filter].self, forKey: .member) + var filtersBuffer:[RDSClientTypes.Filter]? = nil + if let filtersContainer = filtersContainer { + filtersBuffer = [RDSClientTypes.Filter]() + for structureContainer0 in filtersContainer { + filtersBuffer?.append(structureContainer0) + } + } + filters = filtersBuffer + } else { + filters = [] + } + } else { + filters = nil + } + let maxRecordsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxRecords) + maxRecords = maxRecordsDecoded + let markerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .marker) + marker = markerDecoded + } +} + +public enum DescribeDBClusterAutomatedBackupsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restXMLError = try await AWSClientRuntime.RestXMLError(httpResponse: httpResponse) + switch restXMLError.errorCode { + case "DBClusterAutomatedBackupNotFoundFault": return try await DBClusterAutomatedBackupNotFoundFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restXMLError.message, requestID: restXMLError.requestId, typeName: restXMLError.errorCode) + } + } +} + +extension DescribeDBClusterAutomatedBackupsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DescribeDBClusterAutomatedBackupsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.dbClusterAutomatedBackups = output.dbClusterAutomatedBackups + self.marker = output.marker + } else { + self.dbClusterAutomatedBackups = nil + self.marker = nil + } + } +} + +public struct DescribeDBClusterAutomatedBackupsOutputResponse: Swift.Equatable { + /// A list of DBClusterAutomatedBackup backups. + public var dbClusterAutomatedBackups: [RDSClientTypes.DBClusterAutomatedBackup]? + /// The pagination token provided in the previous request. If this parameter is specified the response includes only records beyond the marker, up to MaxRecords. + public var marker: Swift.String? + + public init( + dbClusterAutomatedBackups: [RDSClientTypes.DBClusterAutomatedBackup]? = nil, + marker: Swift.String? = nil + ) + { + self.dbClusterAutomatedBackups = dbClusterAutomatedBackups + self.marker = marker + } +} + +struct DescribeDBClusterAutomatedBackupsOutputResponseBody: Swift.Equatable { + let marker: Swift.String? + let dbClusterAutomatedBackups: [RDSClientTypes.DBClusterAutomatedBackup]? +} + +extension DescribeDBClusterAutomatedBackupsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dbClusterAutomatedBackups = "DBClusterAutomatedBackups" + case marker = "Marker" + } + + public init(from decoder: Swift.Decoder) throws { + let topLevelContainer = try decoder.container(keyedBy: ClientRuntime.Key.self) + let containerValues = try topLevelContainer.nestedContainer(keyedBy: CodingKeys.self, forKey: ClientRuntime.Key("DescribeDBClusterAutomatedBackupsResult")) + let markerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .marker) + marker = markerDecoded + if containerValues.contains(.dbClusterAutomatedBackups) { + struct KeyVal0{struct DBClusterAutomatedBackup{}} + let dbClusterAutomatedBackupsWrappedContainer = containerValues.nestedContainerNonThrowable(keyedBy: CollectionMemberCodingKey.CodingKeys.self, forKey: .dbClusterAutomatedBackups) + if let dbClusterAutomatedBackupsWrappedContainer = dbClusterAutomatedBackupsWrappedContainer { + let dbClusterAutomatedBackupsContainer = try dbClusterAutomatedBackupsWrappedContainer.decodeIfPresent([RDSClientTypes.DBClusterAutomatedBackup].self, forKey: .member) + var dbClusterAutomatedBackupsBuffer:[RDSClientTypes.DBClusterAutomatedBackup]? = nil + if let dbClusterAutomatedBackupsContainer = dbClusterAutomatedBackupsContainer { + dbClusterAutomatedBackupsBuffer = [RDSClientTypes.DBClusterAutomatedBackup]() + for structureContainer0 in dbClusterAutomatedBackupsContainer { + dbClusterAutomatedBackupsBuffer?.append(structureContainer0) + } + } + dbClusterAutomatedBackups = dbClusterAutomatedBackupsBuffer + } else { + dbClusterAutomatedBackups = [] + } + } else { + dbClusterAutomatedBackups = nil + } + } +} + extension DescribeDBClusterBacktracksInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var container = encoder.container(keyedBy: ClientRuntime.Key.self) @@ -23007,6 +23802,9 @@ extension DescribeDBClusterSnapshotsInput: Swift.Encodable { if let dbClusterSnapshotIdentifier = dbClusterSnapshotIdentifier { try container.encode(dbClusterSnapshotIdentifier, forKey: ClientRuntime.Key("DBClusterSnapshotIdentifier")) } + if let dbClusterResourceId = dbClusterResourceId { + try container.encode(dbClusterResourceId, forKey: ClientRuntime.Key("DbClusterResourceId")) + } if let filters = filters { if !filters.isEmpty { var filtersContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("Filters")) @@ -23019,10 +23817,10 @@ extension DescribeDBClusterSnapshotsInput: Swift.Encodable { try filtersContainer.encode("", forKey: ClientRuntime.Key("")) } } - if includePublic != false { + if let includePublic = includePublic { try container.encode(includePublic, forKey: ClientRuntime.Key("IncludePublic")) } - if includeShared != false { + if let includeShared = includeShared { try container.encode(includeShared, forKey: ClientRuntime.Key("IncludeShared")) } if let marker = marker { @@ -23051,6 +23849,8 @@ public struct DescribeDBClusterSnapshotsInput: Swift.Equatable { /// /// * If supplied, must match the identifier of an existing DBCluster. public var dbClusterIdentifier: Swift.String? + /// A specific DB cluster resource ID to describe. + public var dbClusterResourceId: Swift.String? /// A specific DB cluster snapshot identifier to describe. This parameter can't be used in conjunction with the DBClusterIdentifier parameter. This value is stored as a lowercase string. Constraints: /// /// * If supplied, must match the identifier of an existing DBClusterSnapshot. @@ -23068,9 +23868,9 @@ public struct DescribeDBClusterSnapshotsInput: Swift.Equatable { /// * engine - Accepts names of database engines. public var filters: [RDSClientTypes.Filter]? /// A value that indicates whether to include manual DB cluster snapshots that are public and can be copied or restored by any Amazon Web Services account. By default, the public snapshots are not included. You can share a manual DB cluster snapshot as public by using the [ModifyDBClusterSnapshotAttribute] API action. - public var includePublic: Swift.Bool + public var includePublic: Swift.Bool? /// A value that indicates whether to include shared manual DB cluster snapshots from other Amazon Web Services accounts that this Amazon Web Services account has been given permission to copy or restore. By default, these snapshots are not included. You can give an Amazon Web Services account permission to restore a manual DB cluster snapshot from another Amazon Web Services account by the ModifyDBClusterSnapshotAttribute API action. - public var includeShared: Swift.Bool + public var includeShared: Swift.Bool? /// An optional pagination token provided by a previous DescribeDBClusterSnapshots request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords. public var marker: Swift.String? /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so you can retrieve the remaining results. Default: 100 Constraints: Minimum 20, maximum 100. @@ -23091,16 +23891,18 @@ public struct DescribeDBClusterSnapshotsInput: Swift.Equatable { public init( dbClusterIdentifier: Swift.String? = nil, + dbClusterResourceId: Swift.String? = nil, dbClusterSnapshotIdentifier: Swift.String? = nil, filters: [RDSClientTypes.Filter]? = nil, - includePublic: Swift.Bool = false, - includeShared: Swift.Bool = false, + includePublic: Swift.Bool? = nil, + includeShared: Swift.Bool? = nil, marker: Swift.String? = nil, maxRecords: Swift.Int? = nil, snapshotType: Swift.String? = nil ) { self.dbClusterIdentifier = dbClusterIdentifier + self.dbClusterResourceId = dbClusterResourceId self.dbClusterSnapshotIdentifier = dbClusterSnapshotIdentifier self.filters = filters self.includePublic = includePublic @@ -23118,14 +23920,16 @@ struct DescribeDBClusterSnapshotsInputBody: Swift.Equatable { let filters: [RDSClientTypes.Filter]? let maxRecords: Swift.Int? let marker: Swift.String? - let includeShared: Swift.Bool - let includePublic: Swift.Bool + let includeShared: Swift.Bool? + let includePublic: Swift.Bool? + let dbClusterResourceId: Swift.String? } extension DescribeDBClusterSnapshotsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case dbClusterIdentifier = "DBClusterIdentifier" case dbClusterSnapshotIdentifier = "DBClusterSnapshotIdentifier" + case dbClusterResourceId = "DbClusterResourceId" case filters = "Filters" case includePublic = "IncludePublic" case includeShared = "IncludeShared" @@ -23165,10 +23969,12 @@ extension DescribeDBClusterSnapshotsInputBody: Swift.Decodable { maxRecords = maxRecordsDecoded let markerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .marker) marker = markerDecoded - let includeSharedDecoded = try containerValues.decode(Swift.Bool.self, forKey: .includeShared) + let includeSharedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .includeShared) includeShared = includeSharedDecoded - let includePublicDecoded = try containerValues.decode(Swift.Bool.self, forKey: .includePublic) + let includePublicDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .includePublic) includePublic = includePublicDecoded + let dbClusterResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbClusterResourceId) + dbClusterResourceId = dbClusterResourceIdDecoded } } @@ -23269,7 +24075,7 @@ extension DescribeDBClustersInput: Swift.Encodable { try filtersContainer.encode("", forKey: ClientRuntime.Key("")) } } - if includeShared != false { + if let includeShared = includeShared { try container.encode(includeShared, forKey: ClientRuntime.Key("IncludeShared")) } if let marker = marker { @@ -23308,7 +24114,7 @@ public struct DescribeDBClustersInput: Swift.Equatable { /// * engine - Accepts engine names. The results list only includes information about the DB clusters for these engines. public var filters: [RDSClientTypes.Filter]? /// Specifies whether the output includes information about clusters shared from other Amazon Web Services accounts. - public var includeShared: Swift.Bool + public var includeShared: Swift.Bool? /// An optional pagination token provided by a previous DescribeDBClusters request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords. public var marker: Swift.String? /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so you can retrieve the remaining results. Default: 100 Constraints: Minimum 20, maximum 100. @@ -23317,7 +24123,7 @@ public struct DescribeDBClustersInput: Swift.Equatable { public init( dbClusterIdentifier: Swift.String? = nil, filters: [RDSClientTypes.Filter]? = nil, - includeShared: Swift.Bool = false, + includeShared: Swift.Bool? = nil, marker: Swift.String? = nil, maxRecords: Swift.Int? = nil ) @@ -23335,7 +24141,7 @@ struct DescribeDBClustersInputBody: Swift.Equatable { let filters: [RDSClientTypes.Filter]? let maxRecords: Swift.Int? let marker: Swift.String? - let includeShared: Swift.Bool + let includeShared: Swift.Bool? } extension DescribeDBClustersInputBody: Swift.Decodable { @@ -23374,7 +24180,7 @@ extension DescribeDBClustersInputBody: Swift.Decodable { maxRecords = maxRecordsDecoded let markerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .marker) marker = markerDecoded - let includeSharedDecoded = try containerValues.decode(Swift.Bool.self, forKey: .includeShared) + let includeSharedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .includeShared) includeShared = includeSharedDecoded } } @@ -23464,7 +24270,7 @@ extension DescribeDBEngineVersionsInput: Swift.Encodable { if let dbParameterGroupFamily = dbParameterGroupFamily { try container.encode(dbParameterGroupFamily, forKey: ClientRuntime.Key("DBParameterGroupFamily")) } - if defaultOnly != false { + if let defaultOnly = defaultOnly { try container.encode(defaultOnly, forKey: ClientRuntime.Key("DefaultOnly")) } if let engine = engine { @@ -23517,7 +24323,7 @@ public struct DescribeDBEngineVersionsInput: Swift.Equatable { /// * If supplied, must match an existing DBParameterGroupFamily. public var dbParameterGroupFamily: Swift.String? /// A value that indicates whether only the default version of the specified engine or engine and major version combination is returned. - public var defaultOnly: Swift.Bool + public var defaultOnly: Swift.Bool? /// The database engine to return. Valid Values: /// /// * aurora-mysql @@ -23592,7 +24398,7 @@ public struct DescribeDBEngineVersionsInput: Swift.Equatable { public init( dbParameterGroupFamily: Swift.String? = nil, - defaultOnly: Swift.Bool = false, + defaultOnly: Swift.Bool? = nil, engine: Swift.String? = nil, engineVersion: Swift.String? = nil, filters: [RDSClientTypes.Filter]? = nil, @@ -23623,7 +24429,7 @@ struct DescribeDBEngineVersionsInputBody: Swift.Equatable { let filters: [RDSClientTypes.Filter]? let maxRecords: Swift.Int? let marker: Swift.String? - let defaultOnly: Swift.Bool + let defaultOnly: Swift.Bool? let listSupportedCharacterSets: Swift.Bool? let listSupportedTimezones: Swift.Bool? let includeAll: Swift.Bool? @@ -23674,7 +24480,7 @@ extension DescribeDBEngineVersionsInputBody: Swift.Decodable { maxRecords = maxRecordsDecoded let markerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .marker) marker = markerDecoded - let defaultOnlyDecoded = try containerValues.decode(Swift.Bool.self, forKey: .defaultOnly) + let defaultOnlyDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .defaultOnly) defaultOnly = defaultOnlyDecoded let listSupportedCharacterSetsDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .listSupportedCharacterSets) listSupportedCharacterSets = listSupportedCharacterSetsDecoded @@ -23808,7 +24614,7 @@ extension DescribeDBInstanceAutomatedBackupsInput: ClientRuntime.URLPathProvider public struct DescribeDBInstanceAutomatedBackupsInput: Swift.Equatable { /// The Amazon Resource Name (ARN) of the replicated automated backups, for example, arn:aws:rds:us-east-1:123456789012:auto-backup:ab-L2IJCEXJP7XQ7HOJ4SIEXAMPLE. This setting doesn't apply to RDS Custom. public var dbInstanceAutomatedBackupsArn: Swift.String? - /// (Optional) The user-supplied instance identifier. If this parameter is specified, it must match the identifier of an existing DB instance. It returns information from the specific DB instance' automated backup. This parameter isn't case-sensitive. + /// (Optional) The user-supplied instance identifier. If this parameter is specified, it must match the identifier of an existing DB instance. It returns information from the specific DB instance's automated backup. This parameter isn't case-sensitive. public var dbInstanceIdentifier: Swift.String? /// The resource ID of the DB instance that is the source of the automated backup. This parameter isn't case-sensitive. public var dbiResourceId: Swift.String? @@ -23816,11 +24622,11 @@ public struct DescribeDBInstanceAutomatedBackupsInput: Swift.Equatable { /// /// * status /// - /// * active - automated backups for current instances + /// * active - Automated backups for current instances. /// - /// * retained - automated backups for deleted instances and after backup replication is stopped + /// * creating - Automated backups that are waiting for the first automated snapshot to be available. /// - /// * creating - automated backups that are waiting for the first automated snapshot to be available + /// * retained - Automated backups for deleted instances and after backup replication is stopped. /// /// /// @@ -24244,10 +25050,10 @@ extension DescribeDBLogFilesInput: Swift.Encodable { if let dbInstanceIdentifier = dbInstanceIdentifier { try container.encode(dbInstanceIdentifier, forKey: ClientRuntime.Key("DBInstanceIdentifier")) } - if fileLastWritten != 0 { + if let fileLastWritten = fileLastWritten { try container.encode(fileLastWritten, forKey: ClientRuntime.Key("FileLastWritten")) } - if fileSize != 0 { + if let fileSize = fileSize { try container.encode(fileSize, forKey: ClientRuntime.Key("FileSize")) } if let filenameContains = filenameContains { @@ -24290,9 +25096,9 @@ public struct DescribeDBLogFilesInput: Swift.Equatable { /// This member is required. public var dbInstanceIdentifier: Swift.String? /// Filters the available log files for files written since the specified date, in POSIX timestamp format with milliseconds. - public var fileLastWritten: Swift.Int + public var fileLastWritten: Swift.Int? /// Filters the available log files for files larger than the specified size. - public var fileSize: Swift.Int + public var fileSize: Swift.Int? /// Filters the available log files for log file names that contain the specified string. public var filenameContains: Swift.String? /// This parameter isn't currently supported. @@ -24304,8 +25110,8 @@ public struct DescribeDBLogFilesInput: Swift.Equatable { public init( dbInstanceIdentifier: Swift.String? = nil, - fileLastWritten: Swift.Int = 0, - fileSize: Swift.Int = 0, + fileLastWritten: Swift.Int? = nil, + fileSize: Swift.Int? = nil, filenameContains: Swift.String? = nil, filters: [RDSClientTypes.Filter]? = nil, marker: Swift.String? = nil, @@ -24325,8 +25131,8 @@ public struct DescribeDBLogFilesInput: Swift.Equatable { struct DescribeDBLogFilesInputBody: Swift.Equatable { let dbInstanceIdentifier: Swift.String? let filenameContains: Swift.String? - let fileLastWritten: Swift.Int - let fileSize: Swift.Int + let fileLastWritten: Swift.Int? + let fileSize: Swift.Int? let filters: [RDSClientTypes.Filter]? let maxRecords: Swift.Int? let marker: Swift.String? @@ -24349,9 +25155,9 @@ extension DescribeDBLogFilesInputBody: Swift.Decodable { dbInstanceIdentifier = dbInstanceIdentifierDecoded let filenameContainsDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .filenameContains) filenameContains = filenameContainsDecoded - let fileLastWrittenDecoded = try containerValues.decode(Swift.Int.self, forKey: .fileLastWritten) + let fileLastWrittenDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .fileLastWritten) fileLastWritten = fileLastWrittenDecoded - let fileSizeDecoded = try containerValues.decode(Swift.Int.self, forKey: .fileSize) + let fileSizeDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .fileSize) fileSize = fileSizeDecoded if containerValues.contains(.filters) { struct KeyVal0{struct Filter{}} @@ -25916,10 +26722,10 @@ extension DescribeDBSnapshotsInput: Swift.Encodable { try filtersContainer.encode("", forKey: ClientRuntime.Key("")) } } - if includePublic != false { + if let includePublic = includePublic { try container.encode(includePublic, forKey: ClientRuntime.Key("IncludePublic")) } - if includeShared != false { + if let includeShared = includeShared { try container.encode(includeShared, forKey: ClientRuntime.Key("IncludeShared")) } if let marker = marker { @@ -25969,9 +26775,9 @@ public struct DescribeDBSnapshotsInput: Swift.Equatable { /// * engine - Accepts names of database engines. public var filters: [RDSClientTypes.Filter]? /// A value that indicates whether to include manual DB cluster snapshots that are public and can be copied or restored by any Amazon Web Services account. By default, the public snapshots are not included. You can share a manual DB snapshot as public by using the [ModifyDBSnapshotAttribute] API. This setting doesn't apply to RDS Custom. - public var includePublic: Swift.Bool + public var includePublic: Swift.Bool? /// A value that indicates whether to include shared manual DB cluster snapshots from other Amazon Web Services accounts that this Amazon Web Services account has been given permission to copy or restore. By default, these snapshots are not included. You can give an Amazon Web Services account permission to restore a manual DB snapshot from another Amazon Web Services account by using the ModifyDBSnapshotAttribute API action. This setting doesn't apply to RDS Custom. - public var includeShared: Swift.Bool + public var includeShared: Swift.Bool? /// An optional pagination token provided by a previous DescribeDBSnapshots request. If this parameter is specified, the response includes only records beyond the marker, up to the value specified by MaxRecords. public var marker: Swift.String? /// The maximum number of records to include in the response. If more records exist than the specified MaxRecords value, a pagination token called a marker is included in the response so that you can retrieve the remaining results. Default: 100 Constraints: Minimum 20, maximum 100. @@ -25997,8 +26803,8 @@ public struct DescribeDBSnapshotsInput: Swift.Equatable { dbSnapshotIdentifier: Swift.String? = nil, dbiResourceId: Swift.String? = nil, filters: [RDSClientTypes.Filter]? = nil, - includePublic: Swift.Bool = false, - includeShared: Swift.Bool = false, + includePublic: Swift.Bool? = nil, + includeShared: Swift.Bool? = nil, marker: Swift.String? = nil, maxRecords: Swift.Int? = nil, snapshotType: Swift.String? = nil @@ -26023,8 +26829,8 @@ struct DescribeDBSnapshotsInputBody: Swift.Equatable { let filters: [RDSClientTypes.Filter]? let maxRecords: Swift.Int? let marker: Swift.String? - let includeShared: Swift.Bool - let includePublic: Swift.Bool + let includeShared: Swift.Bool? + let includePublic: Swift.Bool? let dbiResourceId: Swift.String? } @@ -26072,9 +26878,9 @@ extension DescribeDBSnapshotsInputBody: Swift.Decodable { maxRecords = maxRecordsDecoded let markerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .marker) marker = markerDecoded - let includeSharedDecoded = try containerValues.decode(Swift.Bool.self, forKey: .includeShared) + let includeSharedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .includeShared) includeShared = includeSharedDecoded - let includePublicDecoded = try containerValues.decode(Swift.Bool.self, forKey: .includePublic) + let includePublicDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .includePublic) includePublic = includePublicDecoded let dbiResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbiResourceId) dbiResourceId = dbiResourceIdDecoded @@ -29689,7 +30495,7 @@ extension DownloadDBLogFilePortionInput: Swift.Encodable { if let marker = marker { try container.encode(marker, forKey: ClientRuntime.Key("Marker")) } - if numberOfLines != 0 { + if let numberOfLines = numberOfLines { try container.encode(numberOfLines, forKey: ClientRuntime.Key("NumberOfLines")) } try container.encode("DownloadDBLogFilePortion", forKey:ClientRuntime.Key("Action")) @@ -29724,13 +30530,13 @@ public struct DownloadDBLogFilePortionInput: Swift.Equatable { /// * If Marker is specified as "0", then the specified number of lines from the beginning of the log file are returned. /// /// * You can download the log file in blocks of lines by specifying the size of the block using the NumberOfLines parameter, and by specifying a value of "0" for the Marker parameter in your first request. Include the Marker value returned in the response as the Marker value for the next request, continuing until the AdditionalDataPending response element returns false. - public var numberOfLines: Swift.Int + public var numberOfLines: Swift.Int? public init( dbInstanceIdentifier: Swift.String? = nil, logFileName: Swift.String? = nil, marker: Swift.String? = nil, - numberOfLines: Swift.Int = 0 + numberOfLines: Swift.Int? = nil ) { self.dbInstanceIdentifier = dbInstanceIdentifier @@ -29744,7 +30550,7 @@ struct DownloadDBLogFilePortionInputBody: Swift.Equatable { let dbInstanceIdentifier: Swift.String? let logFileName: Swift.String? let marker: Swift.String? - let numberOfLines: Swift.Int + let numberOfLines: Swift.Int? } extension DownloadDBLogFilePortionInputBody: Swift.Decodable { @@ -29763,7 +30569,7 @@ extension DownloadDBLogFilePortionInputBody: Swift.Decodable { logFileName = logFileNameDecoded let markerDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .marker) marker = markerDecoded - let numberOfLinesDecoded = try containerValues.decode(Swift.Int.self, forKey: .numberOfLines) + let numberOfLinesDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .numberOfLines) numberOfLines = numberOfLinesDecoded } } @@ -32316,6 +33122,60 @@ extension InvalidCustomDBEngineVersionStateFaultBody: Swift.Decodable { } } +extension InvalidDBClusterAutomatedBackupStateFault { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { + let output: AWSClientRuntime.ErrorResponseContainer = try responseDecoder.decode(responseBody: data) + self.properties.message = output.error.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// The automated backup is in an invalid state. For example, this automated backup is associated with an active cluster. +public struct InvalidDBClusterAutomatedBackupStateFault: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "InvalidDBClusterAutomatedBackupStateFault" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct InvalidDBClusterAutomatedBackupStateFaultBody: Swift.Equatable { + let message: Swift.String? +} + +extension InvalidDBClusterAutomatedBackupStateFaultBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 InvalidDBClusterCapacityFault { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { @@ -33824,6 +34684,47 @@ extension ListTagsForResourceOutputResponseBody: Swift.Decodable { } } +extension RDSClientTypes { + public enum LocalWriteForwardingStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case disabled + case disabling + case enabled + case enabling + case requested + case sdkUnknown(Swift.String) + + public static var allCases: [LocalWriteForwardingStatus] { + return [ + .disabled, + .disabling, + .enabled, + .enabling, + .requested, + .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 .disabling: return "disabling" + case .enabled: return "enabled" + case .enabling: return "enabling" + case .requested: return "requested" + 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 = LocalWriteForwardingStatus(rawValue: rawValue) ?? LocalWriteForwardingStatus.sdkUnknown(rawValue) + } + } +} + extension RDSClientTypes.MasterUserSecret: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case kmsKeyId = "KmsKeyId" @@ -34498,6 +35399,7 @@ extension ModifyCustomDBEngineVersionOutputResponse: ClientRuntime.HttpResponseB self.supportsBabelfish = output.supportsBabelfish self.supportsCertificateRotationWithoutRestart = output.supportsCertificateRotationWithoutRestart self.supportsGlobalDatabases = output.supportsGlobalDatabases + self.supportsLocalWriteForwarding = output.supportsLocalWriteForwarding self.supportsLogExportsToCloudwatchLogs = output.supportsLogExportsToCloudwatchLogs self.supportsParallelQuery = output.supportsParallelQuery self.supportsReadReplica = output.supportsReadReplica @@ -34530,6 +35432,7 @@ extension ModifyCustomDBEngineVersionOutputResponse: ClientRuntime.HttpResponseB self.supportsBabelfish = false self.supportsCertificateRotationWithoutRestart = nil self.supportsGlobalDatabases = false + self.supportsLocalWriteForwarding = nil self.supportsLogExportsToCloudwatchLogs = false self.supportsParallelQuery = false self.supportsReadReplica = false @@ -34593,6 +35496,8 @@ public struct ModifyCustomDBEngineVersionOutputResponse: Swift.Equatable { public var supportsCertificateRotationWithoutRestart: Swift.Bool? /// A value that indicates whether you can use Aurora global databases with a specific DB engine version. public var supportsGlobalDatabases: Swift.Bool + /// A value that indicates whether the DB engine version supports forwarding write operations from reader DB instances to the writer DB instance in the DB cluster. By default, write operations aren't allowed on reader DB instances. Valid for: Aurora DB clusters only + public var supportsLocalWriteForwarding: Swift.Bool? /// A value that indicates whether the engine version supports exporting the log types specified by ExportableLogTypes to CloudWatch Logs. public var supportsLogExportsToCloudwatchLogs: Swift.Bool /// A value that indicates whether you can use Aurora parallel query with a specific DB engine version. @@ -34631,6 +35536,7 @@ public struct ModifyCustomDBEngineVersionOutputResponse: Swift.Equatable { supportsBabelfish: Swift.Bool = false, supportsCertificateRotationWithoutRestart: Swift.Bool? = nil, supportsGlobalDatabases: Swift.Bool = false, + supportsLocalWriteForwarding: Swift.Bool? = nil, supportsLogExportsToCloudwatchLogs: Swift.Bool = false, supportsParallelQuery: Swift.Bool = false, supportsReadReplica: Swift.Bool = false, @@ -34664,6 +35570,7 @@ public struct ModifyCustomDBEngineVersionOutputResponse: Swift.Equatable { self.supportsBabelfish = supportsBabelfish self.supportsCertificateRotationWithoutRestart = supportsCertificateRotationWithoutRestart self.supportsGlobalDatabases = supportsGlobalDatabases + self.supportsLocalWriteForwarding = supportsLocalWriteForwarding self.supportsLogExportsToCloudwatchLogs = supportsLogExportsToCloudwatchLogs self.supportsParallelQuery = supportsParallelQuery self.supportsReadReplica = supportsReadReplica @@ -34704,6 +35611,7 @@ struct ModifyCustomDBEngineVersionOutputResponseBody: Swift.Equatable { let customDBEngineVersionManifest: Swift.String? let supportsCertificateRotationWithoutRestart: Swift.Bool? let supportedCACertificateIdentifiers: [Swift.String]? + let supportsLocalWriteForwarding: Swift.Bool? } extension ModifyCustomDBEngineVersionOutputResponseBody: Swift.Decodable { @@ -34734,6 +35642,7 @@ extension ModifyCustomDBEngineVersionOutputResponseBody: Swift.Decodable { case supportsBabelfish = "SupportsBabelfish" case supportsCertificateRotationWithoutRestart = "SupportsCertificateRotationWithoutRestart" case supportsGlobalDatabases = "SupportsGlobalDatabases" + case supportsLocalWriteForwarding = "SupportsLocalWriteForwarding" case supportsLogExportsToCloudwatchLogs = "SupportsLogExportsToCloudwatchLogs" case supportsParallelQuery = "SupportsParallelQuery" case supportsReadReplica = "SupportsReadReplica" @@ -34959,6 +35868,8 @@ extension ModifyCustomDBEngineVersionOutputResponseBody: Swift.Decodable { } else { supportedCACertificateIdentifiers = nil } + let supportsLocalWriteForwardingDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .supportsLocalWriteForwarding) + supportsLocalWriteForwarding = supportsLocalWriteForwardingDecoded } } @@ -35290,13 +36201,13 @@ extension ModifyDBClusterInput: Swift.Encodable { if let allocatedStorage = allocatedStorage { try container.encode(allocatedStorage, forKey: ClientRuntime.Key("AllocatedStorage")) } - if allowEngineModeChange != false { + if let allowEngineModeChange = allowEngineModeChange { try container.encode(allowEngineModeChange, forKey: ClientRuntime.Key("AllowEngineModeChange")) } - if allowMajorVersionUpgrade != false { + if let allowMajorVersionUpgrade = allowMajorVersionUpgrade { try container.encode(allowMajorVersionUpgrade, forKey: ClientRuntime.Key("AllowMajorVersionUpgrade")) } - if applyImmediately != false { + if let applyImmediately = applyImmediately { try container.encode(applyImmediately, forKey: ClientRuntime.Key("ApplyImmediately")) } if let autoMinorVersionUpgrade = autoMinorVersionUpgrade { @@ -35344,6 +36255,9 @@ extension ModifyDBClusterInput: Swift.Encodable { if let enableIAMDatabaseAuthentication = enableIAMDatabaseAuthentication { try container.encode(enableIAMDatabaseAuthentication, forKey: ClientRuntime.Key("EnableIAMDatabaseAuthentication")) } + if let enableLocalWriteForwarding = enableLocalWriteForwarding { + try container.encode(enableLocalWriteForwarding, forKey: ClientRuntime.Key("EnableLocalWriteForwarding")) + } if let enablePerformanceInsights = enablePerformanceInsights { try container.encode(enablePerformanceInsights, forKey: ClientRuntime.Key("EnablePerformanceInsights")) } @@ -35437,13 +36351,13 @@ public struct ModifyDBClusterInput: Swift.Equatable { /// Specifies whether engine mode changes from serverless to provisioned are allowed. Valid for Cluster Type: Aurora Serverless v1 DB clusters only Constraints: /// /// * You must allow engine mode changes when specifying a different value for the EngineMode parameter from the DB cluster's current engine mode. - public var allowEngineModeChange: Swift.Bool + public var allowEngineModeChange: Swift.Bool? /// Specifies whether major version upgrades are allowed. Valid for Cluster Type: Aurora DB clusters only 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. - public var allowMajorVersionUpgrade: Swift.Bool + public var allowMajorVersionUpgrade: Swift.Bool? /// Specifies 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 Cluster Type: Aurora DB clusters and Multi-AZ DB clusters - public var applyImmediately: Swift.Bool + public var applyImmediately: Swift.Bool? /// Specifies whether minor engine upgrades are applied automatically to the DB cluster during the maintenance window. By default, minor engine upgrades are applied automatically. Valid for Cluster Type: Multi-AZ DB clusters only public var autoMinorVersionUpgrade: Swift.Bool? /// The target backtrack window, in seconds. To disable backtracking, set this value to 0. Valid for Cluster Type: Aurora MySQL DB clusters only Default: 0 Constraints: @@ -35496,6 +36410,8 @@ public struct ModifyDBClusterInput: Swift.Equatable { public var enableHttpEndpoint: Swift.Bool? /// Specifies whether to enable mapping of Amazon Web Services Identity and Access Management (IAM) accounts to database accounts. By default, mapping isn't enabled. For more information, see [ IAM Database Authentication](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.IAMDBAuth.html) in the Amazon Aurora User Guide. Valid for Cluster Type: Aurora DB clusters only public var enableIAMDatabaseAuthentication: Swift.Bool? + /// Specifies whether read replicas can forward write operations to the writer DB instance in the DB cluster. By default, write operations aren't allowed on reader DB instances. Valid for: Aurora DB clusters only + public var enableLocalWriteForwarding: Swift.Bool? /// Specifies 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 Cluster Type: 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 Cluster Type: Aurora DB clusters only @@ -35605,9 +36521,9 @@ public struct ModifyDBClusterInput: Swift.Equatable { public init( allocatedStorage: Swift.Int? = nil, - allowEngineModeChange: Swift.Bool = false, - allowMajorVersionUpgrade: Swift.Bool = false, - applyImmediately: Swift.Bool = false, + allowEngineModeChange: Swift.Bool? = nil, + allowMajorVersionUpgrade: Swift.Bool? = nil, + applyImmediately: Swift.Bool? = nil, autoMinorVersionUpgrade: Swift.Bool? = nil, backtrackWindow: Swift.Int? = nil, backupRetentionPeriod: Swift.Int? = nil, @@ -35623,6 +36539,7 @@ public struct ModifyDBClusterInput: Swift.Equatable { enableGlobalWriteForwarding: Swift.Bool? = nil, enableHttpEndpoint: Swift.Bool? = nil, enableIAMDatabaseAuthentication: Swift.Bool? = nil, + enableLocalWriteForwarding: Swift.Bool? = nil, enablePerformanceInsights: Swift.Bool? = nil, engineMode: Swift.String? = nil, engineVersion: Swift.String? = nil, @@ -35666,6 +36583,7 @@ public struct ModifyDBClusterInput: Swift.Equatable { self.enableGlobalWriteForwarding = enableGlobalWriteForwarding self.enableHttpEndpoint = enableHttpEndpoint self.enableIAMDatabaseAuthentication = enableIAMDatabaseAuthentication + self.enableLocalWriteForwarding = enableLocalWriteForwarding self.enablePerformanceInsights = enablePerformanceInsights self.engineMode = engineMode self.engineVersion = engineVersion @@ -35694,7 +36612,7 @@ public struct ModifyDBClusterInput: Swift.Equatable { struct ModifyDBClusterInputBody: Swift.Equatable { let dbClusterIdentifier: Swift.String? let newDBClusterIdentifier: Swift.String? - let applyImmediately: Swift.Bool + let applyImmediately: Swift.Bool? let backupRetentionPeriod: Swift.Int? let dbClusterParameterGroupName: Swift.String? let vpcSecurityGroupIds: [Swift.String]? @@ -35707,7 +36625,7 @@ struct ModifyDBClusterInputBody: Swift.Equatable { let backtrackWindow: Swift.Int? let cloudwatchLogsExportConfiguration: RDSClientTypes.CloudwatchLogsExportConfiguration? let engineVersion: Swift.String? - let allowMajorVersionUpgrade: Swift.Bool + let allowMajorVersionUpgrade: Swift.Bool? let dbInstanceParameterGroupName: Swift.String? let domain: Swift.String? let domainIAMRoleName: Swift.String? @@ -35732,7 +36650,8 @@ struct ModifyDBClusterInputBody: Swift.Equatable { let rotateMasterUserPassword: Swift.Bool? let masterUserSecretKmsKeyId: Swift.String? let engineMode: Swift.String? - let allowEngineModeChange: Swift.Bool + let allowEngineModeChange: Swift.Bool? + let enableLocalWriteForwarding: Swift.Bool? } extension ModifyDBClusterInputBody: Swift.Decodable { @@ -35756,6 +36675,7 @@ extension ModifyDBClusterInputBody: Swift.Decodable { case enableGlobalWriteForwarding = "EnableGlobalWriteForwarding" case enableHttpEndpoint = "EnableHttpEndpoint" case enableIAMDatabaseAuthentication = "EnableIAMDatabaseAuthentication" + case enableLocalWriteForwarding = "EnableLocalWriteForwarding" case enablePerformanceInsights = "EnablePerformanceInsights" case engineMode = "EngineMode" case engineVersion = "EngineVersion" @@ -35786,7 +36706,7 @@ extension ModifyDBClusterInputBody: Swift.Decodable { dbClusterIdentifier = dbClusterIdentifierDecoded let newDBClusterIdentifierDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .newDBClusterIdentifier) newDBClusterIdentifier = newDBClusterIdentifierDecoded - let applyImmediatelyDecoded = try containerValues.decode(Swift.Bool.self, forKey: .applyImmediately) + let applyImmediatelyDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .applyImmediately) applyImmediately = applyImmediatelyDecoded let backupRetentionPeriodDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .backupRetentionPeriod) backupRetentionPeriod = backupRetentionPeriodDecoded @@ -35829,7 +36749,7 @@ extension ModifyDBClusterInputBody: Swift.Decodable { cloudwatchLogsExportConfiguration = cloudwatchLogsExportConfigurationDecoded let engineVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .engineVersion) engineVersion = engineVersionDecoded - let allowMajorVersionUpgradeDecoded = try containerValues.decode(Swift.Bool.self, forKey: .allowMajorVersionUpgrade) + let allowMajorVersionUpgradeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .allowMajorVersionUpgrade) allowMajorVersionUpgrade = allowMajorVersionUpgradeDecoded let dbInstanceParameterGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbInstanceParameterGroupName) dbInstanceParameterGroupName = dbInstanceParameterGroupNameDecoded @@ -35879,8 +36799,10 @@ extension ModifyDBClusterInputBody: Swift.Decodable { masterUserSecretKmsKeyId = masterUserSecretKmsKeyIdDecoded let engineModeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .engineMode) engineMode = engineModeDecoded - let allowEngineModeChangeDecoded = try containerValues.decode(Swift.Bool.self, forKey: .allowEngineModeChange) + let allowEngineModeChangeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .allowEngineModeChange) allowEngineModeChange = allowEngineModeChangeDecoded + let enableLocalWriteForwardingDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .enableLocalWriteForwarding) + enableLocalWriteForwarding = enableLocalWriteForwardingDecoded } } @@ -36287,10 +37209,10 @@ extension ModifyDBInstanceInput: Swift.Encodable { if let allocatedStorage = allocatedStorage { try container.encode(allocatedStorage, forKey: ClientRuntime.Key("AllocatedStorage")) } - if allowMajorVersionUpgrade != false { + if let allowMajorVersionUpgrade = allowMajorVersionUpgrade { try container.encode(allowMajorVersionUpgrade, forKey: ClientRuntime.Key("AllowMajorVersionUpgrade")) } - if applyImmediately != false { + if let applyImmediately = applyImmediately { try container.encode(applyImmediately, forKey: ClientRuntime.Key("ApplyImmediately")) } if let autoMinorVersionUpgrade = autoMinorVersionUpgrade { @@ -36512,9 +37434,9 @@ public struct ModifyDBInstanceInput: Swift.Equatable { /// Specifies whether major version upgrades are allowed. Changing this parameter doesn't result in an outage and the change is asynchronously applied as soon as possible. This setting doesn't apply to RDS Custom DB instances. Constraints: /// /// * Major version upgrades must be allowed when specifying a value for the EngineVersion parameter that's a different major version than the DB instance's current version. - public var allowMajorVersionUpgrade: Swift.Bool + public var allowMajorVersionUpgrade: Swift.Bool? /// Specifies 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 instance. By default, this parameter is disabled. If this parameter is disabled, changes to the DB instance are applied during the next maintenance window. Some parameter changes can cause an outage and are applied on the next call to [RebootDBInstance], or the next failure reboot. Review the table of parameters in [Modifying a DB Instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html) in the Amazon RDS User Guide to see the impact of enabling or disabling ApplyImmediately for each modified parameter and to determine when the changes are applied. - public var applyImmediately: Swift.Bool + public var applyImmediately: Swift.Bool? /// Specifies whether minor version upgrades are applied automatically to the DB instance during the maintenance window. An outage occurs when all the following conditions are met: /// /// * The automatic upgrade is enabled for the maintenance window. @@ -36538,7 +37460,7 @@ public struct ModifyDBInstanceInput: Swift.Equatable { /// /// * Can't be set to 0 for an RDS Custom for Oracle DB instance. public var backupRetentionPeriod: Swift.Int? - /// The CA certificate identifier to use for the DB instance6's server certificate. This setting doesn't apply to RDS Custom DB instances. For more information, see [Using SSL/TLS to encrypt a connection to a DB instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html) in the Amazon RDS User Guide and [ Using SSL/TLS to encrypt a connection to a DB cluster](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html) in the Amazon Aurora User Guide. + /// The CA certificate identifier to use for the DB instance's server certificate. This setting doesn't apply to RDS Custom DB instances. For more information, see [Using SSL/TLS to encrypt a connection to a DB instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html) in the Amazon RDS User Guide and [ Using SSL/TLS to encrypt a connection to a DB cluster](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html) in the Amazon Aurora User Guide. public var caCertificateIdentifier: Swift.String? /// Specifies whether the DB instance is restarted when you rotate your SSL/TLS certificate. By default, the DB instance is restarted when you rotate your SSL/TLS certificate. The certificate is not updated until the DB instance is restarted. Set this parameter only if you are not using SSL/TLS to connect to the DB instance. If you are using SSL/TLS to connect to the DB instance, follow the appropriate instructions for your DB engine to rotate your SSL/TLS certificate: /// @@ -36810,8 +37732,8 @@ public struct ModifyDBInstanceInput: Swift.Equatable { public init( allocatedStorage: Swift.Int? = nil, - allowMajorVersionUpgrade: Swift.Bool = false, - applyImmediately: Swift.Bool = false, + allowMajorVersionUpgrade: Swift.Bool? = nil, + applyImmediately: Swift.Bool? = nil, autoMinorVersionUpgrade: Swift.Bool? = nil, automationMode: RDSClientTypes.AutomationMode? = nil, awsBackupRecoveryPointArn: Swift.String? = nil, @@ -36937,7 +37859,7 @@ struct ModifyDBInstanceInputBody: Swift.Equatable { let dbSubnetGroupName: Swift.String? let dbSecurityGroups: [Swift.String]? let vpcSecurityGroupIds: [Swift.String]? - let applyImmediately: Swift.Bool + let applyImmediately: Swift.Bool? let masterUserPassword: Swift.String? let dbParameterGroupName: Swift.String? let backupRetentionPeriod: Swift.Int? @@ -36945,7 +37867,7 @@ struct ModifyDBInstanceInputBody: Swift.Equatable { let preferredMaintenanceWindow: Swift.String? let multiAZ: Swift.Bool? let engineVersion: Swift.String? - let allowMajorVersionUpgrade: Swift.Bool + let allowMajorVersionUpgrade: Swift.Bool? let autoMinorVersionUpgrade: Swift.Bool? let licenseModel: Swift.String? let iops: Swift.Int? @@ -37101,7 +38023,7 @@ extension ModifyDBInstanceInputBody: Swift.Decodable { } else { vpcSecurityGroupIds = nil } - let applyImmediatelyDecoded = try containerValues.decode(Swift.Bool.self, forKey: .applyImmediately) + let applyImmediatelyDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .applyImmediately) applyImmediately = applyImmediatelyDecoded let masterUserPasswordDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .masterUserPassword) masterUserPassword = masterUserPasswordDecoded @@ -37117,7 +38039,7 @@ extension ModifyDBInstanceInputBody: Swift.Decodable { multiAZ = multiAZDecoded let engineVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .engineVersion) engineVersion = engineVersionDecoded - let allowMajorVersionUpgradeDecoded = try containerValues.decode(Swift.Bool.self, forKey: .allowMajorVersionUpgrade) + let allowMajorVersionUpgradeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .allowMajorVersionUpgrade) allowMajorVersionUpgrade = allowMajorVersionUpgradeDecoded let autoMinorVersionUpgradeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .autoMinorVersionUpgrade) autoMinorVersionUpgrade = autoMinorVersionUpgradeDecoded @@ -38638,23 +39560,23 @@ extension ModifyGlobalClusterInput: ClientRuntime.URLPathProvider { } public struct ModifyGlobalClusterInput: Swift.Equatable { - /// 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. If you upgrade the major version of a global database, the cluster and DB instance parameter groups are set to the default parameter groups for the new version. Apply any custom parameter groups after completing the upgrade. + /// Specifies whether to allow major version upgrades. Constraints: Must be enabled if you specify a value for the EngineVersion parameter that's a different major version than the global cluster's current version. If you upgrade the major version of a global database, the cluster and DB instance parameter groups are set to the default parameter groups for the new version. Apply any custom parameter groups after completing the upgrade. public var allowMajorVersionUpgrade: Swift.Bool? - /// Indicates if the global database cluster has deletion protection enabled. The global database cluster can't be deleted when deletion protection is enabled. + /// Specifies whether to enable deletion protection for the global database cluster. The global database cluster can't be deleted when deletion protection is enabled. public var deletionProtection: Swift.Bool? - /// 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. To list all of the available engine versions for aurora-mysql (for MySQL-based Aurora global databases), use the following command: aws rds describe-db-engine-versions --engine aurora-mysql --query '*[]|[?SupportsGlobalDatabases == `true`].[EngineVersion]' To list all of the available engine versions for aurora-postgresql (for PostgreSQL-based Aurora global databases), use the following command: aws rds describe-db-engine-versions --engine aurora-postgresql --query '*[]|[?SupportsGlobalDatabases == `true`].[EngineVersion]' + /// The version number of the database engine to which you want to upgrade. To list all of the available engine versions for aurora-mysql (for MySQL-based Aurora global databases), use the following command: aws rds describe-db-engine-versions --engine aurora-mysql --query '*[]|[?SupportsGlobalDatabases == `true`].[EngineVersion]' To list all of the available engine versions for aurora-postgresql (for PostgreSQL-based Aurora global databases), use the following command: aws rds describe-db-engine-versions --engine aurora-postgresql --query '*[]|[?SupportsGlobalDatabases == `true`].[EngineVersion]' public var engineVersion: Swift.String? - /// The DB cluster identifier for the global cluster being modified. This parameter isn't case-sensitive. Constraints: + /// The cluster identifier for the global cluster to modify. This parameter isn't case-sensitive. Constraints: /// /// * Must match the identifier of an existing global database cluster. public var globalClusterIdentifier: Swift.String? - /// The new cluster identifier for the global database cluster when modifying a global database cluster. This value is stored as a lowercase string. Constraints: + /// The new cluster identifier for the global database cluster. This value is stored as a lowercase string. Constraints: /// - /// * Must contain from 1 to 63 letters, numbers, or hyphens + /// * Must contain from 1 to 63 letters, numbers, or hyphens. /// - /// * The first character must be a letter + /// * The first character must be a letter. /// - /// * Can't end with a hyphen or contain two consecutive hyphens + /// * Can't end with a hyphen or contain two consecutive hyphens. /// /// /// Example: my-cluster2 @@ -38765,7 +39687,7 @@ extension ModifyGlobalClusterOutputResponseBody: Swift.Decodable { extension ModifyOptionGroupInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var container = encoder.container(keyedBy: ClientRuntime.Key.self) - if applyImmediately != false { + if let applyImmediately = applyImmediately { try container.encode(applyImmediately, forKey: ClientRuntime.Key("ApplyImmediately")) } if let optionGroupName = optionGroupName { @@ -38809,7 +39731,7 @@ extension ModifyOptionGroupInput: ClientRuntime.URLPathProvider { /// public struct ModifyOptionGroupInput: Swift.Equatable { /// A value that indicates whether to apply the change immediately or during the next maintenance window for each instance associated with the option group. - public var applyImmediately: Swift.Bool + public var applyImmediately: Swift.Bool? /// The name of the option group to be modified. Permanent options, such as the TDE option for Oracle Advanced Security TDE, can't be removed from an option group, and that option group can't be removed from a DB instance once it is associated with a DB instance /// This member is required. public var optionGroupName: Swift.String? @@ -38819,7 +39741,7 @@ public struct ModifyOptionGroupInput: Swift.Equatable { public var optionsToRemove: [Swift.String]? public init( - applyImmediately: Swift.Bool = false, + applyImmediately: Swift.Bool? = nil, optionGroupName: Swift.String? = nil, optionsToInclude: [RDSClientTypes.OptionConfiguration]? = nil, optionsToRemove: [Swift.String]? = nil @@ -38836,7 +39758,7 @@ struct ModifyOptionGroupInputBody: Swift.Equatable { let optionGroupName: Swift.String? let optionsToInclude: [RDSClientTypes.OptionConfiguration]? let optionsToRemove: [Swift.String]? - let applyImmediately: Swift.Bool + let applyImmediately: Swift.Bool? } extension ModifyOptionGroupInputBody: Swift.Decodable { @@ -38889,7 +39811,7 @@ extension ModifyOptionGroupInputBody: Swift.Decodable { } else { optionsToRemove = nil } - let applyImmediatelyDecoded = try containerValues.decode(Swift.Bool.self, forKey: .applyImmediately) + let applyImmediatelyDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .applyImmediately) applyImmediately = applyImmediatelyDecoded } } @@ -43695,7 +44617,7 @@ extension ResetDBClusterParameterGroupInput: Swift.Encodable { try parametersContainer.encode("", forKey: ClientRuntime.Key("")) } } - if resetAllParameters != false { + if let resetAllParameters = resetAllParameters { try container.encode(resetAllParameters, forKey: ClientRuntime.Key("ResetAllParameters")) } try container.encode("ResetDBClusterParameterGroup", forKey:ClientRuntime.Key("Action")) @@ -43717,12 +44639,12 @@ public struct ResetDBClusterParameterGroupInput: Swift.Equatable { /// A list of parameter names in the DB cluster parameter group to reset to the default values. You can't use this parameter if the ResetAllParameters parameter is enabled. public var parameters: [RDSClientTypes.Parameter]? /// A value that indicates whether to reset all parameters in the DB cluster parameter group to their default values. You can't use this parameter if there is a list of parameter names specified for the Parameters parameter. - public var resetAllParameters: Swift.Bool + public var resetAllParameters: Swift.Bool? public init( dbClusterParameterGroupName: Swift.String? = nil, parameters: [RDSClientTypes.Parameter]? = nil, - resetAllParameters: Swift.Bool = false + resetAllParameters: Swift.Bool? = nil ) { self.dbClusterParameterGroupName = dbClusterParameterGroupName @@ -43733,7 +44655,7 @@ public struct ResetDBClusterParameterGroupInput: Swift.Equatable { struct ResetDBClusterParameterGroupInputBody: Swift.Equatable { let dbClusterParameterGroupName: Swift.String? - let resetAllParameters: Swift.Bool + let resetAllParameters: Swift.Bool? let parameters: [RDSClientTypes.Parameter]? } @@ -43748,7 +44670,7 @@ extension ResetDBClusterParameterGroupInputBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let dbClusterParameterGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbClusterParameterGroupName) dbClusterParameterGroupName = dbClusterParameterGroupNameDecoded - let resetAllParametersDecoded = try containerValues.decode(Swift.Bool.self, forKey: .resetAllParameters) + let resetAllParametersDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .resetAllParameters) resetAllParameters = resetAllParametersDecoded if containerValues.contains(.parameters) { struct KeyVal0{struct Parameter{}} @@ -43852,7 +44774,7 @@ extension ResetDBParameterGroupInput: Swift.Encodable { try parametersContainer.encode("", forKey: ClientRuntime.Key("")) } } - if resetAllParameters != false { + if let resetAllParameters = resetAllParameters { try container.encode(resetAllParameters, forKey: ClientRuntime.Key("ResetAllParameters")) } try container.encode("ResetDBParameterGroup", forKey:ClientRuntime.Key("Action")) @@ -43876,12 +44798,12 @@ public struct ResetDBParameterGroupInput: Swift.Equatable { /// To reset the entire DB parameter group, specify the DBParameterGroup name and ResetAllParameters parameters. To reset specific parameters, provide a list of the following: ParameterName and ApplyMethod. A maximum of 20 parameters can be modified in a single request. MySQL Valid Values (for Apply method): immediate | pending-reboot You can use the immediate value with dynamic parameters only. You can use the pending-reboot value for both dynamic and static parameters, and changes are applied when DB instance reboots. MariaDB Valid Values (for Apply method): immediate | pending-reboot You can use the immediate value with dynamic parameters only. You can use the pending-reboot value for both dynamic and static parameters, and changes are applied when DB instance reboots. Oracle Valid Values (for Apply method): pending-reboot public var parameters: [RDSClientTypes.Parameter]? /// A value that indicates whether to reset all parameters in the DB parameter group to default values. By default, all parameters in the DB parameter group are reset to default values. - public var resetAllParameters: Swift.Bool + public var resetAllParameters: Swift.Bool? public init( dbParameterGroupName: Swift.String? = nil, parameters: [RDSClientTypes.Parameter]? = nil, - resetAllParameters: Swift.Bool = false + resetAllParameters: Swift.Bool? = nil ) { self.dbParameterGroupName = dbParameterGroupName @@ -43892,7 +44814,7 @@ public struct ResetDBParameterGroupInput: Swift.Equatable { struct ResetDBParameterGroupInputBody: Swift.Equatable { let dbParameterGroupName: Swift.String? - let resetAllParameters: Swift.Bool + let resetAllParameters: Swift.Bool? let parameters: [RDSClientTypes.Parameter]? } @@ -43907,7 +44829,7 @@ extension ResetDBParameterGroupInputBody: Swift.Decodable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let dbParameterGroupNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbParameterGroupName) dbParameterGroupName = dbParameterGroupNameDecoded - let resetAllParametersDecoded = try containerValues.decode(Swift.Bool.self, forKey: .resetAllParameters) + let resetAllParametersDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .resetAllParameters) resetAllParameters = resetAllParametersDecoded if containerValues.contains(.parameters) { struct KeyVal0{struct Parameter{}} @@ -45414,6 +46336,9 @@ extension RestoreDBClusterToPointInTimeInput: Swift.Encodable { if let sourceDBClusterIdentifier = sourceDBClusterIdentifier { try container.encode(sourceDBClusterIdentifier, forKey: ClientRuntime.Key("SourceDBClusterIdentifier")) } + if let sourceDbClusterResourceId = sourceDbClusterResourceId { + try container.encode(sourceDbClusterResourceId, forKey: ClientRuntime.Key("SourceDbClusterResourceId")) + } if let storageType = storageType { try container.encode(storageType, forKey: ClientRuntime.Key("StorageType")) } @@ -45429,7 +46354,7 @@ extension RestoreDBClusterToPointInTimeInput: Swift.Encodable { try tagsContainer.encode("", forKey: ClientRuntime.Key("")) } } - if useLatestRestorableTime != false { + if let useLatestRestorableTime = useLatestRestorableTime { try container.encode(useLatestRestorableTime, forKey: ClientRuntime.Key("UseLatestRestorableTime")) } if let vpcSecurityGroupIds = vpcSecurityGroupIds { @@ -45579,14 +46504,15 @@ public struct RestoreDBClusterToPointInTimeInput: Swift.Equatable { /// /// /// Valid for: Aurora DB clusters and Multi-AZ DB clusters - /// This member is required. public var sourceDBClusterIdentifier: Swift.String? + /// The resource ID of the source DB cluster from which to restore. + public var sourceDbClusterResourceId: Swift.String? /// Specifies the storage type to be associated with the DB cluster. When specified for a Multi-AZ DB cluster, a value for the Iops parameter is required. Valid values: aurora, aurora-iopt1 (Aurora DB clusters); io1 (Multi-AZ DB clusters) Default: aurora (Aurora DB clusters); io1 (Multi-AZ DB clusters) Valid for: Aurora DB clusters and Multi-AZ DB clusters public var storageType: Swift.String? /// A list of tags. For more information, see [Tagging Amazon RDS Resources](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) in the Amazon RDS User Guide. public var tags: [RDSClientTypes.Tag]? /// A value that indicates whether to restore the DB cluster to the latest restorable backup time. By default, the DB cluster isn't restored to the latest restorable backup time. Constraints: Can't be specified if RestoreToTime parameter is provided. Valid for: Aurora DB clusters and Multi-AZ DB clusters - public var useLatestRestorableTime: Swift.Bool + public var useLatestRestorableTime: Swift.Bool? /// A list of VPC security groups that the new DB cluster belongs to. Valid for: Aurora DB clusters and Multi-AZ DB clusters public var vpcSecurityGroupIds: [Swift.String]? @@ -45614,9 +46540,10 @@ public struct RestoreDBClusterToPointInTimeInput: Swift.Equatable { scalingConfiguration: RDSClientTypes.ScalingConfiguration? = nil, serverlessV2ScalingConfiguration: RDSClientTypes.ServerlessV2ScalingConfiguration? = nil, sourceDBClusterIdentifier: Swift.String? = nil, + sourceDbClusterResourceId: Swift.String? = nil, storageType: Swift.String? = nil, tags: [RDSClientTypes.Tag]? = nil, - useLatestRestorableTime: Swift.Bool = false, + useLatestRestorableTime: Swift.Bool? = nil, vpcSecurityGroupIds: [Swift.String]? = nil ) { @@ -45643,6 +46570,7 @@ public struct RestoreDBClusterToPointInTimeInput: Swift.Equatable { self.scalingConfiguration = scalingConfiguration self.serverlessV2ScalingConfiguration = serverlessV2ScalingConfiguration self.sourceDBClusterIdentifier = sourceDBClusterIdentifier + self.sourceDbClusterResourceId = sourceDbClusterResourceId self.storageType = storageType self.tags = tags self.useLatestRestorableTime = useLatestRestorableTime @@ -45655,7 +46583,7 @@ struct RestoreDBClusterToPointInTimeInputBody: Swift.Equatable { let restoreType: Swift.String? let sourceDBClusterIdentifier: Swift.String? let restoreToTime: ClientRuntime.Date? - let useLatestRestorableTime: Swift.Bool + let useLatestRestorableTime: Swift.Bool? let port: Swift.Int? let dbSubnetGroupName: Swift.String? let optionGroupName: Swift.String? @@ -45678,6 +46606,7 @@ struct RestoreDBClusterToPointInTimeInputBody: Swift.Equatable { let iops: Swift.Int? let serverlessV2ScalingConfiguration: RDSClientTypes.ServerlessV2ScalingConfiguration? let networkType: Swift.String? + let sourceDbClusterResourceId: Swift.String? } extension RestoreDBClusterToPointInTimeInputBody: Swift.Decodable { @@ -45705,6 +46634,7 @@ extension RestoreDBClusterToPointInTimeInputBody: Swift.Decodable { case scalingConfiguration = "ScalingConfiguration" case serverlessV2ScalingConfiguration = "ServerlessV2ScalingConfiguration" case sourceDBClusterIdentifier = "SourceDBClusterIdentifier" + case sourceDbClusterResourceId = "SourceDbClusterResourceId" case storageType = "StorageType" case tags = "Tags" case useLatestRestorableTime = "UseLatestRestorableTime" @@ -45721,7 +46651,7 @@ extension RestoreDBClusterToPointInTimeInputBody: Swift.Decodable { sourceDBClusterIdentifier = sourceDBClusterIdentifierDecoded let restoreToTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .restoreToTime) restoreToTime = restoreToTimeDecoded - let useLatestRestorableTimeDecoded = try containerValues.decode(Swift.Bool.self, forKey: .useLatestRestorableTime) + let useLatestRestorableTimeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .useLatestRestorableTime) useLatestRestorableTime = useLatestRestorableTimeDecoded let portDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .port) port = portDecoded @@ -45818,6 +46748,8 @@ extension RestoreDBClusterToPointInTimeInputBody: Swift.Decodable { serverlessV2ScalingConfiguration = serverlessV2ScalingConfigurationDecoded let networkTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .networkType) networkType = networkTypeDecoded + let sourceDbClusterResourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceDbClusterResourceId) + sourceDbClusterResourceId = sourceDbClusterResourceIdDecoded } } @@ -45826,6 +46758,7 @@ public enum RestoreDBClusterToPointInTimeOutputError: ClientRuntime.HttpResponse let restXMLError = try await AWSClientRuntime.RestXMLError(httpResponse: httpResponse) switch restXMLError.errorCode { case "DBClusterAlreadyExistsFault": return try await DBClusterAlreadyExistsFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) + case "DBClusterAutomatedBackupNotFoundFault": return try await DBClusterAutomatedBackupNotFoundFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "DBClusterNotFoundFault": return try await DBClusterNotFoundFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "DBClusterParameterGroupNotFound": return try await DBClusterParameterGroupNotFoundFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) case "DBClusterQuotaExceededFault": return try await DBClusterQuotaExceededFault(httpResponse: httpResponse, decoder: decoder, message: restXMLError.message, requestID: restXMLError.requestId) @@ -47639,7 +48572,7 @@ extension RestoreDBInstanceToPointInTimeInput: Swift.Encodable { if let useDefaultProcessorFeatures = useDefaultProcessorFeatures { try container.encode(useDefaultProcessorFeatures, forKey: ClientRuntime.Key("UseDefaultProcessorFeatures")) } - if useLatestRestorableTime != false { + if let useLatestRestorableTime = useLatestRestorableTime { try container.encode(useLatestRestorableTime, forKey: ClientRuntime.Key("UseLatestRestorableTime")) } if let vpcSecurityGroupIds = vpcSecurityGroupIds { @@ -47834,7 +48767,7 @@ public struct RestoreDBInstanceToPointInTimeInput: Swift.Equatable { /// A value that indicates whether the DB instance class of the DB instance uses its default processor features. This setting doesn't apply to RDS Custom. public var useDefaultProcessorFeatures: Swift.Bool? /// A value that indicates whether the DB instance is restored from the latest backup time. By default, the DB instance isn't restored from the latest backup time. Constraints: Can't be specified if the RestoreTime parameter is provided. - public var useLatestRestorableTime: Swift.Bool + public var useLatestRestorableTime: Swift.Bool? /// A list of EC2 VPC security groups to associate with this DB instance. Default: The default EC2 VPC security group for the DB subnet group's VPC. public var vpcSecurityGroupIds: [Swift.String]? @@ -47880,7 +48813,7 @@ public struct RestoreDBInstanceToPointInTimeInput: Swift.Equatable { tdeCredentialArn: Swift.String? = nil, tdeCredentialPassword: Swift.String? = nil, useDefaultProcessorFeatures: Swift.Bool? = nil, - useLatestRestorableTime: Swift.Bool = false, + useLatestRestorableTime: Swift.Bool? = nil, vpcSecurityGroupIds: [Swift.String]? = nil ) { @@ -47934,7 +48867,7 @@ struct RestoreDBInstanceToPointInTimeInputBody: Swift.Equatable { let sourceDBInstanceIdentifier: Swift.String? let targetDBInstanceIdentifier: Swift.String? let restoreTime: ClientRuntime.Date? - let useLatestRestorableTime: Swift.Bool + let useLatestRestorableTime: Swift.Bool? let dbInstanceClass: Swift.String? let port: Swift.Int? let availabilityZone: Swift.String? @@ -48031,7 +48964,7 @@ extension RestoreDBInstanceToPointInTimeInputBody: Swift.Decodable { targetDBInstanceIdentifier = targetDBInstanceIdentifierDecoded let restoreTimeDecoded = try containerValues.decodeTimestampIfPresent(.dateTime, forKey: .restoreTime) restoreTime = restoreTimeDecoded - let useLatestRestorableTimeDecoded = try containerValues.decode(Swift.Bool.self, forKey: .useLatestRestorableTime) + let useLatestRestorableTimeDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .useLatestRestorableTime) useLatestRestorableTime = useLatestRestorableTimeDecoded let dbInstanceClassDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .dbInstanceClass) dbInstanceClass = dbInstanceClassDecoded @@ -51147,12 +52080,12 @@ extension SwitchoverBlueGreenDeploymentInput: ClientRuntime.URLPathProvider { } public struct SwitchoverBlueGreenDeploymentInput: Swift.Equatable { - /// The blue/green deployment identifier. Constraints: + /// The unique identifier of the blue/green deployment. Constraints: /// /// * Must match an existing blue/green deployment identifier. /// This member is required. public var blueGreenDeploymentIdentifier: Swift.String? - /// The amount of time, in seconds, for the switchover to complete. The default is 300. If the switchover takes longer than the specified duration, then any changes are rolled back, and no changes are made to the environments. + /// The amount of time, in seconds, for the switchover to complete. Default: 300 If the switchover takes longer than the specified duration, then any changes are rolled back, and no changes are made to the environments. public var switchoverTimeout: Swift.Int? public init( @@ -51209,7 +52142,7 @@ extension SwitchoverBlueGreenDeploymentOutputResponse: ClientRuntime.HttpRespons } public struct SwitchoverBlueGreenDeploymentOutputResponse: Swift.Equatable { - /// Contains the details about a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [ Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. + /// Details about a blue/green deployment. For more information, see [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html) in the Amazon RDS User Guide and [Using Amazon RDS Blue/Green Deployments for database updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) in the Amazon Aurora User Guide. public var blueGreenDeployment: RDSClientTypes.BlueGreenDeployment? public init( @@ -51697,6 +52630,7 @@ extension RDSClientTypes.UpgradeTarget: Swift.Codable { case supportedEngineModes = "SupportedEngineModes" case supportsBabelfish = "SupportsBabelfish" case supportsGlobalDatabases = "SupportsGlobalDatabases" + case supportsLocalWriteForwarding = "SupportsLocalWriteForwarding" case supportsParallelQuery = "SupportsParallelQuery" } @@ -51735,6 +52669,9 @@ extension RDSClientTypes.UpgradeTarget: Swift.Codable { if let supportsGlobalDatabases = supportsGlobalDatabases { try container.encode(supportsGlobalDatabases, forKey: ClientRuntime.Key("SupportsGlobalDatabases")) } + if let supportsLocalWriteForwarding = supportsLocalWriteForwarding { + try container.encode(supportsLocalWriteForwarding, forKey: ClientRuntime.Key("SupportsLocalWriteForwarding")) + } if let supportsParallelQuery = supportsParallelQuery { try container.encode(supportsParallelQuery, forKey: ClientRuntime.Key("SupportsParallelQuery")) } @@ -51777,6 +52714,8 @@ extension RDSClientTypes.UpgradeTarget: Swift.Codable { supportsGlobalDatabases = supportsGlobalDatabasesDecoded let supportsBabelfishDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .supportsBabelfish) supportsBabelfish = supportsBabelfishDecoded + let supportsLocalWriteForwardingDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .supportsLocalWriteForwarding) + supportsLocalWriteForwarding = supportsLocalWriteForwardingDecoded } } @@ -51799,6 +52738,8 @@ extension RDSClientTypes { public var supportsBabelfish: Swift.Bool? /// A value that indicates whether you can use Aurora global databases with the target engine version. public var supportsGlobalDatabases: Swift.Bool? + /// A value that indicates whether the target engine version supports forwarding write operations from reader DB instances to the writer DB instance in the DB cluster. By default, write operations aren't allowed on reader DB instances. Valid for: Aurora DB clusters only + public var supportsLocalWriteForwarding: Swift.Bool? /// A value that indicates whether you can use Aurora parallel query with the target engine version. public var supportsParallelQuery: Swift.Bool? @@ -51811,6 +52752,7 @@ extension RDSClientTypes { supportedEngineModes: [Swift.String]? = nil, supportsBabelfish: Swift.Bool? = nil, supportsGlobalDatabases: Swift.Bool? = nil, + supportsLocalWriteForwarding: Swift.Bool? = nil, supportsParallelQuery: Swift.Bool? = nil ) { @@ -51822,6 +52764,7 @@ extension RDSClientTypes { self.supportedEngineModes = supportedEngineModes self.supportsBabelfish = supportsBabelfish self.supportsGlobalDatabases = supportsGlobalDatabases + self.supportsLocalWriteForwarding = supportsLocalWriteForwarding self.supportsParallelQuery = supportsParallelQuery } } diff --git a/Sources/Services/AWSResiliencehub/Paginators.swift b/Sources/Services/AWSResiliencehub/Paginators.swift index 18aefb50aa3..95821777b6f 100644 --- a/Sources/Services/AWSResiliencehub/Paginators.swift +++ b/Sources/Services/AWSResiliencehub/Paginators.swift @@ -24,6 +24,28 @@ extension ListAlarmRecommendationsInput: ClientRuntime.PaginateToken { nextToken: token )} } +extension ResiliencehubClient { + /// Paginate over `[ListAppAssessmentComplianceDriftsOutputResponse]` 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 `[ListAppAssessmentComplianceDriftsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListAppAssessmentComplianceDriftsOutputResponse` + public func listAppAssessmentComplianceDriftsPaginated(input: ListAppAssessmentComplianceDriftsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListAppAssessmentComplianceDriftsInput.nextToken, outputKey: \ListAppAssessmentComplianceDriftsOutputResponse.nextToken, paginationFunction: self.listAppAssessmentComplianceDrifts(input:)) + } +} + +extension ListAppAssessmentComplianceDriftsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListAppAssessmentComplianceDriftsInput { + return ListAppAssessmentComplianceDriftsInput( + assessmentArn: self.assessmentArn, + maxResults: self.maxResults, + nextToken: token + )} +} extension ResiliencehubClient { /// Paginate over `[ListAppAssessmentsOutputResponse]` results. /// @@ -229,8 +251,10 @@ extension ListAppVersionsInput: ClientRuntime.PaginateToken { public func usingPaginationToken(_ token: Swift.String) -> ListAppVersionsInput { return ListAppVersionsInput( appArn: self.appArn, + endTime: self.endTime, maxResults: self.maxResults, - nextToken: token + nextToken: token, + startTime: self.startTime )} } extension ResiliencehubClient { diff --git a/Sources/Services/AWSResiliencehub/ResiliencehubClient.swift b/Sources/Services/AWSResiliencehub/ResiliencehubClient.swift index b94c5214fce..9ba50080d78 100644 --- a/Sources/Services/AWSResiliencehub/ResiliencehubClient.swift +++ b/Sources/Services/AWSResiliencehub/ResiliencehubClient.swift @@ -103,7 +103,43 @@ extension ResiliencehubClient: ResiliencehubClientProtocol { return result } - /// Creates an Resilience Hub application. An Resilience Hub application is a collection of Amazon Web Services resources structured to prevent and recover Amazon Web Services application disruptions. To describe an Resilience Hub application, you provide an application name, resources from one or more CloudFormation stacks, Resource Groups, Terraform state files, AppRegistry applications, and an appropriate resiliency policy. For more information about the number of resources supported per application, see [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/resiliencehub.html#limits_resiliencehub). After you create an Resilience Hub application, you publish it so that you can run a resiliency assessment on it. You can then use recommendations from the assessment to improve resiliency by running another assessment, comparing results, and then iterating the process until you achieve your goals for recovery time objective (RTO) and recovery point objective (RPO). + /// Enables you to include or exclude one or more operational recommendations. + public func batchUpdateRecommendationStatus(input: BatchUpdateRecommendationStatusInput) async throws -> BatchUpdateRecommendationStatusOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "batchUpdateRecommendationStatus") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "resiliencehub") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "batchUpdateRecommendationStatus") + 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.serviceSpecific.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: "BatchUpdateRecommendationStatusRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Creates an Resilience Hub application. An Resilience Hub application is a collection of Amazon Web Services resources structured to prevent and recover Amazon Web Services application disruptions. To describe a Resilience Hub application, you provide an application name, resources from one or more CloudFormation stacks, Resource Groups, Terraform state files, AppRegistry applications, and an appropriate resiliency policy. In addition, you can also add resources that are located on Amazon Elastic Kubernetes Service (Amazon EKS) clusters as optional resources. For more information about the number of resources supported per application, see [Service quotas](https://docs.aws.amazon.com/general/latest/gr/resiliencehub.html#limits_resiliencehub). After you create an Resilience Hub application, you publish it so that you can run a resiliency assessment on it. You can then use recommendations from the assessment to improve resiliency by running another assessment, comparing results, and then iterating the process until you achieve your goals for recovery time objective (RTO) and recovery point objective (RPO). public func createApp(input: CreateAppInput) async throws -> CreateAppOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1049,6 +1085,42 @@ extension ResiliencehubClient: ResiliencehubClientProtocol { return result } + /// List of compliance drifts that were detected while running an assessment. + public func listAppAssessmentComplianceDrifts(input: ListAppAssessmentComplianceDriftsInput) async throws -> ListAppAssessmentComplianceDriftsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listAppAssessmentComplianceDrifts") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "resiliencehub") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listAppAssessmentComplianceDrifts") + 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.serviceSpecific.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: "ListAppAssessmentComplianceDriftsRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Lists the assessments for an Resilience Hub application. You can use request parameters to refine the results for the response object. public func listAppAssessments(input: ListAppAssessmentsInput) async throws -> ListAppAssessmentsOutputResponse { diff --git a/Sources/Services/AWSResiliencehub/ResiliencehubClientProtocol.swift b/Sources/Services/AWSResiliencehub/ResiliencehubClientProtocol.swift index ec6ebe0bae6..146ca0f8b36 100644 --- a/Sources/Services/AWSResiliencehub/ResiliencehubClientProtocol.swift +++ b/Sources/Services/AWSResiliencehub/ResiliencehubClientProtocol.swift @@ -6,7 +6,9 @@ import ClientRuntime public protocol ResiliencehubClientProtocol { /// Adds the resource mapping for the draft application version. You can also update an existing resource mapping to a new physical resource. func addDraftAppVersionResourceMappings(input: AddDraftAppVersionResourceMappingsInput) async throws -> AddDraftAppVersionResourceMappingsOutputResponse - /// Creates an Resilience Hub application. An Resilience Hub application is a collection of Amazon Web Services resources structured to prevent and recover Amazon Web Services application disruptions. To describe an Resilience Hub application, you provide an application name, resources from one or more CloudFormation stacks, Resource Groups, Terraform state files, AppRegistry applications, and an appropriate resiliency policy. For more information about the number of resources supported per application, see [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/resiliencehub.html#limits_resiliencehub). After you create an Resilience Hub application, you publish it so that you can run a resiliency assessment on it. You can then use recommendations from the assessment to improve resiliency by running another assessment, comparing results, and then iterating the process until you achieve your goals for recovery time objective (RTO) and recovery point objective (RPO). + /// Enables you to include or exclude one or more operational recommendations. + func batchUpdateRecommendationStatus(input: BatchUpdateRecommendationStatusInput) async throws -> BatchUpdateRecommendationStatusOutputResponse + /// Creates an Resilience Hub application. An Resilience Hub application is a collection of Amazon Web Services resources structured to prevent and recover Amazon Web Services application disruptions. To describe a Resilience Hub application, you provide an application name, resources from one or more CloudFormation stacks, Resource Groups, Terraform state files, AppRegistry applications, and an appropriate resiliency policy. In addition, you can also add resources that are located on Amazon Elastic Kubernetes Service (Amazon EKS) clusters as optional resources. For more information about the number of resources supported per application, see [Service quotas](https://docs.aws.amazon.com/general/latest/gr/resiliencehub.html#limits_resiliencehub). After you create an Resilience Hub application, you publish it so that you can run a resiliency assessment on it. You can then use recommendations from the assessment to improve resiliency by running another assessment, comparing results, and then iterating the process until you achieve your goals for recovery time objective (RTO) and recovery point objective (RPO). func createApp(input: CreateAppInput) async throws -> CreateAppOutputResponse /// Creates a new Application Component in the Resilience Hub application. This API updates the Resilience Hub application draft version. To use this Application Component for running assessments, you must publish the Resilience Hub application using the PublishAppVersion API. func createAppVersionAppComponent(input: CreateAppVersionAppComponentInput) async throws -> CreateAppVersionAppComponentOutputResponse @@ -74,6 +76,8 @@ public protocol ResiliencehubClientProtocol { func importResourcesToDraftAppVersion(input: ImportResourcesToDraftAppVersionInput) async throws -> ImportResourcesToDraftAppVersionOutputResponse /// Lists the alarm recommendations for an Resilience Hub application. func listAlarmRecommendations(input: ListAlarmRecommendationsInput) async throws -> ListAlarmRecommendationsOutputResponse + /// List of compliance drifts that were detected while running an assessment. + func listAppAssessmentComplianceDrifts(input: ListAppAssessmentComplianceDriftsInput) async throws -> ListAppAssessmentComplianceDriftsOutputResponse /// Lists the assessments for an Resilience Hub application. You can use request parameters to refine the results for the response object. func listAppAssessments(input: ListAppAssessmentsInput) async throws -> ListAppAssessmentsOutputResponse /// Lists the compliances for an Resilience Hub Application Component. diff --git a/Sources/Services/AWSResiliencehub/models/Models.swift b/Sources/Services/AWSResiliencehub/models/Models.swift index e710b84b583..42b4c6dbf43 100644 --- a/Sources/Services/AWSResiliencehub/models/Models.swift +++ b/Sources/Services/AWSResiliencehub/models/Models.swift @@ -84,7 +84,7 @@ extension AddDraftAppVersionResourceMappingsInput: ClientRuntime.URLPathProvider } public struct AddDraftAppVersionResourceMappingsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// Mappings used to map logical resources from the template to physical resources. You can use the mapping type CFN_STACK if the application template uses a logical stack name. Or you can map individual resources by using the mapping type RESOURCE. We recommend using the mapping type CFN_STACK if the application is backed by a CloudFormation stack. @@ -163,13 +163,13 @@ extension AddDraftAppVersionResourceMappingsOutputResponse: ClientRuntime.HttpRe } public struct AddDraftAppVersionResourceMappingsOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. /// This member is required. public var appVersion: Swift.String? - /// Mappings used to map logical resources from the template to physical resources. You can use the mapping type CFN_STACK if the application template uses a logical stack name. Or you can map individual resources by using the mapping type RESOURCE. We recommend using the mapping type CFN_STACK if the application is backed by a CloudFormation stack. + /// List of sources that are used to map a logical resource from the template to a physical resource. You can use sources such as CloudFormation, Terraform state files, AppRegistry applications, or Amazon EKS. /// This member is required. public var resourceMappings: [ResiliencehubClientTypes.ResourceMapping]? @@ -221,6 +221,7 @@ extension AddDraftAppVersionResourceMappingsOutputResponseBody: Swift.Decodable extension ResiliencehubClientTypes.AlarmRecommendation: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case appComponentName + case appComponentNames case description case items case name @@ -235,6 +236,12 @@ extension ResiliencehubClientTypes.AlarmRecommendation: Swift.Codable { if let appComponentName = self.appComponentName { try encodeContainer.encode(appComponentName, forKey: .appComponentName) } + if let appComponentNames = appComponentNames { + var appComponentNamesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .appComponentNames) + for string2550 in appComponentNames { + try appComponentNamesContainer.encode(string2550) + } + } if let description = self.description { try encodeContainer.encode(description, forKey: .description) } @@ -288,35 +295,50 @@ extension ResiliencehubClientTypes.AlarmRecommendation: Swift.Codable { items = itemsDecoded0 let prerequisiteDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .prerequisite) prerequisite = prerequisiteDecoded + let appComponentNamesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .appComponentNames) + var appComponentNamesDecoded0:[Swift.String]? = nil + if let appComponentNamesContainer = appComponentNamesContainer { + appComponentNamesDecoded0 = [Swift.String]() + for string0 in appComponentNamesContainer { + if let string0 = string0 { + appComponentNamesDecoded0?.append(string0) + } + } + } + appComponentNames = appComponentNamesDecoded0 } } extension ResiliencehubClientTypes { /// Defines a recommendation for a CloudWatch alarm. public struct AlarmRecommendation: Swift.Equatable { - /// The Application Component for the CloudWatch alarm recommendation. + /// Application Component name for the CloudWatch alarm recommendation. This name is saved as the first item in the appComponentNames list. + @available(*, deprecated, message: "An alarm recommendation can be attached to multiple Application Components, hence this property will be replaced by the new property 'appComponentNames'.") public var appComponentName: Swift.String? - /// The description of the recommendation. + /// List of Application Component names for the CloudWatch alarm recommendation. + public var appComponentNames: [Swift.String]? + /// Description of the alarm recommendation. public var description: Swift.String? - /// The list of CloudWatch alarm recommendations. + /// List of CloudWatch alarm recommendations. public var items: [ResiliencehubClientTypes.RecommendationItem]? - /// The name of the alarm recommendation. + /// Name of the alarm recommendation. /// This member is required. public var name: Swift.String? /// The prerequisite for the alarm recommendation. public var prerequisite: Swift.String? - /// The identifier of the alarm recommendation. + /// Identifier of the alarm recommendation. /// This member is required. public var recommendationId: Swift.String? - /// The reference identifier of the alarm recommendation. + /// Reference identifier of the alarm recommendation. /// This member is required. public var referenceId: Swift.String? - /// The type of alarm recommendation. + /// Type of alarm recommendation. /// This member is required. public var type: ResiliencehubClientTypes.AlarmType? public init( appComponentName: Swift.String? = nil, + appComponentNames: [Swift.String]? = nil, description: Swift.String? = nil, items: [ResiliencehubClientTypes.RecommendationItem]? = nil, name: Swift.String? = nil, @@ -327,6 +349,7 @@ extension ResiliencehubClientTypes { ) { self.appComponentName = appComponentName + self.appComponentNames = appComponentNames self.description = description self.items = items self.name = name @@ -387,9 +410,13 @@ extension ResiliencehubClientTypes.App: Swift.Codable { case complianceStatus case creationTime case description + case driftStatus + case eventSubscriptions case lastAppComplianceEvaluationTime + case lastDriftEvaluationTime case lastResiliencyScoreEvaluationTime case name + case permissionModel case policyArn case resiliencyScore case status @@ -413,15 +440,30 @@ extension ResiliencehubClientTypes.App: Swift.Codable { if let description = self.description { try encodeContainer.encode(description, forKey: .description) } + if let driftStatus = self.driftStatus { + try encodeContainer.encode(driftStatus.rawValue, forKey: .driftStatus) + } + if let eventSubscriptions = eventSubscriptions { + var eventSubscriptionsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .eventSubscriptions) + for eventsubscription0 in eventSubscriptions { + try eventSubscriptionsContainer.encode(eventsubscription0) + } + } if let lastAppComplianceEvaluationTime = self.lastAppComplianceEvaluationTime { try encodeContainer.encodeTimestamp(lastAppComplianceEvaluationTime, format: .epochSeconds, forKey: .lastAppComplianceEvaluationTime) } + if let lastDriftEvaluationTime = self.lastDriftEvaluationTime { + try encodeContainer.encodeTimestamp(lastDriftEvaluationTime, format: .epochSeconds, forKey: .lastDriftEvaluationTime) + } if let lastResiliencyScoreEvaluationTime = self.lastResiliencyScoreEvaluationTime { try encodeContainer.encodeTimestamp(lastResiliencyScoreEvaluationTime, format: .epochSeconds, forKey: .lastResiliencyScoreEvaluationTime) } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } + if let permissionModel = self.permissionModel { + try encodeContainer.encode(permissionModel, forKey: .permissionModel) + } if let policyArn = self.policyArn { try encodeContainer.encode(policyArn, forKey: .policyArn) } @@ -474,43 +516,68 @@ extension ResiliencehubClientTypes.App: Swift.Codable { tags = tagsDecoded0 let assessmentScheduleDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.AppAssessmentScheduleType.self, forKey: .assessmentSchedule) assessmentSchedule = assessmentScheduleDecoded + let permissionModelDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.PermissionModel.self, forKey: .permissionModel) + permissionModel = permissionModelDecoded + let eventSubscriptionsContainer = try containerValues.decodeIfPresent([ResiliencehubClientTypes.EventSubscription?].self, forKey: .eventSubscriptions) + var eventSubscriptionsDecoded0:[ResiliencehubClientTypes.EventSubscription]? = nil + if let eventSubscriptionsContainer = eventSubscriptionsContainer { + eventSubscriptionsDecoded0 = [ResiliencehubClientTypes.EventSubscription]() + for structure0 in eventSubscriptionsContainer { + if let structure0 = structure0 { + eventSubscriptionsDecoded0?.append(structure0) + } + } + } + eventSubscriptions = eventSubscriptionsDecoded0 + let driftStatusDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.AppDriftStatusType.self, forKey: .driftStatus) + driftStatus = driftStatusDecoded + let lastDriftEvaluationTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastDriftEvaluationTime) + lastDriftEvaluationTime = lastDriftEvaluationTimeDecoded } } extension ResiliencehubClientTypes.App: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "App(appArn: \(Swift.String(describing: appArn)), assessmentSchedule: \(Swift.String(describing: assessmentSchedule)), complianceStatus: \(Swift.String(describing: complianceStatus)), creationTime: \(Swift.String(describing: creationTime)), description: \(Swift.String(describing: description)), lastAppComplianceEvaluationTime: \(Swift.String(describing: lastAppComplianceEvaluationTime)), lastResiliencyScoreEvaluationTime: \(Swift.String(describing: lastResiliencyScoreEvaluationTime)), name: \(Swift.String(describing: name)), policyArn: \(Swift.String(describing: policyArn)), resiliencyScore: \(Swift.String(describing: resiliencyScore)), status: \(Swift.String(describing: status)), tags: \"CONTENT_REDACTED\")"} + "App(appArn: \(Swift.String(describing: appArn)), assessmentSchedule: \(Swift.String(describing: assessmentSchedule)), complianceStatus: \(Swift.String(describing: complianceStatus)), creationTime: \(Swift.String(describing: creationTime)), description: \(Swift.String(describing: description)), driftStatus: \(Swift.String(describing: driftStatus)), eventSubscriptions: \(Swift.String(describing: eventSubscriptions)), lastAppComplianceEvaluationTime: \(Swift.String(describing: lastAppComplianceEvaluationTime)), lastDriftEvaluationTime: \(Swift.String(describing: lastDriftEvaluationTime)), lastResiliencyScoreEvaluationTime: \(Swift.String(describing: lastResiliencyScoreEvaluationTime)), name: \(Swift.String(describing: name)), permissionModel: \(Swift.String(describing: permissionModel)), policyArn: \(Swift.String(describing: policyArn)), resiliencyScore: \(Swift.String(describing: resiliencyScore)), status: \(Swift.String(describing: status)), tags: \"CONTENT_REDACTED\")"} } extension ResiliencehubClientTypes { /// Defines an Resilience Hub application. public struct App: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// Assessment execution schedule with 'Daily' or 'Disabled' values. public var assessmentSchedule: ResiliencehubClientTypes.AppAssessmentScheduleType? - /// The current status of compliance for the resiliency policy. + /// Current status of compliance for the resiliency policy. public var complianceStatus: ResiliencehubClientTypes.AppComplianceStatusType? - /// The timestamp for when the app was created. + /// Timestamp for when the app was created. /// This member is required. public var creationTime: ClientRuntime.Date? - /// The optional description for an app. + /// Optional description for an application. public var description: Swift.String? - /// The timestamp for the most recent compliance evaluation. + /// Indicates if compliance drifts (deviations) were detected while running an assessment for your application. + public var driftStatus: ResiliencehubClientTypes.AppDriftStatusType? + /// The list of events you would like to subscribe and get notification for. Currently, Resilience Hub supports notifications only for Drift detected and Scheduled assessment failure events. + public var eventSubscriptions: [ResiliencehubClientTypes.EventSubscription]? + /// Timestamp for the most recent compliance evaluation. public var lastAppComplianceEvaluationTime: ClientRuntime.Date? - /// The timestamp for the most recent resiliency score evaluation. + /// Indicates the last time that a drift was evaluated. + public var lastDriftEvaluationTime: ClientRuntime.Date? + /// Timestamp for the most recent resiliency score evaluation. public var lastResiliencyScoreEvaluationTime: ClientRuntime.Date? - /// The name for the application. + /// Name for the application. /// This member is required. public var name: Swift.String? - /// The Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Defines the roles and credentials that Resilience Hub would use while creating the application, importing its resources, and running an assessment. + public var permissionModel: ResiliencehubClientTypes.PermissionModel? + /// Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var policyArn: Swift.String? - /// The current resiliency score for the application. + /// Current resiliency score for the application. public var resiliencyScore: Swift.Double - /// The status of the application. + /// Status of the application. public var status: ResiliencehubClientTypes.AppStatusType? - /// The tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key/value pair. + /// Tags assigned to the resource. 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]? public init( @@ -519,9 +586,13 @@ extension ResiliencehubClientTypes { complianceStatus: ResiliencehubClientTypes.AppComplianceStatusType? = nil, creationTime: ClientRuntime.Date? = nil, description: Swift.String? = nil, + driftStatus: ResiliencehubClientTypes.AppDriftStatusType? = nil, + eventSubscriptions: [ResiliencehubClientTypes.EventSubscription]? = nil, lastAppComplianceEvaluationTime: ClientRuntime.Date? = nil, + lastDriftEvaluationTime: ClientRuntime.Date? = nil, lastResiliencyScoreEvaluationTime: ClientRuntime.Date? = nil, name: Swift.String? = nil, + permissionModel: ResiliencehubClientTypes.PermissionModel? = nil, policyArn: Swift.String? = nil, resiliencyScore: Swift.Double = 0.0, status: ResiliencehubClientTypes.AppStatusType? = nil, @@ -533,9 +604,13 @@ extension ResiliencehubClientTypes { self.complianceStatus = complianceStatus self.creationTime = creationTime self.description = description + self.driftStatus = driftStatus + self.eventSubscriptions = eventSubscriptions self.lastAppComplianceEvaluationTime = lastAppComplianceEvaluationTime + self.lastDriftEvaluationTime = lastDriftEvaluationTime self.lastResiliencyScoreEvaluationTime = lastResiliencyScoreEvaluationTime self.name = name + self.permissionModel = permissionModel self.policyArn = policyArn self.resiliencyScore = resiliencyScore self.status = status @@ -555,6 +630,7 @@ extension ResiliencehubClientTypes.AppAssessment: Swift.Codable { case compliance case complianceStatus case cost + case driftStatus case endTime case invoker case message @@ -563,6 +639,7 @@ extension ResiliencehubClientTypes.AppAssessment: Swift.Codable { case resourceErrorsDetails case startTime case tags + case versionName } public func encode(to encoder: Swift.Encoder) throws { @@ -594,6 +671,9 @@ extension ResiliencehubClientTypes.AppAssessment: Swift.Codable { if let cost = self.cost { try encodeContainer.encode(cost, forKey: .cost) } + if let driftStatus = self.driftStatus { + try encodeContainer.encode(driftStatus.rawValue, forKey: .driftStatus) + } if let endTime = self.endTime { try encodeContainer.encodeTimestamp(endTime, format: .epochSeconds, forKey: .endTime) } @@ -621,6 +701,9 @@ extension ResiliencehubClientTypes.AppAssessment: Swift.Codable { try tagsContainer.encode(tagMap0, forKey: ClientRuntime.Key(stringValue: dictKey0)) } } + if let versionName = self.versionName { + try encodeContainer.encode(versionName, forKey: .versionName) + } } public init(from decoder: Swift.Decoder) throws { @@ -675,52 +758,60 @@ extension ResiliencehubClientTypes.AppAssessment: Swift.Codable { tags = tagsDecoded0 let resourceErrorsDetailsDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.ResourceErrorsDetails.self, forKey: .resourceErrorsDetails) resourceErrorsDetails = resourceErrorsDetailsDecoded + let versionNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .versionName) + versionName = versionNameDecoded + let driftStatusDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.DriftStatus.self, forKey: .driftStatus) + driftStatus = driftStatusDecoded } } extension ResiliencehubClientTypes.AppAssessment: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "AppAssessment(appArn: \(Swift.String(describing: appArn)), appVersion: \(Swift.String(describing: appVersion)), assessmentArn: \(Swift.String(describing: assessmentArn)), assessmentName: \(Swift.String(describing: assessmentName)), assessmentStatus: \(Swift.String(describing: assessmentStatus)), compliance: \(Swift.String(describing: compliance)), complianceStatus: \(Swift.String(describing: complianceStatus)), cost: \(Swift.String(describing: cost)), endTime: \(Swift.String(describing: endTime)), invoker: \(Swift.String(describing: invoker)), message: \(Swift.String(describing: message)), policy: \(Swift.String(describing: policy)), resiliencyScore: \(Swift.String(describing: resiliencyScore)), resourceErrorsDetails: \(Swift.String(describing: resourceErrorsDetails)), startTime: \(Swift.String(describing: startTime)), tags: \"CONTENT_REDACTED\")"} + "AppAssessment(appArn: \(Swift.String(describing: appArn)), appVersion: \(Swift.String(describing: appVersion)), assessmentArn: \(Swift.String(describing: assessmentArn)), assessmentName: \(Swift.String(describing: assessmentName)), assessmentStatus: \(Swift.String(describing: assessmentStatus)), compliance: \(Swift.String(describing: compliance)), complianceStatus: \(Swift.String(describing: complianceStatus)), cost: \(Swift.String(describing: cost)), driftStatus: \(Swift.String(describing: driftStatus)), endTime: \(Swift.String(describing: endTime)), invoker: \(Swift.String(describing: invoker)), message: \(Swift.String(describing: message)), policy: \(Swift.String(describing: policy)), resiliencyScore: \(Swift.String(describing: resiliencyScore)), resourceErrorsDetails: \(Swift.String(describing: resourceErrorsDetails)), startTime: \(Swift.String(describing: startTime)), versionName: \(Swift.String(describing: versionName)), tags: \"CONTENT_REDACTED\")"} } extension ResiliencehubClientTypes { /// Defines an application assessment. public struct AppAssessment: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var appArn: Swift.String? - /// The version of the application. + /// Version of an application. public var appVersion: Swift.String? - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? - /// The name of the assessment. + /// Name of the assessment. public var assessmentName: Swift.String? - /// The current status of the assessment for the resiliency policy. + /// Current status of the assessment for the resiliency policy. /// This member is required. public var assessmentStatus: ResiliencehubClientTypes.AssessmentStatus? - /// The application compliance against the resiliency policy. + /// Application compliance against the resiliency policy. public var compliance: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? - /// The current status of the compliance for the resiliency policy. + /// Current status of the compliance for the resiliency policy. public var complianceStatus: ResiliencehubClientTypes.ComplianceStatus? - /// The cost for the application. + /// Cost for the application. public var cost: ResiliencehubClientTypes.Cost? - /// The end time for the action. + /// Indicates if compliance drifts (deviations) were detected while running an assessment for your application. + public var driftStatus: ResiliencehubClientTypes.DriftStatus? + /// End time for the action. public var endTime: ClientRuntime.Date? /// The entity that invoked the assessment. /// This member is required. public var invoker: ResiliencehubClientTypes.AssessmentInvoker? /// Error or warning message from the assessment execution public var message: Swift.String? - /// The resiliency policy. + /// Resiliency policy of an application. public var policy: ResiliencehubClientTypes.ResiliencyPolicy? - /// The current resiliency score for the application. + /// Current resiliency score for an application. public var resiliencyScore: ResiliencehubClientTypes.ResiliencyScore? /// A resource error object containing a list of errors retrieving an application's resources. public var resourceErrorsDetails: ResiliencehubClientTypes.ResourceErrorsDetails? - /// The starting time for the action. + /// Starting time for the action. public var startTime: ClientRuntime.Date? - /// The tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key/value pair. + /// Tags assigned to the resource. 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]? + /// Version name of the published application. + public var versionName: Swift.String? public init( appArn: Swift.String? = nil, @@ -731,6 +822,7 @@ extension ResiliencehubClientTypes { compliance: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? = nil, complianceStatus: ResiliencehubClientTypes.ComplianceStatus? = nil, cost: ResiliencehubClientTypes.Cost? = nil, + driftStatus: ResiliencehubClientTypes.DriftStatus? = nil, endTime: ClientRuntime.Date? = nil, invoker: ResiliencehubClientTypes.AssessmentInvoker? = nil, message: Swift.String? = nil, @@ -738,7 +830,8 @@ extension ResiliencehubClientTypes { resiliencyScore: ResiliencehubClientTypes.ResiliencyScore? = nil, resourceErrorsDetails: ResiliencehubClientTypes.ResourceErrorsDetails? = nil, startTime: ClientRuntime.Date? = nil, - tags: [Swift.String:Swift.String]? = nil + tags: [Swift.String:Swift.String]? = nil, + versionName: Swift.String? = nil ) { self.appArn = appArn @@ -749,6 +842,7 @@ extension ResiliencehubClientTypes { self.compliance = compliance self.complianceStatus = complianceStatus self.cost = cost + self.driftStatus = driftStatus self.endTime = endTime self.invoker = invoker self.message = message @@ -757,6 +851,7 @@ extension ResiliencehubClientTypes { self.resourceErrorsDetails = resourceErrorsDetails self.startTime = startTime self.tags = tags + self.versionName = versionName } } @@ -803,11 +898,13 @@ extension ResiliencehubClientTypes.AppAssessmentSummary: Swift.Codable { case assessmentStatus case complianceStatus case cost + case driftStatus case endTime case invoker case message case resiliencyScore case startTime + case versionName } public func encode(to encoder: Swift.Encoder) throws { @@ -833,6 +930,9 @@ extension ResiliencehubClientTypes.AppAssessmentSummary: Swift.Codable { if let cost = self.cost { try encodeContainer.encode(cost, forKey: .cost) } + if let driftStatus = self.driftStatus { + try encodeContainer.encode(driftStatus.rawValue, forKey: .driftStatus) + } if let endTime = self.endTime { try encodeContainer.encodeTimestamp(endTime, format: .epochSeconds, forKey: .endTime) } @@ -848,6 +948,9 @@ extension ResiliencehubClientTypes.AppAssessmentSummary: Swift.Codable { if let startTime = self.startTime { try encodeContainer.encodeTimestamp(startTime, format: .epochSeconds, forKey: .startTime) } + if let versionName = self.versionName { + try encodeContainer.encode(versionName, forKey: .versionName) + } } public init(from decoder: Swift.Decoder) throws { @@ -876,38 +979,46 @@ extension ResiliencehubClientTypes.AppAssessmentSummary: Swift.Codable { cost = costDecoded let resiliencyScoreDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .resiliencyScore) ?? 0.0 resiliencyScore = resiliencyScoreDecoded + let versionNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .versionName) + versionName = versionNameDecoded + let driftStatusDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.DriftStatus.self, forKey: .driftStatus) + driftStatus = driftStatusDecoded } } extension ResiliencehubClientTypes { /// Defines an application assessment summary. public struct AppAssessmentSummary: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var appArn: Swift.String? - /// The version of the application. + /// Version of an application. public var appVersion: Swift.String? - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? - /// The name of the assessment. + /// Name of the assessment. public var assessmentName: Swift.String? - /// The current status of the assessment for the resiliency policy. + /// Current status of the assessment for the resiliency policy. /// This member is required. public var assessmentStatus: ResiliencehubClientTypes.AssessmentStatus? - /// The current status of compliance for the resiliency policy. + /// TCurrent status of compliance for the resiliency policy. public var complianceStatus: ResiliencehubClientTypes.ComplianceStatus? - /// The cost for the application. + /// Cost for an application. public var cost: ResiliencehubClientTypes.Cost? - /// The end time for the action. + /// Indicates if compliance drifts (deviations) were detected while running an assessment for your application. + public var driftStatus: ResiliencehubClientTypes.DriftStatus? + /// End time for the action. public var endTime: ClientRuntime.Date? - /// The entity that invoked the assessment. + /// Entity that invoked the assessment. public var invoker: ResiliencehubClientTypes.AssessmentInvoker? - /// The message from the assessment run. + /// Message from the assessment run. public var message: Swift.String? - /// The current resiliency score for the application. + /// Current resiliency score for the application. public var resiliencyScore: Swift.Double - /// The starting time for the action. + /// Starting time for the action. public var startTime: ClientRuntime.Date? + /// Name of an application version. + public var versionName: Swift.String? public init( appArn: Swift.String? = nil, @@ -917,11 +1028,13 @@ extension ResiliencehubClientTypes { assessmentStatus: ResiliencehubClientTypes.AssessmentStatus? = nil, complianceStatus: ResiliencehubClientTypes.ComplianceStatus? = nil, cost: ResiliencehubClientTypes.Cost? = nil, + driftStatus: ResiliencehubClientTypes.DriftStatus? = nil, endTime: ClientRuntime.Date? = nil, invoker: ResiliencehubClientTypes.AssessmentInvoker? = nil, message: Swift.String? = nil, resiliencyScore: Swift.Double = 0.0, - startTime: ClientRuntime.Date? = nil + startTime: ClientRuntime.Date? = nil, + versionName: Swift.String? = nil ) { self.appArn = appArn @@ -931,11 +1044,13 @@ extension ResiliencehubClientTypes { self.assessmentStatus = assessmentStatus self.complianceStatus = complianceStatus self.cost = cost + self.driftStatus = driftStatus self.endTime = endTime self.invoker = invoker self.message = message self.resiliencyScore = resiliencyScore self.startTime = startTime + self.versionName = versionName } } @@ -1043,9 +1158,9 @@ extension ResiliencehubClientTypes { public struct AppComponent: Swift.Equatable { /// Additional configuration parameters for an Resilience Hub application. If you want to implement additionalInfo through the Resilience Hub console rather than using an API call, see [Configure the application configuration parameters](https://docs.aws.amazon.com/resilience-hub/latest/userguide/app-config-param.html). Currently, this parameter accepts a key-value mapping (in a string format) of only one failover region and one associated account. Key: "failover-regions" Value: "[{"region":"", "accounts":[{"id":""}]}]" public var additionalInfo: [Swift.String:[Swift.String]]? - /// Unique identifier of the Application Component. + /// Identifier of the Application Component. public var id: Swift.String? - /// The name of the Application Component. + /// Name of the Application Component. /// This member is required. public var name: Swift.String? /// The type of Application Component. @@ -1132,7 +1247,7 @@ extension ResiliencehubClientTypes.AppComponentCompliance: Swift.Codable { extension ResiliencehubClientTypes { /// Defines the compliance of an Application Component against the resiliency policy. public struct AppComponentCompliance: Swift.Equatable { - /// The name of the Application Component. + /// Name of the Application Component. public var appComponentName: Swift.String? /// The compliance of the Application Component against the resiliency policy. public var compliance: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? @@ -1142,7 +1257,7 @@ extension ResiliencehubClientTypes { public var message: Swift.String? /// The current resiliency score for the application. public var resiliencyScore: ResiliencehubClientTypes.ResiliencyScore? - /// The status of the action. + /// Status of the action. public var status: ResiliencehubClientTypes.ComplianceStatus? public init( @@ -1165,6 +1280,41 @@ extension ResiliencehubClientTypes { } +extension ResiliencehubClientTypes { + public enum AppDriftStatusType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case detected + case notChecked + case notDetected + case sdkUnknown(Swift.String) + + public static var allCases: [AppDriftStatusType] { + return [ + .detected, + .notChecked, + .notDetected, + .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 .detected: return "Detected" + case .notChecked: return "NotChecked" + case .notDetected: return "NotDetected" + 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 = AppDriftStatusType(rawValue: rawValue) ?? AppDriftStatusType.sdkUnknown(rawValue) + } + } +} + extension ResiliencehubClientTypes.AppInputSource: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case eksSourceClusterNamespace @@ -1290,6 +1440,7 @@ extension ResiliencehubClientTypes.AppSummary: Swift.Codable { case complianceStatus case creationTime case description + case driftStatus case name case resiliencyScore case status @@ -1312,6 +1463,9 @@ extension ResiliencehubClientTypes.AppSummary: Swift.Codable { if let description = self.description { try encodeContainer.encode(description, forKey: .description) } + if let driftStatus = self.driftStatus { + try encodeContainer.encode(driftStatus.rawValue, forKey: .driftStatus) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -1341,13 +1495,15 @@ extension ResiliencehubClientTypes.AppSummary: Swift.Codable { assessmentSchedule = assessmentScheduleDecoded let statusDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.AppStatusType.self, forKey: .status) status = statusDecoded + let driftStatusDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.AppDriftStatusType.self, forKey: .driftStatus) + driftStatus = driftStatusDecoded } } extension ResiliencehubClientTypes { /// Defines an application summary. public struct AppSummary: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// Assessment execution schedule with 'Daily' or 'Disabled' values. @@ -1359,12 +1515,14 @@ extension ResiliencehubClientTypes { public var creationTime: ClientRuntime.Date? /// The optional description for an app. public var description: Swift.String? + /// Indicates if compliance drifts (deviations) were detected while running an assessment for your application. + public var driftStatus: ResiliencehubClientTypes.AppDriftStatusType? /// The name of the application. /// This member is required. public var name: Swift.String? /// The current resiliency score for the application. public var resiliencyScore: Swift.Double - /// The status of the application. + /// Status of the application. public var status: ResiliencehubClientTypes.AppStatusType? public init( @@ -1373,6 +1531,7 @@ extension ResiliencehubClientTypes { complianceStatus: ResiliencehubClientTypes.AppComplianceStatusType? = nil, creationTime: ClientRuntime.Date? = nil, description: Swift.String? = nil, + driftStatus: ResiliencehubClientTypes.AppDriftStatusType? = nil, name: Swift.String? = nil, resiliencyScore: Swift.Double = 0.0, status: ResiliencehubClientTypes.AppStatusType? = nil @@ -1383,6 +1542,7 @@ extension ResiliencehubClientTypes { self.complianceStatus = complianceStatus self.creationTime = creationTime self.description = description + self.driftStatus = driftStatus self.name = name self.resiliencyScore = resiliencyScore self.status = status @@ -1394,6 +1554,9 @@ extension ResiliencehubClientTypes { extension ResiliencehubClientTypes.AppVersionSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case appVersion + case creationTime + case identifier + case versionName } public func encode(to encoder: Swift.Encoder) throws { @@ -1401,27 +1564,54 @@ extension ResiliencehubClientTypes.AppVersionSummary: Swift.Codable { if let appVersion = self.appVersion { try encodeContainer.encode(appVersion, forKey: .appVersion) } + if let creationTime = self.creationTime { + try encodeContainer.encodeTimestamp(creationTime, format: .epochSeconds, forKey: .creationTime) + } + if let identifier = self.identifier { + try encodeContainer.encode(identifier, forKey: .identifier) + } + if let versionName = self.versionName { + try encodeContainer.encode(versionName, forKey: .versionName) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let appVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .appVersion) appVersion = appVersionDecoded + let identifierDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .identifier) + identifier = identifierDecoded + let creationTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationTime) + creationTime = creationTimeDecoded + let versionNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .versionName) + versionName = versionNameDecoded } } extension ResiliencehubClientTypes { - /// The version of the application. + /// Version of an application. public struct AppVersionSummary: Swift.Equatable { - /// The version of the application. + /// Version of an application. /// This member is required. public var appVersion: Swift.String? + /// Creation time of the application version. + public var creationTime: ClientRuntime.Date? + /// Identifier of the application version. + public var identifier: Swift.Int? + /// Name of the application version. + public var versionName: Swift.String? public init( - appVersion: Swift.String? = nil + appVersion: Swift.String? = nil, + creationTime: ClientRuntime.Date? = nil, + identifier: Swift.Int? = nil, + versionName: Swift.String? = nil ) { self.appVersion = appVersion + self.creationTime = creationTime + self.identifier = identifier + self.versionName = versionName } } @@ -1497,195 +1687,639 @@ extension ResiliencehubClientTypes { } } -extension ResiliencehubClientTypes { - public enum ComplianceStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { - case policyBreached - case policyMet - case sdkUnknown(Swift.String) - - public static var allCases: [ComplianceStatus] { - return [ - .policyBreached, - .policyMet, - .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 .policyBreached: return "PolicyBreached" - case .policyMet: return "PolicyMet" - 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 = ComplianceStatus(rawValue: rawValue) ?? ComplianceStatus.sdkUnknown(rawValue) - } - } -} - -extension ResiliencehubClientTypes.ComponentRecommendation: Swift.Codable { +extension ResiliencehubClientTypes.BatchUpdateRecommendationStatusFailedEntry: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { - case appComponentName - case configRecommendations - case recommendationStatus + case entryId + case errorMessage } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let appComponentName = self.appComponentName { - try encodeContainer.encode(appComponentName, forKey: .appComponentName) - } - if let configRecommendations = configRecommendations { - var configRecommendationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .configRecommendations) - for configrecommendation0 in configRecommendations { - try configRecommendationsContainer.encode(configrecommendation0) - } + if let entryId = self.entryId { + try encodeContainer.encode(entryId, forKey: .entryId) } - if let recommendationStatus = self.recommendationStatus { - try encodeContainer.encode(recommendationStatus.rawValue, forKey: .recommendationStatus) + if let errorMessage = self.errorMessage { + try encodeContainer.encode(errorMessage, forKey: .errorMessage) } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let appComponentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .appComponentName) - appComponentName = appComponentNameDecoded - let recommendationStatusDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.RecommendationComplianceStatus.self, forKey: .recommendationStatus) - recommendationStatus = recommendationStatusDecoded - let configRecommendationsContainer = try containerValues.decodeIfPresent([ResiliencehubClientTypes.ConfigRecommendation?].self, forKey: .configRecommendations) - var configRecommendationsDecoded0:[ResiliencehubClientTypes.ConfigRecommendation]? = nil - if let configRecommendationsContainer = configRecommendationsContainer { - configRecommendationsDecoded0 = [ResiliencehubClientTypes.ConfigRecommendation]() - for structure0 in configRecommendationsContainer { - if let structure0 = structure0 { - configRecommendationsDecoded0?.append(structure0) - } - } - } - configRecommendations = configRecommendationsDecoded0 + let entryIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entryId) + entryId = entryIdDecoded + let errorMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .errorMessage) + errorMessage = errorMessageDecoded } } extension ResiliencehubClientTypes { - /// Defines recommendations for an Resilience Hub Application Component, returned as an object. This object contains component names, configuration recommendations, and recommendation statuses. - public struct ComponentRecommendation: Swift.Equatable { - /// The name of the Application Component. + /// List of operational recommendations that did not get included or excluded. + public struct BatchUpdateRecommendationStatusFailedEntry: Swift.Equatable { + /// An identifier of an entry in this batch that is used to communicate the result. The entryIds of a batch request need to be unique within a request. /// This member is required. - public var appComponentName: Swift.String? - /// The list of recommendations. - /// This member is required. - public var configRecommendations: [ResiliencehubClientTypes.ConfigRecommendation]? - /// The recommendation status. + public var entryId: Swift.String? + /// Indicates the error that occurred while excluding an operational recommendation. /// This member is required. - public var recommendationStatus: ResiliencehubClientTypes.RecommendationComplianceStatus? + public var errorMessage: Swift.String? public init( - appComponentName: Swift.String? = nil, - configRecommendations: [ResiliencehubClientTypes.ConfigRecommendation]? = nil, - recommendationStatus: ResiliencehubClientTypes.RecommendationComplianceStatus? = nil + entryId: Swift.String? = nil, + errorMessage: Swift.String? = nil ) { - self.appComponentName = appComponentName - self.configRecommendations = configRecommendations - self.recommendationStatus = recommendationStatus + self.entryId = entryId + self.errorMessage = errorMessage } } } -extension ResiliencehubClientTypes.ConfigRecommendation: Swift.Codable { +extension BatchUpdateRecommendationStatusInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case appComponentName - case compliance - case cost - case description - case haArchitecture - case name - case optimizationType - case recommendationCompliance - case referenceId - case suggestedChanges + case appArn + case requestEntries } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let appComponentName = self.appComponentName { - try encodeContainer.encode(appComponentName, forKey: .appComponentName) - } - if let compliance = compliance { - var complianceContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .compliance) - for (dictKey0, assessmentCompliance0) in compliance { - try complianceContainer.encode(assessmentCompliance0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } - } - if let cost = self.cost { - try encodeContainer.encode(cost, forKey: .cost) - } - if let description = self.description { - try encodeContainer.encode(description, forKey: .description) - } - if let haArchitecture = self.haArchitecture { - try encodeContainer.encode(haArchitecture.rawValue, forKey: .haArchitecture) - } - if let name = self.name { - try encodeContainer.encode(name, forKey: .name) - } - if let optimizationType = self.optimizationType { - try encodeContainer.encode(optimizationType.rawValue, forKey: .optimizationType) - } - if let recommendationCompliance = recommendationCompliance { - var recommendationComplianceContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .recommendationCompliance) - for (dictKey0, recommendationCompliance0) in recommendationCompliance { - try recommendationComplianceContainer.encode(recommendationCompliance0, forKey: ClientRuntime.Key(stringValue: dictKey0)) - } - } - if let referenceId = self.referenceId { - try encodeContainer.encode(referenceId, forKey: .referenceId) + if let appArn = self.appArn { + try encodeContainer.encode(appArn, forKey: .appArn) } - if let suggestedChanges = suggestedChanges { - var suggestedChangesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .suggestedChanges) - for entitydescription0 in suggestedChanges { - try suggestedChangesContainer.encode(entitydescription0) + if let requestEntries = requestEntries { + var requestEntriesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .requestEntries) + for updaterecommendationstatusrequestentry0 in requestEntries { + try requestEntriesContainer.encode(updaterecommendationstatusrequestentry0) } } } +} + +extension BatchUpdateRecommendationStatusInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/batch-update-recommendation-status" + } +} + +public struct BatchUpdateRecommendationStatusInput: Swift.Equatable { + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// This member is required. + public var appArn: Swift.String? + /// Defines the list of operational recommendations that need to be included or excluded. + /// This member is required. + public var requestEntries: [ResiliencehubClientTypes.UpdateRecommendationStatusRequestEntry]? + + public init( + appArn: Swift.String? = nil, + requestEntries: [ResiliencehubClientTypes.UpdateRecommendationStatusRequestEntry]? = nil + ) + { + self.appArn = appArn + self.requestEntries = requestEntries + } +} + +struct BatchUpdateRecommendationStatusInputBody: Swift.Equatable { + let appArn: Swift.String? + let requestEntries: [ResiliencehubClientTypes.UpdateRecommendationStatusRequestEntry]? +} + +extension BatchUpdateRecommendationStatusInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case appArn + case requestEntries + } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let costDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.Cost.self, forKey: .cost) - cost = costDecoded - let appComponentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .appComponentName) - appComponentName = appComponentNameDecoded - let complianceContainer = try containerValues.decodeIfPresent([Swift.String: ResiliencehubClientTypes.DisruptionCompliance?].self, forKey: .compliance) - var complianceDecoded0: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? = nil - if let complianceContainer = complianceContainer { - complianceDecoded0 = [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]() - for (key0, disruptioncompliance0) in complianceContainer { - if let disruptioncompliance0 = disruptioncompliance0 { - complianceDecoded0?[key0] = disruptioncompliance0 - } - } - } - compliance = complianceDecoded0 - let recommendationComplianceContainer = try containerValues.decodeIfPresent([Swift.String: ResiliencehubClientTypes.RecommendationDisruptionCompliance?].self, forKey: .recommendationCompliance) - var recommendationComplianceDecoded0: [Swift.String:ResiliencehubClientTypes.RecommendationDisruptionCompliance]? = nil - if let recommendationComplianceContainer = recommendationComplianceContainer { - recommendationComplianceDecoded0 = [Swift.String:ResiliencehubClientTypes.RecommendationDisruptionCompliance]() - for (key0, recommendationdisruptioncompliance0) in recommendationComplianceContainer { - if let recommendationdisruptioncompliance0 = recommendationdisruptioncompliance0 { - recommendationComplianceDecoded0?[key0] = recommendationdisruptioncompliance0 + let appArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .appArn) + appArn = appArnDecoded + let requestEntriesContainer = try containerValues.decodeIfPresent([ResiliencehubClientTypes.UpdateRecommendationStatusRequestEntry?].self, forKey: .requestEntries) + var requestEntriesDecoded0:[ResiliencehubClientTypes.UpdateRecommendationStatusRequestEntry]? = nil + if let requestEntriesContainer = requestEntriesContainer { + requestEntriesDecoded0 = [ResiliencehubClientTypes.UpdateRecommendationStatusRequestEntry]() + for structure0 in requestEntriesContainer { + if let structure0 = structure0 { + requestEntriesDecoded0?.append(structure0) } } } - recommendationCompliance = recommendationComplianceDecoded0 - let optimizationTypeDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.ConfigRecommendationOptimizationType.self, forKey: .optimizationType) - optimizationType = optimizationTypeDecoded + requestEntries = requestEntriesDecoded0 + } +} + +public enum BatchUpdateRecommendationStatusOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension BatchUpdateRecommendationStatusOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: BatchUpdateRecommendationStatusOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.appArn = output.appArn + self.failedEntries = output.failedEntries + self.successfulEntries = output.successfulEntries + } else { + self.appArn = nil + self.failedEntries = nil + self.successfulEntries = nil + } + } +} + +public struct BatchUpdateRecommendationStatusOutputResponse: Swift.Equatable { + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// This member is required. + public var appArn: Swift.String? + /// A list of items with error details about each item, which could not be included or excluded. + /// This member is required. + public var failedEntries: [ResiliencehubClientTypes.BatchUpdateRecommendationStatusFailedEntry]? + /// A list of items that were included or excluded. + /// This member is required. + public var successfulEntries: [ResiliencehubClientTypes.BatchUpdateRecommendationStatusSuccessfulEntry]? + + public init( + appArn: Swift.String? = nil, + failedEntries: [ResiliencehubClientTypes.BatchUpdateRecommendationStatusFailedEntry]? = nil, + successfulEntries: [ResiliencehubClientTypes.BatchUpdateRecommendationStatusSuccessfulEntry]? = nil + ) + { + self.appArn = appArn + self.failedEntries = failedEntries + self.successfulEntries = successfulEntries + } +} + +struct BatchUpdateRecommendationStatusOutputResponseBody: Swift.Equatable { + let appArn: Swift.String? + let successfulEntries: [ResiliencehubClientTypes.BatchUpdateRecommendationStatusSuccessfulEntry]? + let failedEntries: [ResiliencehubClientTypes.BatchUpdateRecommendationStatusFailedEntry]? +} + +extension BatchUpdateRecommendationStatusOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case appArn + case failedEntries + case successfulEntries + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let appArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .appArn) + appArn = appArnDecoded + let successfulEntriesContainer = try containerValues.decodeIfPresent([ResiliencehubClientTypes.BatchUpdateRecommendationStatusSuccessfulEntry?].self, forKey: .successfulEntries) + var successfulEntriesDecoded0:[ResiliencehubClientTypes.BatchUpdateRecommendationStatusSuccessfulEntry]? = nil + if let successfulEntriesContainer = successfulEntriesContainer { + successfulEntriesDecoded0 = [ResiliencehubClientTypes.BatchUpdateRecommendationStatusSuccessfulEntry]() + for structure0 in successfulEntriesContainer { + if let structure0 = structure0 { + successfulEntriesDecoded0?.append(structure0) + } + } + } + successfulEntries = successfulEntriesDecoded0 + let failedEntriesContainer = try containerValues.decodeIfPresent([ResiliencehubClientTypes.BatchUpdateRecommendationStatusFailedEntry?].self, forKey: .failedEntries) + var failedEntriesDecoded0:[ResiliencehubClientTypes.BatchUpdateRecommendationStatusFailedEntry]? = nil + if let failedEntriesContainer = failedEntriesContainer { + failedEntriesDecoded0 = [ResiliencehubClientTypes.BatchUpdateRecommendationStatusFailedEntry]() + for structure0 in failedEntriesContainer { + if let structure0 = structure0 { + failedEntriesDecoded0?.append(structure0) + } + } + } + failedEntries = failedEntriesDecoded0 + } +} + +extension ResiliencehubClientTypes.BatchUpdateRecommendationStatusSuccessfulEntry: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case entryId + case excludeReason + case excluded + case item + case referenceId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let entryId = self.entryId { + try encodeContainer.encode(entryId, forKey: .entryId) + } + if let excludeReason = self.excludeReason { + try encodeContainer.encode(excludeReason.rawValue, forKey: .excludeReason) + } + if let excluded = self.excluded { + try encodeContainer.encode(excluded, forKey: .excluded) + } + if let item = self.item { + try encodeContainer.encode(item, forKey: .item) + } + if let referenceId = self.referenceId { + try encodeContainer.encode(referenceId, forKey: .referenceId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let entryIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entryId) + entryId = entryIdDecoded + let referenceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .referenceId) + referenceId = referenceIdDecoded + let itemDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.UpdateRecommendationStatusItem.self, forKey: .item) + item = itemDecoded + let excludedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .excluded) + excluded = excludedDecoded + let excludeReasonDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.ExcludeRecommendationReason.self, forKey: .excludeReason) + excludeReason = excludeReasonDecoded + } +} + +extension ResiliencehubClientTypes { + /// List of operational recommendations that were successfully included or excluded. + public struct BatchUpdateRecommendationStatusSuccessfulEntry: Swift.Equatable { + /// An identifier for an entry in this batch that is used to communicate the result. The entryIds of a batch request need to be unique within a request. + /// This member is required. + public var entryId: Swift.String? + /// Indicates the reason for excluding an operational recommendation. + public var excludeReason: ResiliencehubClientTypes.ExcludeRecommendationReason? + /// Indicates if the operational recommendation was successfully excluded. + /// This member is required. + public var excluded: Swift.Bool? + /// The operational recommendation item. + /// This member is required. + public var item: ResiliencehubClientTypes.UpdateRecommendationStatusItem? + /// Reference identifier of the operational recommendation. + /// This member is required. + public var referenceId: Swift.String? + + public init( + entryId: Swift.String? = nil, + excludeReason: ResiliencehubClientTypes.ExcludeRecommendationReason? = nil, + excluded: Swift.Bool? = nil, + item: ResiliencehubClientTypes.UpdateRecommendationStatusItem? = nil, + referenceId: Swift.String? = nil + ) + { + self.entryId = entryId + self.excludeReason = excludeReason + self.excluded = excluded + self.item = item + self.referenceId = referenceId + } + } + +} + +extension ResiliencehubClientTypes.ComplianceDrift: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case actualReferenceId + case actualValue + case appId + case appVersion + case diffType + case driftType + case entityId + case entityType + case expectedReferenceId + case expectedValue + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let actualReferenceId = self.actualReferenceId { + try encodeContainer.encode(actualReferenceId, forKey: .actualReferenceId) + } + if let actualValue = actualValue { + var actualValueContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .actualValue) + for (dictKey0, assessmentCompliance0) in actualValue { + try actualValueContainer.encode(assessmentCompliance0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + if let appId = self.appId { + try encodeContainer.encode(appId, forKey: .appId) + } + if let appVersion = self.appVersion { + try encodeContainer.encode(appVersion, forKey: .appVersion) + } + if let diffType = self.diffType { + try encodeContainer.encode(diffType.rawValue, forKey: .diffType) + } + if let driftType = self.driftType { + try encodeContainer.encode(driftType.rawValue, forKey: .driftType) + } + if let entityId = self.entityId { + try encodeContainer.encode(entityId, forKey: .entityId) + } + if let entityType = self.entityType { + try encodeContainer.encode(entityType, forKey: .entityType) + } + if let expectedReferenceId = self.expectedReferenceId { + try encodeContainer.encode(expectedReferenceId, forKey: .expectedReferenceId) + } + if let expectedValue = expectedValue { + var expectedValueContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .expectedValue) + for (dictKey0, assessmentCompliance0) in expectedValue { + try expectedValueContainer.encode(assessmentCompliance0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let entityIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entityId) + entityId = entityIdDecoded + let entityTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entityType) + entityType = entityTypeDecoded + let driftTypeDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.DriftType.self, forKey: .driftType) + driftType = driftTypeDecoded + let appIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .appId) + appId = appIdDecoded + let appVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .appVersion) + appVersion = appVersionDecoded + let expectedReferenceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .expectedReferenceId) + expectedReferenceId = expectedReferenceIdDecoded + let expectedValueContainer = try containerValues.decodeIfPresent([Swift.String: ResiliencehubClientTypes.DisruptionCompliance?].self, forKey: .expectedValue) + var expectedValueDecoded0: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? = nil + if let expectedValueContainer = expectedValueContainer { + expectedValueDecoded0 = [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]() + for (key0, disruptioncompliance0) in expectedValueContainer { + if let disruptioncompliance0 = disruptioncompliance0 { + expectedValueDecoded0?[key0] = disruptioncompliance0 + } + } + } + expectedValue = expectedValueDecoded0 + let actualReferenceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .actualReferenceId) + actualReferenceId = actualReferenceIdDecoded + let actualValueContainer = try containerValues.decodeIfPresent([Swift.String: ResiliencehubClientTypes.DisruptionCompliance?].self, forKey: .actualValue) + var actualValueDecoded0: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? = nil + if let actualValueContainer = actualValueContainer { + actualValueDecoded0 = [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]() + for (key0, disruptioncompliance0) in actualValueContainer { + if let disruptioncompliance0 = disruptioncompliance0 { + actualValueDecoded0?[key0] = disruptioncompliance0 + } + } + } + actualValue = actualValueDecoded0 + let diffTypeDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.DifferenceType.self, forKey: .diffType) + diffType = diffTypeDecoded + } +} + +extension ResiliencehubClientTypes { + /// Indicates the compliance drifts (recovery time objective (RTO) and recovery point objective (RPO)) that were detected for an assessed entity. + public struct ComplianceDrift: Swift.Equatable { + /// Assessment identifier that is associated with this drift item. + public var actualReferenceId: Swift.String? + /// Actual compliance value of the entity. + public var actualValue: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? + /// Identifier of your application. + public var appId: Swift.String? + /// Published version of your application on which drift was detected. + public var appVersion: Swift.String? + /// Difference type between actual and expected recovery point objective (RPO) and recovery time objective (RTO) values. Currently, Resilience Hub supports only NotEqual difference type. + public var diffType: ResiliencehubClientTypes.DifferenceType? + /// The type of drift detected. Currently, Resilience Hub supports only ApplicationCompliance drift type. + public var driftType: ResiliencehubClientTypes.DriftType? + /// Identifier of an entity in which drift was detected. For compliance drift, the entity ID can be either application ID or the AppComponent ID. + public var entityId: Swift.String? + /// The type of entity in which drift was detected. For compliance drifts, Resilience Hub supports AWS::ResilienceHub::AppComponent and AWS::ResilienceHub::Application. + public var entityType: Swift.String? + /// Assessment identifier of a previous assessment of the same application version. Resilience Hub uses the previous assessment (associated with the reference identifier) to compare the compliance with the current assessment to identify drifts. + public var expectedReferenceId: Swift.String? + /// The expected compliance value of an entity. + public var expectedValue: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? + + public init( + actualReferenceId: Swift.String? = nil, + actualValue: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? = nil, + appId: Swift.String? = nil, + appVersion: Swift.String? = nil, + diffType: ResiliencehubClientTypes.DifferenceType? = nil, + driftType: ResiliencehubClientTypes.DriftType? = nil, + entityId: Swift.String? = nil, + entityType: Swift.String? = nil, + expectedReferenceId: Swift.String? = nil, + expectedValue: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? = nil + ) + { + self.actualReferenceId = actualReferenceId + self.actualValue = actualValue + self.appId = appId + self.appVersion = appVersion + self.diffType = diffType + self.driftType = driftType + self.entityId = entityId + self.entityType = entityType + self.expectedReferenceId = expectedReferenceId + self.expectedValue = expectedValue + } + } + +} + +extension ResiliencehubClientTypes { + public enum ComplianceStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case policyBreached + case policyMet + case sdkUnknown(Swift.String) + + public static var allCases: [ComplianceStatus] { + return [ + .policyBreached, + .policyMet, + .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 .policyBreached: return "PolicyBreached" + case .policyMet: return "PolicyMet" + 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 = ComplianceStatus(rawValue: rawValue) ?? ComplianceStatus.sdkUnknown(rawValue) + } + } +} + +extension ResiliencehubClientTypes.ComponentRecommendation: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case appComponentName + case configRecommendations + case recommendationStatus + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let appComponentName = self.appComponentName { + try encodeContainer.encode(appComponentName, forKey: .appComponentName) + } + if let configRecommendations = configRecommendations { + var configRecommendationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .configRecommendations) + for configrecommendation0 in configRecommendations { + try configRecommendationsContainer.encode(configrecommendation0) + } + } + if let recommendationStatus = self.recommendationStatus { + try encodeContainer.encode(recommendationStatus.rawValue, forKey: .recommendationStatus) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let appComponentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .appComponentName) + appComponentName = appComponentNameDecoded + let recommendationStatusDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.RecommendationComplianceStatus.self, forKey: .recommendationStatus) + recommendationStatus = recommendationStatusDecoded + let configRecommendationsContainer = try containerValues.decodeIfPresent([ResiliencehubClientTypes.ConfigRecommendation?].self, forKey: .configRecommendations) + var configRecommendationsDecoded0:[ResiliencehubClientTypes.ConfigRecommendation]? = nil + if let configRecommendationsContainer = configRecommendationsContainer { + configRecommendationsDecoded0 = [ResiliencehubClientTypes.ConfigRecommendation]() + for structure0 in configRecommendationsContainer { + if let structure0 = structure0 { + configRecommendationsDecoded0?.append(structure0) + } + } + } + configRecommendations = configRecommendationsDecoded0 + } +} + +extension ResiliencehubClientTypes { + /// Defines recommendations for an Resilience Hub Application Component, returned as an object. This object contains component names, configuration recommendations, and recommendation statuses. + public struct ComponentRecommendation: Swift.Equatable { + /// Name of the Application Component. + /// This member is required. + public var appComponentName: Swift.String? + /// List of recommendations. + /// This member is required. + public var configRecommendations: [ResiliencehubClientTypes.ConfigRecommendation]? + /// Status of the recommendation. + /// This member is required. + public var recommendationStatus: ResiliencehubClientTypes.RecommendationComplianceStatus? + + public init( + appComponentName: Swift.String? = nil, + configRecommendations: [ResiliencehubClientTypes.ConfigRecommendation]? = nil, + recommendationStatus: ResiliencehubClientTypes.RecommendationComplianceStatus? = nil + ) + { + self.appComponentName = appComponentName + self.configRecommendations = configRecommendations + self.recommendationStatus = recommendationStatus + } + } + +} + +extension ResiliencehubClientTypes.ConfigRecommendation: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case appComponentName + case compliance + case cost + case description + case haArchitecture + case name + case optimizationType + case recommendationCompliance + case referenceId + case suggestedChanges + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let appComponentName = self.appComponentName { + try encodeContainer.encode(appComponentName, forKey: .appComponentName) + } + if let compliance = compliance { + var complianceContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .compliance) + for (dictKey0, assessmentCompliance0) in compliance { + try complianceContainer.encode(assessmentCompliance0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + if let cost = self.cost { + try encodeContainer.encode(cost, forKey: .cost) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let haArchitecture = self.haArchitecture { + try encodeContainer.encode(haArchitecture.rawValue, forKey: .haArchitecture) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let optimizationType = self.optimizationType { + try encodeContainer.encode(optimizationType.rawValue, forKey: .optimizationType) + } + if let recommendationCompliance = recommendationCompliance { + var recommendationComplianceContainer = encodeContainer.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: .recommendationCompliance) + for (dictKey0, recommendationCompliance0) in recommendationCompliance { + try recommendationComplianceContainer.encode(recommendationCompliance0, forKey: ClientRuntime.Key(stringValue: dictKey0)) + } + } + if let referenceId = self.referenceId { + try encodeContainer.encode(referenceId, forKey: .referenceId) + } + if let suggestedChanges = suggestedChanges { + var suggestedChangesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .suggestedChanges) + for entitydescription0 in suggestedChanges { + try suggestedChangesContainer.encode(entitydescription0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let costDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.Cost.self, forKey: .cost) + cost = costDecoded + let appComponentNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .appComponentName) + appComponentName = appComponentNameDecoded + let complianceContainer = try containerValues.decodeIfPresent([Swift.String: ResiliencehubClientTypes.DisruptionCompliance?].self, forKey: .compliance) + var complianceDecoded0: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? = nil + if let complianceContainer = complianceContainer { + complianceDecoded0 = [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]() + for (key0, disruptioncompliance0) in complianceContainer { + if let disruptioncompliance0 = disruptioncompliance0 { + complianceDecoded0?[key0] = disruptioncompliance0 + } + } + } + compliance = complianceDecoded0 + let recommendationComplianceContainer = try containerValues.decodeIfPresent([Swift.String: ResiliencehubClientTypes.RecommendationDisruptionCompliance?].self, forKey: .recommendationCompliance) + var recommendationComplianceDecoded0: [Swift.String:ResiliencehubClientTypes.RecommendationDisruptionCompliance]? = nil + if let recommendationComplianceContainer = recommendationComplianceContainer { + recommendationComplianceDecoded0 = [Swift.String:ResiliencehubClientTypes.RecommendationDisruptionCompliance]() + for (key0, recommendationdisruptioncompliance0) in recommendationComplianceContainer { + if let recommendationdisruptioncompliance0 = recommendationdisruptioncompliance0 { + recommendationComplianceDecoded0?[key0] = recommendationdisruptioncompliance0 + } + } + } + recommendationCompliance = recommendationComplianceDecoded0 + let optimizationTypeDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.ConfigRecommendationOptimizationType.self, forKey: .optimizationType) + optimizationType = optimizationTypeDecoded let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) name = nameDecoded let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) @@ -1709,9 +2343,9 @@ extension ResiliencehubClientTypes.ConfigRecommendation: Swift.Codable { } extension ResiliencehubClientTypes { - /// Defines a configuration recommendation. + /// Defines a recommendation configuration. public struct ConfigRecommendation: Swift.Equatable { - /// The name of the Application Component. + /// Name of the Application Component. public var appComponentName: Swift.String? /// The current compliance against the resiliency policy before applying the configuration change. public var compliance: [Swift.String:ResiliencehubClientTypes.DisruptionCompliance]? @@ -1729,7 +2363,7 @@ extension ResiliencehubClientTypes { public var optimizationType: ResiliencehubClientTypes.ConfigRecommendationOptimizationType? /// The expected compliance against the resiliency policy after applying the configuration change. public var recommendationCompliance: [Swift.String:ResiliencehubClientTypes.RecommendationDisruptionCompliance]? - /// The reference identifier for the recommendation configuration. + /// Reference identifier for the recommendation configuration. /// This member is required. public var referenceId: Swift.String? /// List of the suggested configuration changes. @@ -1980,7 +2614,7 @@ extension ResiliencehubClientTypes { extension CreateAppInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "CreateAppInput(assessmentSchedule: \(Swift.String(describing: assessmentSchedule)), clientToken: \(Swift.String(describing: clientToken)), description: \(Swift.String(describing: description)), name: \(Swift.String(describing: name)), policyArn: \(Swift.String(describing: policyArn)), tags: \"CONTENT_REDACTED\")"} + "CreateAppInput(assessmentSchedule: \(Swift.String(describing: assessmentSchedule)), clientToken: \(Swift.String(describing: clientToken)), description: \(Swift.String(describing: description)), eventSubscriptions: \(Swift.String(describing: eventSubscriptions)), name: \(Swift.String(describing: name)), permissionModel: \(Swift.String(describing: permissionModel)), policyArn: \(Swift.String(describing: policyArn)), tags: \"CONTENT_REDACTED\")"} } extension CreateAppInput: Swift.Encodable { @@ -1988,7 +2622,9 @@ extension CreateAppInput: Swift.Encodable { case assessmentSchedule case clientToken case description + case eventSubscriptions case name + case permissionModel case policyArn case tags } @@ -2004,9 +2640,18 @@ extension CreateAppInput: Swift.Encodable { if let description = self.description { try encodeContainer.encode(description, forKey: .description) } + if let eventSubscriptions = eventSubscriptions { + var eventSubscriptionsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .eventSubscriptions) + for eventsubscription0 in eventSubscriptions { + try eventSubscriptionsContainer.encode(eventsubscription0) + } + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } + if let permissionModel = self.permissionModel { + try encodeContainer.encode(permissionModel, forKey: .permissionModel) + } if let policyArn = self.policyArn { try encodeContainer.encode(policyArn, forKey: .policyArn) } @@ -2032,19 +2677,25 @@ public struct CreateAppInput: Swift.Equatable { public var clientToken: Swift.String? /// The optional description for an app. public var description: Swift.String? - /// The name for the application. + /// The list of events you would like to subscribe and get notification for. Currently, Resilience Hub supports only Drift detected and Scheduled assessment failure events notification. + public var eventSubscriptions: [ResiliencehubClientTypes.EventSubscription]? + /// Name of the application. /// This member is required. public var name: Swift.String? - /// The Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Defines the roles and credentials that Resilience Hub would use while creating the application, importing its resources, and running an assessment. + public var permissionModel: ResiliencehubClientTypes.PermissionModel? + /// Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var policyArn: Swift.String? - /// The tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key/value pair. + /// Tags assigned to the resource. 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]? public init( assessmentSchedule: ResiliencehubClientTypes.AppAssessmentScheduleType? = nil, clientToken: Swift.String? = nil, description: Swift.String? = nil, + eventSubscriptions: [ResiliencehubClientTypes.EventSubscription]? = nil, name: Swift.String? = nil, + permissionModel: ResiliencehubClientTypes.PermissionModel? = nil, policyArn: Swift.String? = nil, tags: [Swift.String:Swift.String]? = nil ) @@ -2052,7 +2703,9 @@ public struct CreateAppInput: Swift.Equatable { self.assessmentSchedule = assessmentSchedule self.clientToken = clientToken self.description = description + self.eventSubscriptions = eventSubscriptions self.name = name + self.permissionModel = permissionModel self.policyArn = policyArn self.tags = tags } @@ -2065,6 +2718,8 @@ struct CreateAppInputBody: Swift.Equatable { let tags: [Swift.String:Swift.String]? let clientToken: Swift.String? let assessmentSchedule: ResiliencehubClientTypes.AppAssessmentScheduleType? + let permissionModel: ResiliencehubClientTypes.PermissionModel? + let eventSubscriptions: [ResiliencehubClientTypes.EventSubscription]? } extension CreateAppInputBody: Swift.Decodable { @@ -2072,7 +2727,9 @@ extension CreateAppInputBody: Swift.Decodable { case assessmentSchedule case clientToken case description + case eventSubscriptions case name + case permissionModel case policyArn case tags } @@ -2100,6 +2757,19 @@ extension CreateAppInputBody: Swift.Decodable { clientToken = clientTokenDecoded let assessmentScheduleDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.AppAssessmentScheduleType.self, forKey: .assessmentSchedule) assessmentSchedule = assessmentScheduleDecoded + let permissionModelDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.PermissionModel.self, forKey: .permissionModel) + permissionModel = permissionModelDecoded + let eventSubscriptionsContainer = try containerValues.decodeIfPresent([ResiliencehubClientTypes.EventSubscription?].self, forKey: .eventSubscriptions) + var eventSubscriptionsDecoded0:[ResiliencehubClientTypes.EventSubscription]? = nil + if let eventSubscriptionsContainer = eventSubscriptionsContainer { + eventSubscriptionsDecoded0 = [ResiliencehubClientTypes.EventSubscription]() + for structure0 in eventSubscriptionsContainer { + if let structure0 = structure0 { + eventSubscriptionsDecoded0?.append(structure0) + } + } + } + eventSubscriptions = eventSubscriptionsDecoded0 } } @@ -2209,17 +2879,17 @@ extension CreateAppVersionAppComponentInput: ClientRuntime.URLPathProvider { public struct CreateAppVersionAppComponentInput: Swift.Equatable { /// Currently, there is no supported additional information for Application Components. public var additionalInfo: [Swift.String:[Swift.String]]? - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters. You should not reuse the same client token for other API requests. public var clientToken: Swift.String? - /// The identifier of the Application Component. + /// Identifier of the Application Component. public var id: Swift.String? - /// The name of the Application Component. + /// Name of the Application Component. /// This member is required. public var name: Swift.String? - /// The type of Application Component. For more information about the types of Application Component, see [Grouping resources in an AppComponent](https://docs.aws.amazon.com/resilience-hub/latest/userguide/AppComponent.grouping.html). + /// Type of Application Component. For more information about the types of Application Component, see [Grouping resources in an AppComponent](https://docs.aws.amazon.com/resilience-hub/latest/userguide/AppComponent.grouping.html). /// This member is required. public var type: Swift.String? @@ -2327,12 +2997,12 @@ extension CreateAppVersionAppComponentOutputResponse: ClientRuntime.HttpResponse } public struct CreateAppVersionAppComponentOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The list of Application Components that belong to this resource. + /// List of Application Components that belong to this resource. public var appComponent: ResiliencehubClientTypes.AppComponent? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? @@ -2439,27 +3109,27 @@ extension CreateAppVersionResourceInput: ClientRuntime.URLPathProvider { public struct CreateAppVersionResourceInput: Swift.Equatable { /// Currently, there is no supported additional information for resources. public var additionalInfo: [Swift.String:[Swift.String]]? - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The list of Application Components that this resource belongs to. If an Application Component is not part of the Resilience Hub application, it will be added. + /// List of Application Components that this resource belongs to. If an Application Component is not part of the Resilience Hub application, it will be added. /// This member is required. public var appComponents: [Swift.String]? - /// The Amazon Web Services account that owns the physical resource. + /// Amazon Web Services account that owns the physical resource. public var awsAccountId: Swift.String? - /// The Amazon Web Services region that owns the physical resource. + /// Amazon Web Services region that owns the physical resource. public var awsRegion: Swift.String? /// Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters. You should not reuse the same client token for other API requests. public var clientToken: Swift.String? - /// The logical identifier of the resource. + /// Logical identifier of the resource. /// This member is required. public var logicalResourceId: ResiliencehubClientTypes.LogicalResourceId? - /// The physical identifier of the resource. + /// Physical identifier of the resource. /// This member is required. public var physicalResourceId: Swift.String? - /// The name of the resource. + /// Name of the resource. public var resourceName: Swift.String? - /// The type of resource. + /// Type of resource. /// This member is required. public var resourceType: Swift.String? @@ -2600,10 +3270,10 @@ extension CreateAppVersionResourceOutputResponse: ClientRuntime.HttpResponseBind } public struct CreateAppVersionResourceOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? /// Defines a physical resource. A physical resource is a resource that exists in your account. It can be identified using an Amazon Resource Name (ARN) or a Resilience Hub-native identifier. @@ -2707,7 +3377,7 @@ extension CreateRecommendationTemplateInput: ClientRuntime.URLPathProvider { } public struct CreateRecommendationTemplateInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? /// The name of the Amazon S3 bucket that will contain the recommendation template. @@ -2723,7 +3393,7 @@ public struct CreateRecommendationTemplateInput: Swift.Equatable { public var recommendationIds: [Swift.String]? /// An array of strings that specify the recommendation template type or types. Alarm The template is an [AlarmRecommendation] template. Sop The template is a [SopRecommendation] template. Test The template is a [TestRecommendation] template. public var recommendationTypes: [ResiliencehubClientTypes.RenderRecommendationType]? - /// The tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key/value pair. + /// Tags assigned to the resource. 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]? public init( @@ -2943,7 +3613,7 @@ public struct CreateResiliencyPolicyInput: Swift.Equatable { /// The name of the policy /// This member is required. public var policyName: Swift.String? - /// The tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key/value pair. + /// Tags assigned to the resource. 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 tier for this resiliency policy, ranging from the highest severity (MissionCritical) to lowest (NonCritical). /// This member is required. @@ -3143,7 +3813,7 @@ extension DeleteAppAssessmentInput: ClientRuntime.URLPathProvider { } public struct DeleteAppAssessmentInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? /// Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters. You should not reuse the same client token for other API requests. @@ -3210,7 +3880,7 @@ extension DeleteAppAssessmentOutputResponse: ClientRuntime.HttpResponseBinding { } public struct DeleteAppAssessmentOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? /// The current status of the assessment for the resiliency policy. @@ -3275,7 +3945,7 @@ extension DeleteAppInput: ClientRuntime.URLPathProvider { } public struct DeleteAppInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters. You should not reuse the same client token for other API requests. @@ -3355,7 +4025,7 @@ extension DeleteAppInputSourceInput: ClientRuntime.URLPathProvider { } public struct DeleteAppInputSourceInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters. You should not reuse the same client token for other API requests. @@ -3446,9 +4116,9 @@ extension DeleteAppInputSourceOutputResponse: ClientRuntime.HttpResponseBinding } public struct DeleteAppInputSourceOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var appArn: Swift.String? - /// The name of the input source from where the application resource is imported from. + /// Name of the input source from where the application resource is imported from. public var appInputSource: ResiliencehubClientTypes.AppInputSource? public init( @@ -3509,7 +4179,7 @@ extension DeleteAppOutputResponse: ClientRuntime.HttpResponseBinding { } public struct DeleteAppOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? @@ -3565,12 +4235,12 @@ extension DeleteAppVersionAppComponentInput: ClientRuntime.URLPathProvider { } public struct DeleteAppVersionAppComponentInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters. You should not reuse the same client token for other API requests. public var clientToken: Swift.String? - /// The identifier of the Application Component. + /// Identifier of the Application Component. /// This member is required. public var id: Swift.String? @@ -3643,12 +4313,12 @@ extension DeleteAppVersionAppComponentOutputResponse: ClientRuntime.HttpResponse } public struct DeleteAppVersionAppComponentOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The list of Application Components that belong to this resource. + /// List of Application Components that belong to this resource. public var appComponent: ResiliencehubClientTypes.AppComponent? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? @@ -3732,20 +4402,20 @@ extension DeleteAppVersionResourceInput: ClientRuntime.URLPathProvider { } public struct DeleteAppVersionResourceInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The Amazon Web Services account that owns the physical resource. + /// Amazon Web Services account that owns the physical resource. public var awsAccountId: Swift.String? - /// The Amazon Web Services region that owns the physical resource. + /// Amazon Web Services region that owns the physical resource. public var awsRegion: Swift.String? /// Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters. You should not reuse the same client token for other API requests. public var clientToken: Swift.String? - /// The logical identifier of the resource. + /// Logical identifier of the resource. public var logicalResourceId: ResiliencehubClientTypes.LogicalResourceId? - /// The physical identifier of the resource. + /// Physical identifier of the resource. public var physicalResourceId: Swift.String? - /// The name of the resource. + /// Name of the resource. public var resourceName: Swift.String? public init( @@ -3841,10 +4511,10 @@ extension DeleteAppVersionResourceOutputResponse: ClientRuntime.HttpResponseBind } public struct DeleteAppVersionResourceOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? /// Defines a physical resource. A physical resource is a resource that exists in your account. It can be identified using an Amazon Resource Name (ARN) or a Resilience Hub-native identifier. @@ -3979,7 +4649,7 @@ public struct DeleteRecommendationTemplateOutputResponse: Swift.Equatable { /// The Amazon Resource Name (ARN) for a recommendation template. /// This member is required. public var recommendationTemplateArn: Swift.String? - /// The status of the action. + /// Status of the action. /// This member is required. public var status: ResiliencehubClientTypes.RecommendationTemplateStatus? @@ -4039,7 +4709,7 @@ extension DeleteResiliencyPolicyInput: ClientRuntime.URLPathProvider { public struct DeleteResiliencyPolicyInput: Swift.Equatable { /// Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters. You should not reuse the same client token for other API requests. public var clientToken: Swift.String? - /// The Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var policyArn: Swift.String? @@ -4102,7 +4772,7 @@ extension DeleteResiliencyPolicyOutputResponse: ClientRuntime.HttpResponseBindin } public struct DeleteResiliencyPolicyOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var policyArn: Swift.String? @@ -4150,7 +4820,7 @@ extension DescribeAppAssessmentInput: ClientRuntime.URLPathProvider { } public struct DescribeAppAssessmentInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? @@ -4254,7 +4924,7 @@ extension DescribeAppInput: ClientRuntime.URLPathProvider { } public struct DescribeAppInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? @@ -4366,13 +5036,13 @@ extension DescribeAppVersionAppComponentInput: ClientRuntime.URLPathProvider { } public struct DescribeAppVersionAppComponentInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? - /// The identifier of the Application Component. + /// Identifier of the Application Component. /// This member is required. public var id: Swift.String? @@ -4445,12 +5115,12 @@ extension DescribeAppVersionAppComponentOutputResponse: ClientRuntime.HttpRespon } public struct DescribeAppVersionAppComponentOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The list of Application Components that belong to this resource. + /// List of Application Components that belong to this resource. public var appComponent: ResiliencehubClientTypes.AppComponent? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? @@ -4514,10 +5184,10 @@ extension DescribeAppVersionInput: ClientRuntime.URLPathProvider { } public struct DescribeAppVersionInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? @@ -4585,10 +5255,10 @@ extension DescribeAppVersionOutputResponse: ClientRuntime.HttpResponseBinding { public struct DescribeAppVersionOutputResponse: Swift.Equatable { /// Additional configuration parameters for an Resilience Hub application. If you want to implement additionalInfo through the Resilience Hub console rather than using an API call, see [Configure the application configuration parameters](https://docs.aws.amazon.com/resilience-hub/latest/userguide/app-config-param.html). Currently, this parameter supports only failover region and account. public var additionalInfo: [Swift.String:[Swift.String]]? - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? @@ -4688,21 +5358,21 @@ extension DescribeAppVersionResourceInput: ClientRuntime.URLPathProvider { } public struct DescribeAppVersionResourceInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? - /// The Amazon Web Services account that owns the physical resource. + /// Amazon Web Services account that owns the physical resource. public var awsAccountId: Swift.String? - /// The Amazon Web Services region that owns the physical resource. + /// Amazon Web Services region that owns the physical resource. public var awsRegion: Swift.String? - /// The logical identifier of the resource. + /// Logical identifier of the resource. public var logicalResourceId: ResiliencehubClientTypes.LogicalResourceId? - /// The physical identifier of the resource. + /// Physical identifier of the resource. public var physicalResourceId: Swift.String? - /// The name of the resource. + /// Name of the resource. public var resourceName: Swift.String? public init( @@ -4798,10 +5468,10 @@ extension DescribeAppVersionResourceOutputResponse: ClientRuntime.HttpResponseBi } public struct DescribeAppVersionResourceOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? /// Defines a physical resource. A physical resource is a resource that exists in your account. It can be identified using an Amazon Resource Name (ARN) or a Resilience Hub-native identifier. @@ -4871,7 +5541,7 @@ extension DescribeAppVersionResourcesResolutionStatusInput: ClientRuntime.URLPat } public struct DescribeAppVersionResourcesResolutionStatusInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. @@ -4952,7 +5622,7 @@ extension DescribeAppVersionResourcesResolutionStatusOutputResponse: ClientRunti } public struct DescribeAppVersionResourcesResolutionStatusOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. @@ -4963,7 +5633,7 @@ public struct DescribeAppVersionResourcesResolutionStatusOutputResponse: Swift.E /// The identifier for a specific resolution. /// This member is required. public var resolutionId: Swift.String? - /// The status of the action. + /// Status of the action. /// This member is required. public var status: ResiliencehubClientTypes.ResourceResolutionStatusType? @@ -5039,7 +5709,7 @@ extension DescribeAppVersionTemplateInput: ClientRuntime.URLPathProvider { } public struct DescribeAppVersionTemplateInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. @@ -5108,16 +5778,16 @@ extension DescribeAppVersionTemplateOutputResponse: ClientRuntime.HttpResponseBi } public struct DescribeAppVersionTemplateOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// A JSON string that provides information about your application structure. To learn more about the appTemplateBody template, see the sample template provided in the Examples section. The appTemplateBody JSON string has the following structure: /// /// * resources The list of logical resources that must be included in the Resilience Hub application. Type: Array Don't add the resources that you want to exclude. Each resources array item includes the following fields: /// - /// * logicalResourceId The logical identifier of the resource. Type: Object Each logicalResourceId object includes the following fields: + /// * logicalResourceId Logical identifier of the resource. Type: Object Each logicalResourceId object includes the following fields: /// - /// * identifier The identifier of the resource. Type: String + /// * identifier Identifier of the resource. Type: String /// /// * logicalStackName The name of the CloudFormation stack this resource belongs to. Type: String /// @@ -5125,7 +5795,7 @@ public struct DescribeAppVersionTemplateOutputResponse: Swift.Equatable { /// /// * terraformSourceName The name of the Terraform S3 state file this resource belongs to. Type: String /// - /// * eksSourceName The name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. Type: String + /// * eksSourceName Name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. Type: String /// /// /// @@ -5139,11 +5809,11 @@ public struct DescribeAppVersionTemplateOutputResponse: Swift.Equatable { /// /// /// - /// * appComponents The list of Application Components that this resource belongs to. If an Application Component is not part of the Resilience Hub application, it will be added. Type: Array Each appComponents array item includes the following fields: + /// * appComponents List of Application Components that this resource belongs to. If an Application Component is not part of the Resilience Hub application, it will be added. Type: Array Each appComponents array item includes the following fields: /// - /// * name The name of the Application Component. Type: String + /// * name Name of the Application Component. Type: String /// - /// * type The type of Application Component. For more information about the types of Application Component, see [Grouping resources in an AppComponent](https://docs.aws.amazon.com/resilience-hub/latest/userguide/AppComponent.grouping.html). Type: String + /// * type Type of Application Component. For more information about the types of Application Component, see [Grouping resources in an AppComponent](https://docs.aws.amazon.com/resilience-hub/latest/userguide/AppComponent.grouping.html). Type: String /// /// * resourceNames The list of included resources that are assigned to the Application Component. Type: Array of strings /// @@ -5154,7 +5824,7 @@ public struct DescribeAppVersionTemplateOutputResponse: Swift.Equatable { /// /// * excludedResources The list of logical resource identifiers to be excluded from the application. Type: Array Don't add the resources that you want to include. Each excludedResources array item includes the following fields: /// - /// * logicalResourceIds The logical identifier of the resource. Type: Object You can configure only one of the following fields: + /// * logicalResourceIds Logical identifier of the resource. Type: Object You can configure only one of the following fields: /// /// * logicalStackName /// @@ -5167,7 +5837,7 @@ public struct DescribeAppVersionTemplateOutputResponse: Swift.Equatable { /// /// Each logicalResourceIds object includes the following fields: /// - /// * identifier The identifier of the resource. Type: String + /// * identifier Identifier of the resource. Type: String /// /// * logicalStackName The name of the CloudFormation stack this resource belongs to. Type: String /// @@ -5175,7 +5845,7 @@ public struct DescribeAppVersionTemplateOutputResponse: Swift.Equatable { /// /// * terraformSourceName The name of the Terraform S3 state file this resource belongs to. Type: String /// - /// * eksSourceName The name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. Type: String + /// * eksSourceName Name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. Type: String /// /// /// @@ -5183,7 +5853,7 @@ public struct DescribeAppVersionTemplateOutputResponse: Swift.Equatable { /// /// /// - /// * version The Resilience Hub application version. + /// * version Resilience Hub application version. /// /// * additionalInfo Additional configuration parameters for an Resilience Hub application. If you want to implement additionalInfo through the Resilience Hub console rather than using an API call, see [Configure the application configuration parameters](https://docs.aws.amazon.com/resilience-hub/latest/userguide/app-config-param.html). Currently, this parameter accepts a key-value mapping (in a string format) of only one failover region and one associated account. Key: "failover-regions" Value: "[{"region":"", "accounts":[{"id":""}]}]" /// This member is required. @@ -5248,7 +5918,7 @@ extension DescribeDraftAppVersionResourcesImportStatusInput: ClientRuntime.URLPa } public struct DescribeDraftAppVersionResourcesImportStatusInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? @@ -5312,7 +5982,7 @@ extension DescribeDraftAppVersionResourcesImportStatusOutputResponse: ClientRunt } public struct DescribeDraftAppVersionResourcesImportStatusOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. @@ -5320,7 +5990,7 @@ public struct DescribeDraftAppVersionResourcesImportStatusOutputResponse: Swift. public var appVersion: Swift.String? /// The returned error message for the request. public var errorMessage: Swift.String? - /// The status of the action. + /// Status of the action. /// This member is required. public var status: ResiliencehubClientTypes.ResourceImportStatusType? /// The timestamp for when the status last changed. @@ -5395,7 +6065,7 @@ extension DescribeResiliencyPolicyInput: ClientRuntime.URLPathProvider { } public struct DescribeResiliencyPolicyInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var policyArn: Swift.String? @@ -5479,6 +6149,35 @@ extension DescribeResiliencyPolicyOutputResponseBody: Swift.Decodable { } } +extension ResiliencehubClientTypes { + public enum DifferenceType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case notEqual + case sdkUnknown(Swift.String) + + public static var allCases: [DifferenceType] { + return [ + .notEqual, + .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 .notEqual: return "NotEqual" + 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 = DifferenceType(rawValue: rawValue) ?? DifferenceType.sdkUnknown(rawValue) + } + } +} + extension ResiliencehubClientTypes.DisruptionCompliance: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case achievableRpoInSecs @@ -5570,11 +6269,11 @@ extension ResiliencehubClientTypes { public var message: Swift.String? /// The RPO description. public var rpoDescription: Swift.String? - /// The RPO reference identifier. + /// Reference identifier of the RPO . public var rpoReferenceId: Swift.String? /// The RTO description. public var rtoDescription: Swift.String? - /// The RTO reference identifier. + /// Reference identifier of the RTO. public var rtoReferenceId: Swift.String? public init( @@ -5643,6 +6342,70 @@ extension ResiliencehubClientTypes { } } +extension ResiliencehubClientTypes { + public enum DriftStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case detected + case notChecked + case notDetected + case sdkUnknown(Swift.String) + + public static var allCases: [DriftStatus] { + return [ + .detected, + .notChecked, + .notDetected, + .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 .detected: return "Detected" + case .notChecked: return "NotChecked" + case .notDetected: return "NotDetected" + 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 = DriftStatus(rawValue: rawValue) ?? DriftStatus.sdkUnknown(rawValue) + } + } +} + +extension ResiliencehubClientTypes { + public enum DriftType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case applicationCompliance + case sdkUnknown(Swift.String) + + public static var allCases: [DriftType] { + return [ + .applicationCompliance, + .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 .applicationCompliance: return "ApplicationCompliance" + 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 = DriftType(rawValue: rawValue) ?? DriftType.sdkUnknown(rawValue) + } + } +} + extension ResiliencehubClientTypes.EksSource: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case eksClusterArn @@ -5683,7 +6446,7 @@ extension ResiliencehubClientTypes.EksSource: Swift.Codable { extension ResiliencehubClientTypes { /// The input source of the Amazon Elastic Kubernetes Service cluster. public struct EksSource: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Amazon Elastic Kubernetes Service cluster. The format for this ARN is: arn:aws:eks:region:account-id:cluster/cluster-name. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Amazon Elastic Kubernetes Service cluster. The format for this ARN is: arn:aws:eks:region:account-id:cluster/cluster-name. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var eksClusterArn: Swift.String? /// The list of namespaces located on your Amazon Elastic Kubernetes Service cluster. @@ -5730,7 +6493,7 @@ extension ResiliencehubClientTypes.EksSourceClusterNamespace: Swift.Codable { extension ResiliencehubClientTypes { /// The input source of the namespace that is located on your Amazon Elastic Kubernetes Service cluster. public struct EksSourceClusterNamespace: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Amazon Elastic Kubernetes Service cluster. The format for this ARN is: arn:aws:eks:region:account-id:cluster/cluster-name. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Amazon Elastic Kubernetes Service cluster. The format for this ARN is: arn:aws:eks:region:account-id:cluster/cluster-name. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var eksClusterArn: Swift.String? /// Name of the namespace that is located on your Amazon Elastic Kubernetes Service cluster. @@ -5787,6 +6550,130 @@ extension ResiliencehubClientTypes { } } +extension ResiliencehubClientTypes.EventSubscription: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case eventType + case name + case snsTopicArn + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let eventType = self.eventType { + try encodeContainer.encode(eventType.rawValue, forKey: .eventType) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let snsTopicArn = self.snsTopicArn { + try encodeContainer.encode(snsTopicArn, forKey: .snsTopicArn) + } + } + + 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 eventTypeDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.EventType.self, forKey: .eventType) + eventType = eventTypeDecoded + let snsTopicArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .snsTopicArn) + snsTopicArn = snsTopicArnDecoded + } +} + +extension ResiliencehubClientTypes { + /// Indicates an event you would like to subscribe and get notification for. Currently, Resilience Hub supports notifications only for Drift detected and Scheduled assessment failure events. + public struct EventSubscription: Swift.Equatable { + /// The type of event you would like to subscribe and get notification for. Currently, Resilience Hub supports notifications only for Drift detected (DriftDetected) and Scheduled assessment failure (ScheduledAssessmentFailure) events. + /// This member is required. + public var eventType: ResiliencehubClientTypes.EventType? + /// Unique name to identify an event subscription. + /// This member is required. + public var name: Swift.String? + /// Amazon Resource Name (ARN) of the Amazon Simple Notification Service topic. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + public var snsTopicArn: Swift.String? + + public init( + eventType: ResiliencehubClientTypes.EventType? = nil, + name: Swift.String? = nil, + snsTopicArn: Swift.String? = nil + ) + { + self.eventType = eventType + self.name = name + self.snsTopicArn = snsTopicArn + } + } + +} + +extension ResiliencehubClientTypes { + public enum EventType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case driftDetected + case scheduledAssessmentFailure + case sdkUnknown(Swift.String) + + public static var allCases: [EventType] { + return [ + .driftDetected, + .scheduledAssessmentFailure, + .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 .driftDetected: return "DriftDetected" + case .scheduledAssessmentFailure: return "ScheduledAssessmentFailure" + 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 = EventType(rawValue: rawValue) ?? EventType.sdkUnknown(rawValue) + } + } +} + +extension ResiliencehubClientTypes { + public enum ExcludeRecommendationReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case alreadyImplemented + case complexityOfImplementation + case notRelevant + case sdkUnknown(Swift.String) + + public static var allCases: [ExcludeRecommendationReason] { + return [ + .alreadyImplemented, + .complexityOfImplementation, + .notRelevant, + .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 .alreadyImplemented: return "AlreadyImplemented" + case .complexityOfImplementation: return "ComplexityOfImplementation" + case .notRelevant: return "NotRelevant" + 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 = ExcludeRecommendationReason(rawValue: rawValue) ?? ExcludeRecommendationReason.sdkUnknown(rawValue) + } + } +} + extension ResiliencehubClientTypes.FailurePolicy: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case rpoInSecs @@ -5920,7 +6807,7 @@ extension ImportResourcesToDraftAppVersionInput: ClientRuntime.URLPathProvider { } public struct ImportResourcesToDraftAppVersionInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The input sources of the Amazon Elastic Kubernetes Service resources you need to import. @@ -6016,6 +6903,7 @@ public enum ImportResourcesToDraftAppVersionOutputError: ClientRuntime.HttpRespo case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -6046,7 +6934,7 @@ extension ImportResourcesToDraftAppVersionOutputResponse: ClientRuntime.HttpResp } public struct ImportResourcesToDraftAppVersionOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. @@ -6056,7 +6944,7 @@ public struct ImportResourcesToDraftAppVersionOutputResponse: Swift.Equatable { public var eksSources: [ResiliencehubClientTypes.EksSource]? /// The Amazon Resource Names (ARNs) for the resources you have imported. public var sourceArns: [Swift.String]? - /// The status of the action. + /// Status of the action. /// This member is required. public var status: ResiliencehubClientTypes.ResourceImportStatusType? /// A list of terraform file s3 URLs you have imported. @@ -6175,30 +7063,177 @@ public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRunt public internal(set) var requestID: Swift.String? public init( - message: Swift.String? = nil + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct InternalServerExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension InternalServerExceptionBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case 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 ListAlarmRecommendationsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case assessmentArn + case maxResults + case nextToken + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let assessmentArn = self.assessmentArn { + try encodeContainer.encode(assessmentArn, forKey: .assessmentArn) + } + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + } +} + +extension ListAlarmRecommendationsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/list-alarm-recommendations" + } +} + +public struct ListAlarmRecommendationsInput: Swift.Equatable { + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// This member is required. + public var assessmentArn: Swift.String? + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + public var maxResults: Swift.Int? + /// Null, or the token from a previous call to get the next set of results. + public var nextToken: Swift.String? + + public init( + assessmentArn: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.assessmentArn = assessmentArn + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListAlarmRecommendationsInputBody: Swift.Equatable { + let assessmentArn: Swift.String? + let nextToken: Swift.String? + let maxResults: Swift.Int? +} + +extension ListAlarmRecommendationsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case assessmentArn + case maxResults + case nextToken + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let assessmentArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .assessmentArn) + assessmentArn = assessmentArnDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + } +} + +public enum ListAlarmRecommendationsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListAlarmRecommendationsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListAlarmRecommendationsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.alarmRecommendations = output.alarmRecommendations + self.nextToken = output.nextToken + } else { + self.alarmRecommendations = nil + self.nextToken = nil + } + } +} + +public struct ListAlarmRecommendationsOutputResponse: Swift.Equatable { + /// The alarm recommendations for an Resilience Hub application, returned as an object. This object includes Application Component names, descriptions, information about whether a recommendation has already been implemented or not, prerequisites, and more. + /// This member is required. + public var alarmRecommendations: [ResiliencehubClientTypes.AlarmRecommendation]? + /// Token for the next set of results, or null if there are no more results. + public var nextToken: Swift.String? + + public init( + alarmRecommendations: [ResiliencehubClientTypes.AlarmRecommendation]? = nil, + nextToken: Swift.String? = nil ) { - self.properties.message = message + self.alarmRecommendations = alarmRecommendations + self.nextToken = nextToken } } -struct InternalServerExceptionBody: Swift.Equatable { - let message: Swift.String? +struct ListAlarmRecommendationsOutputResponseBody: Swift.Equatable { + let alarmRecommendations: [ResiliencehubClientTypes.AlarmRecommendation]? + let nextToken: Swift.String? } -extension InternalServerExceptionBody: Swift.Decodable { +extension ListAlarmRecommendationsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case message + case alarmRecommendations + case nextToken } 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 alarmRecommendationsContainer = try containerValues.decodeIfPresent([ResiliencehubClientTypes.AlarmRecommendation?].self, forKey: .alarmRecommendations) + var alarmRecommendationsDecoded0:[ResiliencehubClientTypes.AlarmRecommendation]? = nil + if let alarmRecommendationsContainer = alarmRecommendationsContainer { + alarmRecommendationsDecoded0 = [ResiliencehubClientTypes.AlarmRecommendation]() + for structure0 in alarmRecommendationsContainer { + if let structure0 = structure0 { + alarmRecommendationsDecoded0?.append(structure0) + } + } + } + alarmRecommendations = alarmRecommendationsDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded } } -extension ListAlarmRecommendationsInput: Swift.Encodable { +extension ListAppAssessmentComplianceDriftsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case assessmentArn case maxResults @@ -6219,19 +7254,19 @@ extension ListAlarmRecommendationsInput: Swift.Encodable { } } -extension ListAlarmRecommendationsInput: ClientRuntime.URLPathProvider { +extension ListAppAssessmentComplianceDriftsInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { - return "/list-alarm-recommendations" + return "/list-app-assessment-compliance-drifts" } } -public struct ListAlarmRecommendationsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. +public struct ListAppAssessmentComplianceDriftsInput: Swift.Equatable { + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Indicates the maximum number of applications requested. public var maxResults: Swift.Int? - /// Null, or the token from a previous call to get the next set of results. + /// Indicates the unique token number of the next application to be checked for compliance and regulatory requirements from the list of applications. public var nextToken: Swift.String? public init( @@ -6246,13 +7281,13 @@ public struct ListAlarmRecommendationsInput: Swift.Equatable { } } -struct ListAlarmRecommendationsInputBody: Swift.Equatable { +struct ListAppAssessmentComplianceDriftsInputBody: Swift.Equatable { let assessmentArn: Swift.String? let nextToken: Swift.String? let maxResults: Swift.Int? } -extension ListAlarmRecommendationsInputBody: Swift.Decodable { +extension ListAppAssessmentComplianceDriftsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case assessmentArn case maxResults @@ -6270,14 +7305,13 @@ extension ListAlarmRecommendationsInputBody: Swift.Decodable { } } -public enum ListAlarmRecommendationsOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum ListAppAssessmentComplianceDriftsOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) @@ -6285,61 +7319,61 @@ public enum ListAlarmRecommendationsOutputError: ClientRuntime.HttpResponseError } } -extension ListAlarmRecommendationsOutputResponse: ClientRuntime.HttpResponseBinding { +extension ListAppAssessmentComplianceDriftsOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: ListAlarmRecommendationsOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.alarmRecommendations = output.alarmRecommendations + let output: ListAppAssessmentComplianceDriftsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.complianceDrifts = output.complianceDrifts self.nextToken = output.nextToken } else { - self.alarmRecommendations = nil + self.complianceDrifts = nil self.nextToken = nil } } } -public struct ListAlarmRecommendationsOutputResponse: Swift.Equatable { - /// The alarm recommendations for an Resilience Hub application, returned as an object. This object includes Application Component names, descriptions, information about whether a recommendation has already been implemented or not, prerequisites, and more. +public struct ListAppAssessmentComplianceDriftsOutputResponse: Swift.Equatable { + /// Indicates compliance drifts (recovery time objective (RTO) and recovery point objective (RPO)) detected for an assessed entity. /// This member is required. - public var alarmRecommendations: [ResiliencehubClientTypes.AlarmRecommendation]? - /// The token for the next set of results, or null if there are no more results. + public var complianceDrifts: [ResiliencehubClientTypes.ComplianceDrift]? + /// Token number of the next application to be checked for compliance and regulatory requirements from the list of applications. public var nextToken: Swift.String? public init( - alarmRecommendations: [ResiliencehubClientTypes.AlarmRecommendation]? = nil, + complianceDrifts: [ResiliencehubClientTypes.ComplianceDrift]? = nil, nextToken: Swift.String? = nil ) { - self.alarmRecommendations = alarmRecommendations + self.complianceDrifts = complianceDrifts self.nextToken = nextToken } } -struct ListAlarmRecommendationsOutputResponseBody: Swift.Equatable { - let alarmRecommendations: [ResiliencehubClientTypes.AlarmRecommendation]? +struct ListAppAssessmentComplianceDriftsOutputResponseBody: Swift.Equatable { + let complianceDrifts: [ResiliencehubClientTypes.ComplianceDrift]? let nextToken: Swift.String? } -extension ListAlarmRecommendationsOutputResponseBody: Swift.Decodable { +extension ListAppAssessmentComplianceDriftsOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case alarmRecommendations + case complianceDrifts case nextToken } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let alarmRecommendationsContainer = try containerValues.decodeIfPresent([ResiliencehubClientTypes.AlarmRecommendation?].self, forKey: .alarmRecommendations) - var alarmRecommendationsDecoded0:[ResiliencehubClientTypes.AlarmRecommendation]? = nil - if let alarmRecommendationsContainer = alarmRecommendationsContainer { - alarmRecommendationsDecoded0 = [ResiliencehubClientTypes.AlarmRecommendation]() - for structure0 in alarmRecommendationsContainer { + let complianceDriftsContainer = try containerValues.decodeIfPresent([ResiliencehubClientTypes.ComplianceDrift?].self, forKey: .complianceDrifts) + var complianceDriftsDecoded0:[ResiliencehubClientTypes.ComplianceDrift]? = nil + if let complianceDriftsContainer = complianceDriftsContainer { + complianceDriftsDecoded0 = [ResiliencehubClientTypes.ComplianceDrift]() + for structure0 in complianceDriftsContainer { if let structure0 = structure0 { - alarmRecommendationsDecoded0?.append(structure0) + complianceDriftsDecoded0?.append(structure0) } } } - alarmRecommendations = alarmRecommendationsDecoded0 + complianceDrifts = complianceDriftsDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded } @@ -6395,7 +7429,7 @@ extension ListAppAssessmentsInput: ClientRuntime.URLPathProvider { } public struct ListAppAssessmentsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var appArn: Swift.String? /// The name for the assessment. public var assessmentName: Swift.String? @@ -6405,7 +7439,7 @@ public struct ListAppAssessmentsInput: Swift.Equatable { public var complianceStatus: ResiliencehubClientTypes.ComplianceStatus? /// Specifies the entity that invoked a specific assessment, either a User or the System. public var invoker: ResiliencehubClientTypes.AssessmentInvoker? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? @@ -6476,7 +7510,7 @@ public struct ListAppAssessmentsOutputResponse: Swift.Equatable { /// The summaries for the specified assessments, returned as an object. This object includes application versions, associated Amazon Resource Numbers (ARNs), cost, messages, resiliency scores, and more. /// This member is required. public var assessmentSummaries: [ResiliencehubClientTypes.AppAssessmentSummary]? - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? public init( @@ -6546,10 +7580,10 @@ extension ListAppComponentCompliancesInput: ClientRuntime.URLPathProvider { } public struct ListAppComponentCompliancesInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? @@ -6623,7 +7657,7 @@ public struct ListAppComponentCompliancesOutputResponse: Swift.Equatable { /// The compliances for an Resilience Hub Application Component, returned as an object. This object contains the names of the Application Components, compliances, costs, resiliency scores, outage scores, and more. /// This member is required. public var componentCompliances: [ResiliencehubClientTypes.AppComponentCompliance]? - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? public init( @@ -6693,10 +7727,10 @@ extension ListAppComponentRecommendationsInput: ClientRuntime.URLPathProvider { } public struct ListAppComponentRecommendationsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? @@ -6770,7 +7804,7 @@ public struct ListAppComponentRecommendationsOutputResponse: Swift.Equatable { /// The recommendations for an Resilience Hub Application Component, returned as an object. This object contains the names of the Application Components, configuration recommendations, and recommendation statuses. /// This member is required. public var componentRecommendations: [ResiliencehubClientTypes.ComponentRecommendation]? - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? public init( @@ -6844,10 +7878,10 @@ extension ListAppInputSourcesInput: ClientRuntime.URLPathProvider { } public struct ListAppInputSourcesInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? /// Maximum number of input sources to be displayed per Resilience Hub application. @@ -6930,7 +7964,7 @@ public struct ListAppInputSourcesOutputResponse: Swift.Equatable { /// The list of Resilience Hub application input sources. /// This member is required. public var appInputSources: [ResiliencehubClientTypes.AppInputSource]? - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? public init( @@ -7004,10 +8038,10 @@ extension ListAppVersionAppComponentsInput: ClientRuntime.URLPathProvider { } public struct ListAppVersionAppComponentsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The version of the Application Component. + /// Version of the Application Component. /// This member is required. public var appVersion: Swift.String? /// Maximum number of Application Components to be displayed per Resilience Hub application version. @@ -7092,15 +8126,15 @@ extension ListAppVersionAppComponentsOutputResponse: ClientRuntime.HttpResponseB } public struct ListAppVersionAppComponentsOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// Defines an Application Component. public var appComponents: [ResiliencehubClientTypes.AppComponent]? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? public init( @@ -7186,13 +8220,13 @@ extension ListAppVersionResourceMappingsInput: ClientRuntime.URLPathProvider { } public struct ListAppVersionResourceMappingsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. /// This member is required. public var appVersion: Swift.String? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? @@ -7269,7 +8303,7 @@ extension ListAppVersionResourceMappingsOutputResponse: ClientRuntime.HttpRespon } public struct ListAppVersionResourceMappingsOutputResponse: Swift.Equatable { - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? /// Mappings used to map logical resources from the template to physical resources. You can use the mapping type CFN_STACK if the application template uses a logical stack name. Or you can map individual resources by using the mapping type RESOURCE. We recommend using the mapping type CFN_STACK if the application is backed by a CloudFormation stack. /// This member is required. @@ -7350,13 +8384,13 @@ extension ListAppVersionResourcesInput: ClientRuntime.URLPathProvider { } public struct ListAppVersionResourcesInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. /// This member is required. public var appVersion: Swift.String? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? @@ -7444,7 +8478,7 @@ extension ListAppVersionResourcesOutputResponse: ClientRuntime.HttpResponseBindi } public struct ListAppVersionResourcesOutputResponse: Swift.Equatable { - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? /// The physical resources in the application version. /// This member is required. @@ -7501,8 +8535,10 @@ extension ListAppVersionResourcesOutputResponseBody: Swift.Decodable { extension ListAppVersionsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case appArn + case endTime case maxResults case nextToken + case startTime } public func encode(to encoder: Swift.Encoder) throws { @@ -7510,12 +8546,18 @@ extension ListAppVersionsInput: Swift.Encodable { if let appArn = self.appArn { try encodeContainer.encode(appArn, forKey: .appArn) } + if let endTime = self.endTime { + try encodeContainer.encodeTimestamp(endTime, format: .epochSeconds, forKey: .endTime) + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { try encodeContainer.encode(nextToken, forKey: .nextToken) } + if let startTime = self.startTime { + try encodeContainer.encodeTimestamp(startTime, format: .epochSeconds, forKey: .startTime) + } } } @@ -7526,23 +8568,31 @@ extension ListAppVersionsInput: ClientRuntime.URLPathProvider { } public struct ListAppVersionsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Upper limit of the time range to filter the application versions. + public var endTime: ClientRuntime.Date? + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? + /// Lower limit of the time range to filter the application versions. + public var startTime: ClientRuntime.Date? public init( appArn: Swift.String? = nil, + endTime: ClientRuntime.Date? = nil, maxResults: Swift.Int? = nil, - nextToken: Swift.String? = nil + nextToken: Swift.String? = nil, + startTime: ClientRuntime.Date? = nil ) { self.appArn = appArn + self.endTime = endTime self.maxResults = maxResults self.nextToken = nextToken + self.startTime = startTime } } @@ -7550,13 +8600,17 @@ struct ListAppVersionsInputBody: Swift.Equatable { let appArn: Swift.String? let nextToken: Swift.String? let maxResults: Swift.Int? + let startTime: ClientRuntime.Date? + let endTime: ClientRuntime.Date? } extension ListAppVersionsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case appArn + case endTime case maxResults case nextToken + case startTime } public init(from decoder: Swift.Decoder) throws { @@ -7567,6 +8621,10 @@ extension ListAppVersionsInputBody: Swift.Decodable { nextToken = nextTokenDecoded let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded + let startTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .startTime) + startTime = startTimeDecoded + let endTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .endTime) + endTime = endTimeDecoded } } @@ -7602,7 +8660,7 @@ public struct ListAppVersionsOutputResponse: Swift.Equatable { /// The version of the application. /// This member is required. public var appVersions: [ResiliencehubClientTypes.AppVersionSummary]? - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? public init( @@ -7676,9 +8734,9 @@ extension ListAppsInput: ClientRuntime.URLPathProvider { } public struct ListAppsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var appArn: Swift.String? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// The name for the one of the listed applications. public var name: Swift.String? @@ -7740,7 +8798,7 @@ public struct ListAppsOutputResponse: Swift.Equatable { /// Summaries for the Resilience Hub application. /// This member is required. public var appSummaries: [ResiliencehubClientTypes.AppSummary]? - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? public init( @@ -7830,10 +8888,10 @@ extension ListRecommendationTemplatesInput: ClientRuntime.URLPathProvider { } public struct ListRecommendationTemplatesInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// The name for one of the listed recommendation templates. public var name: Swift.String? @@ -7843,7 +8901,7 @@ public struct ListRecommendationTemplatesInput: Swift.Equatable { public var recommendationTemplateArn: Swift.String? /// The default is to sort by ascending startTime. To sort by descending startTime, set reverseOrder to true. public var reverseOrder: Swift.Bool? - /// The status of the action. + /// Status of the action. public var status: [ResiliencehubClientTypes.RecommendationTemplateStatus]? public init( @@ -7904,7 +8962,7 @@ extension ListRecommendationTemplatesOutputResponse: ClientRuntime.HttpResponseB } public struct ListRecommendationTemplatesOutputResponse: Swift.Equatable { - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? /// The recommendation templates for the Resilience Hub applications. public var recommendationTemplates: [ResiliencehubClientTypes.RecommendationTemplate]? @@ -7976,7 +9034,7 @@ extension ListResiliencyPoliciesInput: ClientRuntime.URLPathProvider { } public struct ListResiliencyPoliciesInput: Swift.Equatable { - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? @@ -8034,7 +9092,7 @@ extension ListResiliencyPoliciesOutputResponse: ClientRuntime.HttpResponseBindin } public struct ListResiliencyPoliciesOutputResponse: Swift.Equatable { - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? /// The resiliency policies for the Resilience Hub applications. /// This member is required. @@ -8107,10 +9165,10 @@ extension ListSopRecommendationsInput: ClientRuntime.URLPathProvider { } public struct ListSopRecommendationsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? @@ -8182,7 +9240,7 @@ extension ListSopRecommendationsOutputResponse: ClientRuntime.HttpResponseBindin } public struct ListSopRecommendationsOutputResponse: Swift.Equatable { - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? /// The standard operating procedure (SOP) recommendations for the Resilience Hub applications. /// This member is required. @@ -8251,7 +9309,7 @@ extension ListSuggestedResiliencyPoliciesInput: ClientRuntime.URLPathProvider { } public struct ListSuggestedResiliencyPoliciesInput: Swift.Equatable { - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? @@ -8305,7 +9363,7 @@ extension ListSuggestedResiliencyPoliciesOutputResponse: ClientRuntime.HttpRespo } public struct ListSuggestedResiliencyPoliciesOutputResponse: Swift.Equatable { - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? /// The suggested resiliency policies for the Resilience Hub applications. /// This member is required. @@ -8414,7 +9472,7 @@ extension ListTagsForResourceOutputResponse: ClientRuntime.HttpResponseBinding { } public struct ListTagsForResourceOutputResponse: Swift.Equatable { - /// The tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key/value pair. + /// Tags assigned to the resource. 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]? public init( @@ -8478,10 +9536,10 @@ extension ListTestRecommendationsInput: ClientRuntime.URLPathProvider { } public struct ListTestRecommendationsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? @@ -8553,7 +9611,7 @@ extension ListTestRecommendationsOutputResponse: ClientRuntime.HttpResponseBindi } public struct ListTestRecommendationsOutputResponse: Swift.Equatable { - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? /// The test recommendations for the Resilience Hub application. /// This member is required. @@ -8634,13 +9692,13 @@ extension ListUnsupportedAppVersionResourcesInput: ClientRuntime.URLPathProvider } public struct ListUnsupportedAppVersionResourcesInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. /// This member is required. public var appVersion: Swift.String? - /// The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? @@ -8728,7 +9786,7 @@ extension ListUnsupportedAppVersionResourcesOutputResponse: ClientRuntime.HttpRe } public struct ListUnsupportedAppVersionResourcesOutputResponse: Swift.Equatable { - /// The token for the next set of results, or null if there are no more results. + /// Token for the next set of results, or null if there are no more results. public var nextToken: Swift.String? /// The identifier for a specific resolution. /// This member is required. @@ -8828,9 +9886,9 @@ extension ResiliencehubClientTypes.LogicalResourceId: Swift.Codable { extension ResiliencehubClientTypes { /// Defines a logical resource identifier. public struct LogicalResourceId: Swift.Equatable { - /// The name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. + /// Name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. public var eksSourceName: Swift.String? - /// The identifier of the resource. + /// Identifier of the resource. /// This member is required. public var identifier: Swift.String? /// The name of the CloudFormation stack this resource belongs to. @@ -8858,6 +9916,110 @@ extension ResiliencehubClientTypes { } +extension ResiliencehubClientTypes.PermissionModel: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case crossAccountRoleArns + case invokerRoleName + case type + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let crossAccountRoleArns = crossAccountRoleArns { + var crossAccountRoleArnsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .crossAccountRoleArns) + for iamrolearn0 in crossAccountRoleArns { + try crossAccountRoleArnsContainer.encode(iamrolearn0) + } + } + if let invokerRoleName = self.invokerRoleName { + try encodeContainer.encode(invokerRoleName, forKey: .invokerRoleName) + } + if let type = self.type { + try encodeContainer.encode(type.rawValue, forKey: .type) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let typeDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.PermissionModelType.self, forKey: .type) + type = typeDecoded + let invokerRoleNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .invokerRoleName) + invokerRoleName = invokerRoleNameDecoded + let crossAccountRoleArnsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .crossAccountRoleArns) + var crossAccountRoleArnsDecoded0:[Swift.String]? = nil + if let crossAccountRoleArnsContainer = crossAccountRoleArnsContainer { + crossAccountRoleArnsDecoded0 = [Swift.String]() + for string0 in crossAccountRoleArnsContainer { + if let string0 = string0 { + crossAccountRoleArnsDecoded0?.append(string0) + } + } + } + crossAccountRoleArns = crossAccountRoleArnsDecoded0 + } +} + +extension ResiliencehubClientTypes { + /// Defines the roles and credentials that Resilience Hub would use while creating the application, importing its resources, and running an assessment. + public struct PermissionModel: Swift.Equatable { + /// Defines a list of role Amazon Resource Names (ARNs) to be used in other accounts. These ARNs are used for querying purposes while importing resources and assessing your application. + /// + /// * These ARNs are required only when your resources are in other accounts and you have different role name in these accounts. Else, the invoker role name will be used in the other accounts. + /// + /// * These roles must have a trust policy with iam:AssumeRole permission to the invoker role in the primary account. + public var crossAccountRoleArns: [Swift.String]? + /// Existing Amazon Web Services IAM role name in the primary Amazon Web Services account that will be assumed by Resilience Hub Service Principle to obtain a read-only access to your application resources while running an assessment. You must have iam:passRole permission for this role while creating or updating the application. + public var invokerRoleName: Swift.String? + /// Defines how Resilience Hub scans your resources. It can scan for the resources by using a pre-existing role in your Amazon Web Services account, or by using the credentials of the current IAM user. + /// This member is required. + public var type: ResiliencehubClientTypes.PermissionModelType? + + public init( + crossAccountRoleArns: [Swift.String]? = nil, + invokerRoleName: Swift.String? = nil, + type: ResiliencehubClientTypes.PermissionModelType? = nil + ) + { + self.crossAccountRoleArns = crossAccountRoleArns + self.invokerRoleName = invokerRoleName + self.type = type + } + } + +} + +extension ResiliencehubClientTypes { + public enum PermissionModelType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case legacyIamUser + case roleBased + case sdkUnknown(Swift.String) + + public static var allCases: [PermissionModelType] { + return [ + .legacyIamUser, + .roleBased, + .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 .legacyIamUser: return "LegacyIAMUser" + case .roleBased: return "RoleBased" + 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 = PermissionModelType(rawValue: rawValue) ?? PermissionModelType.sdkUnknown(rawValue) + } + } +} + extension ResiliencehubClientTypes { public enum PhysicalIdentifierType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case arn @@ -9000,12 +10162,12 @@ extension ResiliencehubClientTypes { public var appComponents: [ResiliencehubClientTypes.AppComponent]? /// Indicates if a resource is included or excluded from the assessment. public var excluded: Swift.Bool? - /// The logical identifier of the resource. + /// Logical identifier of the resource. /// This member is required. public var logicalResourceId: ResiliencehubClientTypes.LogicalResourceId? - /// The name of the parent resource. + /// Name of the parent resource. public var parentResourceName: Swift.String? - /// The physical identifier of the resource. + /// Identifier of the physical resource. /// This member is required. public var physicalResourceId: ResiliencehubClientTypes.PhysicalResourceId? /// The name of the resource. @@ -9013,7 +10175,7 @@ extension ResiliencehubClientTypes { /// The type of resource. /// This member is required. public var resourceType: Swift.String? - /// The type of input source. + /// Type of input source. public var sourceType: ResiliencehubClientTypes.ResourceSourceType? public init( @@ -9086,10 +10248,61 @@ extension ResiliencehubClientTypes { public var awsAccountId: Swift.String? /// The Amazon Web Services Region that the physical resource is located in. public var awsRegion: Swift.String? - /// The identifier of the physical resource. + /// Identifier of the physical resource. /// This member is required. public var identifier: Swift.String? - /// Specifies the type of physical resource identifier. Arn The resource identifier is an Amazon Resource Name (ARN) . Native The resource identifier is an Resilience Hub-native identifier. + /// Specifies the type of physical resource identifier. Arn The resource identifier is an Amazon Resource Name (ARN) and it can identify the following list of resources: + /// + /// * AWS::ECS::Service + /// + /// * AWS::EFS::FileSystem + /// + /// * AWS::ElasticLoadBalancingV2::LoadBalancer + /// + /// * AWS::Lambda::Function + /// + /// * AWS::SNS::Topic + /// + /// + /// Native The resource identifier is an Resilience Hub-native identifier and it can identify the following list of resources: + /// + /// * AWS::ApiGateway::RestApi + /// + /// * AWS::ApiGatewayV2::Api + /// + /// * AWS::AutoScaling::AutoScalingGroup + /// + /// * AWS::DocDB::DBCluster + /// + /// * AWS::DocDB::DBGlobalCluster + /// + /// * AWS::DocDB::DBInstance + /// + /// * AWS::DynamoDB::GlobalTable + /// + /// * AWS::DynamoDB::Table + /// + /// * AWS::EC2::EC2Fleet + /// + /// * AWS::EC2::Instance + /// + /// * AWS::EC2::NatGateway + /// + /// * AWS::EC2::Volume + /// + /// * AWS::ElasticLoadBalancing::LoadBalancer + /// + /// * AWS::RDS::DBCluster + /// + /// * AWS::RDS::DBInstance + /// + /// * AWS::RDS::GlobalCluster + /// + /// * AWS::Route53::RecordSet + /// + /// * AWS::S3::Bucket + /// + /// * AWS::SQS::Queue /// This member is required. public var type: ResiliencehubClientTypes.PhysicalIdentifierType? @@ -9112,6 +10325,7 @@ extension ResiliencehubClientTypes { extension PublishAppVersionInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case appArn + case versionName } public func encode(to encoder: Swift.Encoder) throws { @@ -9119,6 +10333,9 @@ extension PublishAppVersionInput: Swift.Encodable { if let appArn = self.appArn { try encodeContainer.encode(appArn, forKey: .appArn) } + if let versionName = self.versionName { + try encodeContainer.encode(versionName, forKey: .versionName) + } } } @@ -9129,31 +10346,39 @@ extension PublishAppVersionInput: ClientRuntime.URLPathProvider { } public struct PublishAppVersionInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? + /// Name of the application version. + public var versionName: Swift.String? public init( - appArn: Swift.String? = nil + appArn: Swift.String? = nil, + versionName: Swift.String? = nil ) { self.appArn = appArn + self.versionName = versionName } } struct PublishAppVersionInputBody: Swift.Equatable { let appArn: Swift.String? + let versionName: Swift.String? } extension PublishAppVersionInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case appArn + case versionName } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let appArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .appArn) appArn = appArnDecoded + let versionNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .versionName) + versionName = versionNameDecoded } } @@ -9180,39 +10405,55 @@ extension PublishAppVersionOutputResponse: ClientRuntime.HttpResponseBinding { let output: PublishAppVersionOutputResponseBody = try responseDecoder.decode(responseBody: data) self.appArn = output.appArn self.appVersion = output.appVersion + self.identifier = output.identifier + self.versionName = output.versionName } else { self.appArn = nil self.appVersion = nil + self.identifier = nil + self.versionName = nil } } } public struct PublishAppVersionOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. public var appVersion: Swift.String? + /// Identifier of the application version. + public var identifier: Swift.Int? + /// Name of the application version. + public var versionName: Swift.String? public init( appArn: Swift.String? = nil, - appVersion: Swift.String? = nil + appVersion: Swift.String? = nil, + identifier: Swift.Int? = nil, + versionName: Swift.String? = nil ) { self.appArn = appArn self.appVersion = appVersion + self.identifier = identifier + self.versionName = versionName } } struct PublishAppVersionOutputResponseBody: Swift.Equatable { let appArn: Swift.String? let appVersion: Swift.String? + let identifier: Swift.Int? + let versionName: Swift.String? } extension PublishAppVersionOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case appArn case appVersion + case identifier + case versionName } public init(from decoder: Swift.Decoder) throws { @@ -9221,6 +10462,10 @@ extension PublishAppVersionOutputResponseBody: Swift.Decodable { appArn = appArnDecoded let appVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .appVersion) appVersion = appVersionDecoded + let identifierDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .identifier) + identifier = identifierDecoded + let versionNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .versionName) + versionName = versionNameDecoded } } @@ -9248,16 +10493,16 @@ extension PutDraftAppVersionTemplateInput: ClientRuntime.URLPathProvider { } public struct PutDraftAppVersionTemplateInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// A JSON string that provides information about your application structure. To learn more about the appTemplateBody template, see the sample template provided in the Examples section. The appTemplateBody JSON string has the following structure: /// /// * resources The list of logical resources that must be included in the Resilience Hub application. Type: Array Don't add the resources that you want to exclude. Each resources array item includes the following fields: /// - /// * logicalResourceId The logical identifier of the resource. Type: Object Each logicalResourceId object includes the following fields: + /// * logicalResourceId Logical identifier of the resource. Type: Object Each logicalResourceId object includes the following fields: /// - /// * identifier The identifier of the resource. Type: String + /// * identifier Identifier of the resource. Type: String /// /// * logicalStackName The name of the CloudFormation stack this resource belongs to. Type: String /// @@ -9265,7 +10510,7 @@ public struct PutDraftAppVersionTemplateInput: Swift.Equatable { /// /// * terraformSourceName The name of the Terraform S3 state file this resource belongs to. Type: String /// - /// * eksSourceName The name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. Type: String + /// * eksSourceName Name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. Type: String /// /// /// @@ -9279,11 +10524,11 @@ public struct PutDraftAppVersionTemplateInput: Swift.Equatable { /// /// /// - /// * appComponents The list of Application Components that this resource belongs to. If an Application Component is not part of the Resilience Hub application, it will be added. Type: Array Each appComponents array item includes the following fields: + /// * appComponents List of Application Components that this resource belongs to. If an Application Component is not part of the Resilience Hub application, it will be added. Type: Array Each appComponents array item includes the following fields: /// - /// * name The name of the Application Component. Type: String + /// * name Name of the Application Component. Type: String /// - /// * type The type of Application Component. For more information about the types of Application Component, see [Grouping resources in an AppComponent](https://docs.aws.amazon.com/resilience-hub/latest/userguide/AppComponent.grouping.html). Type: String + /// * type Type of Application Component. For more information about the types of Application Component, see [Grouping resources in an AppComponent](https://docs.aws.amazon.com/resilience-hub/latest/userguide/AppComponent.grouping.html). Type: String /// /// * resourceNames The list of included resources that are assigned to the Application Component. Type: Array of strings /// @@ -9294,7 +10539,7 @@ public struct PutDraftAppVersionTemplateInput: Swift.Equatable { /// /// * excludedResources The list of logical resource identifiers to be excluded from the application. Type: Array Don't add the resources that you want to include. Each excludedResources array item includes the following fields: /// - /// * logicalResourceIds The logical identifier of the resource. Type: Object You can configure only one of the following fields: + /// * logicalResourceIds Logical identifier of the resource. Type: Object You can configure only one of the following fields: /// /// * logicalStackName /// @@ -9307,7 +10552,7 @@ public struct PutDraftAppVersionTemplateInput: Swift.Equatable { /// /// Each logicalResourceIds object includes the following fields: /// - /// * identifier The identifier of the resource. Type: String + /// * identifier Identifier of the resource. Type: String /// /// * logicalStackName The name of the CloudFormation stack this resource belongs to. Type: String /// @@ -9315,7 +10560,7 @@ public struct PutDraftAppVersionTemplateInput: Swift.Equatable { /// /// * terraformSourceName The name of the Terraform S3 state file this resource belongs to. Type: String /// - /// * eksSourceName The name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. Type: String + /// * eksSourceName Name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. Type: String /// /// /// @@ -9323,7 +10568,7 @@ public struct PutDraftAppVersionTemplateInput: Swift.Equatable { /// /// /// - /// * version The Resilience Hub application version. + /// * version Resilience Hub application version. /// /// * additionalInfo Additional configuration parameters for an Resilience Hub application. If you want to implement additionalInfo through the Resilience Hub console rather than using an API call, see [Configure the application configuration parameters](https://docs.aws.amazon.com/resilience-hub/latest/userguide/app-config-param.html). Currently, this parameter accepts a key-value mapping (in a string format) of only one failover region and one associated account. Key: "failover-regions" Value: "[{"region":"", "accounts":[{"id":""}]}]" /// This member is required. @@ -9390,7 +10635,7 @@ extension PutDraftAppVersionTemplateOutputResponse: ClientRuntime.HttpResponseBi } public struct PutDraftAppVersionTemplateOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var appArn: Swift.String? /// The version of the application. public var appVersion: Swift.String? @@ -9539,6 +10784,8 @@ extension ResiliencehubClientTypes { extension ResiliencehubClientTypes.RecommendationItem: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case alreadyImplemented + case excludeReason + case excluded case resourceId case targetAccountId case targetRegion @@ -9549,6 +10796,12 @@ extension ResiliencehubClientTypes.RecommendationItem: Swift.Codable { if let alreadyImplemented = self.alreadyImplemented { try encodeContainer.encode(alreadyImplemented, forKey: .alreadyImplemented) } + if let excludeReason = self.excludeReason { + try encodeContainer.encode(excludeReason.rawValue, forKey: .excludeReason) + } + if let excluded = self.excluded { + try encodeContainer.encode(excluded, forKey: .excluded) + } if let resourceId = self.resourceId { try encodeContainer.encode(resourceId, forKey: .resourceId) } @@ -9570,6 +10823,10 @@ extension ResiliencehubClientTypes.RecommendationItem: Swift.Codable { targetRegion = targetRegionDecoded let alreadyImplementedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .alreadyImplemented) alreadyImplemented = alreadyImplementedDecoded + let excludedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .excluded) + excluded = excludedDecoded + let excludeReasonDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.ExcludeRecommendationReason.self, forKey: .excludeReason) + excludeReason = excludeReasonDecoded } } @@ -9578,21 +10835,29 @@ extension ResiliencehubClientTypes { public struct RecommendationItem: Swift.Equatable { /// Specifies if the recommendation has already been implemented. public var alreadyImplemented: Swift.Bool? - /// The resource identifier. + /// Indicates the reason for excluding an operational recommendation. + public var excludeReason: ResiliencehubClientTypes.ExcludeRecommendationReason? + /// Indicates if an operational recommendation item is excluded. + public var excluded: Swift.Bool? + /// Identifier of the resource. public var resourceId: Swift.String? - /// The target account identifier. + /// Identifier of the target account. public var targetAccountId: Swift.String? /// The target region. public var targetRegion: Swift.String? public init( alreadyImplemented: Swift.Bool? = nil, + excludeReason: ResiliencehubClientTypes.ExcludeRecommendationReason? = nil, + excluded: Swift.Bool? = nil, resourceId: Swift.String? = nil, targetAccountId: Swift.String? = nil, targetRegion: Swift.String? = nil ) { self.alreadyImplemented = alreadyImplemented + self.excludeReason = excludeReason + self.excluded = excluded self.resourceId = resourceId self.targetAccountId = targetAccountId self.targetRegion = targetRegion @@ -9742,26 +11007,26 @@ extension ResiliencehubClientTypes.RecommendationTemplate: Swift.CustomDebugStri extension ResiliencehubClientTypes { /// Defines a recommendation template created with the [CreateRecommendationTemplate] action. public struct RecommendationTemplate: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var appArn: Swift.String? - /// The Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var assessmentArn: Swift.String? /// The end time for the action. public var endTime: ClientRuntime.Date? - /// The format of the recommendation template. CfnJson The template is CloudFormation JSON. CfnYaml The template is CloudFormation YAML. + /// Format of the recommendation template. CfnJson The template is CloudFormation JSON. CfnYaml The template is CloudFormation YAML. /// This member is required. public var format: ResiliencehubClientTypes.TemplateFormat? - /// The message for the recommendation template. + /// Message for the recommendation template. public var message: Swift.String? - /// The name for the recommendation template. + /// Name for the recommendation template. /// This member is required. public var name: Swift.String? /// Indicates if replacements are needed. public var needsReplacements: Swift.Bool? /// Identifiers for the recommendations used in the recommendation template. public var recommendationIds: [Swift.String]? - /// The Amazon Resource Name (ARN) for the recommendation template. + /// Amazon Resource Name (ARN) for the recommendation template. /// This member is required. public var recommendationTemplateArn: Swift.String? /// An array of strings that specify the recommendation template type or types. Alarm The template is an [AlarmRecommendation] template. Sop The template is a [SopRecommendation] template. Test The template is a [TestRecommendation] template. @@ -9769,10 +11034,10 @@ extension ResiliencehubClientTypes { public var recommendationTypes: [ResiliencehubClientTypes.RenderRecommendationType]? /// The start time for the action. public var startTime: ClientRuntime.Date? - /// The status of the action. + /// Status of the action. /// This member is required. public var status: ResiliencehubClientTypes.RecommendationTemplateStatus? - /// The tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key/value pair. + /// Tags assigned to the resource. 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 file location of the template. public var templatesLocation: ResiliencehubClientTypes.S3Location? @@ -9913,7 +11178,7 @@ extension RemoveDraftAppVersionResourceMappingsInput: ClientRuntime.URLPathProvi } public struct RemoveDraftAppVersionResourceMappingsInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The names of the registered applications you want to remove from the resource mappings. @@ -10074,7 +11339,7 @@ extension RemoveDraftAppVersionResourceMappingsOutputResponse: ClientRuntime.Htt } public struct RemoveDraftAppVersionResourceMappingsOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var appArn: Swift.String? /// The version of the application. public var appVersion: Swift.String? @@ -10251,13 +11516,13 @@ extension ResiliencehubClientTypes { public var estimatedCostTier: ResiliencehubClientTypes.EstimatedCostTier? /// The resiliency policy. public var policy: [Swift.String:ResiliencehubClientTypes.FailurePolicy]? - /// The Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var policyArn: Swift.String? /// The description for the policy. public var policyDescription: Swift.String? /// The name of the policy public var policyName: Swift.String? - /// The tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key/value pair. + /// Tags assigned to the resource. 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 tier for this resiliency policy, ranging from the highest severity (MissionCritical) to lowest (NonCritical). public var tier: ResiliencehubClientTypes.ResiliencyPolicyTier? @@ -10295,6 +11560,7 @@ extension ResiliencehubClientTypes { case important case missionCritical case nonCritical + case notApplicable case sdkUnknown(Swift.String) public static var allCases: [ResiliencyPolicyTier] { @@ -10304,6 +11570,7 @@ extension ResiliencehubClientTypes { .important, .missionCritical, .nonCritical, + .notApplicable, .sdkUnknown("") ] } @@ -10318,6 +11585,7 @@ extension ResiliencehubClientTypes { case .important: return "Important" case .missionCritical: return "MissionCritical" case .nonCritical: return "NonCritical" + case .notApplicable: return "NotApplicable" case let .sdkUnknown(s): return s } } @@ -10412,7 +11680,7 @@ extension ResolveAppVersionResourcesInput: ClientRuntime.URLPathProvider { } public struct ResolveAppVersionResourcesInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. @@ -10484,7 +11752,7 @@ extension ResolveAppVersionResourcesOutputResponse: ClientRuntime.HttpResponseBi } public struct ResolveAppVersionResourcesOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. @@ -10493,7 +11761,7 @@ public struct ResolveAppVersionResourcesOutputResponse: Swift.Equatable { /// The identifier for a specific resolution. /// This member is required. public var resolutionId: Swift.String? - /// The status of the action. + /// Status of the action. /// This member is required. public var status: ResiliencehubClientTypes.ResourceResolutionStatusType? @@ -10573,9 +11841,9 @@ extension ResiliencehubClientTypes.ResourceError: Swift.Codable { extension ResiliencehubClientTypes { /// Defines application resource errors. public struct ResourceError: Swift.Equatable { - /// This is the identifier of the resource. + /// Identifier of the logical resource. public var logicalResourceId: Swift.String? - /// This is the identifier of the physical resource. + /// Identifier of the physical resource. public var physicalResourceId: Swift.String? /// This is the error message. public var reason: Swift.String? @@ -10787,19 +12055,19 @@ extension ResiliencehubClientTypes { public struct ResourceMapping: Swift.Equatable { /// The name of the application this resource is mapped to. public var appRegistryAppName: Swift.String? - /// The name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. + /// Name of the Amazon Elastic Kubernetes Service cluster and namespace this resource belongs to. This parameter accepts values in "eks-cluster/namespace" format. public var eksSourceName: Swift.String? /// The name of the CloudFormation stack this resource is mapped to. public var logicalStackName: Swift.String? /// Specifies the type of resource mapping. AppRegistryApp The resource is mapped to another application. The name of the application is contained in the appRegistryAppName property. CfnStack The resource is mapped to a CloudFormation stack. The name of the CloudFormation stack is contained in the logicalStackName property. Resource The resource is mapped to another resource. The name of the resource is contained in the resourceName property. ResourceGroup The resource is mapped to Resource Groups. The name of the resource group is contained in the resourceGroupName property. /// This member is required. public var mappingType: ResiliencehubClientTypes.ResourceMappingType? - /// The identifier of this resource. + /// Identifier of the physical resource. /// This member is required. public var physicalResourceId: ResiliencehubClientTypes.PhysicalResourceId? - /// The name of the resource group this resource is mapped to. + /// Name of the resource group that the resource is mapped to. public var resourceGroupName: Swift.String? - /// The name of the resource this resource is mapped to. + /// Name of the resource that the resource is mapped to. public var resourceName: Swift.String? /// The short name of the Terraform source. public var terraformSourceName: Swift.String? @@ -11193,20 +12461,20 @@ extension ResiliencehubClientTypes.SopRecommendation: Swift.Codable { extension ResiliencehubClientTypes { /// Defines a standard operating procedure (SOP) recommendation. public struct SopRecommendation: Swift.Equatable { - /// The name of the Application Component. + /// Name of the Application Component. public var appComponentName: Swift.String? - /// The description of the SOP recommendation. + /// Description of the SOP recommendation. public var description: Swift.String? /// The recommendation items. public var items: [ResiliencehubClientTypes.RecommendationItem]? - /// The name of the SOP recommendation. + /// Name of the SOP recommendation. public var name: Swift.String? - /// The prerequisite for the SOP recommendation. + /// Prerequisite for the SOP recommendation. public var prerequisite: Swift.String? /// Identifier for the SOP recommendation. /// This member is required. public var recommendationId: Swift.String? - /// The reference identifier for the SOP recommendation. + /// Reference identifier for the SOP recommendation. /// This member is required. public var referenceId: Swift.String? /// The service type. @@ -11310,7 +12578,7 @@ extension StartAppAssessmentInput: ClientRuntime.URLPathProvider { } public struct StartAppAssessmentInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// The version of the application. @@ -11321,7 +12589,7 @@ public struct StartAppAssessmentInput: Swift.Equatable { public var assessmentName: Swift.String? /// Used for an idempotency token. A client token is a unique, case-sensitive string of up to 64 ASCII characters. You should not reuse the same client token for other API requests. public var clientToken: Swift.String? - /// The tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key/value pair. + /// Tags assigned to the resource. 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]? public init( @@ -11470,7 +12738,7 @@ extension TagResourceInput: ClientRuntime.URLPathProvider { } public struct TagResourceInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the resource. + /// Amazon Resource Name (ARN) of the resource. /// This member is required. public var resourceArn: Swift.String? /// The tags to assign to the resource. Each tag consists of a key/value pair. @@ -11711,28 +12979,28 @@ extension ResiliencehubClientTypes.TestRecommendation: Swift.Codable { extension ResiliencehubClientTypes { /// Defines a test recommendation. public struct TestRecommendation: Swift.Equatable { - /// The name of the Application Component. + /// Name of the Application Component. public var appComponentName: Swift.String? /// A list of recommended alarms that are used in the test and must be exported before or with the test. public var dependsOnAlarms: [Swift.String]? - /// The description for the test recommendation. + /// Description for the test recommendation. public var description: Swift.String? - /// The intent of the test recommendation. + /// Intent of the test recommendation. public var intent: Swift.String? /// The test recommendation items. public var items: [ResiliencehubClientTypes.RecommendationItem]? - /// The name of the test recommendation. + /// Name of the test recommendation. public var name: Swift.String? - /// The prerequisite of the test recommendation. + /// Prerequisite of the test recommendation. public var prerequisite: Swift.String? /// Identifier for the test recommendation. public var recommendationId: Swift.String? - /// The reference identifier for the test recommendation. + /// Reference identifier for the test recommendation. /// This member is required. public var referenceId: Swift.String? - /// The level of risk for this test recommendation. + /// Level of risk for this test recommendation. public var risk: ResiliencehubClientTypes.TestRisk? - /// The type of test recommendation. + /// Type of test recommendation. public var type: ResiliencehubClientTypes.TestType? public init( @@ -11943,10 +13211,10 @@ extension ResiliencehubClientTypes.UnsupportedResource: Swift.Codable { extension ResiliencehubClientTypes { /// Defines a resource that is not supported by Resilience Hub. public struct UnsupportedResource: Swift.Equatable { - /// The logical resource identifier for the unsupported resource. + /// Logical resource identifier for the unsupported resource. /// This member is required. public var logicalResourceId: ResiliencehubClientTypes.LogicalResourceId? - /// The physical resource identifier for the unsupported resource. + /// Physical resource identifier for the unsupported resource. /// This member is required. public var physicalResourceId: ResiliencehubClientTypes.PhysicalResourceId? /// The type of resource. @@ -12003,7 +13271,7 @@ extension UntagResourceInput: ClientRuntime.URLPathProvider { } public struct UntagResourceInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the resource. + /// Amazon Resource Name (ARN) of the resource. /// This member is required. public var resourceArn: Swift.String? /// The keys of the tags you want to remove. @@ -12060,6 +13328,8 @@ extension UpdateAppInput: Swift.Encodable { case assessmentSchedule case clearResiliencyPolicyArn case description + case eventSubscriptions + case permissionModel case policyArn } @@ -12077,6 +13347,15 @@ extension UpdateAppInput: Swift.Encodable { if let description = self.description { try encodeContainer.encode(description, forKey: .description) } + if let eventSubscriptions = eventSubscriptions { + var eventSubscriptionsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .eventSubscriptions) + for eventsubscription0 in eventSubscriptions { + try eventSubscriptionsContainer.encode(eventsubscription0) + } + } + if let permissionModel = self.permissionModel { + try encodeContainer.encode(permissionModel, forKey: .permissionModel) + } if let policyArn = self.policyArn { try encodeContainer.encode(policyArn, forKey: .policyArn) } @@ -12090,7 +13369,7 @@ extension UpdateAppInput: ClientRuntime.URLPathProvider { } public struct UpdateAppInput: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? /// Assessment execution schedule with 'Daily' or 'Disabled' values. @@ -12099,7 +13378,11 @@ public struct UpdateAppInput: Swift.Equatable { public var clearResiliencyPolicyArn: Swift.Bool? /// The optional description for an app. public var description: Swift.String? - /// The Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// The list of events you would like to subscribe and get notification for. Currently, Resilience Hub supports notifications only for Drift detected and Scheduled assessment failure events. + public var eventSubscriptions: [ResiliencehubClientTypes.EventSubscription]? + /// Defines the roles and credentials that Resilience Hub would use while creating an application, importing its resources, and running an assessment. + public var permissionModel: ResiliencehubClientTypes.PermissionModel? + /// Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. public var policyArn: Swift.String? public init( @@ -12107,6 +13390,8 @@ public struct UpdateAppInput: Swift.Equatable { assessmentSchedule: ResiliencehubClientTypes.AppAssessmentScheduleType? = nil, clearResiliencyPolicyArn: Swift.Bool? = nil, description: Swift.String? = nil, + eventSubscriptions: [ResiliencehubClientTypes.EventSubscription]? = nil, + permissionModel: ResiliencehubClientTypes.PermissionModel? = nil, policyArn: Swift.String? = nil ) { @@ -12114,6 +13399,8 @@ public struct UpdateAppInput: Swift.Equatable { self.assessmentSchedule = assessmentSchedule self.clearResiliencyPolicyArn = clearResiliencyPolicyArn self.description = description + self.eventSubscriptions = eventSubscriptions + self.permissionModel = permissionModel self.policyArn = policyArn } } @@ -12124,6 +13411,8 @@ struct UpdateAppInputBody: Swift.Equatable { let policyArn: Swift.String? let clearResiliencyPolicyArn: Swift.Bool? let assessmentSchedule: ResiliencehubClientTypes.AppAssessmentScheduleType? + let permissionModel: ResiliencehubClientTypes.PermissionModel? + let eventSubscriptions: [ResiliencehubClientTypes.EventSubscription]? } extension UpdateAppInputBody: Swift.Decodable { @@ -12132,6 +13421,8 @@ extension UpdateAppInputBody: Swift.Decodable { case assessmentSchedule case clearResiliencyPolicyArn case description + case eventSubscriptions + case permissionModel case policyArn } @@ -12147,6 +13438,19 @@ extension UpdateAppInputBody: Swift.Decodable { clearResiliencyPolicyArn = clearResiliencyPolicyArnDecoded let assessmentScheduleDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.AppAssessmentScheduleType.self, forKey: .assessmentSchedule) assessmentSchedule = assessmentScheduleDecoded + let permissionModelDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.PermissionModel.self, forKey: .permissionModel) + permissionModel = permissionModelDecoded + let eventSubscriptionsContainer = try containerValues.decodeIfPresent([ResiliencehubClientTypes.EventSubscription?].self, forKey: .eventSubscriptions) + var eventSubscriptionsDecoded0:[ResiliencehubClientTypes.EventSubscription]? = nil + if let eventSubscriptionsContainer = eventSubscriptionsContainer { + eventSubscriptionsDecoded0 = [ResiliencehubClientTypes.EventSubscription]() + for structure0 in eventSubscriptionsContainer { + if let structure0 = structure0 { + eventSubscriptionsDecoded0?.append(structure0) + } + } + } + eventSubscriptions = eventSubscriptionsDecoded0 } } @@ -12251,15 +13555,15 @@ extension UpdateAppVersionAppComponentInput: ClientRuntime.URLPathProvider { public struct UpdateAppVersionAppComponentInput: Swift.Equatable { /// Currently, there is no supported additional information for Application Components. public var additionalInfo: [Swift.String:[Swift.String]]? - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The identifier of the Application Component. + /// Identifier of the Application Component. /// This member is required. public var id: Swift.String? - /// The name of the Application Component. + /// Name of the Application Component. public var name: Swift.String? - /// The type of Application Component. For more information about the types of Application Component, see [Grouping resources in an AppComponent](https://docs.aws.amazon.com/resilience-hub/latest/userguide/AppComponent.grouping.html). + /// Type of Application Component. For more information about the types of Application Component, see [Grouping resources in an AppComponent](https://docs.aws.amazon.com/resilience-hub/latest/userguide/AppComponent.grouping.html). public var type: Swift.String? public init( @@ -12359,12 +13663,12 @@ extension UpdateAppVersionAppComponentOutputResponse: ClientRuntime.HttpResponse } public struct UpdateAppVersionAppComponentOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The list of Application Components that belong to this resource. + /// List of Application Components that belong to this resource. public var appComponent: ResiliencehubClientTypes.AppComponent? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? @@ -12436,7 +13740,7 @@ extension UpdateAppVersionInput: ClientRuntime.URLPathProvider { public struct UpdateAppVersionInput: Swift.Equatable { /// Additional configuration parameters for an Resilience Hub application. If you want to implement additionalInfo through the Resilience Hub console rather than using an API call, see [Configure the application configuration parameters](https://docs.aws.amazon.com/resilience-hub/latest/userguide/app-config-param.html). Currently, this parameter accepts a key-value mapping (in a string format) of only one failover region and one associated account. Key: "failover-regions" Value: "[{"region":"", "accounts":[{"id":""}]}]" public var additionalInfo: [Swift.String:[Swift.String]]? - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? @@ -12521,10 +13825,10 @@ extension UpdateAppVersionOutputResponse: ClientRuntime.HttpResponseBinding { public struct UpdateAppVersionOutputResponse: Swift.Equatable { /// Additional configuration parameters for an Resilience Hub application. If you want to implement additionalInfo through the Resilience Hub console rather than using an API call, see [Configure the application configuration parameters](https://docs.aws.amazon.com/resilience-hub/latest/userguide/app-config-param.html). Currently, this parameter supports only failover region and account. public var additionalInfo: [Swift.String:[Swift.String]]? - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? @@ -12647,24 +13951,24 @@ extension UpdateAppVersionResourceInput: ClientRuntime.URLPathProvider { public struct UpdateAppVersionResourceInput: Swift.Equatable { /// Currently, there is no supported additional information for resources. public var additionalInfo: [Swift.String:[Swift.String]]? - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The list of Application Components that this resource belongs to. If an Application Component is not part of the Resilience Hub application, it will be added. + /// List of Application Components that this resource belongs to. If an Application Component is not part of the Resilience Hub application, it will be added. public var appComponents: [Swift.String]? - /// The Amazon Web Services account that owns the physical resource. + /// Amazon Web Services account that owns the physical resource. public var awsAccountId: Swift.String? - /// The Amazon Web Services region that owns the physical resource. + /// Amazon Web Services region that owns the physical resource. public var awsRegion: Swift.String? /// Indicates if a resource is excluded from an Resilience Hub application. You can exclude only imported resources from an Resilience Hub application. public var excluded: Swift.Bool? - /// The logical identifier of the resource. + /// Logical identifier of the resource. public var logicalResourceId: ResiliencehubClientTypes.LogicalResourceId? - /// The physical identifier of the resource. + /// Physical identifier of the resource. public var physicalResourceId: Swift.String? - /// The name of the resource. + /// Name of the resource. public var resourceName: Swift.String? - /// The type of resource. + /// Type of resource. public var resourceType: Swift.String? public init( @@ -12804,10 +14108,10 @@ extension UpdateAppVersionResourceOutputResponse: ClientRuntime.HttpResponseBind } public struct UpdateAppVersionResourceOutputResponse: Swift.Equatable { - /// The Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var appArn: Swift.String? - /// The Resilience Hub application version. + /// Resilience Hub application version. /// This member is required. public var appVersion: Swift.String? /// Defines a physical resource. A physical resource is a resource that exists in your account. It can be identified using an Amazon Resource Name (ARN) or a Resilience Hub-native identifier. @@ -12849,6 +14153,140 @@ extension UpdateAppVersionResourceOutputResponseBody: Swift.Decodable { } } +extension ResiliencehubClientTypes.UpdateRecommendationStatusItem: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case resourceId + case targetAccountId + case targetRegion + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let resourceId = self.resourceId { + try encodeContainer.encode(resourceId, forKey: .resourceId) + } + if let targetAccountId = self.targetAccountId { + try encodeContainer.encode(targetAccountId, forKey: .targetAccountId) + } + if let targetRegion = self.targetRegion { + try encodeContainer.encode(targetRegion, forKey: .targetRegion) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceId) + resourceId = resourceIdDecoded + let targetAccountIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .targetAccountId) + targetAccountId = targetAccountIdDecoded + let targetRegionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .targetRegion) + targetRegion = targetRegionDecoded + } +} + +extension ResiliencehubClientTypes { + /// Defines the operational recommendation item that needs a status update. + public struct UpdateRecommendationStatusItem: Swift.Equatable { + /// Resource identifier of the operational recommendation item. + public var resourceId: Swift.String? + /// Identifier of the target Amazon Web Services account. + public var targetAccountId: Swift.String? + /// Identifier of the target Amazon Web Services Region. + public var targetRegion: Swift.String? + + public init( + resourceId: Swift.String? = nil, + targetAccountId: Swift.String? = nil, + targetRegion: Swift.String? = nil + ) + { + self.resourceId = resourceId + self.targetAccountId = targetAccountId + self.targetRegion = targetRegion + } + } + +} + +extension ResiliencehubClientTypes.UpdateRecommendationStatusRequestEntry: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case entryId + case excludeReason + case excluded + case item + case referenceId + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let entryId = self.entryId { + try encodeContainer.encode(entryId, forKey: .entryId) + } + if let excludeReason = self.excludeReason { + try encodeContainer.encode(excludeReason.rawValue, forKey: .excludeReason) + } + if let excluded = self.excluded { + try encodeContainer.encode(excluded, forKey: .excluded) + } + if let item = self.item { + try encodeContainer.encode(item, forKey: .item) + } + if let referenceId = self.referenceId { + try encodeContainer.encode(referenceId, forKey: .referenceId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let entryIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .entryId) + entryId = entryIdDecoded + let referenceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .referenceId) + referenceId = referenceIdDecoded + let itemDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.UpdateRecommendationStatusItem.self, forKey: .item) + item = itemDecoded + let excludedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .excluded) + excluded = excludedDecoded + let excludeReasonDecoded = try containerValues.decodeIfPresent(ResiliencehubClientTypes.ExcludeRecommendationReason.self, forKey: .excludeReason) + excludeReason = excludeReasonDecoded + } +} + +extension ResiliencehubClientTypes { + /// Defines the operational recommendation item that is to be included or excluded. + public struct UpdateRecommendationStatusRequestEntry: Swift.Equatable { + /// An identifier for an entry in this batch that is used to communicate the result. The entryIds of a batch request need to be unique within a request. + /// This member is required. + public var entryId: Swift.String? + /// Indicates the reason for excluding an operational recommendation. + public var excludeReason: ResiliencehubClientTypes.ExcludeRecommendationReason? + /// Indicates if the operational recommendation needs to be excluded. If set to True, the operational recommendation will be excluded. + /// This member is required. + public var excluded: Swift.Bool? + /// The operational recommendation item. + /// This member is required. + public var item: ResiliencehubClientTypes.UpdateRecommendationStatusItem? + /// Reference identifier of the operational recommendation item. + /// This member is required. + public var referenceId: Swift.String? + + public init( + entryId: Swift.String? = nil, + excludeReason: ResiliencehubClientTypes.ExcludeRecommendationReason? = nil, + excluded: Swift.Bool? = nil, + item: ResiliencehubClientTypes.UpdateRecommendationStatusItem? = nil, + referenceId: Swift.String? = nil + ) + { + self.entryId = entryId + self.excludeReason = excludeReason + self.excluded = excluded + self.item = item + self.referenceId = referenceId + } + } + +} + extension UpdateResiliencyPolicyInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case dataLocationConstraint @@ -12896,7 +14334,7 @@ public struct UpdateResiliencyPolicyInput: Swift.Equatable { public var dataLocationConstraint: ResiliencehubClientTypes.DataLocationConstraint? /// The type of resiliency policy to be created, including the recovery time objective (RTO) and recovery point objective (RPO) in seconds. public var policy: [Swift.String:ResiliencehubClientTypes.FailurePolicy]? - /// The Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. + /// Amazon Resource Name (ARN) of the resiliency policy. The format for this ARN is: arn:partition:resiliencehub:region:account:resiliency-policy/policy-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the AWS General Reference guide. /// This member is required. public var policyArn: Swift.String? /// The description for the policy. diff --git a/Sources/Services/AWSRoute53/Route53Client.swift b/Sources/Services/AWSRoute53/Route53Client.swift index 73b66d1d4b3..e9fcb743c4d 100644 --- a/Sources/Services/AWSRoute53/Route53Client.swift +++ b/Sources/Services/AWSRoute53/Route53Client.swift @@ -198,7 +198,7 @@ extension Route53Client: Route53ClientProtocol { /// * UPSERT: If a resource set exists Route 53 updates it with the values in the request. /// /// - /// Syntaxes for Creating, Updating, and Deleting Resource Record Sets The syntax for a request depends on the type of resource record set that you want to create, delete, or update, such as weighted, alias, or failover. The XML elements in your request must appear in the order listed in the syntax. For an example for each type of resource record set, see "Examples." Don't refer to the syntax in the "Parameter Syntax" section, which includes all of the elements for every kind of resource record set that you can create, delete, or update by using ChangeResourceRecordSets. Change Propagation to Route 53 DNS Servers When you submit a ChangeResourceRecordSets request, Route 53 propagates your changes to all of the Route 53 authoritative DNS servers. While your changes are propagating, GetChange returns a status of PENDING. When propagation is complete, GetChange returns a status of INSYNC. Changes generally propagate to all Route 53 name servers within 60 seconds. For more information, see [GetChange](https://docs.aws.amazon.com/Route53/latest/APIReference/API_GetChange.html). Limits on ChangeResourceRecordSets Requests For information about the limits on a ChangeResourceRecordSets request, see [Limits](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html) in the Amazon Route 53 Developer Guide. + /// Syntaxes for Creating, Updating, and Deleting Resource Record Sets The syntax for a request depends on the type of resource record set that you want to create, delete, or update, such as weighted, alias, or failover. The XML elements in your request must appear in the order listed in the syntax. For an example for each type of resource record set, see "Examples." Don't refer to the syntax in the "Parameter Syntax" section, which includes all of the elements for every kind of resource record set that you can create, delete, or update by using ChangeResourceRecordSets. Change Propagation to Route 53 DNS Servers When you submit a ChangeResourceRecordSets request, Route 53 propagates your changes to all of the Route 53 authoritative DNS servers managing the hosted zone. While your changes are propagating, GetChange returns a status of PENDING. When propagation is complete, GetChange returns a status of INSYNC. Changes generally propagate to all Route 53 name servers managing the hosted zone within 60 seconds. For more information, see [GetChange](https://docs.aws.amazon.com/Route53/latest/APIReference/API_GetChange.html). Limits on ChangeResourceRecordSets Requests For information about the limits on a ChangeResourceRecordSets request, see [Limits](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html) in the Amazon Route 53 Developer Guide. public func changeResourceRecordSets(input: ChangeResourceRecordSetsInput) async throws -> ChangeResourceRecordSetsOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1224,9 +1224,9 @@ extension Route53Client: Route53ClientProtocol { /// Returns the current status of a change batch request. The status is one of the following values: /// - /// * PENDING indicates that the changes in this request have not propagated to all Amazon Route 53 DNS servers. This is the initial status of all change batch requests. + /// * PENDING indicates that the changes in this request have not propagated to all Amazon Route 53 DNS servers managing the hosted zone. This is the initial status of all change batch requests. /// - /// * INSYNC indicates that the changes have propagated to all Route 53 DNS servers. + /// * INSYNC indicates that the changes have propagated to all Route 53 DNS servers managing the hosted zone. public func getChange(input: GetChangeInput) async throws -> GetChangeOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -2463,7 +2463,7 @@ extension Route53Client: Route53ClientProtocol { return result } - /// Gets the value that Amazon Route 53 returns in response to a DNS request for a specified record name and type. You can optionally specify the IP address of a DNS resolver, an EDNS0 client subnet IP address, and a subnet mask. This call only supports querying public hosted zones. + /// Gets the value that Amazon Route 53 returns in response to a DNS request for a specified record name and type. You can optionally specify the IP address of a DNS resolver, an EDNS0 client subnet IP address, and a subnet mask. This call only supports querying public hosted zones. The TestDnsAnswer returns information similar to what you would expect from the answer section of the dig command. Therefore, if you query for the name servers of a subdomain that point to the parent name servers, those will not be returned. public func testDNSAnswer(input: TestDNSAnswerInput) async throws -> TestDNSAnswerOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSRoute53/Route53ClientProtocol.swift b/Sources/Services/AWSRoute53/Route53ClientProtocol.swift index 26b52451f45..8ac8a329667 100644 --- a/Sources/Services/AWSRoute53/Route53ClientProtocol.swift +++ b/Sources/Services/AWSRoute53/Route53ClientProtocol.swift @@ -38,7 +38,7 @@ public protocol Route53ClientProtocol { /// * UPSERT: If a resource set exists Route 53 updates it with the values in the request. /// /// - /// Syntaxes for Creating, Updating, and Deleting Resource Record Sets The syntax for a request depends on the type of resource record set that you want to create, delete, or update, such as weighted, alias, or failover. The XML elements in your request must appear in the order listed in the syntax. For an example for each type of resource record set, see "Examples." Don't refer to the syntax in the "Parameter Syntax" section, which includes all of the elements for every kind of resource record set that you can create, delete, or update by using ChangeResourceRecordSets. Change Propagation to Route 53 DNS Servers When you submit a ChangeResourceRecordSets request, Route 53 propagates your changes to all of the Route 53 authoritative DNS servers. While your changes are propagating, GetChange returns a status of PENDING. When propagation is complete, GetChange returns a status of INSYNC. Changes generally propagate to all Route 53 name servers within 60 seconds. For more information, see [GetChange](https://docs.aws.amazon.com/Route53/latest/APIReference/API_GetChange.html). Limits on ChangeResourceRecordSets Requests For information about the limits on a ChangeResourceRecordSets request, see [Limits](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html) in the Amazon Route 53 Developer Guide. + /// Syntaxes for Creating, Updating, and Deleting Resource Record Sets The syntax for a request depends on the type of resource record set that you want to create, delete, or update, such as weighted, alias, or failover. The XML elements in your request must appear in the order listed in the syntax. For an example for each type of resource record set, see "Examples." Don't refer to the syntax in the "Parameter Syntax" section, which includes all of the elements for every kind of resource record set that you can create, delete, or update by using ChangeResourceRecordSets. Change Propagation to Route 53 DNS Servers When you submit a ChangeResourceRecordSets request, Route 53 propagates your changes to all of the Route 53 authoritative DNS servers managing the hosted zone. While your changes are propagating, GetChange returns a status of PENDING. When propagation is complete, GetChange returns a status of INSYNC. Changes generally propagate to all Route 53 name servers managing the hosted zone within 60 seconds. For more information, see [GetChange](https://docs.aws.amazon.com/Route53/latest/APIReference/API_GetChange.html). Limits on ChangeResourceRecordSets Requests For information about the limits on a ChangeResourceRecordSets request, see [Limits](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html) in the Amazon Route 53 Developer Guide. func changeResourceRecordSets(input: ChangeResourceRecordSetsInput) async throws -> ChangeResourceRecordSetsOutputResponse /// Adds, edits, or deletes tags for a health check or a hosted zone. For information about using tags for cost allocation, see [Using Cost Allocation Tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html) in the Billing and Cost Management User Guide. func changeTagsForResource(input: ChangeTagsForResourceInput) async throws -> ChangeTagsForResourceOutputResponse @@ -208,9 +208,9 @@ public protocol Route53ClientProtocol { func getAccountLimit(input: GetAccountLimitInput) async throws -> GetAccountLimitOutputResponse /// Returns the current status of a change batch request. The status is one of the following values: /// - /// * PENDING indicates that the changes in this request have not propagated to all Amazon Route 53 DNS servers. This is the initial status of all change batch requests. + /// * PENDING indicates that the changes in this request have not propagated to all Amazon Route 53 DNS servers managing the hosted zone. This is the initial status of all change batch requests. /// - /// * INSYNC indicates that the changes have propagated to all Route 53 DNS servers. + /// * INSYNC indicates that the changes have propagated to all Route 53 DNS servers managing the hosted zone. func getChange(input: GetChangeInput) async throws -> GetChangeOutputResponse /// Route 53 does not perform authorization for this API because it retrieves information that is already available to the public. GetCheckerIpRanges still works, but we recommend that you download ip-ranges.json, which includes IP address ranges for all Amazon Web Services services. For more information, see [IP Address Ranges of Amazon Route 53 Servers](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/route-53-ip-addresses.html) in the Amazon Route 53 Developer Guide. func getCheckerIpRanges(input: GetCheckerIpRangesInput) async throws -> GetCheckerIpRangesOutputResponse @@ -306,7 +306,7 @@ public protocol Route53ClientProtocol { func listTrafficPolicyVersions(input: ListTrafficPolicyVersionsInput) async throws -> ListTrafficPolicyVersionsOutputResponse /// Gets a list of the VPCs that were created by other accounts and that can be associated with a specified hosted zone because you've submitted one or more CreateVPCAssociationAuthorization requests. The response includes a VPCs element with a VPC child element for each VPC that can be associated with the hosted zone. func listVPCAssociationAuthorizations(input: ListVPCAssociationAuthorizationsInput) async throws -> ListVPCAssociationAuthorizationsOutputResponse - /// Gets the value that Amazon Route 53 returns in response to a DNS request for a specified record name and type. You can optionally specify the IP address of a DNS resolver, an EDNS0 client subnet IP address, and a subnet mask. This call only supports querying public hosted zones. + /// Gets the value that Amazon Route 53 returns in response to a DNS request for a specified record name and type. You can optionally specify the IP address of a DNS resolver, an EDNS0 client subnet IP address, and a subnet mask. This call only supports querying public hosted zones. The TestDnsAnswer returns information similar to what you would expect from the answer section of the dig command. Therefore, if you query for the name servers of a subdomain that point to the parent name servers, those will not be returned. func testDNSAnswer(input: TestDNSAnswerInput) async throws -> TestDNSAnswerOutputResponse /// Updates an existing health check. Note that some values can't be updated. For more information about updating health checks, see [Creating, Updating, and Deleting Health Checks](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/health-checks-creating-deleting.html) in the Amazon Route 53 Developer Guide. func updateHealthCheck(input: UpdateHealthCheckInput) async throws -> UpdateHealthCheckOutputResponse diff --git a/Sources/Services/AWSRoute53/models/Models.swift b/Sources/Services/AWSRoute53/models/Models.swift index cf84202c6d7..03c46baccfa 100644 --- a/Sources/Services/AWSRoute53/models/Models.swift +++ b/Sources/Services/AWSRoute53/models/Models.swift @@ -2205,6 +2205,7 @@ extension Route53ClientTypes { case euWest1 case euWest2 case euWest3 + case ilCentral1 case meCentral1 case meSouth1 case saEast1 @@ -2243,6 +2244,7 @@ extension Route53ClientTypes { .euWest1, .euWest2, .euWest3, + .ilCentral1, .meCentral1, .meSouth1, .saEast1, @@ -2286,6 +2288,7 @@ extension Route53ClientTypes { case .euWest1: return "eu-west-1" case .euWest2: return "eu-west-2" case .euWest3: return "eu-west-3" + case .ilCentral1: return "il-central-1" case .meCentral1: return "me-central-1" case .meSouth1: return "me-south-1" case .saEast1: return "sa-east-1" @@ -2947,7 +2950,7 @@ public struct CreateHostedZoneInput: Swift.Equatable { /// A unique string that identifies the request and that allows failed CreateHostedZone requests to be retried without the risk of executing the operation twice. You must use a unique CallerReference string every time you submit a CreateHostedZone request. CallerReference can be any unique string, for example, a date/time stamp. /// This member is required. public var callerReference: Swift.String? - /// If you want to associate a reusable delegation set with this hosted zone, the ID that Amazon Route 53 assigned to the reusable delegation set when you created it. For more information about reusable delegation sets, see [CreateReusableDelegationSet](https://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateReusableDelegationSet.html). + /// If you want to associate a reusable delegation set with this hosted zone, the ID that Amazon Route 53 assigned to the reusable delegation set when you created it. For more information about reusable delegation sets, see [CreateReusableDelegationSet](https://docs.aws.amazon.com/Route53/latest/APIReference/API_CreateReusableDelegationSet.html). If you are using a reusable delegation set to create a public hosted zone for a subdomain, make sure that the parent hosted zone doesn't use one or more of the same name servers. If you have overlapping nameservers, the operation will cause a ConflictingDomainsExist error. public var delegationSetId: Swift.String? /// (Optional) A complex type that contains the following optional values: /// @@ -15468,6 +15471,7 @@ extension Route53ClientTypes { case euWest1 case euWest2 case euWest3 + case ilCentral1 case meCentral1 case meSouth1 case saEast1 @@ -15501,6 +15505,7 @@ extension Route53ClientTypes { .euWest1, .euWest2, .euWest3, + .ilCentral1, .meCentral1, .meSouth1, .saEast1, @@ -15539,6 +15544,7 @@ extension Route53ClientTypes { case .euWest1: return "eu-west-1" case .euWest2: return "eu-west-2" case .euWest3: return "eu-west-3" + case .ilCentral1: return "il-central-1" case .meCentral1: return "me-central-1" case .meSouth1: return "me-south-1" case .saEast1: return "sa-east-1" @@ -18162,6 +18168,7 @@ extension Route53ClientTypes { case euWest1 case euWest2 case euWest3 + case ilCentral1 case meCentral1 case meSouth1 case saEast1 @@ -18199,6 +18206,7 @@ extension Route53ClientTypes { .euWest1, .euWest2, .euWest3, + .ilCentral1, .meCentral1, .meSouth1, .saEast1, @@ -18241,6 +18249,7 @@ extension Route53ClientTypes { case .euWest1: return "eu-west-1" case .euWest2: return "eu-west-2" case .euWest3: return "eu-west-3" + case .ilCentral1: return "il-central-1" case .meCentral1: return "me-central-1" case .meSouth1: return "me-south-1" case .saEast1: return "sa-east-1" diff --git a/Sources/Services/AWSRoute53Resolver/EndpointResolver.swift b/Sources/Services/AWSRoute53Resolver/EndpointResolver.swift index c728607a7b2..d1e8913626a 100644 --- a/Sources/Services/AWSRoute53Resolver/EndpointResolver.swift +++ b/Sources/Services/AWSRoute53Resolver/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://route53resolver-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://route53resolver.us-gov-east-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"us-gov-west-1\"]}],\"endpoint\":{\"url\":\"https://route53resolver.us-gov-west-1.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://route53resolver-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://route53resolver.{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://route53resolver.{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://route53resolver-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://route53resolver-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://route53resolver.{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://route53resolver.{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/AWSRoute53Resolver/Paginators.swift b/Sources/Services/AWSRoute53Resolver/Paginators.swift index 314046665ca..480bc3d4af1 100644 --- a/Sources/Services/AWSRoute53Resolver/Paginators.swift +++ b/Sources/Services/AWSRoute53Resolver/Paginators.swift @@ -190,6 +190,37 @@ extension PaginatorSequence where Input == ListFirewallRulesInput, Output == Lis return try await self.asyncCompactMap { item in item.firewallRules } } } +extension Route53ResolverClient { + /// Paginate over `[ListOutpostResolversOutputResponse]` 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 `[ListOutpostResolversInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListOutpostResolversOutputResponse` + public func listOutpostResolversPaginated(input: ListOutpostResolversInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListOutpostResolversInput.nextToken, outputKey: \ListOutpostResolversOutputResponse.nextToken, paginationFunction: self.listOutpostResolvers(input:)) + } +} + +extension ListOutpostResolversInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListOutpostResolversInput { + return ListOutpostResolversInput( + maxResults: self.maxResults, + nextToken: token, + outpostArn: self.outpostArn + )} +} + +extension PaginatorSequence where Input == ListOutpostResolversInput, Output == ListOutpostResolversOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listOutpostResolversPaginated` + /// to access the nested member `[Route53ResolverClientTypes.OutpostResolver]` + /// - Returns: `[Route53ResolverClientTypes.OutpostResolver]` + public func outpostResolvers() async throws -> [Route53ResolverClientTypes.OutpostResolver] { + return try await self.asyncCompactMap { item in item.outpostResolvers } + } +} extension Route53ResolverClient { /// Paginate over `[ListResolverConfigsOutputResponse]` results. /// diff --git a/Sources/Services/AWSRoute53Resolver/Route53ResolverClient.swift b/Sources/Services/AWSRoute53Resolver/Route53ResolverClient.swift index 0416d822b8d..7ce63e867a6 100644 --- a/Sources/Services/AWSRoute53Resolver/Route53ResolverClient.swift +++ b/Sources/Services/AWSRoute53Resolver/Route53ResolverClient.swift @@ -358,6 +358,43 @@ extension Route53ResolverClient: Route53ResolverClientProtocol { return result } + /// Creates an Route 53 Resolver on an Outpost. + public func createOutpostResolver(input: CreateOutpostResolverInput) async throws -> CreateOutpostResolverOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "createOutpostResolver") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "route53resolver") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "createOutpostResolver") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "Route53Resolver.CreateOutpostResolver")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "CreateOutpostResolverRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Creates a Resolver endpoint. There are two types of Resolver endpoints, inbound and outbound: /// /// * An inbound Resolver endpoint forwards DNS queries to the DNS service for a VPC from your network. @@ -592,6 +629,43 @@ extension Route53ResolverClient: Route53ResolverClientProtocol { return result } + /// Deletes a Resolver on the Outpost. + public func deleteOutpostResolver(input: DeleteOutpostResolverInput) async throws -> DeleteOutpostResolverOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "deleteOutpostResolver") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "route53resolver") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "deleteOutpostResolver") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "Route53Resolver.DeleteOutpostResolver")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "DeleteOutpostResolverRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Deletes a Resolver endpoint. The effect of deleting a Resolver endpoint depends on whether it's an inbound or an outbound Resolver endpoint: /// /// * Inbound: DNS queries from your network are no longer routed to the DNS service for the specified VPC. @@ -1044,6 +1118,43 @@ extension Route53ResolverClient: Route53ResolverClientProtocol { return result } + /// Gets information about a specified Resolver on the Outpost, such as its instance count and type, name, and the current status of the Resolver. + public func getOutpostResolver(input: GetOutpostResolverInput) async throws -> GetOutpostResolverOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getOutpostResolver") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "route53resolver") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getOutpostResolver") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "Route53Resolver.GetOutpostResolver")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "GetOutpostResolverRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Retrieves the behavior configuration of Route 53 Resolver behavior for a single VPC from Amazon Virtual Private Cloud. public func getResolverConfig(input: GetResolverConfigInput) async throws -> GetResolverConfigOutputResponse { @@ -1642,6 +1753,43 @@ extension Route53ResolverClient: Route53ResolverClientProtocol { return result } + /// Lists all the Resolvers on Outposts that were created using the current Amazon Web Services account. + public func listOutpostResolvers(input: ListOutpostResolversInput) async throws -> ListOutpostResolversOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listOutpostResolvers") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "route53resolver") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listOutpostResolvers") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "Route53Resolver.ListOutpostResolvers")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "ListOutpostResolversRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Retrieves the Resolver configurations that you have defined. Route 53 Resolver uses the configurations to manage DNS resolution behavior for your VPCs. public func listResolverConfigs(input: ListResolverConfigsInput) async throws -> ListResolverConfigsOutputResponse { @@ -2308,6 +2456,43 @@ extension Route53ResolverClient: Route53ResolverClientProtocol { return result } + /// You can use UpdateOutpostResolver to update the instance count, type, or name of a Resolver on an Outpost. + public func updateOutpostResolver(input: UpdateOutpostResolverInput) async throws -> UpdateOutpostResolverOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "updateOutpostResolver") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "route53resolver") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "updateOutpostResolver") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "Route53Resolver.UpdateOutpostResolver")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "UpdateOutpostResolverRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Updates the behavior configuration of Route 53 Resolver behavior for a single VPC from Amazon Virtual Private Cloud. public func updateResolverConfig(input: UpdateResolverConfigInput) async throws -> UpdateResolverConfigOutputResponse { diff --git a/Sources/Services/AWSRoute53Resolver/Route53ResolverClientProtocol.swift b/Sources/Services/AWSRoute53Resolver/Route53ResolverClientProtocol.swift index b2836418a54..5fee58d7630 100644 --- a/Sources/Services/AWSRoute53Resolver/Route53ResolverClientProtocol.swift +++ b/Sources/Services/AWSRoute53Resolver/Route53ResolverClientProtocol.swift @@ -18,6 +18,8 @@ public protocol Route53ResolverClientProtocol { func createFirewallRule(input: CreateFirewallRuleInput) async throws -> CreateFirewallRuleOutputResponse /// Creates an empty DNS Firewall rule group for filtering DNS network traffic in a VPC. You can add rules to the new rule group by calling [CreateFirewallRule]. func createFirewallRuleGroup(input: CreateFirewallRuleGroupInput) async throws -> CreateFirewallRuleGroupOutputResponse + /// Creates an Route 53 Resolver on an Outpost. + func createOutpostResolver(input: CreateOutpostResolverInput) async throws -> CreateOutpostResolverOutputResponse /// Creates a Resolver endpoint. There are two types of Resolver endpoints, inbound and outbound: /// /// * An inbound Resolver endpoint forwards DNS queries to the DNS service for a VPC from your network. @@ -34,6 +36,8 @@ public protocol Route53ResolverClientProtocol { func deleteFirewallRule(input: DeleteFirewallRuleInput) async throws -> DeleteFirewallRuleOutputResponse /// Deletes the specified firewall rule group. func deleteFirewallRuleGroup(input: DeleteFirewallRuleGroupInput) async throws -> DeleteFirewallRuleGroupOutputResponse + /// Deletes a Resolver on the Outpost. + func deleteOutpostResolver(input: DeleteOutpostResolverInput) async throws -> DeleteOutpostResolverOutputResponse /// Deletes a Resolver endpoint. The effect of deleting a Resolver endpoint depends on whether it's an inbound or an outbound Resolver endpoint: /// /// * Inbound: DNS queries from your network are no longer routed to the DNS service for the specified VPC. @@ -66,6 +70,8 @@ public protocol Route53ResolverClientProtocol { func getFirewallRuleGroupAssociation(input: GetFirewallRuleGroupAssociationInput) async throws -> GetFirewallRuleGroupAssociationOutputResponse /// Returns the Identity and Access Management (Amazon Web Services IAM) policy for sharing the specified rule group. You can use the policy to share the rule group using Resource Access Manager (RAM). func getFirewallRuleGroupPolicy(input: GetFirewallRuleGroupPolicyInput) async throws -> GetFirewallRuleGroupPolicyOutputResponse + /// Gets information about a specified Resolver on the Outpost, such as its instance count and type, name, and the current status of the Resolver. + func getOutpostResolver(input: GetOutpostResolverInput) async throws -> GetOutpostResolverOutputResponse /// Retrieves the behavior configuration of Route 53 Resolver behavior for a single VPC from Amazon Virtual Private Cloud. func getResolverConfig(input: GetResolverConfigInput) async throws -> GetResolverConfigOutputResponse /// Gets DNSSEC validation information for a specified resource. @@ -104,6 +110,8 @@ public protocol Route53ResolverClientProtocol { func listFirewallRuleGroups(input: ListFirewallRuleGroupsInput) async throws -> ListFirewallRuleGroupsOutputResponse /// Retrieves the firewall rules that you have defined for the specified firewall rule group. DNS Firewall uses the rules in a rule group to filter DNS network traffic for a VPC. A single call might return only a partial list of the rules. For information, see MaxResults. func listFirewallRules(input: ListFirewallRulesInput) async throws -> ListFirewallRulesOutputResponse + /// Lists all the Resolvers on Outposts that were created using the current Amazon Web Services account. + func listOutpostResolvers(input: ListOutpostResolversInput) async throws -> ListOutpostResolversOutputResponse /// Retrieves the Resolver configurations that you have defined. Route 53 Resolver uses the configurations to manage DNS resolution behavior for your VPCs. func listResolverConfigs(input: ListResolverConfigsInput) async throws -> ListResolverConfigsOutputResponse /// Lists the configurations for DNSSEC validation that are associated with the current Amazon Web Services account. @@ -140,6 +148,8 @@ public protocol Route53ResolverClientProtocol { func updateFirewallRule(input: UpdateFirewallRuleInput) async throws -> UpdateFirewallRuleOutputResponse /// Changes the association of a [FirewallRuleGroup] with a VPC. The association enables DNS filtering for the VPC. func updateFirewallRuleGroupAssociation(input: UpdateFirewallRuleGroupAssociationInput) async throws -> UpdateFirewallRuleGroupAssociationOutputResponse + /// You can use UpdateOutpostResolver to update the instance count, type, or name of a Resolver on an Outpost. + func updateOutpostResolver(input: UpdateOutpostResolverInput) async throws -> UpdateOutpostResolverOutputResponse /// Updates the behavior configuration of Route 53 Resolver behavior for a single VPC from Amazon Virtual Private Cloud. func updateResolverConfig(input: UpdateResolverConfigInput) async throws -> UpdateResolverConfigOutputResponse /// Updates an existing DNSSEC validation configuration. If there is no existing DNSSEC validation configuration, one is created. diff --git a/Sources/Services/AWSRoute53Resolver/models/Models.swift b/Sources/Services/AWSRoute53Resolver/models/Models.swift index 405e04c9214..463770c0d2c 100644 --- a/Sources/Services/AWSRoute53Resolver/models/Models.swift +++ b/Sources/Services/AWSRoute53Resolver/models/Models.swift @@ -1319,12 +1319,193 @@ extension CreateFirewallRuleOutputResponseBody: Swift.Decodable { } } +extension CreateOutpostResolverInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creatorRequestId = "CreatorRequestId" + case instanceCount = "InstanceCount" + case name = "Name" + case outpostArn = "OutpostArn" + case preferredInstanceType = "PreferredInstanceType" + case tags = "Tags" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let creatorRequestId = self.creatorRequestId { + try encodeContainer.encode(creatorRequestId, forKey: .creatorRequestId) + } + if let instanceCount = self.instanceCount { + try encodeContainer.encode(instanceCount, forKey: .instanceCount) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let outpostArn = self.outpostArn { + try encodeContainer.encode(outpostArn, forKey: .outpostArn) + } + if let preferredInstanceType = self.preferredInstanceType { + try encodeContainer.encode(preferredInstanceType, forKey: .preferredInstanceType) + } + if let tags = tags { + var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) + for tag0 in tags { + try tagsContainer.encode(tag0) + } + } + } +} + +extension CreateOutpostResolverInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct CreateOutpostResolverInput: Swift.Equatable { + /// A unique string that identifies the request and that allows failed requests to be retried without the risk of running the operation twice. CreatorRequestId can be any unique string, for example, a date/time stamp. + /// This member is required. + public var creatorRequestId: Swift.String? + /// Number of Amazon EC2 instances for the Resolver on Outpost. The default and minimal value is 4. + public var instanceCount: Swift.Int? + /// A friendly name that lets you easily find a configuration in the Resolver dashboard in the Route 53 console. + /// This member is required. + public var name: Swift.String? + /// The Amazon Resource Name (ARN) of the Outpost. If you specify this, you must also specify a value for the PreferredInstanceType. + /// This member is required. + public var outpostArn: Swift.String? + /// The Amazon EC2 instance type. If you specify this, you must also specify a value for the OutpostArn. + /// This member is required. + public var preferredInstanceType: Swift.String? + /// A string that helps identify the Route 53 Resolvers on Outpost. + public var tags: [Route53ResolverClientTypes.Tag]? + + public init( + creatorRequestId: Swift.String? = nil, + instanceCount: Swift.Int? = nil, + name: Swift.String? = nil, + outpostArn: Swift.String? = nil, + preferredInstanceType: Swift.String? = nil, + tags: [Route53ResolverClientTypes.Tag]? = nil + ) + { + self.creatorRequestId = creatorRequestId + self.instanceCount = instanceCount + self.name = name + self.outpostArn = outpostArn + self.preferredInstanceType = preferredInstanceType + self.tags = tags + } +} + +struct CreateOutpostResolverInputBody: Swift.Equatable { + let creatorRequestId: Swift.String? + let name: Swift.String? + let instanceCount: Swift.Int? + let preferredInstanceType: Swift.String? + let outpostArn: Swift.String? + let tags: [Route53ResolverClientTypes.Tag]? +} + +extension CreateOutpostResolverInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creatorRequestId = "CreatorRequestId" + case instanceCount = "InstanceCount" + case name = "Name" + case outpostArn = "OutpostArn" + case preferredInstanceType = "PreferredInstanceType" + case tags = "Tags" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let creatorRequestIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorRequestId) + creatorRequestId = creatorRequestIdDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let instanceCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .instanceCount) + instanceCount = instanceCountDecoded + let preferredInstanceTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .preferredInstanceType) + preferredInstanceType = preferredInstanceTypeDecoded + let outpostArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outpostArn) + outpostArn = outpostArnDecoded + let tagsContainer = try containerValues.decodeIfPresent([Route53ResolverClientTypes.Tag?].self, forKey: .tags) + var tagsDecoded0:[Route53ResolverClientTypes.Tag]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [Route53ResolverClientTypes.Tag]() + for structure0 in tagsContainer { + if let structure0 = structure0 { + tagsDecoded0?.append(structure0) + } + } + } + tags = tagsDecoded0 + } +} + +public enum CreateOutpostResolverOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServiceErrorException": return try await InternalServiceErrorException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension CreateOutpostResolverOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: CreateOutpostResolverOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.outpostResolver = output.outpostResolver + } else { + self.outpostResolver = nil + } + } +} + +public struct CreateOutpostResolverOutputResponse: Swift.Equatable { + /// Information about the CreateOutpostResolver request, including the status of the request. + public var outpostResolver: Route53ResolverClientTypes.OutpostResolver? + + public init( + outpostResolver: Route53ResolverClientTypes.OutpostResolver? = nil + ) + { + self.outpostResolver = outpostResolver + } +} + +struct CreateOutpostResolverOutputResponseBody: Swift.Equatable { + let outpostResolver: Route53ResolverClientTypes.OutpostResolver? +} + +extension CreateOutpostResolverOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case outpostResolver = "OutpostResolver" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let outpostResolverDecoded = try containerValues.decodeIfPresent(Route53ResolverClientTypes.OutpostResolver.self, forKey: .outpostResolver) + outpostResolver = outpostResolverDecoded + } +} + extension CreateResolverEndpointInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case creatorRequestId = "CreatorRequestId" case direction = "Direction" case ipAddresses = "IpAddresses" case name = "Name" + case outpostArn = "OutpostArn" + case preferredInstanceType = "PreferredInstanceType" case resolverEndpointType = "ResolverEndpointType" case securityGroupIds = "SecurityGroupIds" case tags = "Tags" @@ -1347,6 +1528,12 @@ extension CreateResolverEndpointInput: Swift.Encodable { if let name = self.name { try encodeContainer.encode(name, forKey: .name) } + if let outpostArn = self.outpostArn { + try encodeContainer.encode(outpostArn, forKey: .outpostArn) + } + if let preferredInstanceType = self.preferredInstanceType { + try encodeContainer.encode(preferredInstanceType, forKey: .preferredInstanceType) + } if let resolverEndpointType = self.resolverEndpointType { try encodeContainer.encode(resolverEndpointType.rawValue, forKey: .resolverEndpointType) } @@ -1387,7 +1574,11 @@ public struct CreateResolverEndpointInput: Swift.Equatable { public var ipAddresses: [Route53ResolverClientTypes.IpAddressRequest]? /// A friendly name that lets you easily find a configuration in the Resolver dashboard in the Route 53 console. public var name: Swift.String? - /// For the endpoint type you can choose either IPv4, IPv6. or dual-stack. A dual-stack endpoint means that it will resolve via both IPv4 and IPv6. This endpoint type is applied to all IP addresses. + /// The Amazon Resource Name (ARN) of the Outpost. If you specify this, you must also specify a value for the PreferredInstanceType. + public var outpostArn: Swift.String? + /// The instance type. If you specify this, you must also specify a value for the OutpostArn. + public var preferredInstanceType: Swift.String? + /// For the endpoint type you can choose either IPv4, IPv6, or dual-stack. A dual-stack endpoint means that it will resolve via both IPv4 and IPv6. This endpoint type is applied to all IP addresses. public var resolverEndpointType: Route53ResolverClientTypes.ResolverEndpointType? /// The ID of one or more security groups that you want to use to control access to this VPC. The security group that you specify must include one or more inbound rules (for inbound Resolver endpoints) or outbound rules (for outbound Resolver endpoints). Inbound and outbound rules must allow TCP and UDP access. For inbound access, open port 53. For outbound access, open the port that you're using for DNS queries on your network. /// This member is required. @@ -1400,6 +1591,8 @@ public struct CreateResolverEndpointInput: Swift.Equatable { direction: Route53ResolverClientTypes.ResolverEndpointDirection? = nil, ipAddresses: [Route53ResolverClientTypes.IpAddressRequest]? = nil, name: Swift.String? = nil, + outpostArn: Swift.String? = nil, + preferredInstanceType: Swift.String? = nil, resolverEndpointType: Route53ResolverClientTypes.ResolverEndpointType? = nil, securityGroupIds: [Swift.String]? = nil, tags: [Route53ResolverClientTypes.Tag]? = nil @@ -1409,6 +1602,8 @@ public struct CreateResolverEndpointInput: Swift.Equatable { self.direction = direction self.ipAddresses = ipAddresses self.name = name + self.outpostArn = outpostArn + self.preferredInstanceType = preferredInstanceType self.resolverEndpointType = resolverEndpointType self.securityGroupIds = securityGroupIds self.tags = tags @@ -1423,6 +1618,8 @@ struct CreateResolverEndpointInputBody: Swift.Equatable { let ipAddresses: [Route53ResolverClientTypes.IpAddressRequest]? let tags: [Route53ResolverClientTypes.Tag]? let resolverEndpointType: Route53ResolverClientTypes.ResolverEndpointType? + let outpostArn: Swift.String? + let preferredInstanceType: Swift.String? } extension CreateResolverEndpointInputBody: Swift.Decodable { @@ -1431,6 +1628,8 @@ extension CreateResolverEndpointInputBody: Swift.Decodable { case direction = "Direction" case ipAddresses = "IpAddresses" case name = "Name" + case outpostArn = "OutpostArn" + case preferredInstanceType = "PreferredInstanceType" case resolverEndpointType = "ResolverEndpointType" case securityGroupIds = "SecurityGroupIds" case tags = "Tags" @@ -1479,6 +1678,10 @@ extension CreateResolverEndpointInputBody: Swift.Decodable { tags = tagsDecoded0 let resolverEndpointTypeDecoded = try containerValues.decodeIfPresent(Route53ResolverClientTypes.ResolverEndpointType.self, forKey: .resolverEndpointType) resolverEndpointType = resolverEndpointTypeDecoded + let outpostArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outpostArn) + outpostArn = outpostArnDecoded + let preferredInstanceTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .preferredInstanceType) + preferredInstanceType = preferredInstanceTypeDecoded } } @@ -1766,7 +1969,7 @@ public struct CreateResolverRuleInput: Swift.Equatable { public var ruleType: Route53ResolverClientTypes.RuleTypeOption? /// A list of the tag keys and values that you want to associate with the endpoint. public var tags: [Route53ResolverClientTypes.Tag]? - /// The IPs that you want Resolver to forward DNS queries to. You can specify only IPv4 addresses. Separate IP addresses with a space. TargetIps is available only when the value of Rule type is FORWARD. + /// The IPs that you want Resolver to forward DNS queries to. You can specify either Ipv4 or Ipv6 addresses but not both in the same rule. Separate IP addresses with a space. TargetIps is available only when the value of Rule type is FORWARD. public var targetIps: [Route53ResolverClientTypes.TargetAddress]? public init( @@ -2227,6 +2430,110 @@ extension DeleteFirewallRuleOutputResponseBody: Swift.Decodable { } } +extension DeleteOutpostResolverInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case id = "Id" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) + } + } +} + +extension DeleteOutpostResolverInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct DeleteOutpostResolverInput: Swift.Equatable { + /// A unique string that identifies the Resolver on the Outpost. + /// This member is required. + public var id: Swift.String? + + public init( + id: Swift.String? = nil + ) + { + self.id = id + } +} + +struct DeleteOutpostResolverInputBody: Swift.Equatable { + let id: Swift.String? +} + +extension DeleteOutpostResolverInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case id = "Id" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + } +} + +public enum DeleteOutpostResolverOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServiceErrorException": return try await InternalServiceErrorException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension DeleteOutpostResolverOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: DeleteOutpostResolverOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.outpostResolver = output.outpostResolver + } else { + self.outpostResolver = nil + } + } +} + +public struct DeleteOutpostResolverOutputResponse: Swift.Equatable { + /// Information about the DeleteOutpostResolver request, including the status of the request. + public var outpostResolver: Route53ResolverClientTypes.OutpostResolver? + + public init( + outpostResolver: Route53ResolverClientTypes.OutpostResolver? = nil + ) + { + self.outpostResolver = outpostResolver + } +} + +struct DeleteOutpostResolverOutputResponseBody: Swift.Equatable { + let outpostResolver: Route53ResolverClientTypes.OutpostResolver? +} + +extension DeleteOutpostResolverOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case outpostResolver = "OutpostResolver" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let outpostResolverDecoded = try containerValues.decodeIfPresent(Route53ResolverClientTypes.OutpostResolver.self, forKey: .outpostResolver) + outpostResolver = outpostResolverDecoded + } +} + extension DeleteResolverEndpointInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case resolverEndpointId = "ResolverEndpointId" @@ -4662,62 +4969,61 @@ extension GetFirewallRuleGroupPolicyOutputResponseBody: Swift.Decodable { } } -extension GetResolverConfigInput: Swift.Encodable { +extension GetOutpostResolverInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case resourceId = "ResourceId" + case id = "Id" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) - if let resourceId = self.resourceId { - try encodeContainer.encode(resourceId, forKey: .resourceId) + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) } } } -extension GetResolverConfigInput: ClientRuntime.URLPathProvider { +extension GetOutpostResolverInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { return "/" } } -public struct GetResolverConfigInput: Swift.Equatable { - /// Resource ID of the Amazon VPC that you want to get information about. +public struct GetOutpostResolverInput: Swift.Equatable { + /// The ID of the Resolver on the Outpost. /// This member is required. - public var resourceId: Swift.String? + public var id: Swift.String? public init( - resourceId: Swift.String? = nil + id: Swift.String? = nil ) { - self.resourceId = resourceId + self.id = id } } -struct GetResolverConfigInputBody: Swift.Equatable { - let resourceId: Swift.String? +struct GetOutpostResolverInputBody: Swift.Equatable { + let id: Swift.String? } -extension GetResolverConfigInputBody: Swift.Decodable { +extension GetOutpostResolverInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case resourceId = "ResourceId" + case id = "Id" } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let resourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceId) - resourceId = resourceIdDecoded + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded } } -public enum GetResolverConfigOutputError: ClientRuntime.HttpResponseErrorBinding { +public enum GetOutpostResolverOutputError: ClientRuntime.HttpResponseErrorBinding { public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServiceErrorException": return try await InternalServiceErrorException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) - case "InvalidParameterException": return try await InvalidParameterException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) @@ -4726,47 +5032,47 @@ public enum GetResolverConfigOutputError: ClientRuntime.HttpResponseErrorBinding } } -extension GetResolverConfigOutputResponse: ClientRuntime.HttpResponseBinding { +extension GetOutpostResolverOutputResponse: ClientRuntime.HttpResponseBinding { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { - let output: GetResolverConfigOutputResponseBody = try responseDecoder.decode(responseBody: data) - self.resolverConfig = output.resolverConfig + let output: GetOutpostResolverOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.outpostResolver = output.outpostResolver } else { - self.resolverConfig = nil + self.outpostResolver = nil } } } -public struct GetResolverConfigOutputResponse: Swift.Equatable { - /// Information about the behavior configuration of Route 53 Resolver behavior for the VPC you specified in the GetResolverConfig request. - public var resolverConfig: Route53ResolverClientTypes.ResolverConfig? +public struct GetOutpostResolverOutputResponse: Swift.Equatable { + /// Information about the GetOutpostResolver request, including the status of the request. + public var outpostResolver: Route53ResolverClientTypes.OutpostResolver? public init( - resolverConfig: Route53ResolverClientTypes.ResolverConfig? = nil + outpostResolver: Route53ResolverClientTypes.OutpostResolver? = nil ) { - self.resolverConfig = resolverConfig + self.outpostResolver = outpostResolver } } -struct GetResolverConfigOutputResponseBody: Swift.Equatable { - let resolverConfig: Route53ResolverClientTypes.ResolverConfig? +struct GetOutpostResolverOutputResponseBody: Swift.Equatable { + let outpostResolver: Route53ResolverClientTypes.OutpostResolver? } -extension GetResolverConfigOutputResponseBody: Swift.Decodable { +extension GetOutpostResolverOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { - case resolverConfig = "ResolverConfig" + case outpostResolver = "OutpostResolver" } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) - let resolverConfigDecoded = try containerValues.decodeIfPresent(Route53ResolverClientTypes.ResolverConfig.self, forKey: .resolverConfig) - resolverConfig = resolverConfigDecoded + let outpostResolverDecoded = try containerValues.decodeIfPresent(Route53ResolverClientTypes.OutpostResolver.self, forKey: .outpostResolver) + outpostResolver = outpostResolverDecoded } } -extension GetResolverDnssecConfigInput: Swift.Encodable { +extension GetResolverConfigInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case resourceId = "ResourceId" } @@ -4779,14 +5085,118 @@ extension GetResolverDnssecConfigInput: Swift.Encodable { } } -extension GetResolverDnssecConfigInput: ClientRuntime.URLPathProvider { +extension GetResolverConfigInput: ClientRuntime.URLPathProvider { public var urlPath: Swift.String? { return "/" } } -public struct GetResolverDnssecConfigInput: Swift.Equatable { - /// The ID of the virtual private cloud (VPC) for the DNSSEC validation status. +public struct GetResolverConfigInput: Swift.Equatable { + /// Resource ID of the Amazon VPC that you want to get information about. + /// This member is required. + public var resourceId: Swift.String? + + public init( + resourceId: Swift.String? = nil + ) + { + self.resourceId = resourceId + } +} + +struct GetResolverConfigInputBody: Swift.Equatable { + let resourceId: Swift.String? +} + +extension GetResolverConfigInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case resourceId = "ResourceId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceId) + resourceId = resourceIdDecoded + } +} + +public enum GetResolverConfigOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServiceErrorException": return try await InternalServiceErrorException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidParameterException": return try await InvalidParameterException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetResolverConfigOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetResolverConfigOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.resolverConfig = output.resolverConfig + } else { + self.resolverConfig = nil + } + } +} + +public struct GetResolverConfigOutputResponse: Swift.Equatable { + /// Information about the behavior configuration of Route 53 Resolver behavior for the VPC you specified in the GetResolverConfig request. + public var resolverConfig: Route53ResolverClientTypes.ResolverConfig? + + public init( + resolverConfig: Route53ResolverClientTypes.ResolverConfig? = nil + ) + { + self.resolverConfig = resolverConfig + } +} + +struct GetResolverConfigOutputResponseBody: Swift.Equatable { + let resolverConfig: Route53ResolverClientTypes.ResolverConfig? +} + +extension GetResolverConfigOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case resolverConfig = "ResolverConfig" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resolverConfigDecoded = try containerValues.decodeIfPresent(Route53ResolverClientTypes.ResolverConfig.self, forKey: .resolverConfig) + resolverConfig = resolverConfigDecoded + } +} + +extension GetResolverDnssecConfigInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case resourceId = "ResourceId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let resourceId = self.resourceId { + try encodeContainer.encode(resourceId, forKey: .resourceId) + } + } +} + +extension GetResolverDnssecConfigInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct GetResolverDnssecConfigInput: Swift.Equatable { + /// The ID of the virtual private cloud (VPC) for the DNSSEC validation status. /// This member is required. public var resourceId: Swift.String? @@ -6264,6 +6674,7 @@ extension Route53ResolverClientTypes { case failedresourcegone case remapattaching case remapdetaching + case updatefailed case updating case sdkUnknown(Swift.String) @@ -6279,6 +6690,7 @@ extension Route53ResolverClientTypes { .failedresourcegone, .remapattaching, .remapdetaching, + .updatefailed, .updating, .sdkUnknown("") ] @@ -6299,6 +6711,7 @@ extension Route53ResolverClientTypes { case .failedresourcegone: return "FAILED_RESOURCE_GONE" case .remapattaching: return "REMAP_ATTACHING" case .remapdetaching: return "REMAP_DETACHING" + case .updatefailed: return "UPDATE_FAILED" case .updating: return "UPDATING" case let .sdkUnknown(s): return s } @@ -7339,6 +7752,151 @@ extension ListFirewallRulesOutputResponseBody: Swift.Decodable { } } +extension ListOutpostResolversInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults = "MaxResults" + case nextToken = "NextToken" + case outpostArn = "OutpostArn" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + if let outpostArn = self.outpostArn { + try encodeContainer.encode(outpostArn, forKey: .outpostArn) + } + } +} + +extension ListOutpostResolversInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct ListOutpostResolversInput: Swift.Equatable { + /// The maximum number of Resolvers on the Outpost that you want to return in the response to a ListOutpostResolver request. If you don't specify a value for MaxResults, the request returns up to 100 Resolvers. + public var maxResults: Swift.Int? + /// For the first ListOutpostResolver request, omit this value. + public var nextToken: Swift.String? + /// The Amazon Resource Name (ARN) of the Outpost. + public var outpostArn: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil, + outpostArn: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + self.outpostArn = outpostArn + } +} + +struct ListOutpostResolversInputBody: Swift.Equatable { + let outpostArn: Swift.String? + let maxResults: Swift.Int? + let nextToken: Swift.String? +} + +extension ListOutpostResolversInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults = "MaxResults" + case nextToken = "NextToken" + case outpostArn = "OutpostArn" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let outpostArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outpostArn) + outpostArn = outpostArnDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +public enum ListOutpostResolversOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServiceErrorException": return try await InternalServiceErrorException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListOutpostResolversOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListOutpostResolversOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nextToken = output.nextToken + self.outpostResolvers = output.outpostResolvers + } else { + self.nextToken = nil + self.outpostResolvers = nil + } + } +} + +public struct ListOutpostResolversOutputResponse: Swift.Equatable { + /// If more than MaxResults Resolvers match the specified criteria, you can submit another ListOutpostResolver request to get the next group of results. In the next request, specify the value of NextToken from the previous response. + public var nextToken: Swift.String? + /// The Resolvers on Outposts that were created by using the current Amazon Web Services account, and that match the specified filters, if any. + public var outpostResolvers: [Route53ResolverClientTypes.OutpostResolver]? + + public init( + nextToken: Swift.String? = nil, + outpostResolvers: [Route53ResolverClientTypes.OutpostResolver]? = nil + ) + { + self.nextToken = nextToken + self.outpostResolvers = outpostResolvers + } +} + +struct ListOutpostResolversOutputResponseBody: Swift.Equatable { + let outpostResolvers: [Route53ResolverClientTypes.OutpostResolver]? + let nextToken: Swift.String? +} + +extension ListOutpostResolversOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextToken = "NextToken" + case outpostResolvers = "OutpostResolvers" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let outpostResolversContainer = try containerValues.decodeIfPresent([Route53ResolverClientTypes.OutpostResolver?].self, forKey: .outpostResolvers) + var outpostResolversDecoded0:[Route53ResolverClientTypes.OutpostResolver]? = nil + if let outpostResolversContainer = outpostResolversContainer { + outpostResolversDecoded0 = [Route53ResolverClientTypes.OutpostResolver]() + for structure0 in outpostResolversContainer { + if let structure0 = structure0 { + outpostResolversDecoded0?.append(structure0) + } + } + } + outpostResolvers = outpostResolversDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + extension ListResolverConfigsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case maxResults = "MaxResults" @@ -8935,6 +9493,188 @@ extension Route53ResolverClientTypes { } } +extension Route53ResolverClientTypes.OutpostResolver: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case arn = "Arn" + case creationTime = "CreationTime" + case creatorRequestId = "CreatorRequestId" + case id = "Id" + case instanceCount = "InstanceCount" + case modificationTime = "ModificationTime" + case name = "Name" + case outpostArn = "OutpostArn" + case preferredInstanceType = "PreferredInstanceType" + case status = "Status" + case statusMessage = "StatusMessage" + } + + 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 creationTime = self.creationTime { + try encodeContainer.encode(creationTime, forKey: .creationTime) + } + if let creatorRequestId = self.creatorRequestId { + try encodeContainer.encode(creatorRequestId, forKey: .creatorRequestId) + } + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) + } + if let instanceCount = self.instanceCount { + try encodeContainer.encode(instanceCount, forKey: .instanceCount) + } + if let modificationTime = self.modificationTime { + try encodeContainer.encode(modificationTime, forKey: .modificationTime) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let outpostArn = self.outpostArn { + try encodeContainer.encode(outpostArn, forKey: .outpostArn) + } + if let preferredInstanceType = self.preferredInstanceType { + try encodeContainer.encode(preferredInstanceType, forKey: .preferredInstanceType) + } + if let status = self.status { + try encodeContainer.encode(status.rawValue, forKey: .status) + } + if let statusMessage = self.statusMessage { + try encodeContainer.encode(statusMessage, forKey: .statusMessage) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded + let creationTimeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creationTime) + creationTime = creationTimeDecoded + let modificationTimeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .modificationTime) + modificationTime = modificationTimeDecoded + let creatorRequestIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .creatorRequestId) + creatorRequestId = creatorRequestIdDecoded + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + let instanceCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .instanceCount) + instanceCount = instanceCountDecoded + let preferredInstanceTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .preferredInstanceType) + preferredInstanceType = preferredInstanceTypeDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let statusDecoded = try containerValues.decodeIfPresent(Route53ResolverClientTypes.OutpostResolverStatus.self, forKey: .status) + status = statusDecoded + let statusMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .statusMessage) + statusMessage = statusMessageDecoded + let outpostArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outpostArn) + outpostArn = outpostArnDecoded + } +} + +extension Route53ResolverClientTypes { + /// A complex type that contains settings for an existing Resolver on an Outpost. + public struct OutpostResolver: Swift.Equatable { + /// The ARN (Amazon Resource Name) for the Resolver on an Outpost. + public var arn: Swift.String? + /// The date and time that the Outpost Resolver was created, in Unix time format and Coordinated Universal Time (UTC). + public var creationTime: Swift.String? + /// A unique string that identifies the request that created the Resolver endpoint. The CreatorRequestId allows failed requests to be retried without the risk of running the operation twice. + public var creatorRequestId: Swift.String? + /// The ID of the Resolver on Outpost. + public var id: Swift.String? + /// Amazon EC2 instance count for the Resolver on the Outpost. + public var instanceCount: Swift.Int? + /// The date and time that the Outpost Resolver was modified, in Unix time format and Coordinated Universal Time (UTC). + public var modificationTime: Swift.String? + /// Name of the Resolver. + public var name: Swift.String? + /// The ARN (Amazon Resource Name) for the Outpost. + public var outpostArn: Swift.String? + /// The Amazon EC2 instance type. + public var preferredInstanceType: Swift.String? + /// Status of the Resolver. + public var status: Route53ResolverClientTypes.OutpostResolverStatus? + /// A detailed description of the Resolver. + public var statusMessage: Swift.String? + + public init( + arn: Swift.String? = nil, + creationTime: Swift.String? = nil, + creatorRequestId: Swift.String? = nil, + id: Swift.String? = nil, + instanceCount: Swift.Int? = nil, + modificationTime: Swift.String? = nil, + name: Swift.String? = nil, + outpostArn: Swift.String? = nil, + preferredInstanceType: Swift.String? = nil, + status: Route53ResolverClientTypes.OutpostResolverStatus? = nil, + statusMessage: Swift.String? = nil + ) + { + self.arn = arn + self.creationTime = creationTime + self.creatorRequestId = creatorRequestId + self.id = id + self.instanceCount = instanceCount + self.modificationTime = modificationTime + self.name = name + self.outpostArn = outpostArn + self.preferredInstanceType = preferredInstanceType + self.status = status + self.statusMessage = statusMessage + } + } + +} + +extension Route53ResolverClientTypes { + public enum OutpostResolverStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case actionNeeded + case creating + case deleting + case failedCreation + case failedDeletion + case operational + case updating + case sdkUnknown(Swift.String) + + public static var allCases: [OutpostResolverStatus] { + return [ + .actionNeeded, + .creating, + .deleting, + .failedCreation, + .failedDeletion, + .operational, + .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 .actionNeeded: return "ACTION_NEEDED" + case .creating: return "CREATING" + case .deleting: return "DELETING" + case .failedCreation: return "FAILED_CREATION" + case .failedDeletion: return "FAILED_DELETION" + case .operational: return "OPERATIONAL" + 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 = OutpostResolverStatus(rawValue: rawValue) ?? OutpostResolverStatus.sdkUnknown(rawValue) + } + } +} + extension PutFirewallRuleGroupPolicyInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case arn = "Arn" @@ -9084,8 +9824,6 @@ public struct PutResolverQueryLogConfigPolicyInput: Swift.Equatable { /// /// * route53resolver:DisassociateResolverQueryLogConfig /// - /// * route53resolver:ListResolverQueryLogConfigAssociations - /// /// * route53resolver:ListResolverQueryLogConfigs /// /// @@ -9555,6 +10293,8 @@ extension Route53ResolverClientTypes.ResolverEndpoint: Swift.Codable { case ipAddressCount = "IpAddressCount" case modificationTime = "ModificationTime" case name = "Name" + case outpostArn = "OutpostArn" + case preferredInstanceType = "PreferredInstanceType" case resolverEndpointType = "ResolverEndpointType" case securityGroupIds = "SecurityGroupIds" case status = "Status" @@ -9590,6 +10330,12 @@ extension Route53ResolverClientTypes.ResolverEndpoint: Swift.Codable { if let name = self.name { try encodeContainer.encode(name, forKey: .name) } + if let outpostArn = self.outpostArn { + try encodeContainer.encode(outpostArn, forKey: .outpostArn) + } + if let preferredInstanceType = self.preferredInstanceType { + try encodeContainer.encode(preferredInstanceType, forKey: .preferredInstanceType) + } if let resolverEndpointType = self.resolverEndpointType { try encodeContainer.encode(resolverEndpointType.rawValue, forKey: .resolverEndpointType) } @@ -9644,6 +10390,10 @@ extension Route53ResolverClientTypes.ResolverEndpoint: Swift.Codable { modificationTime = modificationTimeDecoded let resolverEndpointTypeDecoded = try containerValues.decodeIfPresent(Route53ResolverClientTypes.ResolverEndpointType.self, forKey: .resolverEndpointType) resolverEndpointType = resolverEndpointTypeDecoded + let outpostArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .outpostArn) + outpostArn = outpostArnDecoded + let preferredInstanceTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .preferredInstanceType) + preferredInstanceType = preferredInstanceTypeDecoded } } @@ -9672,6 +10422,10 @@ extension Route53ResolverClientTypes { public var modificationTime: Swift.String? /// The name that you assigned to the Resolver endpoint when you submitted a [CreateResolverEndpoint](https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_CreateResolverEndpoint.html) request. public var name: Swift.String? + /// The ARN (Amazon Resource Name) for the Outpost. + public var outpostArn: Swift.String? + /// The Amazon EC2 instance type. + public var preferredInstanceType: Swift.String? /// The Resolver endpoint IP address type. public var resolverEndpointType: Route53ResolverClientTypes.ResolverEndpointType? /// The ID of one or more security groups that control access to this VPC. The security group must include one or more inbound rules (for inbound endpoints) or outbound rules (for outbound endpoints). Inbound and outbound rules must allow TCP and UDP access. For inbound access, open port 53. For outbound access, open the port that you're using for DNS queries on your network. @@ -9710,6 +10464,8 @@ extension Route53ResolverClientTypes { ipAddressCount: Swift.Int? = nil, modificationTime: Swift.String? = nil, name: Swift.String? = nil, + outpostArn: Swift.String? = nil, + preferredInstanceType: Swift.String? = nil, resolverEndpointType: Route53ResolverClientTypes.ResolverEndpointType? = nil, securityGroupIds: [Swift.String]? = nil, status: Route53ResolverClientTypes.ResolverEndpointStatus? = nil, @@ -9725,6 +10481,8 @@ extension Route53ResolverClientTypes { self.ipAddressCount = ipAddressCount self.modificationTime = modificationTime self.name = name + self.outpostArn = outpostArn + self.preferredInstanceType = preferredInstanceType self.resolverEndpointType = resolverEndpointType self.securityGroupIds = securityGroupIds self.status = status @@ -10347,7 +11105,7 @@ extension Route53ResolverClientTypes { public var status: Route53ResolverClientTypes.ResolverRuleStatus? /// A detailed description of the status of a Resolver rule. public var statusMessage: Swift.String? - /// An array that contains the IP addresses and ports that an outbound endpoint forwards DNS queries to. Typically, these are the IP addresses of DNS resolvers on your network. Specify IPv4 addresses. IPv6 is not supported. + /// An array that contains the IP addresses and ports that an outbound endpoint forwards DNS queries to. Typically, these are the IP addresses of DNS resolvers on your network. public var targetIps: [Route53ResolverClientTypes.TargetAddress]? public init( @@ -10912,6 +11670,61 @@ extension Route53ResolverClientTypes { } } +extension ServiceQuotaExceededException { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ServiceQuotaExceededExceptionBody = try responseDecoder.decode(responseBody: data) + self.properties.message = output.message + } else { + self.properties.message = nil + } + self.httpResponse = httpResponse + self.requestID = requestID + self.message = message + } +} + +/// Fulfilling the request would cause one or more quotas to be exceeded. +public struct ServiceQuotaExceededException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "ServiceQuotaExceededException" } + public static var fault: ErrorFault { .client } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = HttpResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +struct ServiceQuotaExceededExceptionBody: Swift.Equatable { + let message: Swift.String? +} + +extension ServiceQuotaExceededExceptionBody: 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 Route53ResolverClientTypes { public enum ShareStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case notshared @@ -12121,6 +12934,147 @@ extension Route53ResolverClientTypes { } +extension UpdateOutpostResolverInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case id = "Id" + case instanceCount = "InstanceCount" + case name = "Name" + case preferredInstanceType = "PreferredInstanceType" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let id = self.id { + try encodeContainer.encode(id, forKey: .id) + } + if let instanceCount = self.instanceCount { + try encodeContainer.encode(instanceCount, forKey: .instanceCount) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let preferredInstanceType = self.preferredInstanceType { + try encodeContainer.encode(preferredInstanceType, forKey: .preferredInstanceType) + } + } +} + +extension UpdateOutpostResolverInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct UpdateOutpostResolverInput: Swift.Equatable { + /// A unique string that identifies Resolver on an Outpost. + /// This member is required. + public var id: Swift.String? + /// The Amazon EC2 instance count for a Resolver on the Outpost. + public var instanceCount: Swift.Int? + /// Name of the Resolver on the Outpost. + public var name: Swift.String? + /// Amazon EC2 instance type. + public var preferredInstanceType: Swift.String? + + public init( + id: Swift.String? = nil, + instanceCount: Swift.Int? = nil, + name: Swift.String? = nil, + preferredInstanceType: Swift.String? = nil + ) + { + self.id = id + self.instanceCount = instanceCount + self.name = name + self.preferredInstanceType = preferredInstanceType + } +} + +struct UpdateOutpostResolverInputBody: Swift.Equatable { + let id: Swift.String? + let name: Swift.String? + let instanceCount: Swift.Int? + let preferredInstanceType: Swift.String? +} + +extension UpdateOutpostResolverInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case id = "Id" + case instanceCount = "InstanceCount" + case name = "Name" + case preferredInstanceType = "PreferredInstanceType" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let idDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .id) + id = idDecoded + let nameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .name) + name = nameDecoded + let instanceCountDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .instanceCount) + instanceCount = instanceCountDecoded + let preferredInstanceTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .preferredInstanceType) + preferredInstanceType = preferredInstanceTypeDecoded + } +} + +public enum UpdateOutpostResolverOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServiceErrorException": return try await InternalServiceErrorException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceQuotaExceededException": return try await ServiceQuotaExceededException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UpdateOutpostResolverOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: UpdateOutpostResolverOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.outpostResolver = output.outpostResolver + } else { + self.outpostResolver = nil + } + } +} + +public struct UpdateOutpostResolverOutputResponse: Swift.Equatable { + /// The response to an UpdateOutpostResolver request. + public var outpostResolver: Route53ResolverClientTypes.OutpostResolver? + + public init( + outpostResolver: Route53ResolverClientTypes.OutpostResolver? = nil + ) + { + self.outpostResolver = outpostResolver + } +} + +struct UpdateOutpostResolverOutputResponseBody: Swift.Equatable { + let outpostResolver: Route53ResolverClientTypes.OutpostResolver? +} + +extension UpdateOutpostResolverOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case outpostResolver = "OutpostResolver" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let outpostResolverDecoded = try containerValues.decodeIfPresent(Route53ResolverClientTypes.OutpostResolver.self, forKey: .outpostResolver) + outpostResolver = outpostResolverDecoded + } +} + extension UpdateResolverConfigInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case autodefinedReverseFlag = "AutodefinedReverseFlag" @@ -12398,9 +13352,9 @@ public struct UpdateResolverEndpointInput: Swift.Equatable { /// The ID of the Resolver endpoint that you want to update. /// This member is required. public var resolverEndpointId: Swift.String? - /// Specifies the endpoint type for what type of IP address the endpoint uses to forward DNS queries. + /// Specifies the endpoint type for what type of IP address the endpoint uses to forward DNS queries. Updating to IPV6 type isn't currently supported. public var resolverEndpointType: Route53ResolverClientTypes.ResolverEndpointType? - /// Updates the Resolver endpoint type to IpV4, Ipv6, or dual-stack. + /// Specifies the IPv6 address when you update the Resolver endpoint from IPv4 to dual-stack. If you don't specify an IPv6 address, one will be automatically chosen from your subnet. public var updateIpAddresses: [Route53ResolverClientTypes.UpdateIpAddress]? public init( diff --git a/Sources/Services/AWSS3/EndpointResolver.swift b/Sources/Services/AWSS3/EndpointResolver.swift index 80af38f0315..96b8fa200fa 100644 --- a/Sources/Services/AWSS3/EndpointResolver.swift +++ b/Sources/Services/AWSS3/EndpointResolver.swift @@ -15,7 +15,7 @@ public struct EndpointParams { /// Override the endpoint used to send this request public let endpoint: Swift.String? /// When true, force a path-style endpoint to be used where the bucket name is part of the path. - public let forcePathStyle: Swift.Bool? + public let forcePathStyle: Swift.Bool /// The AWS region used to dispatch the request. public let region: Swift.String? /// 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. @@ -35,7 +35,7 @@ public struct EndpointParams { disableAccessPoints: Swift.Bool? = nil, disableMultiRegionAccessPoints: Swift.Bool = false, endpoint: Swift.String? = nil, - forcePathStyle: Swift.Bool? = nil, + forcePathStyle: Swift.Bool = false, region: Swift.String? = nil, useArnRegion: Swift.Bool? = nil, useDualStack: Swift.Bool = false, @@ -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\":[{\"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\"}]}]}" + 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\":true,\"default\":false,\"documentation\":\"When true, force a path-style endpoint to be used where the bucket name is part of the path.\",\"type\":\"Boolean\"},\"Accelerate\":{\"builtIn\":\"AWS::S3::Accelerate\",\"required\":true,\"default\":false,\"documentation\":\"When true, use S3 Accelerate. NOTE: Not all regions support S3 accelerate.\",\"type\":\"Boolean\"},\"UseGlobalEndpoint\":{\"builtIn\":\"AWS::S3::UseGlobalEndpoint\",\"required\":true,\"default\":false,\"documentation\":\"Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.\",\"type\":\"Boolean\"},\"UseObjectLambdaEndpoint\":{\"required\":false,\"documentation\":\"Internal parameter to use object lambda endpoint for an operation (eg: WriteGetObjectResponse)\",\"type\":\"Boolean\"},\"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\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Region\"}]}],\"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\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}],\"error\":\"Cannot set dual-stack in combination with a custom endpoint.\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"A custom endpoint cannot be combined with FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"A custom endpoint cannot be combined with S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]},\"aws-cn\"]}],\"error\":\"Partition does not support FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Bucket\"}]},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},49,50,true],\"assign\":\"hardwareType\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},8,12,true],\"assign\":\"regionPrefix\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},0,7,true],\"assign\":\"bucketAliasSuffix\"},{\"fn\":\"substring\",\"argv\":[{\"ref\":\"Bucket\"},32,49,true],\"assign\":\"outpostId\"},{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"regionPartition\"},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"bucketAliasSuffix\"},\"--op-s3\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"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\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},false]},{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},false]}],\"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\":[{\"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\":\"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\":\"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\":\"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\":\"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\":\"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\":\"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\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"},{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"url\"},\"scheme\"]},\"http\"]},{\"fn\":\"aws.isVirtualHostableS3Bucket\",\"argv\":[{\"ref\":\"Bucket\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"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\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},false]},{\"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-object-lambda\"]}],\"type\":\"tree\",\"rules\":[{\"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\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Object Lambda does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Object Lambda does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},\"\"]}]}],\"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\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"]}]}]}],\"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\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},\"\"]}],\"error\":\"Invalid ARN: Missing account id\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},false]}],\"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\":\"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\":[{\"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\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"DisableAccessPoints\"}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableAccessPoints\"},true]}],\"error\":\"Access points are not supported for this operation\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"]}]}]}],\"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\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},\"{partitionResult#name}\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"service\"]},\"s3\"]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"Access Points do not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]},{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},false]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},false]}],\"endpoint\":{\"url\":\"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"{bucketArn#region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"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\":\"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.\",\"type\":\"error\"}]}]}]},{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"accessPointName\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 MRAP does not support dual-stack\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"S3 MRAP does not support FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 MRAP does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"DisableMultiRegionAccessPoints\"},true]}],\"error\":\"Invalid configuration: Multi-Region Access Point ARNs are disabled.\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"mrapPartition\"}],\"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\":\"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\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"error\":\"S3 Outposts does not support FIPS\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Outposts does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[4]\"]}]}],\"error\":\"Invalid Arn: Outpost Access Point ARN contains sub resources\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[1]\"],\"assign\":\"outpostId\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"outpostId\"},false]}],\"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\":[{\"fn\":\"aws.partition\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]}],\"assign\":\"bucketPartition\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketPartition\"},\"name\"]},{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"partitionResult\"},\"name\"]}]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"region\"]},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"accountId\"]},false]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[2]\"],\"assign\":\"outpostType\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"bucketArn\"},\"resourceId[3]\"],\"assign\":\"accessPointName\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"outpostType\"},\"accesspoint\"]}],\"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\":\"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\":\"booleanEquals\",\"argv\":[{\"ref\":\"ForcePathStyle\"},true]},{\"fn\":\"aws.parseArn\",\"argv\":[{\"ref\":\"Bucket\"}]}],\"error\":\"Path-style addressing cannot be used with ARN buckets\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"uriEncode\",\"argv\":[{\"ref\":\"Bucket\"}],\"assign\":\"uri_encoded_bucket\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"aws.partition\",\"argv\":[{\"ref\":\"Region\"}],\"assign\":\"partitionResult\"}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},false]}],\"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\":\"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\":\"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\":\"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\":\"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\":\"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\":[{\"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\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]}],\"error\":\"S3 Object Lambda does not support Dual-stack\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"Accelerate\"},true]}],\"error\":\"S3 Object Lambda does not support S3 Accelerate\",\"type\":\"error\"},{\"conditions\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]},{\"fn\":\"parseURL\",\"argv\":[{\"ref\":\"Endpoint\"}],\"assign\":\"url\"}],\"endpoint\":{\"url\":\"{url#scheme}://{url#authority}{url#path}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]}],\"endpoint\":{\"url\":\"https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3-object-lambda\",\"signingRegion\":\"{Region}\"}]},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"Invalid region: region was not a valid DNS name.\",\"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\":[{\"fn\":\"isValidHostLabel\",\"argv\":[{\"ref\":\"Region\"},true]}],\"type\":\"tree\",\"rules\":[{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}],\"endpoint\":{\"url\":\"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}\",\"properties\":{\"authSchemes\":[{\"disableDoubleEncoding\":true,\"name\":\"sigv4\",\"signingName\":\"s3\",\"signingRegion\":\"us-east-1\"}]},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseFIPS\"},true]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseDualStack\"},true]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"isSet\",\"argv\":[{\"ref\":\"Endpoint\"}]}]},{\"fn\":\"not\",\"argv\":[{\"fn\":\"stringEquals\",\"argv\":[{\"ref\":\"Region\"},\"aws-global\"]}]},{\"fn\":\"booleanEquals\",\"argv\":[{\"ref\":\"UseGlobalEndpoint\"},true]}],\"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\":\"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\":\"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\":\"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\":\"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 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/AWSS3/S3Client.swift b/Sources/Services/AWSS3/S3Client.swift index c54ec8bb19d..86ee2d88279 100644 --- a/Sources/Services/AWSS3/S3Client.swift +++ b/Sources/Services/AWSS3/S3Client.swift @@ -104,7 +104,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "abortMultipartUpload") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -188,7 +188,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "completeMultipartUpload") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -206,7 +206,7 @@ extension S3Client: S3ClientProtocol { return result } - /// Creates a copy of an object that is already stored in Amazon S3. You can store individual objects of up to 5 TB in Amazon S3. You create a copy of your object up to 5 GB in size in a single atomic action using this API. However, to copy an object greater than 5 GB, you must use the multipart upload Upload Part - Copy (UploadPartCopy) API. For more information, see [Copy Object Using the REST Multipart Upload API](https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html). All copy requests must be authenticated. Additionally, you must have read access to the source object and write access to the destination bucket. For more information, see [REST Authentication](https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html). Both the Region that you want to copy the object from and the Region that you want to copy the object to must be enabled for your account. A copy request might return an error when Amazon S3 receives the copy request or while Amazon S3 is copying the files. If the error occurs before the copy action starts, you receive a standard Amazon S3 error. If the error occurs during the copy operation, the error response is embedded in the 200 OK response. This means that a 200 OK response can contain either a success or an error. If you call the S3 API directly, make sure to design your application to parse the contents of the response and handle it appropriately. If you use Amazon Web Services SDKs, SDKs handle this condition. The SDKs detect the embedded error and apply error handling per your configuration settings (including automatically retrying the request as appropriate). If the condition persists, the SDKs throws an exception (or, for the SDKs that don't use exceptions, they return the error). If the copy is successful, you receive a response with information about the copied object. If the request is an HTTP 1.1 request, the response is chunk encoded. If it were not, it would not contain the content-length, and you would need to read the entire body. The copy request charge is based on the storage class and Region that you specify for the destination object. For pricing information, see [Amazon S3 pricing](http://aws.amazon.com/s3/pricing/). Amazon S3 transfer acceleration does not support cross-Region copies. If you request a cross-Region copy using a transfer acceleration endpoint, you get a 400 Bad Request error. For more information, see [Transfer Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html). Metadata When copying an object, you can preserve all metadata (the default) or specify new metadata. However, the access control list (ACL) is not preserved and is set to private for the user making the request. To override the default ACL setting, specify a new ACL when generating a copy request. For more information, see [Using ACLs](https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html). To specify whether you want the object metadata copied from the source object or replaced with metadata provided in the request, you can optionally add the x-amz-metadata-directive header. When you grant permissions, you can use the s3:x-amz-metadata-directive condition key to enforce certain metadata behavior when objects are uploaded. For more information, see [Specifying Conditions in a Policy](https://docs.aws.amazon.com/AmazonS3/latest/dev/amazon-s3-policy-keys.html) in the Amazon S3 User Guide. For a complete list of Amazon S3-specific condition keys, see [Actions, Resources, and Condition Keys for Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/list_amazons3.html). x-amz-website-redirect-location is unique to each object and must be specified in the request headers to copy the value. x-amz-copy-source-if Headers To only copy an object under certain conditions, such as whether the Etag matches or whether the object was modified before or after a specified date, use the following request parameters: + /// Creates a copy of an object that is already stored in Amazon S3. You can store individual objects of up to 5 TB in Amazon S3. You create a copy of your object up to 5 GB in size in a single atomic action using this API. However, to copy an object greater than 5 GB, you must use the multipart upload Upload Part - Copy (UploadPartCopy) API. For more information, see [Copy Object Using the REST Multipart Upload API](https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html). All copy requests must be authenticated. Additionally, you must have read access to the source object and write access to the destination bucket. For more information, see [REST Authentication](https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html). Both the Region that you want to copy the object from and the Region that you want to copy the object to must be enabled for your account. A copy request might return an error when Amazon S3 receives the copy request or while Amazon S3 is copying the files. If the error occurs before the copy action starts, you receive a standard Amazon S3 error. If the error occurs during the copy operation, the error response is embedded in the 200 OK response. This means that a 200 OK response can contain either a success or an error. If you call the S3 API directly, make sure to design your application to parse the contents of the response and handle it appropriately. If you use Amazon Web Services SDKs, SDKs handle this condition. The SDKs detect the embedded error and apply error handling per your configuration settings (including automatically retrying the request as appropriate). If the condition persists, the SDKs throws an exception (or, for the SDKs that don't use exceptions, they return the error). If the copy is successful, you receive a response with information about the copied object. If the request is an HTTP 1.1 request, the response is chunk encoded. If it were not, it would not contain the content-length, and you would need to read the entire body. The copy request charge is based on the storage class and Region that you specify for the destination object. The request can also result in a data retrieval charge for the source if the source storage class bills for data retrieval. For pricing information, see [Amazon S3 pricing](http://aws.amazon.com/s3/pricing/). Amazon S3 transfer acceleration does not support cross-Region copies. If you request a cross-Region copy using a transfer acceleration endpoint, you get a 400 Bad Request error. For more information, see [Transfer Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html). Metadata When copying an object, you can preserve all metadata (the default) or specify new metadata. However, the access control list (ACL) is not preserved and is set to private for the user making the request. To override the default ACL setting, specify a new ACL when generating a copy request. For more information, see [Using ACLs](https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html). To specify whether you want the object metadata copied from the source object or replaced with metadata provided in the request, you can optionally add the x-amz-metadata-directive header. When you grant permissions, you can use the s3:x-amz-metadata-directive condition key to enforce certain metadata behavior when objects are uploaded. For more information, see [Specifying Conditions in a Policy](https://docs.aws.amazon.com/AmazonS3/latest/dev/amazon-s3-policy-keys.html) in the Amazon S3 User Guide. For a complete list of Amazon S3-specific condition keys, see [Actions, Resources, and Condition Keys for Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/list_amazons3.html). x-amz-website-redirect-location is unique to each object and must be specified in the request headers to copy the value. x-amz-copy-source-if Headers To only copy an object under certain conditions, such as whether the Etag matches or whether the object was modified before or after a specified date, use the following request parameters: /// /// * x-amz-copy-source-if-match /// @@ -255,7 +255,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "copyObject") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -305,7 +305,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "createBucket") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableAccessPoints: true, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableAccessPoints: true, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -432,7 +432,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "createMultipartUpload") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -471,7 +471,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucket") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -511,7 +511,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketAnalyticsConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -550,7 +550,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketCors") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -589,7 +589,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketEncryption") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -630,7 +630,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketIntelligentTieringConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -670,7 +670,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketInventoryConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -709,7 +709,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketLifecycle") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -752,7 +752,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketMetricsConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -791,7 +791,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketOwnershipControls") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -830,7 +830,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketPolicy") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -869,7 +869,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketReplication") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -908,7 +908,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketTagging") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -947,7 +947,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteBucketWebsite") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -984,7 +984,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteObject") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1023,7 +1023,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deleteObjectTagging") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1069,7 +1069,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1115,7 +1115,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "deletePublicAccessBlock") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1152,7 +1152,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketAccelerateConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1189,7 +1189,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketAcl") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1230,7 +1230,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketAnalyticsConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1269,7 +1269,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketCors") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1308,7 +1308,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketEncryption") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1349,7 +1349,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketIntelligentTieringConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1389,7 +1389,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketInventoryConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1444,7 +1444,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketLifecycleConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1483,7 +1483,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketLocation") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1522,7 +1522,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketLogging") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1565,7 +1565,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketMetricsConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1602,7 +1602,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketNotificationConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1641,7 +1641,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketOwnershipControls") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1678,7 +1678,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketPolicy") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1721,7 +1721,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketPolicyStatus") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1760,7 +1760,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketReplication") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1797,7 +1797,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketRequestPayment") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1846,7 +1846,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketTagging") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1887,7 +1887,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketVersioning") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1926,7 +1926,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getBucketWebsite") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -1996,7 +1996,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getObject") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2039,7 +2039,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getObjectAcl") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2134,7 +2134,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getObjectAttributes") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2171,7 +2171,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getObjectLegalHold") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2208,7 +2208,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getObjectLockConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2245,7 +2245,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getObjectRetention") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2286,7 +2286,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getObjectTagging") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2323,7 +2323,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getObjectTorrent") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2366,7 +2366,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "getPublicAccessBlock") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2401,7 +2401,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "headBucket") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2483,7 +2483,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "headObject") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2524,7 +2524,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "listBucketAnalyticsConfigurations") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2565,7 +2565,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "listBucketIntelligentTieringConfigurations") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2605,7 +2605,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "listBucketInventoryConfigurations") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2646,7 +2646,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "listBucketMetricsConfigurations") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2681,7 +2681,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "listBuckets") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2724,7 +2724,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "listMultipartUploads") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2767,7 +2767,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "listObjectVersions") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2812,7 +2812,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "listObjects") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2853,7 +2853,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "listObjectsV2") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2900,7 +2900,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "listParts") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -2946,7 +2946,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "putBucketAccelerateConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3061,7 +3061,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3138,7 +3138,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "putBucketAnalyticsConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3192,7 +3192,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3235,7 +3235,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3282,7 +3282,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "putBucketIntelligentTieringConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3325,7 +3325,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "putBucketInventoryConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3388,7 +3388,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3444,7 +3444,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3497,7 +3497,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "putBucketMetricsConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3537,7 +3537,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "putBucketNotificationConfiguration") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3580,7 +3580,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3623,7 +3623,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3666,7 +3666,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3709,7 +3709,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3783,7 +3783,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3828,7 +3828,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3913,7 +3913,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -3966,7 +3966,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "putObject") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -4072,7 +4072,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -4111,7 +4111,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -4156,7 +4156,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -4195,7 +4195,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -4273,7 +4273,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -4320,7 +4320,7 @@ extension S3Client: S3ClientProtocol { operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) operation.buildStep.intercept(position: .before, middleware: ClientRuntime.ContentMD5Middleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -4447,7 +4447,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "restoreObject") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -4509,7 +4509,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "selectObjectContent") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -4581,7 +4581,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "uploadPart") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -4672,7 +4672,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "uploadPartCopy") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -4707,7 +4707,7 @@ extension S3Client: S3ClientProtocol { var operation = ClientRuntime.OperationStack(id: "writeGetObjectResponse") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware(hostPrefix: "\(input.requestRoute!).")) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false, useObjectLambdaEndpoint: true) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false, useObjectLambdaEndpoint: true) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) diff --git a/Sources/Services/AWSS3/S3ClientProtocol.swift b/Sources/Services/AWSS3/S3ClientProtocol.swift index e077e4cefb4..39ea969c12e 100644 --- a/Sources/Services/AWSS3/S3ClientProtocol.swift +++ b/Sources/Services/AWSS3/S3ClientProtocol.swift @@ -67,7 +67,7 @@ public protocol S3ClientProtocol { /// /// * [ListMultipartUploads](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html) func completeMultipartUpload(input: CompleteMultipartUploadInput) async throws -> CompleteMultipartUploadOutputResponse - /// Creates a copy of an object that is already stored in Amazon S3. You can store individual objects of up to 5 TB in Amazon S3. You create a copy of your object up to 5 GB in size in a single atomic action using this API. However, to copy an object greater than 5 GB, you must use the multipart upload Upload Part - Copy (UploadPartCopy) API. For more information, see [Copy Object Using the REST Multipart Upload API](https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html). All copy requests must be authenticated. Additionally, you must have read access to the source object and write access to the destination bucket. For more information, see [REST Authentication](https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html). Both the Region that you want to copy the object from and the Region that you want to copy the object to must be enabled for your account. A copy request might return an error when Amazon S3 receives the copy request or while Amazon S3 is copying the files. If the error occurs before the copy action starts, you receive a standard Amazon S3 error. If the error occurs during the copy operation, the error response is embedded in the 200 OK response. This means that a 200 OK response can contain either a success or an error. If you call the S3 API directly, make sure to design your application to parse the contents of the response and handle it appropriately. If you use Amazon Web Services SDKs, SDKs handle this condition. The SDKs detect the embedded error and apply error handling per your configuration settings (including automatically retrying the request as appropriate). If the condition persists, the SDKs throws an exception (or, for the SDKs that don't use exceptions, they return the error). If the copy is successful, you receive a response with information about the copied object. If the request is an HTTP 1.1 request, the response is chunk encoded. If it were not, it would not contain the content-length, and you would need to read the entire body. The copy request charge is based on the storage class and Region that you specify for the destination object. For pricing information, see [Amazon S3 pricing](http://aws.amazon.com/s3/pricing/). Amazon S3 transfer acceleration does not support cross-Region copies. If you request a cross-Region copy using a transfer acceleration endpoint, you get a 400 Bad Request error. For more information, see [Transfer Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html). Metadata When copying an object, you can preserve all metadata (the default) or specify new metadata. However, the access control list (ACL) is not preserved and is set to private for the user making the request. To override the default ACL setting, specify a new ACL when generating a copy request. For more information, see [Using ACLs](https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html). To specify whether you want the object metadata copied from the source object or replaced with metadata provided in the request, you can optionally add the x-amz-metadata-directive header. When you grant permissions, you can use the s3:x-amz-metadata-directive condition key to enforce certain metadata behavior when objects are uploaded. For more information, see [Specifying Conditions in a Policy](https://docs.aws.amazon.com/AmazonS3/latest/dev/amazon-s3-policy-keys.html) in the Amazon S3 User Guide. For a complete list of Amazon S3-specific condition keys, see [Actions, Resources, and Condition Keys for Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/list_amazons3.html). x-amz-website-redirect-location is unique to each object and must be specified in the request headers to copy the value. x-amz-copy-source-if Headers To only copy an object under certain conditions, such as whether the Etag matches or whether the object was modified before or after a specified date, use the following request parameters: + /// Creates a copy of an object that is already stored in Amazon S3. You can store individual objects of up to 5 TB in Amazon S3. You create a copy of your object up to 5 GB in size in a single atomic action using this API. However, to copy an object greater than 5 GB, you must use the multipart upload Upload Part - Copy (UploadPartCopy) API. For more information, see [Copy Object Using the REST Multipart Upload API](https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html). All copy requests must be authenticated. Additionally, you must have read access to the source object and write access to the destination bucket. For more information, see [REST Authentication](https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html). Both the Region that you want to copy the object from and the Region that you want to copy the object to must be enabled for your account. A copy request might return an error when Amazon S3 receives the copy request or while Amazon S3 is copying the files. If the error occurs before the copy action starts, you receive a standard Amazon S3 error. If the error occurs during the copy operation, the error response is embedded in the 200 OK response. This means that a 200 OK response can contain either a success or an error. If you call the S3 API directly, make sure to design your application to parse the contents of the response and handle it appropriately. If you use Amazon Web Services SDKs, SDKs handle this condition. The SDKs detect the embedded error and apply error handling per your configuration settings (including automatically retrying the request as appropriate). If the condition persists, the SDKs throws an exception (or, for the SDKs that don't use exceptions, they return the error). If the copy is successful, you receive a response with information about the copied object. If the request is an HTTP 1.1 request, the response is chunk encoded. If it were not, it would not contain the content-length, and you would need to read the entire body. The copy request charge is based on the storage class and Region that you specify for the destination object. The request can also result in a data retrieval charge for the source if the source storage class bills for data retrieval. For pricing information, see [Amazon S3 pricing](http://aws.amazon.com/s3/pricing/). Amazon S3 transfer acceleration does not support cross-Region copies. If you request a cross-Region copy using a transfer acceleration endpoint, you get a 400 Bad Request error. For more information, see [Transfer Acceleration](https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html). Metadata When copying an object, you can preserve all metadata (the default) or specify new metadata. However, the access control list (ACL) is not preserved and is set to private for the user making the request. To override the default ACL setting, specify a new ACL when generating a copy request. For more information, see [Using ACLs](https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html). To specify whether you want the object metadata copied from the source object or replaced with metadata provided in the request, you can optionally add the x-amz-metadata-directive header. When you grant permissions, you can use the s3:x-amz-metadata-directive condition key to enforce certain metadata behavior when objects are uploaded. For more information, see [Specifying Conditions in a Policy](https://docs.aws.amazon.com/AmazonS3/latest/dev/amazon-s3-policy-keys.html) in the Amazon S3 User Guide. For a complete list of Amazon S3-specific condition keys, see [Actions, Resources, and Condition Keys for Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/list_amazons3.html). x-amz-website-redirect-location is unique to each object and must be specified in the request headers to copy the value. x-amz-copy-source-if Headers To only copy an object under certain conditions, such as whether the Etag matches or whether the object was modified before or after a specified date, use the following request parameters: /// /// * x-amz-copy-source-if-match /// diff --git a/Sources/Services/AWSS3/models/Models.swift b/Sources/Services/AWSS3/models/Models.swift index fa02479b970..563be4b46c1 100644 --- a/Sources/Services/AWSS3/models/Models.swift +++ b/Sources/Services/AWSS3/models/Models.swift @@ -1029,6 +1029,7 @@ extension S3ClientTypes { case apNortheast2 case apNortheast3 case apSouth1 + case apSouth2 case apSoutheast1 case apSoutheast2 case apSoutheast3 @@ -1038,6 +1039,7 @@ extension S3ClientTypes { case euCentral1 case euNorth1 case euSouth1 + case euSouth2 case euWest1 case euWest2 case euWest3 @@ -1059,6 +1061,7 @@ extension S3ClientTypes { .apNortheast2, .apNortheast3, .apSouth1, + .apSouth2, .apSoutheast1, .apSoutheast2, .apSoutheast3, @@ -1068,6 +1071,7 @@ extension S3ClientTypes { .euCentral1, .euNorth1, .euSouth1, + .euSouth2, .euWest1, .euWest2, .euWest3, @@ -1094,6 +1098,7 @@ extension S3ClientTypes { case .apNortheast2: return "ap-northeast-2" case .apNortheast3: return "ap-northeast-3" case .apSouth1: return "ap-south-1" + case .apSouth2: return "ap-south-2" case .apSoutheast1: return "ap-southeast-1" case .apSoutheast2: return "ap-southeast-2" case .apSoutheast3: return "ap-southeast-3" @@ -1103,6 +1108,7 @@ extension S3ClientTypes { case .euCentral1: return "eu-central-1" case .euNorth1: return "eu-north-1" case .euSouth1: return "eu-south-1" + case .euSouth2: return "eu-south-2" case .euWest1: return "eu-west-1" case .euWest2: return "eu-west-2" case .euWest3: return "eu-west-3" @@ -10683,7 +10689,7 @@ extension GetObjectInput { var operation = ClientRuntime.OperationStack(id: "getObject") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.endpointResolver, endpointParams: endpointParams)) operation.serializeStep.intercept(position: .after, middleware: GetObjectInputGETQueryItemMiddleware()) operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) @@ -10728,7 +10734,7 @@ extension GetObjectInput { var operation = ClientRuntime.OperationStack(id: "getObject") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -13914,9 +13920,11 @@ extension S3ClientTypes { case intelligenttieringaccesstier case ismultipartuploaded case lastmodifieddate + case objectaccesscontrollist case objectlocklegalholdstatus case objectlockmode case objectlockretainuntildate + case objectowner case replicationstatus case size case storageclass @@ -13931,9 +13939,11 @@ extension S3ClientTypes { .intelligenttieringaccesstier, .ismultipartuploaded, .lastmodifieddate, + .objectaccesscontrollist, .objectlocklegalholdstatus, .objectlockmode, .objectlockretainuntildate, + .objectowner, .replicationstatus, .size, .storageclass, @@ -13953,9 +13963,11 @@ extension S3ClientTypes { case .intelligenttieringaccesstier: return "IntelligentTieringAccessTier" case .ismultipartuploaded: return "IsMultipartUploaded" case .lastmodifieddate: return "LastModifiedDate" + case .objectaccesscontrollist: return "ObjectAccessControlList" case .objectlocklegalholdstatus: return "ObjectLockLegalHoldStatus" case .objectlockmode: return "ObjectLockMode" case .objectlockretainuntildate: return "ObjectLockRetainUntilDate" + case .objectowner: return "ObjectOwner" case .replicationstatus: return "ReplicationStatus" case .size: return "Size" case .storageclass: return "StorageClass" @@ -23603,7 +23615,7 @@ extension PutObjectInput { var operation = ClientRuntime.OperationStack(id: "putObject") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.endpointResolver, endpointParams: endpointParams)) operation.serializeStep.intercept(position: .after, middleware: PutObjectInputBodyMiddleware()) operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) @@ -23648,7 +23660,7 @@ extension PutObjectInput { var operation = ClientRuntime.OperationStack(id: "putObject") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) @@ -29129,7 +29141,7 @@ extension UploadPartInput { var operation = ClientRuntime.OperationStack(id: "uploadPart") operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLPathMiddleware()) operation.initializeStep.intercept(position: .after, middleware: ClientRuntime.URLHostMiddleware()) - let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) + let endpointParams = EndpointParams(accelerate: config.serviceSpecific.accelerate ?? false, bucket: input.bucket, disableMultiRegionAccessPoints: config.serviceSpecific.disableMultiRegionAccessPoints ?? false, endpoint: config.endpoint, forcePathStyle: config.serviceSpecific.forcePathStyle ?? false, region: config.region, useArnRegion: config.serviceSpecific.useArnRegion, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false, useGlobalEndpoint: config.serviceSpecific.useGlobalEndpoint ?? false) operation.buildStep.intercept(position: .before, middleware: EndpointResolverMiddleware(endpointResolver: config.serviceSpecific.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))) diff --git a/Sources/Services/AWSSQS/SQSClient.swift b/Sources/Services/AWSSQS/SQSClient.swift index 2ab3a290183..4270f8f8886 100644 --- a/Sources/Services/AWSSQS/SQSClient.swift +++ b/Sources/Services/AWSSQS/SQSClient.swift @@ -110,11 +110,13 @@ extension SQSClient: SQSClientProtocol { return result } - /// Cancels a specified message movement task. + /// Cancels a specified message movement task. A message movement can only be cancelled when the current status is RUNNING. Cancelling a message movement task does not revert the messages that have already been moved. It can only stop the messages that have not been moved yet. /// - /// * A message movement can only be cancelled when the current status is RUNNING. + /// * This action is currently limited to supporting message redrive from [dead-letter queues (DLQs)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) only. In this context, the source queue is the dead-letter queue (DLQ), while the destination queue can be the original source queue (from which the messages were driven to the dead-letter-queue), or a custom destination queue. /// - /// * Cancelling a message movement task does not revert the messages that have already been moved. It can only stop the messages that have not been moved yet. + /// * Currently, only standard queues are supported. + /// + /// * Only one active message movement task is supported per queue at any given time. public func cancelMessageMoveTask(input: CancelMessageMoveTaskInput) async throws -> CancelMessageMoveTaskOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -500,6 +502,12 @@ extension SQSClient: SQSClientProtocol { } /// Gets the most recent message movement tasks (up to 10) under a specific source queue. + /// + /// * This action is currently limited to supporting message redrive from [dead-letter queues (DLQs)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) only. In this context, the source queue is the dead-letter queue (DLQ), while the destination queue can be the original source queue (from which the messages were driven to the dead-letter-queue), or a custom destination queue. + /// + /// * Currently, only standard queues are supported. + /// + /// * Only one active message movement task is supported per queue at any given time. public func listMessageMoveTasks(input: ListMessageMoveTasksInput) async throws -> ListMessageMoveTasksOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -607,7 +615,7 @@ extension SQSClient: SQSClientProtocol { return result } - /// Deletes the messages in a queue specified by the QueueURL parameter. When you use the PurgeQueue action, you can't retrieve any messages deleted from a queue. The message deletion process takes up to 60 seconds. We recommend waiting for 60 seconds regardless of your queue's size. Messages sent to the queue before you call PurgeQueue might be received but are deleted within the next minute. Messages sent to the queue after you call PurgeQueue might be deleted while the queue is being purged. + /// Deletes available messages in a queue (including in-flight messages) specified by the QueueURL parameter. When you use the PurgeQueue action, you can't retrieve any messages deleted from a queue. The message deletion process takes up to 60 seconds. We recommend waiting for 60 seconds regardless of your queue's size. Messages sent to the queue before you call PurgeQueue might be received but are deleted within the next minute. Messages sent to the queue after you call PurgeQueue might be deleted while the queue is being purged. public func purgeQueue(input: PurgeQueueInput) async throws -> PurgeQueueOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -852,9 +860,11 @@ extension SQSClient: SQSClientProtocol { /// Starts an asynchronous task to move messages from a specified source queue to a specified destination queue. /// - /// * This action is currently limited to supporting message redrive from dead-letter queues (DLQs) only. In this context, the source queue is the dead-letter queue (DLQ), while the destination queue can be the original source queue (from which the messages were driven to the dead-letter-queue), or a custom destination queue. + /// * This action is currently limited to supporting message redrive from queues that are configured as [dead-letter queues (DLQs)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) of other Amazon SQS queues only. Non-SQS queue sources of dead-letter queues, such as Lambda or Amazon SNS topics, are currently not supported. /// - /// * Currently, only standard queues are supported. + /// * In dead-letter queues redrive context, the StartMessageMoveTask the source queue is the DLQ, while the destination queue can be the original source queue (from which the messages were driven to the dead-letter-queue), or a custom destination queue. + /// + /// * Currently, only standard queues support redrive. FIFO queues don't support redrive. /// /// * Only one active message movement task is supported per queue at any given time. public func startMessageMoveTask(input: StartMessageMoveTaskInput) async throws -> StartMessageMoveTaskOutputResponse diff --git a/Sources/Services/AWSSQS/SQSClientProtocol.swift b/Sources/Services/AWSSQS/SQSClientProtocol.swift index c2fa916c74c..155d7329da8 100644 --- a/Sources/Services/AWSSQS/SQSClientProtocol.swift +++ b/Sources/Services/AWSSQS/SQSClientProtocol.swift @@ -45,11 +45,13 @@ public protocol SQSClientProtocol { /// /// Cross-account permissions don't apply to this action. For more information, see [Grant cross-account permissions to a role and a username](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-customer-managed-policy-examples.html#grant-cross-account-permissions-to-role-and-user-name) in the Amazon SQS Developer Guide. func addPermission(input: AddPermissionInput) async throws -> AddPermissionOutputResponse - /// Cancels a specified message movement task. + /// Cancels a specified message movement task. A message movement can only be cancelled when the current status is RUNNING. Cancelling a message movement task does not revert the messages that have already been moved. It can only stop the messages that have not been moved yet. /// - /// * A message movement can only be cancelled when the current status is RUNNING. + /// * This action is currently limited to supporting message redrive from [dead-letter queues (DLQs)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) only. In this context, the source queue is the dead-letter queue (DLQ), while the destination queue can be the original source queue (from which the messages were driven to the dead-letter-queue), or a custom destination queue. /// - /// * Cancelling a message movement task does not revert the messages that have already been moved. It can only stop the messages that have not been moved yet. + /// * Currently, only standard queues are supported. + /// + /// * Only one active message movement task is supported per queue at any given time. func cancelMessageMoveTask(input: CancelMessageMoveTaskInput) async throws -> CancelMessageMoveTaskOutputResponse /// Changes the visibility timeout of a specified message in a queue to a new value. The default visibility timeout for a message is 30 seconds. The minimum is 0 seconds. The maximum is 12 hours. For more information, see [Visibility Timeout](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html) in the Amazon SQS Developer Guide. For example, if the default timeout for a queue is 60 seconds, 15 seconds have elapsed since you received the message, and you send a ChangeMessageVisibility call with VisibilityTimeout set to 10 seconds, the 10 seconds begin to count from the time that you make the ChangeMessageVisibility call. Thus, any attempt to change the visibility timeout or to delete that message 10 seconds after you initially change the visibility timeout (a total of 25 seconds) might result in an error. An Amazon SQS message has three basic states: /// @@ -95,12 +97,18 @@ public protocol SQSClientProtocol { /// Returns a list of your queues that have the RedrivePolicy queue attribute configured with a dead-letter queue. The ListDeadLetterSourceQueues methods supports pagination. Set parameter MaxResults in the request to specify the maximum number of results to be returned in the response. If you do not set MaxResults, the response includes a maximum of 1,000 results. If you set MaxResults and there are additional results to display, the response includes a value for NextToken. Use NextToken as a parameter in your next request to ListDeadLetterSourceQueues to receive the next page of results. For more information about using dead-letter queues, see [Using Amazon SQS Dead-Letter Queues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) in the Amazon SQS Developer Guide. func listDeadLetterSourceQueues(input: ListDeadLetterSourceQueuesInput) async throws -> ListDeadLetterSourceQueuesOutputResponse /// Gets the most recent message movement tasks (up to 10) under a specific source queue. + /// + /// * This action is currently limited to supporting message redrive from [dead-letter queues (DLQs)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) only. In this context, the source queue is the dead-letter queue (DLQ), while the destination queue can be the original source queue (from which the messages were driven to the dead-letter-queue), or a custom destination queue. + /// + /// * Currently, only standard queues are supported. + /// + /// * Only one active message movement task is supported per queue at any given time. func listMessageMoveTasks(input: ListMessageMoveTasksInput) async throws -> ListMessageMoveTasksOutputResponse /// Returns a list of your queues in the current region. The response includes a maximum of 1,000 results. If you specify a value for the optional QueueNamePrefix parameter, only queues with a name that begins with the specified value are returned. The listQueues methods supports pagination. Set parameter MaxResults in the request to specify the maximum number of results to be returned in the response. If you do not set MaxResults, the response includes a maximum of 1,000 results. If you set MaxResults and there are additional results to display, the response includes a value for NextToken. Use NextToken as a parameter in your next request to listQueues to receive the next page of results. Cross-account permissions don't apply to this action. For more information, see [Grant cross-account permissions to a role and a username](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-customer-managed-policy-examples.html#grant-cross-account-permissions-to-role-and-user-name) in the Amazon SQS Developer Guide. func listQueues(input: ListQueuesInput) async throws -> ListQueuesOutputResponse /// List all cost allocation tags added to the specified Amazon SQS queue. For an overview, see [Tagging Your Amazon SQS Queues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-tags.html) in the Amazon SQS Developer Guide. Cross-account permissions don't apply to this action. For more information, see [Grant cross-account permissions to a role and a username](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-customer-managed-policy-examples.html#grant-cross-account-permissions-to-role-and-user-name) in the Amazon SQS Developer Guide. func listQueueTags(input: ListQueueTagsInput) async throws -> ListQueueTagsOutputResponse - /// Deletes the messages in a queue specified by the QueueURL parameter. When you use the PurgeQueue action, you can't retrieve any messages deleted from a queue. The message deletion process takes up to 60 seconds. We recommend waiting for 60 seconds regardless of your queue's size. Messages sent to the queue before you call PurgeQueue might be received but are deleted within the next minute. Messages sent to the queue after you call PurgeQueue might be deleted while the queue is being purged. + /// Deletes available messages in a queue (including in-flight messages) specified by the QueueURL parameter. When you use the PurgeQueue action, you can't retrieve any messages deleted from a queue. The message deletion process takes up to 60 seconds. We recommend waiting for 60 seconds regardless of your queue's size. Messages sent to the queue before you call PurgeQueue might be received but are deleted within the next minute. Messages sent to the queue after you call PurgeQueue might be deleted while the queue is being purged. func purgeQueue(input: PurgeQueueInput) async throws -> PurgeQueueOutputResponse /// Retrieves one or more messages (up to 10), from the specified queue. Using the WaitTimeSeconds parameter enables long-poll support. For more information, see [Amazon SQS Long Polling](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html) in the Amazon SQS Developer Guide. Short poll is the default behavior where a weighted random set of machines is sampled on a ReceiveMessage call. Thus, only the messages on the sampled machines are returned. If the number of messages in the queue is small (fewer than 1,000), you most likely get fewer messages than you requested per ReceiveMessage call. If the number of messages in the queue is extremely small, you might not receive any messages in a particular ReceiveMessage response. If this happens, repeat the request. For each message returned, the response includes the following: /// @@ -141,9 +149,11 @@ public protocol SQSClientProtocol { func setQueueAttributes(input: SetQueueAttributesInput) async throws -> SetQueueAttributesOutputResponse /// Starts an asynchronous task to move messages from a specified source queue to a specified destination queue. /// - /// * This action is currently limited to supporting message redrive from dead-letter queues (DLQs) only. In this context, the source queue is the dead-letter queue (DLQ), while the destination queue can be the original source queue (from which the messages were driven to the dead-letter-queue), or a custom destination queue. + /// * This action is currently limited to supporting message redrive from queues that are configured as [dead-letter queues (DLQs)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) of other Amazon SQS queues only. Non-SQS queue sources of dead-letter queues, such as Lambda or Amazon SNS topics, are currently not supported. /// - /// * Currently, only standard queues are supported. + /// * In dead-letter queues redrive context, the StartMessageMoveTask the source queue is the DLQ, while the destination queue can be the original source queue (from which the messages were driven to the dead-letter-queue), or a custom destination queue. + /// + /// * Currently, only standard queues support redrive. FIFO queues don't support redrive. /// /// * Only one active message movement task is supported per queue at any given time. func startMessageMoveTask(input: StartMessageMoveTaskInput) async throws -> StartMessageMoveTaskOutputResponse diff --git a/Sources/Services/AWSSQS/models/Models.swift b/Sources/Services/AWSSQS/models/Models.swift index 48861b81be9..4cca9676393 100644 --- a/Sources/Services/AWSSQS/models/Models.swift +++ b/Sources/Services/AWSSQS/models/Models.swift @@ -4717,7 +4717,7 @@ public struct StartMessageMoveTaskInput: Swift.Equatable { public var destinationArn: Swift.String? /// The number of messages to be moved per second (the message movement rate). You can use this field to define a fixed message movement rate. The maximum value for messages per second is 500. If this field is left blank, the system will optimize the rate based on the queue message backlog size, which may vary throughout the duration of the message movement task. public var maxNumberOfMessagesPerSecond: Swift.Int? - /// The ARN of the queue that contains the messages to be moved to another queue. Currently, only dead-letter queue (DLQ) ARNs are accepted. + /// The ARN of the queue that contains the messages to be moved to another queue. Currently, only ARNs of dead-letter queues (DLQs) whose sources are other Amazon SQS queues are accepted. DLQs whose sources are non-SQS queues, such as Lambda or Amazon SNS topics, are not currently supported. /// This member is required. public var sourceArn: Swift.String? diff --git a/Sources/Services/AWSSTS/models/Models.swift b/Sources/Services/AWSSTS/models/Models.swift index ab268b5fb43..557efe8b9aa 100644 --- a/Sources/Services/AWSSTS/models/Models.swift +++ b/Sources/Services/AWSSTS/models/Models.swift @@ -27,6 +27,18 @@ extension AssumeRoleInput: Swift.Encodable { try policyArnsContainer.encode("", forKey: ClientRuntime.Key("")) } } + if let providedContexts = providedContexts { + if !providedContexts.isEmpty { + var providedContextsContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("ProvidedContexts")) + for (index0, providedcontext0) in providedContexts.enumerated() { + try providedContextsContainer.encode(providedcontext0, forKey: ClientRuntime.Key("member.\(index0.advanced(by: 1))")) + } + } + else { + var providedContextsContainer = container.nestedContainer(keyedBy: ClientRuntime.Key.self, forKey: ClientRuntime.Key("ProvidedContexts")) + try providedContextsContainer.encode("", forKey: ClientRuntime.Key("")) + } + } if let roleArn = roleArn { try container.encode(roleArn, forKey: ClientRuntime.Key("RoleArn")) } @@ -86,6 +98,8 @@ public struct AssumeRoleInput: Swift.Equatable { public var policy: Swift.String? /// The Amazon Resource Names (ARNs) of the IAM managed policies that you want to use as managed session policies. The policies must exist in the same account as the role. This parameter is optional. You can provide up to 10 managed policy ARNs. However, the plaintext that you use for both inline and managed session policies can't exceed 2,048 characters. For more information about ARNs, see [Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference. An Amazon Web Services conversion compresses the passed inline session policy, managed policy ARNs, and session tags into a packed binary format that has a separate limit. Your request can fail for this limit even if your plaintext meets the other requirements. The PackedPolicySize response element indicates by percentage how close the policies and tags for your request are to the upper size limit. Passing policies to this operation returns new temporary credentials. The resulting session's permissions are the intersection of the role's identity-based policy and the session policies. You can use the role's temporary credentials in subsequent Amazon Web Services API calls to access resources in the account that owns the role. You cannot use session policies to grant more permissions than those allowed by the identity-based policy of the role that is being assumed. For more information, see [Session Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) in the IAM User Guide. public var policyArns: [STSClientTypes.PolicyDescriptorType]? + /// Reserved for future use. + public var providedContexts: [STSClientTypes.ProvidedContext]? /// The Amazon Resource Name (ARN) of the role to assume. /// This member is required. public var roleArn: Swift.String? @@ -108,6 +122,7 @@ public struct AssumeRoleInput: Swift.Equatable { externalId: Swift.String? = nil, policy: Swift.String? = nil, policyArns: [STSClientTypes.PolicyDescriptorType]? = nil, + providedContexts: [STSClientTypes.ProvidedContext]? = nil, roleArn: Swift.String? = nil, roleSessionName: Swift.String? = nil, serialNumber: Swift.String? = nil, @@ -121,6 +136,7 @@ public struct AssumeRoleInput: Swift.Equatable { self.externalId = externalId self.policy = policy self.policyArns = policyArns + self.providedContexts = providedContexts self.roleArn = roleArn self.roleSessionName = roleSessionName self.serialNumber = serialNumber @@ -143,6 +159,7 @@ struct AssumeRoleInputBody: Swift.Equatable { let serialNumber: Swift.String? let tokenCode: Swift.String? let sourceIdentity: Swift.String? + let providedContexts: [STSClientTypes.ProvidedContext]? } extension AssumeRoleInputBody: Swift.Decodable { @@ -151,6 +168,7 @@ extension AssumeRoleInputBody: Swift.Decodable { case externalId = "ExternalId" case policy = "Policy" case policyArns = "PolicyArns" + case providedContexts = "ProvidedContexts" case roleArn = "RoleArn" case roleSessionName = "RoleSessionName" case serialNumber = "SerialNumber" @@ -235,6 +253,25 @@ extension AssumeRoleInputBody: Swift.Decodable { tokenCode = tokenCodeDecoded let sourceIdentityDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sourceIdentity) sourceIdentity = sourceIdentityDecoded + if containerValues.contains(.providedContexts) { + struct KeyVal0{struct member{}} + let providedContextsWrappedContainer = containerValues.nestedContainerNonThrowable(keyedBy: CollectionMemberCodingKey.CodingKeys.self, forKey: .providedContexts) + if let providedContextsWrappedContainer = providedContextsWrappedContainer { + let providedContextsContainer = try providedContextsWrappedContainer.decodeIfPresent([STSClientTypes.ProvidedContext].self, forKey: .member) + var providedContextsBuffer:[STSClientTypes.ProvidedContext]? = nil + if let providedContextsContainer = providedContextsContainer { + providedContextsBuffer = [STSClientTypes.ProvidedContext]() + for structureContainer0 in providedContextsContainer { + providedContextsBuffer?.append(structureContainer0) + } + } + providedContexts = providedContextsBuffer + } else { + providedContexts = [] + } + } else { + providedContexts = nil + } } } @@ -667,7 +704,7 @@ public struct AssumeRoleWithWebIdentityInput: Swift.Equatable { /// An identifier for the assumed role session. Typically, you pass the name or identifier that is associated with the user who is using your application. That way, the temporary security credentials that your application will use are associated with that user. This session name is included as part of the ARN and assumed role ID in the AssumedRoleUser response element. The regex used to validate this parameter is a string of characters consisting of upper- and lower-case alphanumeric characters with no spaces. You can also include underscores or any of the following characters: =,.@- /// This member is required. public var roleSessionName: Swift.String? - /// The OAuth 2.0 access token or OpenID Connect ID token that is provided by the identity provider. Your application must get this token by authenticating the user who is using your application with a web identity provider before the application makes an AssumeRoleWithWebIdentity call. + /// The OAuth 2.0 access token or OpenID Connect ID token that is provided by the identity provider. Your application must get this token by authenticating the user who is using your application with a web identity provider before the application makes an AssumeRoleWithWebIdentity call. Only tokens with RSA algorithms (RS256) are supported. /// This member is required. public var webIdentityToken: Swift.String? @@ -2109,6 +2146,51 @@ extension STSClientTypes { } +extension STSClientTypes.ProvidedContext: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case contextAssertion = "ContextAssertion" + case providerArn = "ProviderArn" + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: ClientRuntime.Key.self) + if let contextAssertion = contextAssertion { + try container.encode(contextAssertion, forKey: ClientRuntime.Key("ContextAssertion")) + } + if let providerArn = providerArn { + try container.encode(providerArn, forKey: ClientRuntime.Key("ProviderArn")) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let providerArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .providerArn) + providerArn = providerArnDecoded + let contextAssertionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .contextAssertion) + contextAssertion = contextAssertionDecoded + } +} + +extension STSClientTypes { + /// Reserved for future use. + public struct ProvidedContext: Swift.Equatable { + /// Reserved for future use. + public var contextAssertion: Swift.String? + /// Reserved for future use. + public var providerArn: Swift.String? + + public init( + contextAssertion: Swift.String? = nil, + providerArn: Swift.String? = nil + ) + { + self.contextAssertion = contextAssertion + self.providerArn = providerArn + } + } + +} + extension RegionDisabledException { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { diff --git a/Sources/Services/AWSSageMaker/EndpointResolver.swift b/Sources/Services/AWSSageMaker/EndpointResolver.swift index 6f6734a2c43..57014fbb2d7 100644 --- a/Sources/Services/AWSSageMaker/EndpointResolver.swift +++ b/Sources/Services/AWSSageMaker/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://api.sagemaker-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\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://api-fips.sagemaker.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://api-fips.sagemaker.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://api.sagemaker-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://api.sagemaker.{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://api.sagemaker.{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\":[{\"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\":[{\"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\":[],\"endpoint\":{\"url\":\"https://api.sagemaker-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\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://api-fips.sagemaker.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[{\"fn\":\"stringEquals\",\"argv\":[\"aws-us-gov\",{\"fn\":\"getAttr\",\"argv\":[{\"ref\":\"PartitionResult\"},\"name\"]}]}],\"endpoint\":{\"url\":\"https://api-fips.sagemaker.{Region}.amazonaws.com\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"},{\"conditions\":[],\"endpoint\":{\"url\":\"https://api.sagemaker-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\":[],\"endpoint\":{\"url\":\"https://api.sagemaker.{Region}.{PartitionResult#dualStackDnsSuffix}\",\"properties\":{},\"headers\":{}},\"type\":\"endpoint\"}]},{\"conditions\":[],\"error\":\"DualStack is enabled but this partition does not support DualStack\",\"type\":\"error\"}]},{\"conditions\":[],\"endpoint\":{\"url\":\"https://api.sagemaker.{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/AWSSageMaker/Paginators.swift b/Sources/Services/AWSSageMaker/Paginators.swift index 94cf6185f0a..1f8f1c4ef1e 100644 --- a/Sources/Services/AWSSageMaker/Paginators.swift +++ b/Sources/Services/AWSSageMaker/Paginators.swift @@ -1939,6 +1939,41 @@ extension ListProjectsInput: ClientRuntime.PaginateToken { sortOrder: self.sortOrder )} } +extension SageMakerClient { + /// Paginate over `[ListResourceCatalogsOutputResponse]` 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 `[ListResourceCatalogsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListResourceCatalogsOutputResponse` + public func listResourceCatalogsPaginated(input: ListResourceCatalogsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListResourceCatalogsInput.nextToken, outputKey: \ListResourceCatalogsOutputResponse.nextToken, paginationFunction: self.listResourceCatalogs(input:)) + } +} + +extension ListResourceCatalogsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListResourceCatalogsInput { + return ListResourceCatalogsInput( + creationTimeAfter: self.creationTimeAfter, + creationTimeBefore: self.creationTimeBefore, + maxResults: self.maxResults, + nameContains: self.nameContains, + nextToken: token, + sortBy: self.sortBy, + sortOrder: self.sortOrder + )} +} + +extension PaginatorSequence where Input == ListResourceCatalogsInput, Output == ListResourceCatalogsOutputResponse { + /// This paginator transforms the `AsyncSequence` returned by `listResourceCatalogsPaginated` + /// to access the nested member `[SageMakerClientTypes.ResourceCatalog]` + /// - Returns: `[SageMakerClientTypes.ResourceCatalog]` + public func resourceCatalogs() async throws -> [SageMakerClientTypes.ResourceCatalog] { + return try await self.asyncCompactMap { item in item.resourceCatalogs } + } +} extension SageMakerClient { /// Paginate over `[ListSpacesOutputResponse]` results. /// @@ -2433,6 +2468,7 @@ extension SageMakerClient { extension SearchInput: ClientRuntime.PaginateToken { public func usingPaginationToken(_ token: Swift.String) -> SearchInput { return SearchInput( + crossAccountFilterOption: self.crossAccountFilterOption, maxResults: self.maxResults, nextToken: token, resource: self.resource, diff --git a/Sources/Services/AWSSageMaker/SageMakerClient.swift b/Sources/Services/AWSSageMaker/SageMakerClient.swift index c7ff2123532..3126bd410b1 100644 --- a/Sources/Services/AWSSageMaker/SageMakerClient.swift +++ b/Sources/Services/AWSSageMaker/SageMakerClient.swift @@ -6432,6 +6432,43 @@ extension SageMakerClient: SageMakerClientProtocol { return result } + /// Starts an Amazon SageMaker Inference Recommender autoscaling recommendation job. Returns recommendations for autoscaling policies that you can apply to your SageMaker endpoint. + public func getScalingConfigurationRecommendation(input: GetScalingConfigurationRecommendationInput) async throws -> GetScalingConfigurationRecommendationOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "getScalingConfigurationRecommendation") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "sagemaker") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "getScalingConfigurationRecommendation") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "SageMaker.GetScalingConfigurationRecommendation")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "GetScalingConfigurationRecommendationRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// An auto-complete API for the search functionality in the SageMaker console. It returns suggestions of possible matches for the property name to use in Search queries. Provides suggestions for HyperParameters, Tags, and Metrics. public func getSearchSuggestions(input: GetSearchSuggestionsInput) async throws -> GetSearchSuggestionsOutputResponse { @@ -8652,6 +8689,43 @@ extension SageMakerClient: SageMakerClientProtocol { return result } + /// Lists Amazon SageMaker Catalogs based on given filters and orders. The maximum number of ResourceCatalogs viewable is 1000. + public func listResourceCatalogs(input: ListResourceCatalogsInput) async throws -> ListResourceCatalogsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listResourceCatalogs") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "sagemaker") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listResourceCatalogs") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "SageMaker.ListResourceCatalogs")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "ListResourceCatalogsRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Lists spaces. public func listSpaces(input: ListSpacesInput) async throws -> ListSpacesOutputResponse { @@ -10585,7 +10659,7 @@ extension SageMakerClient: SageMakerClientProtocol { return result } - /// Updates the feature group. + /// Updates the feature group by either adding features or updating the online store configuration. Use one of the following request parameters at a time while using the UpdateFeatureGroup API. You can add features for your feature group using the FeatureAdditions request parameter. Features cannot be removed from a feature group. You can update the online store configuration by using the OnlineStoreConfig request parameter. If a TtlDuration is specified, the default TtlDuration applies for all records added to the feature group after the feature group is updated. If a record level TtlDuration exists from using the PutRecord API, the record level TtlDuration applies to that record instead of the default TtlDuration. public func updateFeatureGroup(input: UpdateFeatureGroupInput) async throws -> UpdateFeatureGroupOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSSageMaker/SageMakerClientProtocol.swift b/Sources/Services/AWSSageMaker/SageMakerClientProtocol.swift index 77724b8f998..254e8eba5e4 100644 --- a/Sources/Services/AWSSageMaker/SageMakerClientProtocol.swift +++ b/Sources/Services/AWSSageMaker/SageMakerClientProtocol.swift @@ -426,6 +426,8 @@ public protocol SageMakerClientProtocol { func getModelPackageGroupPolicy(input: GetModelPackageGroupPolicyInput) async throws -> GetModelPackageGroupPolicyOutputResponse /// Gets the status of Service Catalog in SageMaker. Service Catalog is used to create SageMaker projects. func getSagemakerServicecatalogPortfolioStatus(input: GetSagemakerServicecatalogPortfolioStatusInput) async throws -> GetSagemakerServicecatalogPortfolioStatusOutputResponse + /// Starts an Amazon SageMaker Inference Recommender autoscaling recommendation job. Returns recommendations for autoscaling policies that you can apply to your SageMaker endpoint. + func getScalingConfigurationRecommendation(input: GetScalingConfigurationRecommendationInput) async throws -> GetScalingConfigurationRecommendationOutputResponse /// An auto-complete API for the search functionality in the SageMaker console. It returns suggestions of possible matches for the property name to use in Search queries. Provides suggestions for HyperParameters, Tags, and Metrics. func getSearchSuggestions(input: GetSearchSuggestionsInput) async throws -> GetSearchSuggestionsOutputResponse /// Import hub content. Hub APIs are only callable through SageMaker Studio. @@ -546,6 +548,8 @@ public protocol SageMakerClientProtocol { func listProcessingJobs(input: ListProcessingJobsInput) async throws -> ListProcessingJobsOutputResponse /// Gets a list of the projects in an Amazon Web Services account. func listProjects(input: ListProjectsInput) async throws -> ListProjectsOutputResponse + /// Lists Amazon SageMaker Catalogs based on given filters and orders. The maximum number of ResourceCatalogs viewable is 1000. + func listResourceCatalogs(input: ListResourceCatalogsInput) async throws -> ListResourceCatalogsOutputResponse /// Lists spaces. func listSpaces(input: ListSpacesInput) async throws -> ListSpacesOutputResponse /// Lists devices allocated to the stage, containing detailed device information and deployment status. @@ -654,7 +658,7 @@ public protocol SageMakerClientProtocol { func updateEndpointWeightsAndCapacities(input: UpdateEndpointWeightsAndCapacitiesInput) async throws -> UpdateEndpointWeightsAndCapacitiesOutputResponse /// Adds, updates, or removes the description of an experiment. Updates the display name of an experiment. func updateExperiment(input: UpdateExperimentInput) async throws -> UpdateExperimentOutputResponse - /// Updates the feature group. + /// Updates the feature group by either adding features or updating the online store configuration. Use one of the following request parameters at a time while using the UpdateFeatureGroup API. You can add features for your feature group using the FeatureAdditions request parameter. Features cannot be removed from a feature group. You can update the online store configuration by using the OnlineStoreConfig request parameter. If a TtlDuration is specified, the default TtlDuration applies for all records added to the feature group after the feature group is updated. If a record level TtlDuration exists from using the PutRecord API, the record level TtlDuration applies to that record instead of the default TtlDuration. func updateFeatureGroup(input: UpdateFeatureGroupInput) async throws -> UpdateFeatureGroupOutputResponse /// Updates the description and parameters of the feature group. func updateFeatureMetadata(input: UpdateFeatureMetadataInput) async throws -> UpdateFeatureMetadataOutputResponse diff --git a/Sources/Services/AWSSageMaker/models/Models.swift b/Sources/Services/AWSSageMaker/models/Models.swift index 72188d02fab..8533e6f846f 100644 --- a/Sources/Services/AWSSageMaker/models/Models.swift +++ b/Sources/Services/AWSSageMaker/models/Models.swift @@ -6329,7 +6329,7 @@ extension SageMakerClientTypes { /// The dataset format for your batch transform job. /// This member is required. public var datasetFormat: SageMakerClientTypes.MonitoringDatasetFormat? - /// If specified, monitoring jobs substract this time from the end time. For information about using offsets for scheduling monitoring jobs, see [Schedule Model Quality Monitoring Jobs](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html). + /// If specified, monitoring jobs subtract this time from the end time. For information about using offsets for scheduling monitoring jobs, see [Schedule Model Quality Monitoring Jobs](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html). public var endTimeOffset: Swift.String? /// The attributes of the input data that are the input features. public var featuresAttribute: Swift.String? @@ -6943,6 +6943,7 @@ extension SageMakerClientTypes.CanvasAppSettings: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case modelRegisterSettings = "ModelRegisterSettings" case timeSeriesForecastingSettings = "TimeSeriesForecastingSettings" + case workspaceSettings = "WorkspaceSettings" } public func encode(to encoder: Swift.Encoder) throws { @@ -6953,6 +6954,9 @@ extension SageMakerClientTypes.CanvasAppSettings: Swift.Codable { if let timeSeriesForecastingSettings = self.timeSeriesForecastingSettings { try encodeContainer.encode(timeSeriesForecastingSettings, forKey: .timeSeriesForecastingSettings) } + if let workspaceSettings = self.workspaceSettings { + try encodeContainer.encode(workspaceSettings, forKey: .workspaceSettings) + } } public init(from decoder: Swift.Decoder) throws { @@ -6961,6 +6965,8 @@ extension SageMakerClientTypes.CanvasAppSettings: Swift.Codable { timeSeriesForecastingSettings = timeSeriesForecastingSettingsDecoded let modelRegisterSettingsDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.ModelRegisterSettings.self, forKey: .modelRegisterSettings) modelRegisterSettings = modelRegisterSettingsDecoded + let workspaceSettingsDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.WorkspaceSettings.self, forKey: .workspaceSettings) + workspaceSettings = workspaceSettingsDecoded } } @@ -6971,14 +6977,18 @@ extension SageMakerClientTypes { public var modelRegisterSettings: SageMakerClientTypes.ModelRegisterSettings? /// Time series forecast settings for the Canvas application. public var timeSeriesForecastingSettings: SageMakerClientTypes.TimeSeriesForecastingSettings? + /// The workspace settings for the SageMaker Canvas application. + public var workspaceSettings: SageMakerClientTypes.WorkspaceSettings? public init( modelRegisterSettings: SageMakerClientTypes.ModelRegisterSettings? = nil, - timeSeriesForecastingSettings: SageMakerClientTypes.TimeSeriesForecastingSettings? = nil + timeSeriesForecastingSettings: SageMakerClientTypes.TimeSeriesForecastingSettings? = nil, + workspaceSettings: SageMakerClientTypes.WorkspaceSettings? = nil ) { self.modelRegisterSettings = modelRegisterSettings self.timeSeriesForecastingSettings = timeSeriesForecastingSettings + self.workspaceSettings = workspaceSettings } } @@ -20509,6 +20519,38 @@ extension CreateWorkteamOutputResponseBody: Swift.Decodable { } } +extension SageMakerClientTypes { + public enum CrossAccountFilterOption: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case crossAccount + case sameAccount + case sdkUnknown(Swift.String) + + public static var allCases: [CrossAccountFilterOption] { + return [ + .crossAccount, + .sameAccount, + .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 .crossAccount: return "CrossAccount" + case .sameAccount: return "SameAccount" + 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 = CrossAccountFilterOption(rawValue: rawValue) ?? CrossAccountFilterOption.sdkUnknown(rawValue) + } + } +} + extension SageMakerClientTypes.CustomImage: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case appImageConfigName = "AppImageConfigName" @@ -20566,6 +20608,61 @@ extension SageMakerClientTypes { } +extension SageMakerClientTypes.CustomizedMetricSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case metricName = "MetricName" + case namespace = "Namespace" + case statistic = "Statistic" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let metricName = self.metricName { + try encodeContainer.encode(metricName, forKey: .metricName) + } + if let namespace = self.namespace { + try encodeContainer.encode(namespace, forKey: .namespace) + } + if let statistic = self.statistic { + try encodeContainer.encode(statistic.rawValue, forKey: .statistic) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let metricNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .metricName) + metricName = metricNameDecoded + let namespaceDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .namespace) + namespace = namespaceDecoded + let statisticDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.Statistic.self, forKey: .statistic) + statistic = statisticDecoded + } +} + +extension SageMakerClientTypes { + /// A customized metric. + public struct CustomizedMetricSpecification: Swift.Equatable { + /// The name of the customized metric. + public var metricName: Swift.String? + /// The namespace of the customized metric. + public var namespace: Swift.String? + /// The statistic of the customized metric. + public var statistic: SageMakerClientTypes.Statistic? + + public init( + metricName: Swift.String? = nil, + namespace: Swift.String? = nil, + statistic: SageMakerClientTypes.Statistic? = nil + ) + { + self.metricName = metricName + self.namespace = namespace + self.statistic = statistic + } + } + +} + extension SageMakerClientTypes.DataCaptureConfig: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case captureContentTypeHeader = "CaptureContentTypeHeader" @@ -29692,6 +29789,8 @@ public struct DescribeEndpointOutputResponse: Swift.Equatable { /// * Deleting: [DeleteEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html) is executing. /// /// * Failed: Endpoint could not be created, updated, or re-scaled. Use the FailureReason value returned by [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) for information about the failure. [DeleteEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html) is the only operation that can be performed on a failed endpoint. + /// + /// * UpdateRollbackFailed: Both the rolling deployment and auto-rollback failed. Your endpoint is in service with a mix of the old and new endpoint configurations. For information about how to remedy this issue and restore the endpoint's status to InService, see [Rolling Deployments](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-rolling.html). /// This member is required. public var endpointStatus: SageMakerClientTypes.EndpointStatus? /// The configuration parameters for an explainer. @@ -30033,7 +30132,7 @@ extension DescribeFeatureGroupInput: ClientRuntime.URLPathProvider { } public struct DescribeFeatureGroupInput: Swift.Equatable { - /// The name of the FeatureGroup you want described. + /// The name or Amazon Resource Name (ARN) of the FeatureGroup you want described. /// This member is required. public var featureGroupName: Swift.String? /// A token to resume pagination of the list of Features (FeatureDefinitions). 2,500 Features are returned by default. @@ -30334,7 +30433,7 @@ extension DescribeFeatureMetadataInput: ClientRuntime.URLPathProvider { } public struct DescribeFeatureMetadataInput: Swift.Equatable { - /// The name of the feature group containing the feature. + /// The name or Amazon Resource Name (ARN) of the feature group containing the feature. /// This member is required. public var featureGroupName: Swift.String? /// The name of the feature. @@ -40556,6 +40655,93 @@ extension SageMakerClientTypes { } +extension SageMakerClientTypes.DynamicScalingConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxCapacity = "MaxCapacity" + case minCapacity = "MinCapacity" + case scaleInCooldown = "ScaleInCooldown" + case scaleOutCooldown = "ScaleOutCooldown" + case scalingPolicies = "ScalingPolicies" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if maxCapacity != 0 { + try encodeContainer.encode(maxCapacity, forKey: .maxCapacity) + } + if minCapacity != 0 { + try encodeContainer.encode(minCapacity, forKey: .minCapacity) + } + if scaleInCooldown != 0 { + try encodeContainer.encode(scaleInCooldown, forKey: .scaleInCooldown) + } + if scaleOutCooldown != 0 { + try encodeContainer.encode(scaleOutCooldown, forKey: .scaleOutCooldown) + } + if let scalingPolicies = scalingPolicies { + var scalingPoliciesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .scalingPolicies) + for scalingpolicy0 in scalingPolicies { + try scalingPoliciesContainer.encode(scalingpolicy0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let minCapacityDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .minCapacity) ?? 0 + minCapacity = minCapacityDecoded + let maxCapacityDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxCapacity) ?? 0 + maxCapacity = maxCapacityDecoded + let scaleInCooldownDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .scaleInCooldown) ?? 0 + scaleInCooldown = scaleInCooldownDecoded + let scaleOutCooldownDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .scaleOutCooldown) ?? 0 + scaleOutCooldown = scaleOutCooldownDecoded + let scalingPoliciesContainer = try containerValues.decodeIfPresent([SageMakerClientTypes.ScalingPolicy?].self, forKey: .scalingPolicies) + var scalingPoliciesDecoded0:[SageMakerClientTypes.ScalingPolicy]? = nil + if let scalingPoliciesContainer = scalingPoliciesContainer { + scalingPoliciesDecoded0 = [SageMakerClientTypes.ScalingPolicy]() + for union0 in scalingPoliciesContainer { + if let union0 = union0 { + scalingPoliciesDecoded0?.append(union0) + } + } + } + scalingPolicies = scalingPoliciesDecoded0 + } +} + +extension SageMakerClientTypes { + /// An object with the recommended values for you to specify when creating an autoscaling policy. + public struct DynamicScalingConfiguration: Swift.Equatable { + /// The recommended maximum capacity to specify for your autoscaling policy. + public var maxCapacity: Swift.Int + /// The recommended minimum capacity to specify for your autoscaling policy. + public var minCapacity: Swift.Int + /// The recommended scale in cooldown time for your autoscaling policy. + public var scaleInCooldown: Swift.Int + /// The recommended scale out cooldown time for your autoscaling policy. + public var scaleOutCooldown: Swift.Int + /// An object of the scaling policies for each metric. + public var scalingPolicies: [SageMakerClientTypes.ScalingPolicy]? + + public init( + maxCapacity: Swift.Int = 0, + minCapacity: Swift.Int = 0, + scaleInCooldown: Swift.Int = 0, + scaleOutCooldown: Swift.Int = 0, + scalingPolicies: [SageMakerClientTypes.ScalingPolicy]? = nil + ) + { + self.maxCapacity = maxCapacity + self.minCapacity = minCapacity + self.scaleInCooldown = scaleInCooldown + self.scaleOutCooldown = scaleOutCooldown + self.scalingPolicies = scalingPolicies + } + } + +} + extension SageMakerClientTypes.EMRStepMetadata: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case clusterId = "ClusterId" @@ -43530,7 +43716,7 @@ extension SageMakerClientTypes.FeatureGroupSummary: Swift.Codable { } extension SageMakerClientTypes { - /// The name, Arn, CreationTime, FeatureGroup values, LastUpdatedTime and EnableOnlineStorage status of a FeatureGroup. + /// The name, ARN, CreationTime, FeatureGroup values, LastUpdatedTime and EnableOnlineStorage status of a FeatureGroup. public struct FeatureGroupSummary: Swift.Equatable { /// A timestamp indicating the time of creation time of the FeatureGroup. /// This member is required. @@ -44310,6 +44496,38 @@ extension SageMakerClientTypes { } +extension SageMakerClientTypes { + public enum FlatInvocations: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case `continue` + case stop + case sdkUnknown(Swift.String) + + public static var allCases: [FlatInvocations] { + return [ + .continue, + .stop, + .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 .continue: return "Continue" + case .stop: return "Stop" + 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 = FlatInvocations(rawValue: rawValue) ?? FlatInvocations.sdkUnknown(rawValue) + } + } +} + extension SageMakerClientTypes.FlowDefinitionOutputConfig: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case kmsKeyId = "KmsKeyId" @@ -45000,6 +45218,213 @@ extension GetSagemakerServicecatalogPortfolioStatusOutputResponseBody: Swift.Dec } } +extension GetScalingConfigurationRecommendationInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case endpointName = "EndpointName" + case inferenceRecommendationsJobName = "InferenceRecommendationsJobName" + case recommendationId = "RecommendationId" + case scalingPolicyObjective = "ScalingPolicyObjective" + case targetCpuUtilizationPerCore = "TargetCpuUtilizationPerCore" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let endpointName = self.endpointName { + try encodeContainer.encode(endpointName, forKey: .endpointName) + } + if let inferenceRecommendationsJobName = self.inferenceRecommendationsJobName { + try encodeContainer.encode(inferenceRecommendationsJobName, forKey: .inferenceRecommendationsJobName) + } + if let recommendationId = self.recommendationId { + try encodeContainer.encode(recommendationId, forKey: .recommendationId) + } + if let scalingPolicyObjective = self.scalingPolicyObjective { + try encodeContainer.encode(scalingPolicyObjective, forKey: .scalingPolicyObjective) + } + if let targetCpuUtilizationPerCore = self.targetCpuUtilizationPerCore { + try encodeContainer.encode(targetCpuUtilizationPerCore, forKey: .targetCpuUtilizationPerCore) + } + } +} + +extension GetScalingConfigurationRecommendationInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct GetScalingConfigurationRecommendationInput: Swift.Equatable { + /// The name of an endpoint benchmarked during a previously completed inference recommendation job. This name should come from one of the recommendations returned by the job specified in the InferenceRecommendationsJobName field. Specify either this field or the RecommendationId field. + public var endpointName: Swift.String? + /// The name of a previously completed Inference Recommender job. + /// This member is required. + public var inferenceRecommendationsJobName: Swift.String? + /// The recommendation ID of a previously completed inference recommendation. This ID should come from one of the recommendations returned by the job specified in the InferenceRecommendationsJobName field. Specify either this field or the EndpointName field. + public var recommendationId: Swift.String? + /// An object where you specify the anticipated traffic pattern for an endpoint. + public var scalingPolicyObjective: SageMakerClientTypes.ScalingPolicyObjective? + /// The percentage of how much utilization you want an instance to use before autoscaling. The default value is 50%. + public var targetCpuUtilizationPerCore: Swift.Int? + + public init( + endpointName: Swift.String? = nil, + inferenceRecommendationsJobName: Swift.String? = nil, + recommendationId: Swift.String? = nil, + scalingPolicyObjective: SageMakerClientTypes.ScalingPolicyObjective? = nil, + targetCpuUtilizationPerCore: Swift.Int? = nil + ) + { + self.endpointName = endpointName + self.inferenceRecommendationsJobName = inferenceRecommendationsJobName + self.recommendationId = recommendationId + self.scalingPolicyObjective = scalingPolicyObjective + self.targetCpuUtilizationPerCore = targetCpuUtilizationPerCore + } +} + +struct GetScalingConfigurationRecommendationInputBody: Swift.Equatable { + let inferenceRecommendationsJobName: Swift.String? + let recommendationId: Swift.String? + let endpointName: Swift.String? + let targetCpuUtilizationPerCore: Swift.Int? + let scalingPolicyObjective: SageMakerClientTypes.ScalingPolicyObjective? +} + +extension GetScalingConfigurationRecommendationInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case endpointName = "EndpointName" + case inferenceRecommendationsJobName = "InferenceRecommendationsJobName" + case recommendationId = "RecommendationId" + case scalingPolicyObjective = "ScalingPolicyObjective" + case targetCpuUtilizationPerCore = "TargetCpuUtilizationPerCore" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let inferenceRecommendationsJobNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inferenceRecommendationsJobName) + inferenceRecommendationsJobName = inferenceRecommendationsJobNameDecoded + let recommendationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .recommendationId) + recommendationId = recommendationIdDecoded + let endpointNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .endpointName) + endpointName = endpointNameDecoded + let targetCpuUtilizationPerCoreDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .targetCpuUtilizationPerCore) + targetCpuUtilizationPerCore = targetCpuUtilizationPerCoreDecoded + let scalingPolicyObjectiveDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.ScalingPolicyObjective.self, forKey: .scalingPolicyObjective) + scalingPolicyObjective = scalingPolicyObjectiveDecoded + } +} + +public enum GetScalingConfigurationRecommendationOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "ResourceNotFound": return try await ResourceNotFound(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension GetScalingConfigurationRecommendationOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: GetScalingConfigurationRecommendationOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.dynamicScalingConfiguration = output.dynamicScalingConfiguration + self.endpointName = output.endpointName + self.inferenceRecommendationsJobName = output.inferenceRecommendationsJobName + self.metric = output.metric + self.recommendationId = output.recommendationId + self.scalingPolicyObjective = output.scalingPolicyObjective + self.targetCpuUtilizationPerCore = output.targetCpuUtilizationPerCore + } else { + self.dynamicScalingConfiguration = nil + self.endpointName = nil + self.inferenceRecommendationsJobName = nil + self.metric = nil + self.recommendationId = nil + self.scalingPolicyObjective = nil + self.targetCpuUtilizationPerCore = nil + } + } +} + +public struct GetScalingConfigurationRecommendationOutputResponse: Swift.Equatable { + /// An object with the recommended values for you to specify when creating an autoscaling policy. + public var dynamicScalingConfiguration: SageMakerClientTypes.DynamicScalingConfiguration? + /// The name of an endpoint benchmarked during a previously completed Inference Recommender job. + public var endpointName: Swift.String? + /// The name of a previously completed Inference Recommender job. + public var inferenceRecommendationsJobName: Swift.String? + /// An object with a list of metrics that were benchmarked during the previously completed Inference Recommender job. + public var metric: SageMakerClientTypes.ScalingPolicyMetric? + /// The recommendation ID of a previously completed inference recommendation. + public var recommendationId: Swift.String? + /// An object representing the anticipated traffic pattern for an endpoint that you specified in the request. + public var scalingPolicyObjective: SageMakerClientTypes.ScalingPolicyObjective? + /// The percentage of how much utilization you want an instance to use before autoscaling, which you specified in the request. The default value is 50%. + public var targetCpuUtilizationPerCore: Swift.Int? + + public init( + dynamicScalingConfiguration: SageMakerClientTypes.DynamicScalingConfiguration? = nil, + endpointName: Swift.String? = nil, + inferenceRecommendationsJobName: Swift.String? = nil, + metric: SageMakerClientTypes.ScalingPolicyMetric? = nil, + recommendationId: Swift.String? = nil, + scalingPolicyObjective: SageMakerClientTypes.ScalingPolicyObjective? = nil, + targetCpuUtilizationPerCore: Swift.Int? = nil + ) + { + self.dynamicScalingConfiguration = dynamicScalingConfiguration + self.endpointName = endpointName + self.inferenceRecommendationsJobName = inferenceRecommendationsJobName + self.metric = metric + self.recommendationId = recommendationId + self.scalingPolicyObjective = scalingPolicyObjective + self.targetCpuUtilizationPerCore = targetCpuUtilizationPerCore + } +} + +struct GetScalingConfigurationRecommendationOutputResponseBody: Swift.Equatable { + let inferenceRecommendationsJobName: Swift.String? + let recommendationId: Swift.String? + let endpointName: Swift.String? + let targetCpuUtilizationPerCore: Swift.Int? + let scalingPolicyObjective: SageMakerClientTypes.ScalingPolicyObjective? + let metric: SageMakerClientTypes.ScalingPolicyMetric? + let dynamicScalingConfiguration: SageMakerClientTypes.DynamicScalingConfiguration? +} + +extension GetScalingConfigurationRecommendationOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case dynamicScalingConfiguration = "DynamicScalingConfiguration" + case endpointName = "EndpointName" + case inferenceRecommendationsJobName = "InferenceRecommendationsJobName" + case metric = "Metric" + case recommendationId = "RecommendationId" + case scalingPolicyObjective = "ScalingPolicyObjective" + case targetCpuUtilizationPerCore = "TargetCpuUtilizationPerCore" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let inferenceRecommendationsJobNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .inferenceRecommendationsJobName) + inferenceRecommendationsJobName = inferenceRecommendationsJobNameDecoded + let recommendationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .recommendationId) + recommendationId = recommendationIdDecoded + let endpointNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .endpointName) + endpointName = endpointNameDecoded + let targetCpuUtilizationPerCoreDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .targetCpuUtilizationPerCore) + targetCpuUtilizationPerCore = targetCpuUtilizationPerCoreDecoded + let scalingPolicyObjectiveDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.ScalingPolicyObjective.self, forKey: .scalingPolicyObjective) + scalingPolicyObjective = scalingPolicyObjectiveDecoded + let metricDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.ScalingPolicyMetric.self, forKey: .metric) + metric = metricDecoded + let dynamicScalingConfigurationDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.DynamicScalingConfiguration.self, forKey: .dynamicScalingConfiguration) + dynamicScalingConfiguration = dynamicScalingConfigurationDecoded + } +} + extension GetSearchSuggestionsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case resource = "Resource" @@ -64744,6 +65169,194 @@ extension ListProjectsOutputResponseBody: Swift.Decodable { } } +extension ListResourceCatalogsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationTimeAfter = "CreationTimeAfter" + case creationTimeBefore = "CreationTimeBefore" + case maxResults = "MaxResults" + case nameContains = "NameContains" + case nextToken = "NextToken" + case sortBy = "SortBy" + case sortOrder = "SortOrder" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let creationTimeAfter = self.creationTimeAfter { + try encodeContainer.encodeTimestamp(creationTimeAfter, format: .epochSeconds, forKey: .creationTimeAfter) + } + if let creationTimeBefore = self.creationTimeBefore { + try encodeContainer.encodeTimestamp(creationTimeBefore, format: .epochSeconds, forKey: .creationTimeBefore) + } + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nameContains = self.nameContains { + try encodeContainer.encode(nameContains, forKey: .nameContains) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + if let sortBy = self.sortBy { + try encodeContainer.encode(sortBy.rawValue, forKey: .sortBy) + } + if let sortOrder = self.sortOrder { + try encodeContainer.encode(sortOrder.rawValue, forKey: .sortOrder) + } + } +} + +extension ListResourceCatalogsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct ListResourceCatalogsInput: Swift.Equatable { + /// Use this parameter to search for ResourceCatalogs created after a specific date and time. + public var creationTimeAfter: ClientRuntime.Date? + /// Use this parameter to search for ResourceCatalogs created before a specific date and time. + public var creationTimeBefore: ClientRuntime.Date? + /// The maximum number of results returned by ListResourceCatalogs. + public var maxResults: Swift.Int? + /// A string that partially matches one or more ResourceCatalogs names. Filters ResourceCatalog by name. + public var nameContains: Swift.String? + /// A token to resume pagination of ListResourceCatalogs results. + public var nextToken: Swift.String? + /// The value on which the resource catalog list is sorted. + public var sortBy: SageMakerClientTypes.ResourceCatalogSortBy? + /// The order in which the resource catalogs are listed. + public var sortOrder: SageMakerClientTypes.ResourceCatalogSortOrder? + + public init( + creationTimeAfter: ClientRuntime.Date? = nil, + creationTimeBefore: ClientRuntime.Date? = nil, + maxResults: Swift.Int? = nil, + nameContains: Swift.String? = nil, + nextToken: Swift.String? = nil, + sortBy: SageMakerClientTypes.ResourceCatalogSortBy? = nil, + sortOrder: SageMakerClientTypes.ResourceCatalogSortOrder? = nil + ) + { + self.creationTimeAfter = creationTimeAfter + self.creationTimeBefore = creationTimeBefore + self.maxResults = maxResults + self.nameContains = nameContains + self.nextToken = nextToken + self.sortBy = sortBy + self.sortOrder = sortOrder + } +} + +struct ListResourceCatalogsInputBody: Swift.Equatable { + let nameContains: Swift.String? + let creationTimeAfter: ClientRuntime.Date? + let creationTimeBefore: ClientRuntime.Date? + let sortOrder: SageMakerClientTypes.ResourceCatalogSortOrder? + let sortBy: SageMakerClientTypes.ResourceCatalogSortBy? + let maxResults: Swift.Int? + let nextToken: Swift.String? +} + +extension ListResourceCatalogsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationTimeAfter = "CreationTimeAfter" + case creationTimeBefore = "CreationTimeBefore" + case maxResults = "MaxResults" + case nameContains = "NameContains" + case nextToken = "NextToken" + case sortBy = "SortBy" + case sortOrder = "SortOrder" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let nameContainsDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nameContains) + nameContains = nameContainsDecoded + let creationTimeAfterDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationTimeAfter) + creationTimeAfter = creationTimeAfterDecoded + let creationTimeBeforeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationTimeBefore) + creationTimeBefore = creationTimeBeforeDecoded + let sortOrderDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.ResourceCatalogSortOrder.self, forKey: .sortOrder) + sortOrder = sortOrderDecoded + let sortByDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.ResourceCatalogSortBy.self, forKey: .sortBy) + sortBy = sortByDecoded + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +public enum ListResourceCatalogsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListResourceCatalogsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListResourceCatalogsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.nextToken = output.nextToken + self.resourceCatalogs = output.resourceCatalogs + } else { + self.nextToken = nil + self.resourceCatalogs = nil + } + } +} + +public struct ListResourceCatalogsOutputResponse: Swift.Equatable { + /// A token to resume pagination of ListResourceCatalogs results. + public var nextToken: Swift.String? + /// A list of the requested ResourceCatalogs. + public var resourceCatalogs: [SageMakerClientTypes.ResourceCatalog]? + + public init( + nextToken: Swift.String? = nil, + resourceCatalogs: [SageMakerClientTypes.ResourceCatalog]? = nil + ) + { + self.nextToken = nextToken + self.resourceCatalogs = resourceCatalogs + } +} + +struct ListResourceCatalogsOutputResponseBody: Swift.Equatable { + let resourceCatalogs: [SageMakerClientTypes.ResourceCatalog]? + let nextToken: Swift.String? +} + +extension ListResourceCatalogsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case nextToken = "NextToken" + case resourceCatalogs = "ResourceCatalogs" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceCatalogsContainer = try containerValues.decodeIfPresent([SageMakerClientTypes.ResourceCatalog?].self, forKey: .resourceCatalogs) + var resourceCatalogsDecoded0:[SageMakerClientTypes.ResourceCatalog]? = nil + if let resourceCatalogsContainer = resourceCatalogsContainer { + resourceCatalogsDecoded0 = [SageMakerClientTypes.ResourceCatalog]() + for structure0 in resourceCatalogsContainer { + if let structure0 = structure0 { + resourceCatalogsDecoded0?.append(structure0) + } + } + } + resourceCatalogs = resourceCatalogsDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + extension ListSpacesInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case domainIdEquals = "DomainIdEquals" @@ -67531,6 +68144,53 @@ extension SageMakerClientTypes { } } +extension SageMakerClientTypes.MetricSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case customized = "Customized" + case predefined = "Predefined" + case sdkUnknown + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + switch self { + case let .customized(customized): + try container.encode(customized, forKey: .customized) + case let .predefined(predefined): + try container.encode(predefined, forKey: .predefined) + case let .sdkUnknown(sdkUnknown): + try container.encode(sdkUnknown, forKey: .sdkUnknown) + } + } + + public init(from decoder: Swift.Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + let predefinedDecoded = try values.decodeIfPresent(SageMakerClientTypes.PredefinedMetricSpecification.self, forKey: .predefined) + if let predefined = predefinedDecoded { + self = .predefined(predefined) + return + } + let customizedDecoded = try values.decodeIfPresent(SageMakerClientTypes.CustomizedMetricSpecification.self, forKey: .customized) + if let customized = customizedDecoded { + self = .customized(customized) + return + } + self = .sdkUnknown("") + } +} + +extension SageMakerClientTypes { + /// An object containing information about a metric. + public enum MetricSpecification: Swift.Equatable { + /// Information about a predefined metric. + case predefined(SageMakerClientTypes.PredefinedMetricSpecification) + /// Information about a customized metric. + case customized(SageMakerClientTypes.CustomizedMetricSpecification) + case sdkUnknown(Swift.String) + } + +} + extension SageMakerClientTypes.MetricsSource: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case contentDigest = "ContentDigest" @@ -70041,7 +70701,7 @@ extension SageMakerClientTypes.ModelLatencyThreshold: Swift.Codable { extension SageMakerClientTypes { /// The model latency threshold. public struct ModelLatencyThreshold: Swift.Equatable { - /// The model latency percentile threshold. + /// The model latency percentile threshold. For custom load tests, specify the value as P95. public var percentile: Swift.String? /// The model latency percentile value in milliseconds. public var valueInMilliseconds: Swift.Int @@ -76570,9 +77230,9 @@ extension SageMakerClientTypes.Phase: Swift.Codable { extension SageMakerClientTypes { /// Defines the traffic pattern. public struct Phase: Swift.Equatable { - /// Specifies how long traffic phase should be. + /// Specifies how long a traffic phase should be. For custom load tests, the value should be between 120 and 3600. This value should not exceed JobDurationInSeconds. public var durationInSeconds: Swift.Int? - /// Specifies how many concurrent users to start with. + /// Specifies how many concurrent users to start with. The value should be between 1 and 3. public var initialNumberOfUsers: Swift.Int? /// Specified how many new users to spawn in a minute. public var spawnRate: Swift.Int? @@ -77629,6 +78289,41 @@ extension SageMakerClientTypes { } +extension SageMakerClientTypes.PredefinedMetricSpecification: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case predefinedMetricType = "PredefinedMetricType" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let predefinedMetricType = self.predefinedMetricType { + try encodeContainer.encode(predefinedMetricType, forKey: .predefinedMetricType) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let predefinedMetricTypeDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .predefinedMetricType) + predefinedMetricType = predefinedMetricTypeDecoded + } +} + +extension SageMakerClientTypes { + /// A specification for a predefined metric. + public struct PredefinedMetricSpecification: Swift.Equatable { + /// The metric type. You can only apply SageMaker metric types to SageMaker endpoints. + public var predefinedMetricType: Swift.String? + + public init( + predefinedMetricType: Swift.String? = nil + ) + { + self.predefinedMetricType = predefinedMetricType + } + } + +} + extension SageMakerClientTypes { public enum ProblemType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case binaryClassification @@ -82483,7 +83178,7 @@ extension SageMakerClientTypes { public var endpointConfigurations: [SageMakerClientTypes.EndpointInputConfiguration]? /// Existing customer endpoints on which to run an Inference Recommender job. public var endpoints: [SageMakerClientTypes.EndpointInfo]? - /// Specifies the maximum duration of the job, in seconds.> + /// Specifies the maximum duration of the job, in seconds. The maximum value is 7200. public var jobDurationInSeconds: Swift.Int? /// The name of the created model. public var modelName: Swift.String? @@ -82741,12 +83436,16 @@ extension SageMakerClientTypes { extension SageMakerClientTypes.RecommendationJobStoppingConditions: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case flatInvocations = "FlatInvocations" case maxInvocations = "MaxInvocations" case modelLatencyThresholds = "ModelLatencyThresholds" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let flatInvocations = self.flatInvocations { + try encodeContainer.encode(flatInvocations.rawValue, forKey: .flatInvocations) + } if maxInvocations != 0 { try encodeContainer.encode(maxInvocations, forKey: .maxInvocations) } @@ -82773,22 +83472,28 @@ extension SageMakerClientTypes.RecommendationJobStoppingConditions: Swift.Codabl } } modelLatencyThresholds = modelLatencyThresholdsDecoded0 + let flatInvocationsDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.FlatInvocations.self, forKey: .flatInvocations) + flatInvocations = flatInvocationsDecoded } } extension SageMakerClientTypes { /// Specifies conditions for stopping a job. When a job reaches a stopping condition limit, SageMaker ends the job. public struct RecommendationJobStoppingConditions: Swift.Equatable { + /// Stops a load test when the number of invocations (TPS) peaks and flattens, which means that the instance has reached capacity. The default value is Stop. If you want the load test to continue after invocations have flattened, set the value to Continue. + public var flatInvocations: SageMakerClientTypes.FlatInvocations? /// The maximum number of requests per minute expected for the endpoint. public var maxInvocations: Swift.Int /// The interval of time taken by a model to respond as viewed from SageMaker. The interval includes the local communication time taken to send the request and to fetch the response from the container of a model and the time taken to complete the inference in the container. public var modelLatencyThresholds: [SageMakerClientTypes.ModelLatencyThreshold]? public init( + flatInvocations: SageMakerClientTypes.FlatInvocations? = nil, maxInvocations: Swift.Int = 0, modelLatencyThresholds: [SageMakerClientTypes.ModelLatencyThreshold]? = nil ) { + self.flatInvocations = flatInvocations self.maxInvocations = maxInvocations self.modelLatencyThresholds = modelLatencyThresholds } @@ -83842,6 +84547,136 @@ extension SageMakerClientTypes { } +extension SageMakerClientTypes.ResourceCatalog: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case creationTime = "CreationTime" + case description = "Description" + case resourceCatalogArn = "ResourceCatalogArn" + case resourceCatalogName = "ResourceCatalogName" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let creationTime = self.creationTime { + try encodeContainer.encodeTimestamp(creationTime, format: .epochSeconds, forKey: .creationTime) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let resourceCatalogArn = self.resourceCatalogArn { + try encodeContainer.encode(resourceCatalogArn, forKey: .resourceCatalogArn) + } + if let resourceCatalogName = self.resourceCatalogName { + try encodeContainer.encode(resourceCatalogName, forKey: .resourceCatalogName) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resourceCatalogArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceCatalogArn) + resourceCatalogArn = resourceCatalogArnDecoded + let resourceCatalogNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .resourceCatalogName) + resourceCatalogName = resourceCatalogNameDecoded + let descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let creationTimeDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .creationTime) + creationTime = creationTimeDecoded + } +} + +extension SageMakerClientTypes { + /// A resource catalog containing all of the resources of a specific resource type within a resource owner account. For an example on sharing the Amazon SageMaker Feature Store DefaultFeatureGroupCatalog, see [Share Amazon SageMaker Catalog resource type](https://docs.aws.amazon.com/sagemaker/latest/APIReference/feature-store-cross-account-discoverability-share-sagemaker-catalog.html) in the Amazon SageMaker Developer Guide. + public struct ResourceCatalog: Swift.Equatable { + /// The time the ResourceCatalog was created. + /// This member is required. + public var creationTime: ClientRuntime.Date? + /// A free form description of the ResourceCatalog. + /// This member is required. + public var description: Swift.String? + /// The Amazon Resource Name (ARN) of the ResourceCatalog. + /// This member is required. + public var resourceCatalogArn: Swift.String? + /// The name of the ResourceCatalog. + /// This member is required. + public var resourceCatalogName: Swift.String? + + public init( + creationTime: ClientRuntime.Date? = nil, + description: Swift.String? = nil, + resourceCatalogArn: Swift.String? = nil, + resourceCatalogName: Swift.String? = nil + ) + { + self.creationTime = creationTime + self.description = description + self.resourceCatalogArn = resourceCatalogArn + self.resourceCatalogName = resourceCatalogName + } + } + +} + +extension SageMakerClientTypes { + public enum ResourceCatalogSortBy: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case creationTime + case sdkUnknown(Swift.String) + + public static var allCases: [ResourceCatalogSortBy] { + return [ + .creationTime, + .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 .creationTime: return "CreationTime" + 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 = ResourceCatalogSortBy(rawValue: rawValue) ?? ResourceCatalogSortBy.sdkUnknown(rawValue) + } + } +} + +extension SageMakerClientTypes { + public enum ResourceCatalogSortOrder: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case ascending + case descending + case sdkUnknown(Swift.String) + + public static var allCases: [ResourceCatalogSortOrder] { + return [ + .ascending, + .descending, + .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 .ascending: return "Ascending" + case .descending: return "Descending" + 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 = ResourceCatalogSortOrder(rawValue: rawValue) ?? ResourceCatalogSortOrder.sdkUnknown(rawValue) + } + } +} + extension SageMakerClientTypes.ResourceConfig: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case instanceCount = "InstanceCount" @@ -84613,12 +85448,12 @@ extension SageMakerClientTypes.RollingUpdatePolicy: Swift.Codable { extension SageMakerClientTypes { /// Specifies a rolling deployment strategy for updating a SageMaker endpoint. public struct RollingUpdatePolicy: Swift.Equatable { - /// Specifies the type and size of the endpoint capacity to activate for a blue/green deployment, a rolling deployment, or a rollback strategy. You can specify your batches as either instance count or the overall percentage or your fleet. For a rollback strategy, if you don't specify the fields in this object, or if you set the Value to 100%, then SageMaker uses a blue/green rollback strategy and rolls all traffic back to the blue fleet. + /// Batch size for each rolling step to provision capacity and turn on traffic on the new endpoint fleet, and terminate capacity on the old endpoint fleet. Value must be between 5% to 50% of the variant's total instance count. /// This member is required. public var maximumBatchSize: SageMakerClientTypes.CapacitySize? /// The time limit for the total deployment. Exceeding this limit causes a timeout. public var maximumExecutionTimeoutInSeconds: Swift.Int? - /// Specifies the type and size of the endpoint capacity to activate for a blue/green deployment, a rolling deployment, or a rollback strategy. You can specify your batches as either instance count or the overall percentage or your fleet. For a rollback strategy, if you don't specify the fields in this object, or if you set the Value to 100%, then SageMaker uses a blue/green rollback strategy and rolls all traffic back to the blue fleet. + /// Batch size for rollback to the old endpoint fleet. Each rolling step to provision capacity and turn on traffic on the old endpoint fleet, and terminate capacity on the new endpoint fleet. If this field is absent, the default value will be set to 100% of total capacity which means to bring up the whole capacity of the old fleet at once during rollback. public var rollbackMaximumBatchSize: SageMakerClientTypes.CapacitySize? /// The length of the baking period, during which SageMaker monitors alarms for each batch on the new fleet. /// This member is required. @@ -85094,6 +85929,133 @@ extension SageMakerClientTypes { } } +extension SageMakerClientTypes.ScalingPolicy: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case targettracking = "TargetTracking" + case sdkUnknown + } + + public func encode(to encoder: Swift.Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + switch self { + case let .targettracking(targettracking): + try container.encode(targettracking, forKey: .targettracking) + case let .sdkUnknown(sdkUnknown): + try container.encode(sdkUnknown, forKey: .sdkUnknown) + } + } + + public init(from decoder: Swift.Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + let targettrackingDecoded = try values.decodeIfPresent(SageMakerClientTypes.TargetTrackingScalingPolicyConfiguration.self, forKey: .targettracking) + if let targettracking = targettrackingDecoded { + self = .targettracking(targettracking) + return + } + self = .sdkUnknown("") + } +} + +extension SageMakerClientTypes { + /// An object containing a recommended scaling policy. + public enum ScalingPolicy: Swift.Equatable { + /// A target tracking scaling policy. Includes support for predefined or customized metrics. + case targettracking(SageMakerClientTypes.TargetTrackingScalingPolicyConfiguration) + case sdkUnknown(Swift.String) + } + +} + +extension SageMakerClientTypes.ScalingPolicyMetric: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case invocationsPerInstance = "InvocationsPerInstance" + case modelLatency = "ModelLatency" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if invocationsPerInstance != 0 { + try encodeContainer.encode(invocationsPerInstance, forKey: .invocationsPerInstance) + } + if modelLatency != 0 { + try encodeContainer.encode(modelLatency, forKey: .modelLatency) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let invocationsPerInstanceDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .invocationsPerInstance) ?? 0 + invocationsPerInstance = invocationsPerInstanceDecoded + let modelLatencyDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .modelLatency) ?? 0 + modelLatency = modelLatencyDecoded + } +} + +extension SageMakerClientTypes { + /// The metric for a scaling policy. + public struct ScalingPolicyMetric: Swift.Equatable { + /// The number of invocations sent to a model, normalized by InstanceCount in each ProductionVariant. 1/numberOfInstances is sent as the value on each request, where numberOfInstances is the number of active instances for the ProductionVariant behind the endpoint at the time of the request. + public var invocationsPerInstance: Swift.Int + /// The interval of time taken by a model to respond as viewed from SageMaker. This interval includes the local communication times taken to send the request and to fetch the response from the container of a model and the time taken to complete the inference in the container. + public var modelLatency: Swift.Int + + public init( + invocationsPerInstance: Swift.Int = 0, + modelLatency: Swift.Int = 0 + ) + { + self.invocationsPerInstance = invocationsPerInstance + self.modelLatency = modelLatency + } + } + +} + +extension SageMakerClientTypes.ScalingPolicyObjective: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxInvocationsPerMinute = "MaxInvocationsPerMinute" + case minInvocationsPerMinute = "MinInvocationsPerMinute" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if maxInvocationsPerMinute != 0 { + try encodeContainer.encode(maxInvocationsPerMinute, forKey: .maxInvocationsPerMinute) + } + if minInvocationsPerMinute != 0 { + try encodeContainer.encode(minInvocationsPerMinute, forKey: .minInvocationsPerMinute) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let minInvocationsPerMinuteDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .minInvocationsPerMinute) ?? 0 + minInvocationsPerMinute = minInvocationsPerMinuteDecoded + let maxInvocationsPerMinuteDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxInvocationsPerMinute) ?? 0 + maxInvocationsPerMinute = maxInvocationsPerMinuteDecoded + } +} + +extension SageMakerClientTypes { + /// An object where you specify the anticipated traffic pattern for an endpoint. + public struct ScalingPolicyObjective: Swift.Equatable { + /// The maximum number of expected requests to your endpoint per minute. + public var maxInvocationsPerMinute: Swift.Int + /// The minimum number of expected requests to your endpoint per minute. + public var minInvocationsPerMinute: Swift.Int + + public init( + maxInvocationsPerMinute: Swift.Int = 0, + minInvocationsPerMinute: Swift.Int = 0 + ) + { + self.maxInvocationsPerMinute = maxInvocationsPerMinute + self.minInvocationsPerMinute = minInvocationsPerMinute + } + } + +} + extension SageMakerClientTypes.ScheduleConfig: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case scheduleExpression = "ScheduleExpression" @@ -85304,6 +86266,7 @@ extension SageMakerClientTypes { extension SearchInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case crossAccountFilterOption = "CrossAccountFilterOption" case maxResults = "MaxResults" case nextToken = "NextToken" case resource = "Resource" @@ -85314,6 +86277,9 @@ extension SearchInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let crossAccountFilterOption = self.crossAccountFilterOption { + try encodeContainer.encode(crossAccountFilterOption.rawValue, forKey: .crossAccountFilterOption) + } if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } @@ -85342,6 +86308,8 @@ extension SearchInput: ClientRuntime.URLPathProvider { } public struct SearchInput: Swift.Equatable { + /// A cross account filter option. When the value is "CrossAccount" the search results will only include resources made discoverable to you from other accounts. When the value is "SameAccount" or null the search results will only include resources from your account. Default is null. For more information on searching for resources made discoverable to your account, see [ Search discoverable resources](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-cross-account-discoverability-use.html) in the SageMaker Developer Guide. The maximum number of ResourceCatalogs viewable is 1000. + public var crossAccountFilterOption: SageMakerClientTypes.CrossAccountFilterOption? /// The maximum number of results to return. public var maxResults: Swift.Int? /// If more than MaxResults resources match the specified SearchExpression, the response includes a NextToken. The NextToken can be passed to the next SearchRequest to continue retrieving results. @@ -85357,6 +86325,7 @@ public struct SearchInput: Swift.Equatable { public var sortOrder: SageMakerClientTypes.SearchSortOrder? public init( + crossAccountFilterOption: SageMakerClientTypes.CrossAccountFilterOption? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, resource: SageMakerClientTypes.ResourceType? = nil, @@ -85365,6 +86334,7 @@ public struct SearchInput: Swift.Equatable { sortOrder: SageMakerClientTypes.SearchSortOrder? = nil ) { + self.crossAccountFilterOption = crossAccountFilterOption self.maxResults = maxResults self.nextToken = nextToken self.resource = resource @@ -85381,10 +86351,12 @@ struct SearchInputBody: Swift.Equatable { let sortOrder: SageMakerClientTypes.SearchSortOrder? let nextToken: Swift.String? let maxResults: Swift.Int? + let crossAccountFilterOption: SageMakerClientTypes.CrossAccountFilterOption? } extension SearchInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case crossAccountFilterOption = "CrossAccountFilterOption" case maxResults = "MaxResults" case nextToken = "NextToken" case resource = "Resource" @@ -85407,6 +86379,8 @@ extension SearchInputBody: Swift.Decodable { nextToken = nextTokenDecoded let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded + let crossAccountFilterOptionDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.CrossAccountFilterOption.self, forKey: .crossAccountFilterOption) + crossAccountFilterOption = crossAccountFilterOptionDecoded } } @@ -87526,6 +88500,61 @@ extension SageMakerClientTypes { } } +extension SageMakerClientTypes.Stairs: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case durationInSeconds = "DurationInSeconds" + case numberOfSteps = "NumberOfSteps" + case usersPerStep = "UsersPerStep" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let durationInSeconds = self.durationInSeconds { + try encodeContainer.encode(durationInSeconds, forKey: .durationInSeconds) + } + if let numberOfSteps = self.numberOfSteps { + try encodeContainer.encode(numberOfSteps, forKey: .numberOfSteps) + } + if let usersPerStep = self.usersPerStep { + try encodeContainer.encode(usersPerStep, forKey: .usersPerStep) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let durationInSecondsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .durationInSeconds) + durationInSeconds = durationInSecondsDecoded + let numberOfStepsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .numberOfSteps) + numberOfSteps = numberOfStepsDecoded + let usersPerStepDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .usersPerStep) + usersPerStep = usersPerStepDecoded + } +} + +extension SageMakerClientTypes { + /// Defines the stairs traffic pattern for an Inference Recommender load test. This pattern type consists of multiple steps where the number of users increases at each step. Specify either the stairs or phases traffic pattern. + public struct Stairs: Swift.Equatable { + /// Defines how long each traffic step should be. + public var durationInSeconds: Swift.Int? + /// Specifies how many steps to perform during traffic. + public var numberOfSteps: Swift.Int? + /// Specifies how many new users to spawn in each step. + public var usersPerStep: Swift.Int? + + public init( + durationInSeconds: Swift.Int? = nil, + numberOfSteps: Swift.Int? = nil, + usersPerStep: Swift.Int? = nil + ) + { + self.durationInSeconds = durationInSeconds + self.numberOfSteps = numberOfSteps + self.usersPerStep = usersPerStep + } + } + +} + extension StartEdgeDeploymentStageInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case edgeDeploymentPlanName = "EdgeDeploymentPlanName" @@ -88031,6 +89060,47 @@ extension StartPipelineExecutionOutputResponseBody: Swift.Decodable { } } +extension SageMakerClientTypes { + public enum Statistic: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case average + case maximum + case minimum + case sampleCount + case sum + case sdkUnknown(Swift.String) + + public static var allCases: [Statistic] { + return [ + .average, + .maximum, + .minimum, + .sampleCount, + .sum, + .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 .average: return "Average" + case .maximum: return "Maximum" + case .minimum: return "Minimum" + case .sampleCount: return "SampleCount" + case .sum: return "Sum" + 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 = Statistic(rawValue: rawValue) ?? Statistic.sdkUnknown(rawValue) + } + } +} + extension SageMakerClientTypes { public enum StepStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case executing @@ -90043,6 +91113,51 @@ extension SageMakerClientTypes { } } +extension SageMakerClientTypes.TargetTrackingScalingPolicyConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case metricSpecification = "MetricSpecification" + case targetValue = "TargetValue" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let metricSpecification = self.metricSpecification { + try encodeContainer.encode(metricSpecification, forKey: .metricSpecification) + } + if targetValue != 0.0 { + try encodeContainer.encode(targetValue, forKey: .targetValue) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let metricSpecificationDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.MetricSpecification.self, forKey: .metricSpecification) + metricSpecification = metricSpecificationDecoded + let targetValueDecoded = try containerValues.decodeIfPresent(Swift.Double.self, forKey: .targetValue) ?? 0.0 + targetValue = targetValueDecoded + } +} + +extension SageMakerClientTypes { + /// A target tracking scaling policy. Includes support for predefined or customized metrics. When using the [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) API, this parameter is required when you are creating a policy with the policy type TargetTrackingScaling. + public struct TargetTrackingScalingPolicyConfiguration: Swift.Equatable { + /// An object containing information about a metric. + public var metricSpecification: SageMakerClientTypes.MetricSpecification? + /// The recommended target value to specify for the metric when creating a scaling policy. + public var targetValue: Swift.Double + + public init( + metricSpecification: SageMakerClientTypes.MetricSpecification? = nil, + targetValue: Swift.Double = 0.0 + ) + { + self.metricSpecification = metricSpecification + self.targetValue = targetValue + } + } + +} + extension SageMakerClientTypes.TensorBoardAppSettings: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case defaultResourceSpec = "DefaultResourceSpec" @@ -90160,9 +91275,11 @@ extension SageMakerClientTypes { public struct TextClassificationJobConfig: Swift.Equatable { /// How long a job is allowed to run, or how many candidates a job is allowed to generate. public var completionCriteria: SageMakerClientTypes.AutoMLJobCompletionCriteria? - /// The name of the column used to provide the sentences to be classified. It should not be the same as the target column (Required). + /// The name of the column used to provide the sentences to be classified. It should not be the same as the target column. + /// This member is required. public var contentColumn: Swift.String? - /// The name of the column used to provide the class labels. It should not be same as the content column (Required). + /// The name of the column used to provide the class labels. It should not be same as the content column. + /// This member is required. public var targetLabelColumn: Swift.String? public init( @@ -90331,7 +91448,7 @@ extension SageMakerClientTypes { public struct TimeSeriesForecastingJobConfig: Swift.Equatable { /// How long a job is allowed to run, or how many candidates a job is allowed to generate. public var completionCriteria: SageMakerClientTypes.AutoMLJobCompletionCriteria? - /// A URL to the Amazon S3 data source containing additional selected features that complement the target, itemID, timestamp, and grouped columns set in TimeSeriesConfig. When not provided, the AutoML job V2 includes all the columns from the original dataset that are not already declared in TimeSeriesConfig. If provided, the AutoML job V2 only considers these additional columns as a complement to the ones declared in TimeSeriesConfig. You can input FeatureAttributeNames (optional) in JSON format as shown below: { "FeatureAttributeNames":["col1", "col2", ...] }. You can also specify the data type of the feature (optional) in the format shown below: { "FeatureDataTypes":{"col1":"numeric", "col2":"categorical" ... } } Autopilot supports the following data types: numeric, categorical, text, and datetime. These column keys must not include any column set in TimeSeriesConfig. When not provided, the AutoML job V2 includes all the columns from the original dataset that are not already declared in TimeSeriesConfig. If provided, the AutoML job V2 only considers these additional columns as a complement to the ones declared in TimeSeriesConfig. Autopilot supports the following data types: numeric, categorical, text, and datetime. + /// A URL to the Amazon S3 data source containing additional selected features that complement the target, itemID, timestamp, and grouped columns set in TimeSeriesConfig. When not provided, the AutoML job V2 includes all the columns from the original dataset that are not already declared in TimeSeriesConfig. If provided, the AutoML job V2 only considers these additional columns as a complement to the ones declared in TimeSeriesConfig. You can input FeatureAttributeNames (optional) in JSON format as shown below: { "FeatureAttributeNames":["col1", "col2", ...] }. You can also specify the data type of the feature (optional) in the format shown below: { "FeatureDataTypes":{"col1":"numeric", "col2":"categorical" ... } } Autopilot supports the following data types: numeric, categorical, text, and datetime. These column keys must not include any column set in TimeSeriesConfig. public var featureSpecificationS3Uri: Swift.String? /// The frequency of predictions in a forecast. Valid intervals are an integer followed by Y (Year), M (Month), W (Week), D (Day), H (Hour), and min (Minute). For example, 1D indicates every day and 15min indicates every 15 minutes. The value of a frequency must not overlap with the next larger frequency. For example, you must use a frequency of 1H instead of 60min. The valid values for each frequency are the following: /// @@ -90519,6 +91636,7 @@ extension SageMakerClientTypes { extension SageMakerClientTypes.TrafficPattern: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case phases = "Phases" + case stairs = "Stairs" case trafficType = "TrafficType" } @@ -90530,6 +91648,9 @@ extension SageMakerClientTypes.TrafficPattern: Swift.Codable { try phasesContainer.encode(phase0) } } + if let stairs = self.stairs { + try encodeContainer.encode(stairs, forKey: .stairs) + } if let trafficType = self.trafficType { try encodeContainer.encode(trafficType.rawValue, forKey: .trafficType) } @@ -90550,6 +91671,8 @@ extension SageMakerClientTypes.TrafficPattern: Swift.Codable { } } phases = phasesDecoded0 + let stairsDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.Stairs.self, forKey: .stairs) + stairs = stairsDecoded } } @@ -90558,15 +91681,19 @@ extension SageMakerClientTypes { public struct TrafficPattern: Swift.Equatable { /// Defines the phases traffic specification. public var phases: [SageMakerClientTypes.Phase]? - /// Defines the traffic patterns. + /// Defines the stairs traffic pattern. + public var stairs: SageMakerClientTypes.Stairs? + /// Defines the traffic patterns. Choose either PHASES or STAIRS. public var trafficType: SageMakerClientTypes.TrafficType? public init( phases: [SageMakerClientTypes.Phase]? = nil, + stairs: SageMakerClientTypes.Stairs? = nil, trafficType: SageMakerClientTypes.TrafficType? = nil ) { self.phases = phases + self.stairs = stairs self.trafficType = trafficType } } @@ -90684,11 +91811,13 @@ extension SageMakerClientTypes { extension SageMakerClientTypes { public enum TrafficType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case phases + case stairs case sdkUnknown(Swift.String) public static var allCases: [TrafficType] { return [ .phases, + .stairs, .sdkUnknown("") ] } @@ -90699,6 +91828,7 @@ extension SageMakerClientTypes { public var rawValue: Swift.String { switch self { case .phases: return "PHASES" + case .stairs: return "STAIRS" case let .sdkUnknown(s): return s } } @@ -90991,6 +92121,7 @@ extension SageMakerClientTypes.TrainingJob: Swift.Codable { case lastModifiedTime = "LastModifiedTime" case modelArtifacts = "ModelArtifacts" case outputDataConfig = "OutputDataConfig" + case profilerConfig = "ProfilerConfig" case resourceConfig = "ResourceConfig" case retryStrategy = "RetryStrategy" case roleArn = "RoleArn" @@ -91092,6 +92223,9 @@ extension SageMakerClientTypes.TrainingJob: Swift.Codable { if let outputDataConfig = self.outputDataConfig { try encodeContainer.encode(outputDataConfig, forKey: .outputDataConfig) } + if let profilerConfig = self.profilerConfig { + try encodeContainer.encode(profilerConfig, forKey: .profilerConfig) + } if let resourceConfig = self.resourceConfig { try encodeContainer.encode(resourceConfig, forKey: .resourceConfig) } @@ -91272,6 +92406,8 @@ extension SageMakerClientTypes.TrainingJob: Swift.Codable { } } debugRuleEvaluationStatuses = debugRuleEvaluationStatusesDecoded0 + let profilerConfigDecoded = try containerValues.decodeIfPresent(SageMakerClientTypes.ProfilerConfig.self, forKey: .profilerConfig) + profilerConfig = profilerConfigDecoded let environmentContainer = try containerValues.decodeIfPresent([Swift.String: Swift.String?].self, forKey: .environment) var environmentDecoded0: [Swift.String:Swift.String]? = nil if let environmentContainer = environmentContainer { @@ -91350,6 +92486,8 @@ extension SageMakerClientTypes { public var modelArtifacts: SageMakerClientTypes.ModelArtifacts? /// The S3 path where model artifacts that you configured when creating the job are stored. SageMaker creates subfolders for model artifacts. public var outputDataConfig: SageMakerClientTypes.OutputDataConfig? + /// Configuration information for Amazon SageMaker Debugger system monitoring, framework profiling, and storage paths. + public var profilerConfig: SageMakerClientTypes.ProfilerConfig? /// Resources, including ML compute instances and ML storage volumes, that are configured for model training. public var resourceConfig: SageMakerClientTypes.ResourceConfig? /// The number of times to retry the job when the job fails due to an InternalServerError. @@ -91457,6 +92595,7 @@ extension SageMakerClientTypes { lastModifiedTime: ClientRuntime.Date? = nil, modelArtifacts: SageMakerClientTypes.ModelArtifacts? = nil, outputDataConfig: SageMakerClientTypes.OutputDataConfig? = nil, + profilerConfig: SageMakerClientTypes.ProfilerConfig? = nil, resourceConfig: SageMakerClientTypes.ResourceConfig? = nil, retryStrategy: SageMakerClientTypes.RetryStrategy? = nil, roleArn: Swift.String? = nil, @@ -91496,6 +92635,7 @@ extension SageMakerClientTypes { self.lastModifiedTime = lastModifiedTime self.modelArtifacts = modelArtifacts self.outputDataConfig = outputDataConfig + self.profilerConfig = profilerConfig self.resourceConfig = resourceConfig self.retryStrategy = retryStrategy self.roleArn = roleArn @@ -96307,7 +97447,7 @@ extension UpdateFeatureGroupInput: ClientRuntime.URLPathProvider { public struct UpdateFeatureGroupInput: Swift.Equatable { /// Updates the feature group. Updating a feature group is an asynchronous operation. When you get an HTTP 200 response, you've made a valid request. It takes some time after you've made a valid request for Feature Store to update the feature group. public var featureAdditions: [SageMakerClientTypes.FeatureDefinition]? - /// The name of the feature group that you're updating. + /// The name or Amazon Resource Name (ARN) of the feature group that you're updating. /// This member is required. public var featureGroupName: Swift.String? /// Updates the feature group online store configuration. @@ -96454,7 +97594,7 @@ extension UpdateFeatureMetadataInput: ClientRuntime.URLPathProvider { public struct UpdateFeatureMetadataInput: Swift.Equatable { /// A description that you can write to better describe the feature. public var description: Swift.String? - /// The name of the feature group containing the feature that you're updating. + /// The name or Amazon Resource Name (ARN) of the feature group containing the feature that you're updating. /// This member is required. public var featureGroupName: Swift.String? /// The name of the feature that you're updating. @@ -100891,6 +102031,51 @@ extension SageMakerClientTypes { } +extension SageMakerClientTypes.WorkspaceSettings: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case s3ArtifactPath = "S3ArtifactPath" + case s3KmsKeyId = "S3KmsKeyId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let s3ArtifactPath = self.s3ArtifactPath { + try encodeContainer.encode(s3ArtifactPath, forKey: .s3ArtifactPath) + } + if let s3KmsKeyId = self.s3KmsKeyId { + try encodeContainer.encode(s3KmsKeyId, forKey: .s3KmsKeyId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let s3ArtifactPathDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .s3ArtifactPath) + s3ArtifactPath = s3ArtifactPathDecoded + let s3KmsKeyIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .s3KmsKeyId) + s3KmsKeyId = s3KmsKeyIdDecoded + } +} + +extension SageMakerClientTypes { + /// The workspace settings for the SageMaker Canvas application. + public struct WorkspaceSettings: Swift.Equatable { + /// The Amazon S3 bucket used to store artifacts generated by Canvas. Updating the Amazon S3 location impacts existing configuration settings, and Canvas users no longer have access to their artifacts. Canvas users must log out and log back in to apply the new location. + public var s3ArtifactPath: Swift.String? + /// The Amazon Web Services Key Management Service (KMS) encryption key ID that is used to encrypt artifacts generated by Canvas in the Amazon S3 bucket. + public var s3KmsKeyId: Swift.String? + + public init( + s3ArtifactPath: Swift.String? = nil, + s3KmsKeyId: Swift.String? = nil + ) + { + self.s3ArtifactPath = s3ArtifactPath + self.s3KmsKeyId = s3KmsKeyId + } + } + +} + extension SageMakerClientTypes.Workteam: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case createDate = "CreateDate" diff --git a/Sources/Services/AWSSageMakerFeatureStoreRuntime/SageMakerFeatureStoreRuntimeClient.swift b/Sources/Services/AWSSageMakerFeatureStoreRuntime/SageMakerFeatureStoreRuntimeClient.swift index 79d2bc76838..dc1c2f54efc 100644 --- a/Sources/Services/AWSSageMakerFeatureStoreRuntime/SageMakerFeatureStoreRuntimeClient.swift +++ b/Sources/Services/AWSSageMakerFeatureStoreRuntime/SageMakerFeatureStoreRuntimeClient.swift @@ -175,7 +175,7 @@ extension SageMakerFeatureStoreRuntimeClient: SageMakerFeatureStoreRuntimeClient return result } - /// Used for data ingestion into the FeatureStore. The PutRecord API writes to both the OnlineStore and OfflineStore. If the record is the latest record for the recordIdentifier, the record is written to both the OnlineStore and OfflineStore. If the record is a historic record, it is written only to the OfflineStore. + /// The PutRecord API is used to ingest a list of Records into your feature group. If a new record’s EventTime is greater, the new record is written to both the OnlineStore and OfflineStore. Otherwise, the record is a historic record and it is written only to the OfflineStore. You can specify the ingestion to be applied to the OnlineStore, OfflineStore, or both by using the TargetStores request parameter. You can set the ingested record to expire at a given time to live (TTL) duration after the record’s event time, ExpiresAt = EventTime + TtlDuration, by specifying the TtlDuration parameter. A record level TtlDuration is set when specifying the TtlDuration parameter using the PutRecord API call. If the input TtlDuration is null or unspecified, TtlDuration is set to the default feature group level TtlDuration. A record level TtlDuration supersedes the group level TtlDuration. public func putRecord(input: PutRecordInput) async throws -> PutRecordOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSSageMakerFeatureStoreRuntime/SageMakerFeatureStoreRuntimeClientProtocol.swift b/Sources/Services/AWSSageMakerFeatureStoreRuntime/SageMakerFeatureStoreRuntimeClientProtocol.swift index 9213e911b11..ad4465d036a 100644 --- a/Sources/Services/AWSSageMakerFeatureStoreRuntime/SageMakerFeatureStoreRuntimeClientProtocol.swift +++ b/Sources/Services/AWSSageMakerFeatureStoreRuntime/SageMakerFeatureStoreRuntimeClientProtocol.swift @@ -22,7 +22,7 @@ public protocol SageMakerFeatureStoreRuntimeClientProtocol { func deleteRecord(input: DeleteRecordInput) async throws -> DeleteRecordOutputResponse /// Use for OnlineStore serving from a FeatureStore. Only the latest records stored in the OnlineStore can be retrieved. If no Record with RecordIdentifierValue is found, then an empty result is returned. func getRecord(input: GetRecordInput) async throws -> GetRecordOutputResponse - /// Used for data ingestion into the FeatureStore. The PutRecord API writes to both the OnlineStore and OfflineStore. If the record is the latest record for the recordIdentifier, the record is written to both the OnlineStore and OfflineStore. If the record is a historic record, it is written only to the OfflineStore. + /// The PutRecord API is used to ingest a list of Records into your feature group. If a new record’s EventTime is greater, the new record is written to both the OnlineStore and OfflineStore. Otherwise, the record is a historic record and it is written only to the OfflineStore. You can specify the ingestion to be applied to the OnlineStore, OfflineStore, or both by using the TargetStores request parameter. You can set the ingested record to expire at a given time to live (TTL) duration after the record’s event time, ExpiresAt = EventTime + TtlDuration, by specifying the TtlDuration parameter. A record level TtlDuration is set when specifying the TtlDuration parameter using the PutRecord API call. If the input TtlDuration is null or unspecified, TtlDuration is set to the default feature group level TtlDuration. A record level TtlDuration supersedes the group level TtlDuration. func putRecord(input: PutRecordInput) async throws -> PutRecordOutputResponse } diff --git a/Sources/Services/AWSSageMakerFeatureStoreRuntime/models/Models.swift b/Sources/Services/AWSSageMakerFeatureStoreRuntime/models/Models.swift index 794225a90ae..b12c609edeb 100644 --- a/Sources/Services/AWSSageMakerFeatureStoreRuntime/models/Models.swift +++ b/Sources/Services/AWSSageMakerFeatureStoreRuntime/models/Models.swift @@ -184,7 +184,7 @@ extension SageMakerFeatureStoreRuntimeClientTypes.BatchGetRecordIdentifier: Swif extension SageMakerFeatureStoreRuntimeClientTypes { /// The identifier that identifies the batch of Records you are retrieving in a batch. public struct BatchGetRecordIdentifier: Swift.Equatable { - /// A FeatureGroupName containing Records you are retrieving in a batch. + /// The name or Amazon Resource Name (ARN) of the FeatureGroup containing the records you are retrieving in a batch. /// This member is required. public var featureGroupName: Swift.String? /// List of names of Features to be retrieved. If not specified, the latest value for all the Features are returned. @@ -236,7 +236,7 @@ extension BatchGetRecordInput: ClientRuntime.URLPathProvider { public struct BatchGetRecordInput: Swift.Equatable { /// Parameter to request ExpiresAt in response. If Enabled, BatchGetRecord will return the value of ExpiresAt, if it is not null. If Disabled and null, BatchGetRecord will return null. public var expirationTimeResponse: SageMakerFeatureStoreRuntimeClientTypes.ExpirationTimeResponse? - /// A list of FeatureGroup names, with their corresponding RecordIdentifier value, and Feature name that have been requested to be retrieved in batch. + /// A list containing the name or Amazon Resource Name (ARN) of the FeatureGroup, the list of names of Features to be retrieved, and the corresponding RecordIdentifier values as strings. /// This member is required. public var identifiers: [SageMakerFeatureStoreRuntimeClientTypes.BatchGetRecordIdentifier]? @@ -433,7 +433,7 @@ extension SageMakerFeatureStoreRuntimeClientTypes.BatchGetRecordResultDetail: Sw } extension SageMakerFeatureStoreRuntimeClientTypes { - /// The output of Records that have been retrieved in a batch. + /// The output of records that have been retrieved in a batch. public struct BatchGetRecordResultDetail: Swift.Equatable { /// The ExpiresAt ISO string of the requested record. public var expiresAt: Swift.String? @@ -509,7 +509,7 @@ public struct DeleteRecordInput: Swift.Equatable { /// Timestamp indicating when the deletion event occurred. EventTime can be used to query data at a certain point in time. /// This member is required. public var eventTime: Swift.String? - /// The name of the feature group to delete the record from. + /// The name or Amazon Resource Name (ARN) of the feature group to delete the record from. /// This member is required. public var featureGroupName: Swift.String? /// The value for the RecordIdentifier that uniquely identifies the record, in string format. @@ -713,9 +713,9 @@ extension GetRecordInput: ClientRuntime.URLPathProvider { } public struct GetRecordInput: Swift.Equatable { - /// Parameter to request ExpiresAt in response. If Enabled, BatchGetRecord will return the value of ExpiresAt, if it is not null. If Disabled and null, BatchGetRecord will return null. + /// Parameter to request ExpiresAt in response. If Enabled, GetRecord will return the value of ExpiresAt, if it is not null. If Disabled and null, GetRecord will return null. public var expirationTimeResponse: SageMakerFeatureStoreRuntimeClientTypes.ExpirationTimeResponse? - /// The name of the feature group from which you want to retrieve a record. + /// The name or Amazon Resource Name (ARN) of the feature group from which you want to retrieve a record. /// This member is required. public var featureGroupName: Swift.String? /// List of names of Features to be retrieved. If not specified, the latest value for all the Features are returned. @@ -913,7 +913,7 @@ extension PutRecordInput: ClientRuntime.URLPathProvider { } public struct PutRecordInput: Swift.Equatable { - /// The name of the feature group that you want to insert the record into. + /// The name or Amazon Resource Name (ARN) of the feature group that you want to insert the record into. /// This member is required. public var featureGroupName: Swift.String? /// List of FeatureValues to be inserted. This will be a full over-write. If you only want to update few of the feature values, do the following: diff --git a/Sources/Services/AWSSavingsplans/models/Models.swift b/Sources/Services/AWSSavingsplans/models/Models.swift index b4a1a5e1c22..c3fc683f73c 100644 --- a/Sources/Services/AWSSavingsplans/models/Models.swift +++ b/Sources/Services/AWSSavingsplans/models/Models.swift @@ -592,9 +592,9 @@ extension DescribeSavingsPlansInputBody: Swift.Decodable { var statesDecoded0:[SavingsplansClientTypes.SavingsPlanState]? = nil if let statesContainer = statesContainer { statesDecoded0 = [SavingsplansClientTypes.SavingsPlanState]() - for string0 in statesContainer { - if let string0 = string0 { - statesDecoded0?.append(string0) + for enum0 in statesContainer { + if let enum0 = enum0 { + statesDecoded0?.append(enum0) } } } @@ -635,7 +635,7 @@ extension DescribeSavingsPlansOfferingRatesInput: Swift.Encodable { try filtersContainer.encode(savingsplanofferingratefilterelement0) } } - if maxResults != 0 { + if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { @@ -696,7 +696,7 @@ public struct DescribeSavingsPlansOfferingRatesInput: Swift.Equatable { /// The filters. public var filters: [SavingsplansClientTypes.SavingsPlanOfferingRateFilterElement]? /// The maximum number of results to return with a single call. To retrieve additional results, make another call with the returned token value. - public var maxResults: Swift.Int + public var maxResults: Swift.Int? /// The token for the next page of results. public var nextToken: Swift.String? /// The specific AWS operation for the line item in the billing report. @@ -716,7 +716,7 @@ public struct DescribeSavingsPlansOfferingRatesInput: Swift.Equatable { public init( filters: [SavingsplansClientTypes.SavingsPlanOfferingRateFilterElement]? = nil, - maxResults: Swift.Int = 0, + maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, operations: [Swift.String]? = nil, products: [SavingsplansClientTypes.SavingsPlanProductType]? = nil, @@ -750,7 +750,7 @@ struct DescribeSavingsPlansOfferingRatesInputBody: Swift.Equatable { let operations: [Swift.String]? let filters: [SavingsplansClientTypes.SavingsPlanOfferingRateFilterElement]? let nextToken: Swift.String? - let maxResults: Swift.Int + let maxResults: Swift.Int? } extension DescribeSavingsPlansOfferingRatesInputBody: Swift.Decodable { @@ -784,9 +784,9 @@ extension DescribeSavingsPlansOfferingRatesInputBody: Swift.Decodable { var savingsPlanPaymentOptionsDecoded0:[SavingsplansClientTypes.SavingsPlanPaymentOption]? = nil if let savingsPlanPaymentOptionsContainer = savingsPlanPaymentOptionsContainer { savingsPlanPaymentOptionsDecoded0 = [SavingsplansClientTypes.SavingsPlanPaymentOption]() - for string0 in savingsPlanPaymentOptionsContainer { - if let string0 = string0 { - savingsPlanPaymentOptionsDecoded0?.append(string0) + for enum0 in savingsPlanPaymentOptionsContainer { + if let enum0 = enum0 { + savingsPlanPaymentOptionsDecoded0?.append(enum0) } } } @@ -795,9 +795,9 @@ extension DescribeSavingsPlansOfferingRatesInputBody: Swift.Decodable { var savingsPlanTypesDecoded0:[SavingsplansClientTypes.SavingsPlanType]? = nil if let savingsPlanTypesContainer = savingsPlanTypesContainer { savingsPlanTypesDecoded0 = [SavingsplansClientTypes.SavingsPlanType]() - for string0 in savingsPlanTypesContainer { - if let string0 = string0 { - savingsPlanTypesDecoded0?.append(string0) + for enum0 in savingsPlanTypesContainer { + if let enum0 = enum0 { + savingsPlanTypesDecoded0?.append(enum0) } } } @@ -806,9 +806,9 @@ extension DescribeSavingsPlansOfferingRatesInputBody: Swift.Decodable { var productsDecoded0:[SavingsplansClientTypes.SavingsPlanProductType]? = nil if let productsContainer = productsContainer { productsDecoded0 = [SavingsplansClientTypes.SavingsPlanProductType]() - for string0 in productsContainer { - if let string0 = string0 { - productsDecoded0?.append(string0) + for enum0 in productsContainer { + if let enum0 = enum0 { + productsDecoded0?.append(enum0) } } } @@ -817,9 +817,9 @@ extension DescribeSavingsPlansOfferingRatesInputBody: Swift.Decodable { var serviceCodesDecoded0:[SavingsplansClientTypes.SavingsPlanRateServiceCode]? = nil if let serviceCodesContainer = serviceCodesContainer { serviceCodesDecoded0 = [SavingsplansClientTypes.SavingsPlanRateServiceCode]() - for string0 in serviceCodesContainer { - if let string0 = string0 { - serviceCodesDecoded0?.append(string0) + for enum0 in serviceCodesContainer { + if let enum0 = enum0 { + serviceCodesDecoded0?.append(enum0) } } } @@ -859,7 +859,7 @@ extension DescribeSavingsPlansOfferingRatesInputBody: Swift.Decodable { filters = filtersDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded - let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) ?? 0 + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded } } @@ -978,7 +978,7 @@ extension DescribeSavingsPlansOfferingsInput: Swift.Encodable { try filtersContainer.encode(savingsplanofferingfilterelement0) } } - if maxResults != 0 { + if let maxResults = self.maxResults { try encodeContainer.encode(maxResults, forKey: .maxResults) } if let nextToken = self.nextToken { @@ -1042,7 +1042,7 @@ public struct DescribeSavingsPlansOfferingsInput: Swift.Equatable { /// The filters. public var filters: [SavingsplansClientTypes.SavingsPlanOfferingFilterElement]? /// The maximum number of results to return with a single call. To retrieve additional results, make another call with the returned token value. - public var maxResults: Swift.Int + public var maxResults: Swift.Int? /// The token for the next page of results. public var nextToken: Swift.String? /// The IDs of the offerings. @@ -1065,7 +1065,7 @@ public struct DescribeSavingsPlansOfferingsInput: Swift.Equatable { descriptions: [Swift.String]? = nil, durations: [Swift.Int]? = nil, filters: [SavingsplansClientTypes.SavingsPlanOfferingFilterElement]? = nil, - maxResults: Swift.Int = 0, + maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil, offeringIds: [Swift.String]? = nil, operations: [Swift.String]? = nil, @@ -1105,7 +1105,7 @@ struct DescribeSavingsPlansOfferingsInputBody: Swift.Equatable { let operations: [Swift.String]? let filters: [SavingsplansClientTypes.SavingsPlanOfferingFilterElement]? let nextToken: Swift.String? - let maxResults: Swift.Int + let maxResults: Swift.Int? } extension DescribeSavingsPlansOfferingsInputBody: Swift.Decodable { @@ -1142,9 +1142,9 @@ extension DescribeSavingsPlansOfferingsInputBody: Swift.Decodable { var paymentOptionsDecoded0:[SavingsplansClientTypes.SavingsPlanPaymentOption]? = nil if let paymentOptionsContainer = paymentOptionsContainer { paymentOptionsDecoded0 = [SavingsplansClientTypes.SavingsPlanPaymentOption]() - for string0 in paymentOptionsContainer { - if let string0 = string0 { - paymentOptionsDecoded0?.append(string0) + for enum0 in paymentOptionsContainer { + if let enum0 = enum0 { + paymentOptionsDecoded0?.append(enum0) } } } @@ -1155,9 +1155,9 @@ extension DescribeSavingsPlansOfferingsInputBody: Swift.Decodable { var planTypesDecoded0:[SavingsplansClientTypes.SavingsPlanType]? = nil if let planTypesContainer = planTypesContainer { planTypesDecoded0 = [SavingsplansClientTypes.SavingsPlanType]() - for string0 in planTypesContainer { - if let string0 = string0 { - planTypesDecoded0?.append(string0) + for enum0 in planTypesContainer { + if let enum0 = enum0 { + planTypesDecoded0?.append(enum0) } } } @@ -1177,9 +1177,9 @@ extension DescribeSavingsPlansOfferingsInputBody: Swift.Decodable { var currenciesDecoded0:[SavingsplansClientTypes.CurrencyCode]? = nil if let currenciesContainer = currenciesContainer { currenciesDecoded0 = [SavingsplansClientTypes.CurrencyCode]() - for string0 in currenciesContainer { - if let string0 = string0 { - currenciesDecoded0?.append(string0) + for enum0 in currenciesContainer { + if let enum0 = enum0 { + currenciesDecoded0?.append(enum0) } } } @@ -1241,7 +1241,7 @@ extension DescribeSavingsPlansOfferingsInputBody: Swift.Decodable { filters = filtersDecoded0 let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) nextToken = nextTokenDecoded - let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) ?? 0 + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) maxResults = maxResultsDecoded } } @@ -1809,9 +1809,9 @@ extension SavingsplansClientTypes.SavingsPlan: Swift.Codable { var productTypesDecoded0:[SavingsplansClientTypes.SavingsPlanProductType]? = nil if let productTypesContainer = productTypesContainer { productTypesDecoded0 = [SavingsplansClientTypes.SavingsPlanProductType]() - for string0 in productTypesContainer { - if let string0 = string0 { - productTypesDecoded0?.append(string0) + for enum0 in productTypesContainer { + if let enum0 = enum0 { + productTypesDecoded0?.append(enum0) } } } @@ -2047,9 +2047,9 @@ extension SavingsplansClientTypes.SavingsPlanOffering: Swift.Codable { var productTypesDecoded0:[SavingsplansClientTypes.SavingsPlanProductType]? = nil if let productTypesContainer = productTypesContainer { productTypesDecoded0 = [SavingsplansClientTypes.SavingsPlanProductType]() - for string0 in productTypesContainer { - if let string0 = string0 { - productTypesDecoded0?.append(string0) + for enum0 in productTypesContainer { + if let enum0 = enum0 { + productTypesDecoded0?.append(enum0) } } } diff --git a/Sources/Services/AWSScheduler/models/Models.swift b/Sources/Services/AWSScheduler/models/Models.swift index 73385c1b53a..a6cd03c11f1 100644 --- a/Sources/Services/AWSScheduler/models/Models.swift +++ b/Sources/Services/AWSScheduler/models/Models.swift @@ -2,6 +2,38 @@ import AWSClientRuntime import ClientRuntime +extension SchedulerClientTypes { + public enum ActionAfterCompletion: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case delete + case `none` + case sdkUnknown(Swift.String) + + public static var allCases: [ActionAfterCompletion] { + return [ + .delete, + .none, + .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 .delete: return "DELETE" + case .none: return "NONE" + 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 = ActionAfterCompletion(rawValue: rawValue) ?? ActionAfterCompletion.sdkUnknown(rawValue) + } + } +} + extension SchedulerClientTypes { public enum AssignPublicIp: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case disabled @@ -363,6 +395,7 @@ extension CreateScheduleGroupOutputResponseBody: Swift.Decodable { extension CreateScheduleInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case actionAfterCompletion = "ActionAfterCompletion" case clientToken = "ClientToken" case description = "Description" case endDate = "EndDate" @@ -378,6 +411,9 @@ extension CreateScheduleInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let actionAfterCompletion = self.actionAfterCompletion { + try encodeContainer.encode(actionAfterCompletion.rawValue, forKey: .actionAfterCompletion) + } if let clientToken = self.clientToken { try encodeContainer.encode(clientToken, forKey: .clientToken) } @@ -424,6 +460,8 @@ extension CreateScheduleInput: ClientRuntime.URLPathProvider { } public struct CreateScheduleInput: Swift.Equatable { + /// Specifies the action that EventBridge Scheduler applies to the schedule after the schedule completes invoking the target. + public var actionAfterCompletion: SchedulerClientTypes.ActionAfterCompletion? /// Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, EventBridge Scheduler uses a randomly generated token for the request to ensure idempotency. public var clientToken: Swift.String? /// The description you specify for the schedule. @@ -444,7 +482,7 @@ public struct CreateScheduleInput: Swift.Equatable { /// /// * at expression - at(yyyy-mm-ddThh:mm:ss) /// - /// * rate expression - rate(unit value) + /// * rate expression - rate(value unit) /// /// * cron expression - cron(fields) /// @@ -463,6 +501,7 @@ public struct CreateScheduleInput: Swift.Equatable { public var target: SchedulerClientTypes.Target? public init( + actionAfterCompletion: SchedulerClientTypes.ActionAfterCompletion? = nil, clientToken: Swift.String? = nil, description: Swift.String? = nil, endDate: ClientRuntime.Date? = nil, @@ -477,6 +516,7 @@ public struct CreateScheduleInput: Swift.Equatable { target: SchedulerClientTypes.Target? = nil ) { + self.actionAfterCompletion = actionAfterCompletion self.clientToken = clientToken self.description = description self.endDate = endDate @@ -504,10 +544,12 @@ struct CreateScheduleInputBody: Swift.Equatable { let target: SchedulerClientTypes.Target? let flexibleTimeWindow: SchedulerClientTypes.FlexibleTimeWindow? let clientToken: Swift.String? + let actionAfterCompletion: SchedulerClientTypes.ActionAfterCompletion? } extension CreateScheduleInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case actionAfterCompletion = "ActionAfterCompletion" case clientToken = "ClientToken" case description = "Description" case endDate = "EndDate" @@ -545,6 +587,8 @@ extension CreateScheduleInputBody: Swift.Decodable { flexibleTimeWindow = flexibleTimeWindowDecoded let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) clientToken = clientTokenDecoded + let actionAfterCompletionDecoded = try containerValues.decodeIfPresent(SchedulerClientTypes.ActionAfterCompletion.self, forKey: .actionAfterCompletion) + actionAfterCompletion = actionAfterCompletionDecoded } } @@ -1337,6 +1381,7 @@ extension GetScheduleOutputResponse: ClientRuntime.HttpResponseBinding { if let data = try await httpResponse.body.readData(), let responseDecoder = decoder { let output: GetScheduleOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.actionAfterCompletion = output.actionAfterCompletion self.arn = output.arn self.creationDate = output.creationDate self.description = output.description @@ -1352,6 +1397,7 @@ extension GetScheduleOutputResponse: ClientRuntime.HttpResponseBinding { self.state = output.state self.target = output.target } else { + self.actionAfterCompletion = nil self.arn = nil self.creationDate = nil self.description = nil @@ -1371,6 +1417,8 @@ extension GetScheduleOutputResponse: ClientRuntime.HttpResponseBinding { } public struct GetScheduleOutputResponse: Swift.Equatable { + /// Indicates the action that EventBridge Scheduler applies to the schedule after the schedule completes invoking the target. + public var actionAfterCompletion: SchedulerClientTypes.ActionAfterCompletion? /// The Amazon Resource Name (ARN) of the schedule. public var arn: Swift.String? /// The time at which the schedule was created. @@ -1393,7 +1441,7 @@ public struct GetScheduleOutputResponse: Swift.Equatable { /// /// * at expression - at(yyyy-mm-ddThh:mm:ss) /// - /// * rate expression - rate(unit value) + /// * rate expression - rate(value unit) /// /// * cron expression - cron(fields) /// @@ -1410,6 +1458,7 @@ public struct GetScheduleOutputResponse: Swift.Equatable { public var target: SchedulerClientTypes.Target? public init( + actionAfterCompletion: SchedulerClientTypes.ActionAfterCompletion? = nil, arn: Swift.String? = nil, creationDate: ClientRuntime.Date? = nil, description: Swift.String? = nil, @@ -1426,6 +1475,7 @@ public struct GetScheduleOutputResponse: Swift.Equatable { target: SchedulerClientTypes.Target? = nil ) { + self.actionAfterCompletion = actionAfterCompletion self.arn = arn self.creationDate = creationDate self.description = description @@ -1458,10 +1508,12 @@ struct GetScheduleOutputResponseBody: Swift.Equatable { let kmsKeyArn: Swift.String? let target: SchedulerClientTypes.Target? let flexibleTimeWindow: SchedulerClientTypes.FlexibleTimeWindow? + let actionAfterCompletion: SchedulerClientTypes.ActionAfterCompletion? } extension GetScheduleOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case actionAfterCompletion = "ActionAfterCompletion" case arn = "Arn" case creationDate = "CreationDate" case description = "Description" @@ -1508,6 +1560,8 @@ extension GetScheduleOutputResponseBody: Swift.Decodable { target = targetDecoded let flexibleTimeWindowDecoded = try containerValues.decodeIfPresent(SchedulerClientTypes.FlexibleTimeWindow.self, forKey: .flexibleTimeWindow) flexibleTimeWindow = flexibleTimeWindowDecoded + let actionAfterCompletionDecoded = try containerValues.decodeIfPresent(SchedulerClientTypes.ActionAfterCompletion.self, forKey: .actionAfterCompletion) + actionAfterCompletion = actionAfterCompletionDecoded } } @@ -3187,6 +3241,7 @@ public struct UntagResourceOutputResponse: Swift.Equatable { extension UpdateScheduleInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case actionAfterCompletion = "ActionAfterCompletion" case clientToken = "ClientToken" case description = "Description" case endDate = "EndDate" @@ -3202,6 +3257,9 @@ extension UpdateScheduleInput: Swift.Encodable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let actionAfterCompletion = self.actionAfterCompletion { + try encodeContainer.encode(actionAfterCompletion.rawValue, forKey: .actionAfterCompletion) + } if let clientToken = self.clientToken { try encodeContainer.encode(clientToken, forKey: .clientToken) } @@ -3248,6 +3306,8 @@ extension UpdateScheduleInput: ClientRuntime.URLPathProvider { } public struct UpdateScheduleInput: Swift.Equatable { + /// Specifies the action that EventBridge Scheduler applies to the schedule after the schedule completes invoking the target. + public var actionAfterCompletion: SchedulerClientTypes.ActionAfterCompletion? /// Unique, case-sensitive identifier you provide to ensure the idempotency of the request. If you do not specify a client token, EventBridge Scheduler uses a randomly generated token for the request to ensure idempotency. public var clientToken: Swift.String? /// The description you specify for the schedule. @@ -3268,7 +3328,7 @@ public struct UpdateScheduleInput: Swift.Equatable { /// /// * at expression - at(yyyy-mm-ddThh:mm:ss) /// - /// * rate expression - rate(unit value) + /// * rate expression - rate(value unit) /// /// * cron expression - cron(fields) /// @@ -3287,6 +3347,7 @@ public struct UpdateScheduleInput: Swift.Equatable { public var target: SchedulerClientTypes.Target? public init( + actionAfterCompletion: SchedulerClientTypes.ActionAfterCompletion? = nil, clientToken: Swift.String? = nil, description: Swift.String? = nil, endDate: ClientRuntime.Date? = nil, @@ -3301,6 +3362,7 @@ public struct UpdateScheduleInput: Swift.Equatable { target: SchedulerClientTypes.Target? = nil ) { + self.actionAfterCompletion = actionAfterCompletion self.clientToken = clientToken self.description = description self.endDate = endDate @@ -3328,10 +3390,12 @@ struct UpdateScheduleInputBody: Swift.Equatable { let target: SchedulerClientTypes.Target? let flexibleTimeWindow: SchedulerClientTypes.FlexibleTimeWindow? let clientToken: Swift.String? + let actionAfterCompletion: SchedulerClientTypes.ActionAfterCompletion? } extension UpdateScheduleInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { + case actionAfterCompletion = "ActionAfterCompletion" case clientToken = "ClientToken" case description = "Description" case endDate = "EndDate" @@ -3369,6 +3433,8 @@ extension UpdateScheduleInputBody: Swift.Decodable { flexibleTimeWindow = flexibleTimeWindowDecoded let clientTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .clientToken) clientToken = clientTokenDecoded + let actionAfterCompletionDecoded = try containerValues.decodeIfPresent(SchedulerClientTypes.ActionAfterCompletion.self, forKey: .actionAfterCompletion) + actionAfterCompletion = actionAfterCompletionDecoded } } diff --git a/Sources/Services/AWSSecretsManager/SecretsManagerClient.swift b/Sources/Services/AWSSecretsManager/SecretsManagerClient.swift index 6e80e08a83a..1095a7a6bcb 100644 --- a/Sources/Services/AWSSecretsManager/SecretsManagerClient.swift +++ b/Sources/Services/AWSSecretsManager/SecretsManagerClient.swift @@ -809,7 +809,7 @@ extension SecretsManagerClient: SecretsManagerClientProtocol { return result } - /// Modifies the details of a secret, including metadata and the secret value. To change the secret value, you can also use [PutSecretValue]. To change the rotation configuration of a secret, use [RotateSecret] instead. To change a secret so that it is managed by another service, you need to recreate the secret in that service. See [Secrets Manager secrets managed by other Amazon Web Services services](https://docs.aws.amazon.com/secretsmanager/latest/userguide/service-linked-secrets.html). We recommend you avoid calling UpdateSecret at a sustained rate of more than once every 10 minutes. When you call UpdateSecret to update the secret value, Secrets Manager creates a new version of the secret. Secrets Manager removes outdated versions when there are more than 100, but it does not remove versions created less than 24 hours ago. If you update the secret value more than once every 10 minutes, you create more versions than Secrets Manager removes, and you will reach the quota for secret versions. If you include SecretString or SecretBinary to create a new secret version, Secrets Manager automatically moves the staging label AWSCURRENT to the new version. Then it attaches the label AWSPREVIOUS to the version that AWSCURRENT was removed from. If you call this operation with a ClientRequestToken that matches an existing version's VersionId, the operation results in an error. You can't modify an existing version, you can only create a new version. To remove a version, remove all staging labels from it. See [UpdateSecretVersionStage]. Secrets Manager generates a CloudTrail log entry when you call this action. Do not include sensitive information in request parameters except SecretBinary or SecretString because it might be logged. For more information, see [Logging Secrets Manager events with CloudTrail](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieve-ct-entries.html). Required permissions: secretsmanager:UpdateSecret. For more information, see [ IAM policy actions for Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html#reference_iam-permissions_actions) and [Authentication and access control in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html). If you use a customer managed key, you must also have kms:GenerateDataKey and kms:Decrypt permissions on the key. For more information, see [ Secret encryption and decryption](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html). + /// Modifies the details of a secret, including metadata and the secret value. To change the secret value, you can also use [PutSecretValue]. To change the rotation configuration of a secret, use [RotateSecret] instead. To change a secret so that it is managed by another service, you need to recreate the secret in that service. See [Secrets Manager secrets managed by other Amazon Web Services services](https://docs.aws.amazon.com/secretsmanager/latest/userguide/service-linked-secrets.html). We recommend you avoid calling UpdateSecret at a sustained rate of more than once every 10 minutes. When you call UpdateSecret to update the secret value, Secrets Manager creates a new version of the secret. Secrets Manager removes outdated versions when there are more than 100, but it does not remove versions created less than 24 hours ago. If you update the secret value more than once every 10 minutes, you create more versions than Secrets Manager removes, and you will reach the quota for secret versions. If you include SecretString or SecretBinary to create a new secret version, Secrets Manager automatically moves the staging label AWSCURRENT to the new version. Then it attaches the label AWSPREVIOUS to the version that AWSCURRENT was removed from. If you call this operation with a ClientRequestToken that matches an existing version's VersionId, the operation results in an error. You can't modify an existing version, you can only create a new version. To remove a version, remove all staging labels from it. See [UpdateSecretVersionStage]. Secrets Manager generates a CloudTrail log entry when you call this action. Do not include sensitive information in request parameters except SecretBinary or SecretString because it might be logged. For more information, see [Logging Secrets Manager events with CloudTrail](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieve-ct-entries.html). Required permissions: secretsmanager:UpdateSecret. For more information, see [ IAM policy actions for Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html#reference_iam-permissions_actions) and [Authentication and access control in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html). If you use a customer managed key, you must also have kms:GenerateDataKey, kms:Encrypt, and kms:Decrypt permissions on the key. If you change the KMS key and you don't have kms:Encrypt permission to the new key, Secrets Manager does not re-ecrypt existing secret versions with the new key. For more information, see [ Secret encryption and decryption](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html). public func updateSecret(input: UpdateSecretInput) async throws -> UpdateSecretOutputResponse { let context = ClientRuntime.HttpContextBuilder() diff --git a/Sources/Services/AWSSecretsManager/SecretsManagerClientProtocol.swift b/Sources/Services/AWSSecretsManager/SecretsManagerClientProtocol.swift index 939584a59d5..18cc4cef21a 100644 --- a/Sources/Services/AWSSecretsManager/SecretsManagerClientProtocol.swift +++ b/Sources/Services/AWSSecretsManager/SecretsManagerClientProtocol.swift @@ -57,7 +57,7 @@ public protocol SecretsManagerClientProtocol { func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse /// Removes specific tags from a secret. This operation is idempotent. If a requested tag is not attached to the secret, no error is returned and the secret metadata is unchanged. If you use tags as part of your security strategy, then removing a tag can change permissions. If successfully completing this operation would result in you losing your permissions for this secret, then the operation is blocked and returns an Access Denied error. Secrets Manager generates a CloudTrail log entry when you call this action. Do not include sensitive information in request parameters because it might be logged. For more information, see [Logging Secrets Manager events with CloudTrail](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieve-ct-entries.html). Required permissions: secretsmanager:UntagResource. For more information, see [ IAM policy actions for Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html#reference_iam-permissions_actions) and [Authentication and access control in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html). func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse - /// Modifies the details of a secret, including metadata and the secret value. To change the secret value, you can also use [PutSecretValue]. To change the rotation configuration of a secret, use [RotateSecret] instead. To change a secret so that it is managed by another service, you need to recreate the secret in that service. See [Secrets Manager secrets managed by other Amazon Web Services services](https://docs.aws.amazon.com/secretsmanager/latest/userguide/service-linked-secrets.html). We recommend you avoid calling UpdateSecret at a sustained rate of more than once every 10 minutes. When you call UpdateSecret to update the secret value, Secrets Manager creates a new version of the secret. Secrets Manager removes outdated versions when there are more than 100, but it does not remove versions created less than 24 hours ago. If you update the secret value more than once every 10 minutes, you create more versions than Secrets Manager removes, and you will reach the quota for secret versions. If you include SecretString or SecretBinary to create a new secret version, Secrets Manager automatically moves the staging label AWSCURRENT to the new version. Then it attaches the label AWSPREVIOUS to the version that AWSCURRENT was removed from. If you call this operation with a ClientRequestToken that matches an existing version's VersionId, the operation results in an error. You can't modify an existing version, you can only create a new version. To remove a version, remove all staging labels from it. See [UpdateSecretVersionStage]. Secrets Manager generates a CloudTrail log entry when you call this action. Do not include sensitive information in request parameters except SecretBinary or SecretString because it might be logged. For more information, see [Logging Secrets Manager events with CloudTrail](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieve-ct-entries.html). Required permissions: secretsmanager:UpdateSecret. For more information, see [ IAM policy actions for Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html#reference_iam-permissions_actions) and [Authentication and access control in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html). If you use a customer managed key, you must also have kms:GenerateDataKey and kms:Decrypt permissions on the key. For more information, see [ Secret encryption and decryption](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html). + /// Modifies the details of a secret, including metadata and the secret value. To change the secret value, you can also use [PutSecretValue]. To change the rotation configuration of a secret, use [RotateSecret] instead. To change a secret so that it is managed by another service, you need to recreate the secret in that service. See [Secrets Manager secrets managed by other Amazon Web Services services](https://docs.aws.amazon.com/secretsmanager/latest/userguide/service-linked-secrets.html). We recommend you avoid calling UpdateSecret at a sustained rate of more than once every 10 minutes. When you call UpdateSecret to update the secret value, Secrets Manager creates a new version of the secret. Secrets Manager removes outdated versions when there are more than 100, but it does not remove versions created less than 24 hours ago. If you update the secret value more than once every 10 minutes, you create more versions than Secrets Manager removes, and you will reach the quota for secret versions. If you include SecretString or SecretBinary to create a new secret version, Secrets Manager automatically moves the staging label AWSCURRENT to the new version. Then it attaches the label AWSPREVIOUS to the version that AWSCURRENT was removed from. If you call this operation with a ClientRequestToken that matches an existing version's VersionId, the operation results in an error. You can't modify an existing version, you can only create a new version. To remove a version, remove all staging labels from it. See [UpdateSecretVersionStage]. Secrets Manager generates a CloudTrail log entry when you call this action. Do not include sensitive information in request parameters except SecretBinary or SecretString because it might be logged. For more information, see [Logging Secrets Manager events with CloudTrail](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieve-ct-entries.html). Required permissions: secretsmanager:UpdateSecret. For more information, see [ IAM policy actions for Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html#reference_iam-permissions_actions) and [Authentication and access control in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html). If you use a customer managed key, you must also have kms:GenerateDataKey, kms:Encrypt, and kms:Decrypt permissions on the key. If you change the KMS key and you don't have kms:Encrypt permission to the new key, Secrets Manager does not re-ecrypt existing secret versions with the new key. For more information, see [ Secret encryption and decryption](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html). func updateSecret(input: UpdateSecretInput) async throws -> UpdateSecretOutputResponse /// Modifies the staging labels attached to a version of a secret. Secrets Manager uses staging labels to track a version as it progresses through the secret rotation process. Each staging label can be attached to only one version at a time. To add a staging label to a version when it is already attached to another version, Secrets Manager first removes it from the other version first and then attaches it to this one. For more information about versions and staging labels, see [Concepts: Version](https://docs.aws.amazon.com/secretsmanager/latest/userguide/getting-started.html#term_version). The staging labels that you specify in the VersionStage parameter are added to the existing list of staging labels for the version. You can move the AWSCURRENT staging label to this version by including it in this call. Whenever you move AWSCURRENT, Secrets Manager automatically moves the label AWSPREVIOUS to the version that AWSCURRENT was removed from. If this action results in the last label being removed from a version, then the version is considered to be 'deprecated' and can be deleted by Secrets Manager. Secrets Manager generates a CloudTrail log entry when you call this action. Do not include sensitive information in request parameters because it might be logged. For more information, see [Logging Secrets Manager events with CloudTrail](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieve-ct-entries.html). Required permissions: secretsmanager:UpdateSecretVersionStage. For more information, see [ IAM policy actions for Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html#reference_iam-permissions_actions) and [Authentication and access control in Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html). func updateSecretVersionStage(input: UpdateSecretVersionStageInput) async throws -> UpdateSecretVersionStageOutputResponse diff --git a/Sources/Services/AWSSecretsManager/models/Models.swift b/Sources/Services/AWSSecretsManager/models/Models.swift index 183ad249d23..2efcd928d8a 100644 --- a/Sources/Services/AWSSecretsManager/models/Models.swift +++ b/Sources/Services/AWSSecretsManager/models/Models.swift @@ -4557,7 +4557,7 @@ public struct UpdateSecretInput: Swift.Equatable { public var clientRequestToken: Swift.String? /// The description of the secret. public var description: Swift.String? - /// The ARN, key ID, or alias of the KMS key that Secrets Manager uses to encrypt new secret versions as well as any existing versions with the staging labels AWSCURRENT, AWSPENDING, or AWSPREVIOUS. For more information about versions and staging labels, see [Concepts: Version](https://docs.aws.amazon.com/secretsmanager/latest/userguide/getting-started.html#term_version). A key alias is always prefixed by alias/, for example alias/aws/secretsmanager. For more information, see [About aliases](https://docs.aws.amazon.com/kms/latest/developerguide/alias-about.html). If you set this to an empty string, Secrets Manager uses the Amazon Web Services managed key aws/secretsmanager. If this key doesn't already exist in your account, then Secrets Manager creates it for you automatically. All users and roles in the Amazon Web Services account automatically have access to use aws/secretsmanager. Creating aws/secretsmanager can result in a one-time significant delay in returning the result. You can only use the Amazon Web Services managed key aws/secretsmanager if you call this operation using credentials from the same Amazon Web Services account that owns the secret. If the secret is in a different account, then you must use a customer managed key and provide the ARN of that KMS key in this field. The user making the call must have permissions to both the secret and the KMS key in their respective accounts. + /// The ARN, key ID, or alias of the KMS key that Secrets Manager uses to encrypt new secret versions as well as any existing versions with the staging labels AWSCURRENT, AWSPENDING, or AWSPREVIOUS. If you don't have kms:Encrypt permission to the new key, Secrets Manager does not re-ecrypt existing secret versions with the new key. For more information about versions and staging labels, see [Concepts: Version](https://docs.aws.amazon.com/secretsmanager/latest/userguide/getting-started.html#term_version). A key alias is always prefixed by alias/, for example alias/aws/secretsmanager. For more information, see [About aliases](https://docs.aws.amazon.com/kms/latest/developerguide/alias-about.html). If you set this to an empty string, Secrets Manager uses the Amazon Web Services managed key aws/secretsmanager. If this key doesn't already exist in your account, then Secrets Manager creates it for you automatically. All users and roles in the Amazon Web Services account automatically have access to use aws/secretsmanager. Creating aws/secretsmanager can result in a one-time significant delay in returning the result. You can only use the Amazon Web Services managed key aws/secretsmanager if you call this operation using credentials from the same Amazon Web Services account that owns the secret. If the secret is in a different account, then you must use a customer managed key and provide the ARN of that KMS key in this field. The user making the call must have permissions to both the secret and the KMS key in their respective accounts. public var kmsKeyId: Swift.String? /// The binary data to encrypt and store in the new version of the secret. We recommend that you store your binary data in a file and then pass the contents of the file as a parameter. Either SecretBinary or SecretString must have a value, but not both. You can't access this parameter in the Secrets Manager console. public var secretBinary: ClientRuntime.Data? diff --git a/Sources/Services/AWSSecurityHub/models/Models.swift b/Sources/Services/AWSSecurityHub/models/Models.swift index 615b075e889..2edcbcfa9ab 100644 --- a/Sources/Services/AWSSecurityHub/models/Models.swift +++ b/Sources/Services/AWSSecurityHub/models/Models.swift @@ -1162,7 +1162,7 @@ extension SecurityHubClientTypes { public var criteria: SecurityHubClientTypes.AutomationRulesFindingFilters? /// A description of the rule. public var description: Swift.String? - /// Specifies whether a rule is the last to be applied with respect to a finding that matches the rule criteria. This is useful when a finding matches the criteria for multiple rules, and each rule has different actions. If the value of this field is set to true for a rule, Security Hub applies the rule action to a finding that matches the rule criteria and doesn't evaluate other rules for the finding.
 The default value of this field is false. + /// Specifies whether a rule is the last to be applied with respect to a finding that matches the rule criteria. This is useful when a finding matches the criteria for multiple rules, and each rule has different actions. If a rule is terminal, Security Hub applies the rule action to a finding that matches the rule criteria and doesn't evaluate other rules for the finding. By default, a rule isn't terminal. public var isTerminal: Swift.Bool /// The Amazon Resource Name (ARN) of a rule. public var ruleArn: Swift.String? @@ -2227,7 +2227,7 @@ extension SecurityHubClientTypes { public var createdBy: Swift.String? /// A description of the rule. public var description: Swift.String? - /// Specifies whether a rule is the last to be applied with respect to a finding that matches the rule criteria. This is useful when a finding matches the criteria for multiple rules, and each rule has different actions. If the value of this field is set to true for a rule, Security Hub applies the rule action to a finding that matches the rule criteria and doesn't evaluate other rules for the finding.
 The default value of this field is false. + /// Specifies whether a rule is the last to be applied with respect to a finding that matches the rule criteria. This is useful when a finding matches the criteria for multiple rules, and each rule has different actions. If a rule is terminal, Security Hub applies the rule action to a finding that matches the rule criteria and doesn't evaluate other rules for the finding. By default, a rule isn't terminal. public var isTerminal: Swift.Bool /// The Amazon Resource Name (ARN) for the rule. public var ruleArn: Swift.String? @@ -4597,6 +4597,186 @@ extension SecurityHubClientTypes { } +extension SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationDetails: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case resultConfiguration = "ResultConfiguration" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let resultConfiguration = self.resultConfiguration { + try encodeContainer.encode(resultConfiguration, forKey: .resultConfiguration) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let resultConfigurationDecoded = try containerValues.decodeIfPresent(SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationResultConfigurationDetails.self, forKey: .resultConfiguration) + resultConfiguration = resultConfigurationDecoded + } +} + +extension SecurityHubClientTypes { + /// The configuration of the workgroup, which includes the location in Amazon Simple Storage Service (Amazon S3) where query results are stored, the encryption option, if any, used for query results, whether Amazon CloudWatch metrics are enabled for the workgroup, and the limit for the amount of bytes scanned (cutoff) per query, if it is specified. + public struct AwsAthenaWorkGroupConfigurationDetails: Swift.Equatable { + /// The location in Amazon S3 where query and calculation results are stored and the encryption option, if any, used for query and calculation results. These are known as client-side settings. If workgroup settings override client-side settings, then the query uses the workgroup settings. + public var resultConfiguration: SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationResultConfigurationDetails? + + public init( + resultConfiguration: SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationResultConfigurationDetails? = nil + ) + { + self.resultConfiguration = resultConfiguration + } + } + +} + +extension SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationResultConfigurationDetails: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case encryptionConfiguration = "EncryptionConfiguration" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let encryptionConfiguration = self.encryptionConfiguration { + try encodeContainer.encode(encryptionConfiguration, forKey: .encryptionConfiguration) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let encryptionConfigurationDecoded = try containerValues.decodeIfPresent(SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationResultConfigurationEncryptionConfigurationDetails.self, forKey: .encryptionConfiguration) + encryptionConfiguration = encryptionConfigurationDecoded + } +} + +extension SecurityHubClientTypes { + /// The location in Amazon Simple Storage Service (Amazon S3) where query and calculation results are stored and the encryption option, if any, used for query and calculation results. These are known as client-side settings. If workgroup settings override client-side settings, then the query uses the workgroup settings. + public struct AwsAthenaWorkGroupConfigurationResultConfigurationDetails: Swift.Equatable { + /// Specifies the method used to encrypt the user’s data stores in the Athena workgroup. + public var encryptionConfiguration: SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationResultConfigurationEncryptionConfigurationDetails? + + public init( + encryptionConfiguration: SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationResultConfigurationEncryptionConfigurationDetails? = nil + ) + { + self.encryptionConfiguration = encryptionConfiguration + } + } + +} + +extension SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationResultConfigurationEncryptionConfigurationDetails: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case encryptionOption = "EncryptionOption" + case kmsKey = "KmsKey" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let encryptionOption = self.encryptionOption { + try encodeContainer.encode(encryptionOption, forKey: .encryptionOption) + } + if let kmsKey = self.kmsKey { + try encodeContainer.encode(kmsKey, forKey: .kmsKey) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let encryptionOptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .encryptionOption) + encryptionOption = encryptionOptionDecoded + let kmsKeyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .kmsKey) + kmsKey = kmsKeyDecoded + } +} + +extension SecurityHubClientTypes { + /// Specifies the method used to encrypt the user’s data stores in the Athena workgroup. + public struct AwsAthenaWorkGroupConfigurationResultConfigurationEncryptionConfigurationDetails: Swift.Equatable { + /// Indicates whether Amazon Simple Storage Service (Amazon S3) server-side encryption with Amazon S3 managed keys (SSE_S3), server-side encryption with KMS keys (SSE_KMS), or client-side encryption with KMS customer managed keys (CSE_KMS) is used. + public var encryptionOption: Swift.String? + /// For SSE_KMS and CSE_KMS, this is the KMS key Amazon Resource Name (ARN) or ID. + public var kmsKey: Swift.String? + + public init( + encryptionOption: Swift.String? = nil, + kmsKey: Swift.String? = nil + ) + { + self.encryptionOption = encryptionOption + self.kmsKey = kmsKey + } + } + +} + +extension SecurityHubClientTypes.AwsAthenaWorkGroupDetails: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case configuration = "Configuration" + case description = "Description" + case name = "Name" + case state = "State" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let configuration = self.configuration { + try encodeContainer.encode(configuration, forKey: .configuration) + } + if let description = self.description { + try encodeContainer.encode(description, forKey: .description) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let state = self.state { + try encodeContainer.encode(state, forKey: .state) + } + } + + 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 descriptionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .description) + description = descriptionDecoded + let stateDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .state) + state = stateDecoded + let configurationDecoded = try containerValues.decodeIfPresent(SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationDetails.self, forKey: .configuration) + configuration = configurationDecoded + } +} + +extension SecurityHubClientTypes { + /// Provides information about an Amazon Athena workgroup. + public struct AwsAthenaWorkGroupDetails: Swift.Equatable { + /// The configuration of the workgroup, which includes the location in Amazon Simple Storage Service (Amazon S3) where query results are stored, the encryption option, if any, used for query results, whether Amazon CloudWatch metrics are enabled for the workgroup, and the limit for the amount of bytes scanned (cutoff) per query, if it is specified. + public var configuration: SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationDetails? + /// The workgroup description. + public var description: Swift.String? + /// The workgroup name. + public var name: Swift.String? + /// Whether the workgroup is enabled or disabled. + public var state: Swift.String? + + public init( + configuration: SecurityHubClientTypes.AwsAthenaWorkGroupConfigurationDetails? = nil, + description: Swift.String? = nil, + name: Swift.String? = nil, + state: Swift.String? = nil + ) + { + self.configuration = configuration + self.description = description + self.name = name + self.state = state + } + } + +} + extension SecurityHubClientTypes.AwsAutoScalingAutoScalingGroupAvailabilityZonesListDetails: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case value = "Value" @@ -29266,12 +29446,70 @@ extension SecurityHubClientTypes { } +extension SecurityHubClientTypes.AwsRdsDbClusterSnapshotDbClusterSnapshotAttribute: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case attributeName = "AttributeName" + case attributeValues = "AttributeValues" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let attributeName = self.attributeName { + try encodeContainer.encode(attributeName, forKey: .attributeName) + } + if let attributeValues = attributeValues { + var attributeValuesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .attributeValues) + for nonemptystring0 in attributeValues { + try attributeValuesContainer.encode(nonemptystring0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let attributeNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .attributeName) + attributeName = attributeNameDecoded + let attributeValuesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .attributeValues) + var attributeValuesDecoded0:[Swift.String]? = nil + if let attributeValuesContainer = attributeValuesContainer { + attributeValuesDecoded0 = [Swift.String]() + for string0 in attributeValuesContainer { + if let string0 = string0 { + attributeValuesDecoded0?.append(string0) + } + } + } + attributeValues = attributeValuesDecoded0 + } +} + +extension SecurityHubClientTypes { + /// Contains the name and values of a manual Amazon Relational Database Service (RDS) DB cluster snapshot attribute. + public struct AwsRdsDbClusterSnapshotDbClusterSnapshotAttribute: Swift.Equatable { + /// The name of the manual DB cluster snapshot attribute. The attribute named restore refers to the list of Amazon Web Services accounts that have permission to copy or restore the manual DB cluster snapshot. + public var attributeName: Swift.String? + /// The value(s) for the manual DB cluster snapshot attribute. If the AttributeName field is set to restore, then this element returns a list of IDs of the Amazon Web Services accounts that are authorized to copy or restore the manual DB cluster snapshot. If a value of all is in the list, then the manual DB cluster snapshot is public and available for any Amazon Web Services account to copy or restore. + public var attributeValues: [Swift.String]? + + public init( + attributeName: Swift.String? = nil, + attributeValues: [Swift.String]? = nil + ) + { + self.attributeName = attributeName + self.attributeValues = attributeValues + } + } + +} + extension SecurityHubClientTypes.AwsRdsDbClusterSnapshotDetails: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case allocatedStorage = "AllocatedStorage" case availabilityZones = "AvailabilityZones" case clusterCreateTime = "ClusterCreateTime" case dbClusterIdentifier = "DbClusterIdentifier" + case dbClusterSnapshotAttributes = "DbClusterSnapshotAttributes" case dbClusterSnapshotIdentifier = "DbClusterSnapshotIdentifier" case engine = "Engine" case engineVersion = "EngineVersion" @@ -29305,6 +29543,12 @@ extension SecurityHubClientTypes.AwsRdsDbClusterSnapshotDetails: Swift.Codable { if let dbClusterIdentifier = self.dbClusterIdentifier { try encodeContainer.encode(dbClusterIdentifier, forKey: .dbClusterIdentifier) } + if let dbClusterSnapshotAttributes = dbClusterSnapshotAttributes { + var dbClusterSnapshotAttributesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .dbClusterSnapshotAttributes) + for awsrdsdbclustersnapshotdbclustersnapshotattribute0 in dbClusterSnapshotAttributes { + try dbClusterSnapshotAttributesContainer.encode(awsrdsdbclustersnapshotdbclustersnapshotattribute0) + } + } if let dbClusterSnapshotIdentifier = self.dbClusterSnapshotIdentifier { try encodeContainer.encode(dbClusterSnapshotIdentifier, forKey: .dbClusterSnapshotIdentifier) } @@ -29396,6 +29640,17 @@ extension SecurityHubClientTypes.AwsRdsDbClusterSnapshotDetails: Swift.Codable { dbClusterSnapshotIdentifier = dbClusterSnapshotIdentifierDecoded let iamDatabaseAuthenticationEnabledDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .iamDatabaseAuthenticationEnabled) ?? false iamDatabaseAuthenticationEnabled = iamDatabaseAuthenticationEnabledDecoded + let dbClusterSnapshotAttributesContainer = try containerValues.decodeIfPresent([SecurityHubClientTypes.AwsRdsDbClusterSnapshotDbClusterSnapshotAttribute?].self, forKey: .dbClusterSnapshotAttributes) + var dbClusterSnapshotAttributesDecoded0:[SecurityHubClientTypes.AwsRdsDbClusterSnapshotDbClusterSnapshotAttribute]? = nil + if let dbClusterSnapshotAttributesContainer = dbClusterSnapshotAttributesContainer { + dbClusterSnapshotAttributesDecoded0 = [SecurityHubClientTypes.AwsRdsDbClusterSnapshotDbClusterSnapshotAttribute]() + for structure0 in dbClusterSnapshotAttributesContainer { + if let structure0 = structure0 { + dbClusterSnapshotAttributesDecoded0?.append(structure0) + } + } + } + dbClusterSnapshotAttributes = dbClusterSnapshotAttributesDecoded0 } } @@ -29410,6 +29665,8 @@ extension SecurityHubClientTypes { public var clusterCreateTime: Swift.String? /// The DB cluster identifier. public var dbClusterIdentifier: Swift.String? + /// Contains the name and values of a manual DB cluster snapshot attribute. + public var dbClusterSnapshotAttributes: [SecurityHubClientTypes.AwsRdsDbClusterSnapshotDbClusterSnapshotAttribute]? /// The identifier of the DB cluster snapshot. public var dbClusterSnapshotIdentifier: Swift.String? /// The name of the database engine that you want to use for this DB instance. @@ -29444,6 +29701,7 @@ extension SecurityHubClientTypes { availabilityZones: [Swift.String]? = nil, clusterCreateTime: Swift.String? = nil, dbClusterIdentifier: Swift.String? = nil, + dbClusterSnapshotAttributes: [SecurityHubClientTypes.AwsRdsDbClusterSnapshotDbClusterSnapshotAttribute]? = nil, dbClusterSnapshotIdentifier: Swift.String? = nil, engine: Swift.String? = nil, engineVersion: Swift.String? = nil, @@ -29464,6 +29722,7 @@ extension SecurityHubClientTypes { self.availabilityZones = availabilityZones self.clusterCreateTime = clusterCreateTime self.dbClusterIdentifier = dbClusterIdentifier + self.dbClusterSnapshotAttributes = dbClusterSnapshotAttributes self.dbClusterSnapshotIdentifier = dbClusterSnapshotIdentifier self.engine = engine self.engineVersion = engineVersion @@ -43990,7 +44249,7 @@ public struct CreateAutomationRuleInput: Swift.Equatable { /// A description of the rule. /// This member is required. public var description: Swift.String? - /// Specifies whether a rule is the last to be applied with respect to a finding that matches the rule criteria. This is useful when a finding matches the criteria for multiple rules, and each rule has different actions. If the value of this field is set to true for a rule, Security Hub applies the rule action to a finding that matches the rule criteria and doesn't evaluate other rules for the finding. The default value of this field is false. + /// Specifies whether a rule is the last to be applied with respect to a finding that matches the rule criteria. This is useful when a finding matches the criteria for multiple rules, and each rule has different actions. If a rule is terminal, Security Hub applies the rule action to a finding that matches the rule criteria and doesn't evaluate other rules for the finding. By default, a rule isn't terminal. public var isTerminal: Swift.Bool? /// The name of the rule. /// This member is required. @@ -51313,13 +51572,27 @@ extension SecurityHubClientTypes.MapFilter: Swift.Codable { } extension SecurityHubClientTypes { - /// A map filter for querying findings. Each map filter provides the field to check, the value to look for, and the comparison operator. + /// A map filter for filtering Security Hub findings. Each map filter provides the field to check for, the value to check for, and the comparison operator. public struct MapFilter: Swift.Equatable { - /// The condition to apply to the key value when querying for findings with a map filter. To search for values that exactly match the filter value, use EQUALS. For example, for the ResourceTags field, the filter Department EQUALS Security matches findings that have the value Security for the tag Department. To search for values other than the filter value, use NOT_EQUALS. For example, for the ResourceTags field, the filter Department NOT_EQUALS Finance matches findings that do not have the value Finance for the tag Department. EQUALS filters on the same field are joined by OR. A finding matches if it matches any one of those filters. NOT_EQUALS filters on the same field are joined by AND. A finding matches only if it matches all of those filters. You cannot have both an EQUALS filter and a NOT_EQUALS filter on the same field. + /// The condition to apply to the key value when filtering Security Hub findings with a map filter. To search for values that have the filter value, use one of the following comparison operators: + /// + /// * To search for values that include the filter value, use CONTAINS. For example, for the ResourceTags field, the filter Department CONTAINS Security matches findings that include the value Security for the Department tag. In the same example, a finding with a value of Security team for the Department tag is a match. + /// + /// * To search for values that exactly match the filter value, use EQUALS. For example, for the ResourceTags field, the filter Department EQUALS Security matches findings that have the value Security for the Department tag. + /// + /// + /// CONTAINS and EQUALS filters on the same field are joined by OR. A finding matches if it matches any one of those filters. For example, the filters Department CONTAINS Security OR Department CONTAINS Finance match a finding that includes either Security, Finance, or both values. To search for values that don't have the filter value, use one of the following comparison operators: + /// + /// * To search for values that exclude the filter value, use NOT_CONTAINS. For example, for the ResourceTags field, the filter Department NOT_CONTAINS Finance matches findings that exclude the value Finance for the Department tag. + /// + /// * To search for values other than the filter value, use NOT_EQUALS. For example, for the ResourceTags field, the filter Department NOT_EQUALS Finance matches findings that don’t have the value Finance for the Department tag. + /// + /// + /// NOT_CONTAINS and NOT_EQUALS filters on the same field are joined by AND. A finding matches only if it matches all of those filters. For example, the filters Department NOT_CONTAINS Security AND Department NOT_CONTAINS Finance match a finding that excludes both the Security and Finance values. CONTAINS filters can only be used with other CONTAINS filters. NOT_CONTAINS filters can only be used with other NOT_CONTAINS filters. You can’t have both a CONTAINS filter and a NOT_CONTAINS filter on the same field. Similarly, you can’t have both an EQUALS filter and a NOT_EQUALS filter on the same field. Combining filters in this way returns an error. CONTAINS and NOT_CONTAINS operators can be used only with automation rules. For more information, see [Automation rules](https://docs.aws.amazon.com/securityhub/latest/userguide/automation-rules.html) in the Security Hub User Guide. public var comparison: SecurityHubClientTypes.MapFilterComparison? /// The key of the map filter. For example, for ResourceTags, Key identifies the name of the tag. For UserDefinedFields, Key is the name of the field. public var key: Swift.String? - /// The value for the key in the map filter. Filter values are case sensitive. For example, one of the values for a tag called Department might be Security. If you provide security as the filter value, then there is no match. + /// The value for the key in the map filter. Filter values are case sensitive. For example, one of the values for a tag called Department might be Security. If you provide security as the filter value, then there's no match. public var value: Swift.String? public init( @@ -51338,13 +51611,17 @@ extension SecurityHubClientTypes { extension SecurityHubClientTypes { public enum MapFilterComparison: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case contains case equals + case notContains case notEquals case sdkUnknown(Swift.String) public static var allCases: [MapFilterComparison] { return [ + .contains, .equals, + .notContains, .notEquals, .sdkUnknown("") ] @@ -51355,7 +51632,9 @@ extension SecurityHubClientTypes { } public var rawValue: Swift.String { switch self { + case .contains: return "CONTAINS" case .equals: return "EQUALS" + case .notContains: return "NOT_CONTAINS" case .notEquals: return "NOT_EQUALS" case let .sdkUnknown(s): return s } @@ -53400,6 +53679,7 @@ extension SecurityHubClientTypes.ResourceDetails: Swift.Codable { case awsApiGatewayV2Api = "AwsApiGatewayV2Api" case awsApiGatewayV2Stage = "AwsApiGatewayV2Stage" case awsAppSyncGraphQlApi = "AwsAppSyncGraphQlApi" + case awsAthenaWorkGroup = "AwsAthenaWorkGroup" case awsAutoScalingAutoScalingGroup = "AwsAutoScalingAutoScalingGroup" case awsAutoScalingLaunchConfiguration = "AwsAutoScalingLaunchConfiguration" case awsBackupBackupPlan = "AwsBackupBackupPlan" @@ -53505,6 +53785,9 @@ extension SecurityHubClientTypes.ResourceDetails: Swift.Codable { if let awsAppSyncGraphQlApi = self.awsAppSyncGraphQlApi { try encodeContainer.encode(awsAppSyncGraphQlApi, forKey: .awsAppSyncGraphQlApi) } + if let awsAthenaWorkGroup = self.awsAthenaWorkGroup { + try encodeContainer.encode(awsAthenaWorkGroup, forKey: .awsAthenaWorkGroup) + } if let awsAutoScalingAutoScalingGroup = self.awsAutoScalingAutoScalingGroup { try encodeContainer.encode(awsAutoScalingAutoScalingGroup, forKey: .awsAutoScalingAutoScalingGroup) } @@ -53948,6 +54231,8 @@ extension SecurityHubClientTypes.ResourceDetails: Swift.Codable { awsGuardDutyDetector = awsGuardDutyDetectorDecoded let awsStepFunctionStateMachineDecoded = try containerValues.decodeIfPresent(SecurityHubClientTypes.AwsStepFunctionStateMachineDetails.self, forKey: .awsStepFunctionStateMachine) awsStepFunctionStateMachine = awsStepFunctionStateMachineDecoded + let awsAthenaWorkGroupDecoded = try containerValues.decodeIfPresent(SecurityHubClientTypes.AwsAthenaWorkGroupDetails.self, forKey: .awsAthenaWorkGroup) + awsAthenaWorkGroup = awsAthenaWorkGroupDecoded } } @@ -53966,6 +54251,8 @@ extension SecurityHubClientTypes { public var awsApiGatewayV2Stage: SecurityHubClientTypes.AwsApiGatewayV2StageDetails? /// Provides details about an AppSync Graph QL API, which lets you query multiple databases, microservices, and APIs from a single GraphQL endpoint. public var awsAppSyncGraphQlApi: SecurityHubClientTypes.AwsAppSyncGraphQlApiDetails? + /// Provides information about an Amazon Athena workgroup. A workgroup helps you separate users, teams, applications, or workloads. It also helps you set limits on data processing and track costs. + public var awsAthenaWorkGroup: SecurityHubClientTypes.AwsAthenaWorkGroupDetails? /// Details for an autoscaling group. public var awsAutoScalingAutoScalingGroup: SecurityHubClientTypes.AwsAutoScalingAutoScalingGroupDetails? /// Provides details about a launch configuration. @@ -54144,6 +54431,7 @@ extension SecurityHubClientTypes { awsApiGatewayV2Api: SecurityHubClientTypes.AwsApiGatewayV2ApiDetails? = nil, awsApiGatewayV2Stage: SecurityHubClientTypes.AwsApiGatewayV2StageDetails? = nil, awsAppSyncGraphQlApi: SecurityHubClientTypes.AwsAppSyncGraphQlApiDetails? = nil, + awsAthenaWorkGroup: SecurityHubClientTypes.AwsAthenaWorkGroupDetails? = nil, awsAutoScalingAutoScalingGroup: SecurityHubClientTypes.AwsAutoScalingAutoScalingGroupDetails? = nil, awsAutoScalingLaunchConfiguration: SecurityHubClientTypes.AwsAutoScalingLaunchConfigurationDetails? = nil, awsBackupBackupPlan: SecurityHubClientTypes.AwsBackupBackupPlanDetails? = nil, @@ -54235,6 +54523,7 @@ extension SecurityHubClientTypes { self.awsApiGatewayV2Api = awsApiGatewayV2Api self.awsApiGatewayV2Stage = awsApiGatewayV2Stage self.awsAppSyncGraphQlApi = awsAppSyncGraphQlApi + self.awsAthenaWorkGroup = awsAthenaWorkGroup self.awsAutoScalingAutoScalingGroup = awsAutoScalingAutoScalingGroup self.awsAutoScalingLaunchConfiguration = awsAutoScalingLaunchConfiguration self.awsBackupBackupPlan = awsBackupBackupPlan @@ -57692,23 +57981,27 @@ extension SecurityHubClientTypes.StringFilter: Swift.Codable { } extension SecurityHubClientTypes { - /// A string filter for querying findings. + /// A string filter for filtering Security Hub findings. public struct StringFilter: Swift.Equatable { - /// The condition to apply to a string value when querying for findings. To search for values that contain the filter criteria value, use one of the following comparison operators: + /// The condition to apply to a string value when filtering Security Hub findings. To search for values that have the filter value, use one of the following comparison operators: + /// + /// * To search for values that include the filter value, use CONTAINS. For example, the filter Title CONTAINS CloudFront matches findings that have a Title that includes the string CloudFront. + /// + /// * To search for values that exactly match the filter value, use EQUALS. For example, the filter AwsAccountId EQUALS 123456789012 only matches findings that have an account ID of 123456789012. /// - /// * To search for values that exactly match the filter value, use EQUALS. For example, the filter ResourceType EQUALS AwsEc2SecurityGroup only matches findings that have a resource type of AwsEc2SecurityGroup. + /// * To search for values that start with the filter value, use PREFIX. For example, the filter ResourceRegion PREFIX us matches findings that have a ResourceRegion that starts with us. A ResourceRegion that starts with a different value, such as af, ap, or ca, doesn't match. /// - /// * To search for values that start with the filter value, use PREFIX. For example, the filter ResourceType PREFIX AwsIam matches findings that have a resource type that starts with AwsIam. Findings with a resource type of AwsIamPolicy, AwsIamRole, or AwsIamUser would all match. /// + /// CONTAINS, EQUALS, and PREFIX filters on the same field are joined by OR. A finding matches if it matches any one of those filters. For example, the filters Title CONTAINS CloudFront OR Title CONTAINS CloudWatch match a finding that includes either CloudFront, CloudWatch, or both strings in the title. To search for values that don’t have the filter value, use one of the following comparison operators: /// - /// EQUALS and PREFIX filters on the same field are joined by OR. A finding matches if it matches any one of those filters. To search for values that do not contain the filter criteria value, use one of the following comparison operators: + /// * To search for values that exclude the filter value, use NOT_CONTAINS. For example, the filter Title NOT_CONTAINS CloudFront matches findings that have a Title that excludes the string CloudFront. /// - /// * To search for values that do not exactly match the filter value, use NOT_EQUALS. For example, the filter ResourceType NOT_EQUALS AwsIamPolicy matches findings that have a resource type other than AwsIamPolicy. + /// * To search for values other than the filter value, use NOT_EQUALS. For example, the filter AwsAccountId NOT_EQUALS 123456789012 only matches findings that have an account ID other than 123456789012. /// - /// * To search for values that do not start with the filter value, use PREFIX_NOT_EQUALS. For example, the filter ResourceType PREFIX_NOT_EQUALS AwsIam matches findings that have a resource type that does not start with AwsIam. Findings with a resource type of AwsIamPolicy, AwsIamRole, or AwsIamUser would all be excluded from the results. + /// * To search for values that don't start with the filter value, use PREFIX_NOT_EQUALS. For example, the filter ResourceRegion PREFIX_NOT_EQUALS us matches findings with a ResourceRegion that starts with a value other than us. /// /// - /// NOT_EQUALS and PREFIX_NOT_EQUALS filters on the same field are joined by AND. A finding matches only if it matches all of those filters. For filters on the same field, you cannot provide both an EQUALS filter and a NOT_EQUALS or PREFIX_NOT_EQUALS filter. Combining filters in this way always returns an error, even if the provided filter values would return valid results. You can combine PREFIX filters with NOT_EQUALS or PREFIX_NOT_EQUALS filters for the same field. Security Hub first processes the PREFIX filters, then the NOT_EQUALS or PREFIX_NOT_EQUALS filters. For example, for the following filter, Security Hub first identifies findings that have resource types that start with either AwsIAM or AwsEc2. It then excludes findings that have a resource type of AwsIamPolicy and findings that have a resource type of AwsEc2NetworkInterface. + /// NOT_CONTAINS, NOT_EQUALS, and PREFIX_NOT_EQUALS filters on the same field are joined by AND. A finding matches only if it matches all of those filters. For example, the filters Title NOT_CONTAINS CloudFront AND Title NOT_CONTAINS CloudWatch match a finding that excludes both CloudFront and CloudWatch in the title. You can’t have both a CONTAINS filter and a NOT_CONTAINS filter on the same field. Similarly, you can't provide both an EQUALS filter and a NOT_EQUALS or PREFIX_NOT_EQUALS filter on the same field. Combining filters in this way returns an error. CONTAINS filters can only be used with other CONTAINS filters. NOT_CONTAINS filters can only be used with other NOT_CONTAINS filters. You can combine PREFIX filters with NOT_EQUALS or PREFIX_NOT_EQUALS filters for the same field. Security Hub first processes the PREFIX filters, and then the NOT_EQUALS or PREFIX_NOT_EQUALS filters. For example, for the following filters, Security Hub first identifies findings that have resource types that start with either AwsIam or AwsEc2. It then excludes findings that have a resource type of AwsIamPolicy and findings that have a resource type of AwsEc2NetworkInterface. /// /// * ResourceType PREFIX AwsIam /// @@ -57717,8 +58010,11 @@ extension SecurityHubClientTypes { /// * ResourceType NOT_EQUALS AwsIamPolicy /// /// * ResourceType NOT_EQUALS AwsEc2NetworkInterface + /// + /// + /// CONTAINS and NOT_CONTAINS operators can be used only with automation rules. For more information, see [Automation rules](https://docs.aws.amazon.com/securityhub/latest/userguide/automation-rules.html) in the Security Hub User Guide. public var comparison: SecurityHubClientTypes.StringFilterComparison? - /// The string filter value. Filter values are case sensitive. For example, the product name for control-based findings is Security Hub. If you provide security hub as the filter text, then there is no match. + /// The string filter value. Filter values are case sensitive. For example, the product name for control-based findings is Security Hub. If you provide security hub as the filter value, there's no match. public var value: Swift.String? public init( @@ -57735,7 +58031,9 @@ extension SecurityHubClientTypes { extension SecurityHubClientTypes { public enum StringFilterComparison: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case contains case equals + case notContains case notEquals case `prefix` case prefixNotEquals @@ -57743,7 +58041,9 @@ extension SecurityHubClientTypes { public static var allCases: [StringFilterComparison] { return [ + .contains, .equals, + .notContains, .notEquals, .prefix, .prefixNotEquals, @@ -57756,7 +58056,9 @@ extension SecurityHubClientTypes { } public var rawValue: Swift.String { switch self { + case .contains: return "CONTAINS" case .equals: return "EQUALS" + case .notContains: return "NOT_CONTAINS" case .notEquals: return "NOT_EQUALS" case .prefix: return "PREFIX" case .prefixNotEquals: return "PREFIX_NOT_EQUALS" @@ -58640,7 +58942,7 @@ extension SecurityHubClientTypes { public var criteria: SecurityHubClientTypes.AutomationRulesFindingFilters? /// A description of the rule. public var description: Swift.String? - /// Specifies whether a rule is the last to be applied with respect to a finding that matches the rule criteria. This is useful when a finding matches the criteria for multiple rules, and each rule has different actions. If the value of this field is set to true for a rule, Security Hub applies the rule action to a finding that matches the rule criteria and doesn't evaluate other rules for the finding.
 The default value of this field is false. + /// Specifies whether a rule is the last to be applied with respect to a finding that matches the rule criteria. This is useful when a finding matches the criteria for multiple rules, and each rule has different actions. If a rule is terminal, Security Hub applies the rule action to a finding that matches the rule criteria and doesn't evaluate other rules for the finding. By default, a rule isn't terminal. public var isTerminal: Swift.Bool /// The Amazon Resource Name (ARN) for the rule. /// This member is required. diff --git a/Sources/Services/AWSSecurityLake/SecurityLakeClient.swift b/Sources/Services/AWSSecurityLake/SecurityLakeClient.swift index 6e3c806d1ef..2cec54ed10d 100644 --- a/Sources/Services/AWSSecurityLake/SecurityLakeClient.swift +++ b/Sources/Services/AWSSecurityLake/SecurityLakeClient.swift @@ -67,7 +67,7 @@ public struct SecurityLakeClientLogHandlerFactory: ClientRuntime.SDKLogHandlerFa } extension SecurityLakeClient: SecurityLakeClientProtocol { - /// Adds a natively supported Amazon Web Service as an Amazon Security Lake source. Enables source types for member accounts in required Amazon Web Services Regions, based on the parameters you specify. You can choose any source type in any Region for either accounts that are part of a trusted organization or standalone accounts. Once you add an Amazon Web Service as a source, Security Lake starts collecting logs and events from it, You can use this API only to enable natively supported Amazon Web Services as a source. Use CreateCustomLogSource to enable data collection from a custom source. + /// Adds a natively supported Amazon Web Service as an Amazon Security Lake source. Enables source types for member accounts in required Amazon Web Services Regions, based on the parameters you specify. You can choose any source type in any Region for either accounts that are part of a trusted organization or standalone accounts. Once you add an Amazon Web Service as a source, Security Lake starts collecting logs and events from it. You can use this API only to enable natively supported Amazon Web Services as a source. Use CreateCustomLogSource to enable data collection from a custom source. public func createAwsLogSource(input: CreateAwsLogSourceInput) async throws -> CreateAwsLogSourceOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -139,7 +139,7 @@ extension SecurityLakeClient: SecurityLakeClientProtocol { return result } - /// Initializes an Amazon Security Lake instance with the provided (or default) configuration. You can enable Security Lake in Amazon Web Services Regions with customized settings before enabling log collection in Regions. By default, the CreateDataLake Security Lake in all Regions. To specify particular Regions, configure these Regions using the configurations parameter. If you have already enabled Security Lake in a Region when you call this command, the command will update the Region if you provide new configuration parameters. If you have not already enabled Security Lake in the Region when you call this API, it will set up the data lake in the Region with the specified configurations. When you enable Security Lake, it starts ingesting security data after the CreateAwsLogSource call. This includes ingesting security data from sources, storing data, and making data accessible to subscribers. Security Lake also enables all the existing settings and resources that it stores or maintains for your Amazon Web Services account in the current Region, including security log and event data. For more information, see the [Amazon Security Lake User Guide](https://docs.aws.amazon.com/security-lake/latest/userguide/what-is-security-lake.html). + /// Initializes an Amazon Security Lake instance with the provided (or default) configuration. You can enable Security Lake in Amazon Web Services Regions with customized settings before enabling log collection in Regions. To specify particular Regions, configure these Regions using the configurations parameter. If you have already enabled Security Lake in a Region when you call this command, the command will update the Region if you provide new configuration parameters. If you have not already enabled Security Lake in the Region when you call this API, it will set up the data lake in the Region with the specified configurations. When you enable Security Lake, it starts ingesting security data after the CreateAwsLogSource call. This includes ingesting security data from sources, storing data, and making data accessible to subscribers. Security Lake also enables all the existing settings and resources that it stores or maintains for your Amazon Web Services account in the current Region, including security log and event data. For more information, see the [Amazon Security Lake User Guide](https://docs.aws.amazon.com/security-lake/latest/userguide/what-is-security-lake.html). public func createDataLake(input: CreateDataLakeInput) async throws -> CreateDataLakeOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -458,7 +458,7 @@ extension SecurityLakeClient: SecurityLakeClientProtocol { return result } - /// Removes automatic the enablement of configuration settings for new member accounts (but retains the settings for the delegated administrator) from Amazon Security Lake. You must run this API using the credentials of the delegated administrator. When you run this API, new member accounts that are added after the organization enables Security Lake won't contribute to the data lake. + /// Turns off automatic enablement of Amazon Security Lake for member accounts that are added to an organization in Organizations. Only the delegated Security Lake administrator for an organization can perform this operation. If the delegated Security Lake administrator performs this operation, new member accounts won't automatically contribute data to the data lake. public func deleteDataLakeOrganizationConfiguration(input: DeleteDataLakeOrganizationConfigurationInput) async throws -> DeleteDataLakeOrganizationConfigurationOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -764,7 +764,7 @@ extension SecurityLakeClient: SecurityLakeClientProtocol { return result } - /// Retrieves the Amazon Security Lake configuration object for the specified Amazon Web Services account ID. You can use the ListDataLakes API to know whether Security Lake is enabled for any region. + /// Retrieves the Amazon Security Lake configuration object for the specified Amazon Web Services Regions. You can use this operation to determine whether Security Lake is enabled for a Region. public func listDataLakes(input: ListDataLakesInput) async throws -> ListDataLakesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -868,6 +868,39 @@ extension SecurityLakeClient: SecurityLakeClientProtocol { return result } + /// Retrieves the tags (keys and values) that are associated with an Amazon Security Lake resource: a subscriber, or the data lake configuration for your Amazon Web Services account in a particular Amazon Web Services Region. + public func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listTagsForResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "securitylake") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listTagsForResource") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Designates the Amazon Security Lake delegated administrator account for the organization. This API can only be called by the organization management account. The organization management account cannot be the delegated administrator account. public func registerDataLakeDelegatedAdministrator(input: RegisterDataLakeDelegatedAdministratorInput) async throws -> RegisterDataLakeDelegatedAdministratorOutputResponse { @@ -904,6 +937,76 @@ extension SecurityLakeClient: SecurityLakeClientProtocol { return result } + /// Adds or updates one or more tags that are associated with an Amazon Security Lake resource: a subscriber, or the data lake configuration for your Amazon Web Services account in a particular Amazon Web Services Region. A tag is a label that you can define and associate with Amazon Web Services resources. Each tag consists of a required tag key and an associated tag value. A tag key is a general label that acts as a category for a more specific tag value. A tag value acts as a descriptor for a tag key. Tags can help you identify, categorize, and manage resources in different ways, such as by owner, environment, or other criteria. For more information, see [Tagging Amazon Security Lake resources](https://docs.aws.amazon.com/security-lake/latest/userguide/tagging-resources.html) in the Amazon Security Lake User Guide. + public func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "tagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "securitylake") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "tagResource") + 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.serviceSpecific.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: "TagResourceRequest")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + + /// Removes one or more tags (keys and values) from an Amazon Security Lake resource: a subscriber, or the data lake configuration for your Amazon Web Services account in a particular Amazon Web Services Region. + public func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .delete) + .withServiceName(value: serviceName) + .withOperation(value: "untagResource") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "securitylake") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "untagResource") + 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.serviceSpecific.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.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Specifies where to store your security data and for how long. You can add a rollup Region to consolidate data from multiple Amazon Web Services Regions. public func updateDataLake(input: UpdateDataLakeInput) async throws -> UpdateDataLakeOutputResponse { diff --git a/Sources/Services/AWSSecurityLake/SecurityLakeClientProtocol.swift b/Sources/Services/AWSSecurityLake/SecurityLakeClientProtocol.swift index fbbb4bee55d..e9c78d083f6 100644 --- a/Sources/Services/AWSSecurityLake/SecurityLakeClientProtocol.swift +++ b/Sources/Services/AWSSecurityLake/SecurityLakeClientProtocol.swift @@ -4,11 +4,11 @@ import ClientRuntime /// Amazon Security Lake is a fully managed security data lake service. You can use Security Lake to automatically centralize security data from cloud, on-premises, and custom sources into a data lake that's stored in your Amazon Web Services account. Amazon Web Services Organizations is an account management service that lets you consolidate multiple Amazon Web Services accounts into an organization that you create and centrally manage. With Organizations, you can create member accounts and invite existing accounts to join your organization. Security Lake helps you analyze security data for a more complete understanding of your security posture across the entire organization. It can also help you improve the protection of your workloads, applications, and data. The data lake is backed by Amazon Simple Storage Service (Amazon S3) buckets, and you retain ownership over your data. Amazon Security Lake integrates with CloudTrail, a service that provides a record of actions taken by a user, role, or an Amazon Web Services service. In Security Lake, CloudTrail captures API calls for Security Lake as events. The calls captured include calls from the Security Lake console and code calls to the Security Lake API operations. If you create a trail, you can enable continuous delivery of CloudTrail events to an Amazon S3 bucket, including events for Security Lake. If you don't configure a trail, you can still view the most recent events in the CloudTrail console in Event history. Using the information collected by CloudTrail you can determine the request that was made to Security Lake, the IP address from which the request was made, who made the request, when it was made, and additional details. To learn more about Security Lake information in CloudTrail, see the [Amazon Security Lake User Guide](https://docs.aws.amazon.com/security-lake/latest/userguide/securitylake-cloudtrail.html). Security Lake automates the collection of security-related log and event data from integrated Amazon Web Services and third-party services. It also helps you manage the lifecycle of data with customizable retention and replication settings. Security Lake converts ingested data into Apache Parquet format and a standard open-source schema called the Open Cybersecurity Schema Framework (OCSF). Other Amazon Web Services and third-party services can subscribe to the data that's stored in Security Lake for incident response and security data analytics. public protocol SecurityLakeClientProtocol { - /// Adds a natively supported Amazon Web Service as an Amazon Security Lake source. Enables source types for member accounts in required Amazon Web Services Regions, based on the parameters you specify. You can choose any source type in any Region for either accounts that are part of a trusted organization or standalone accounts. Once you add an Amazon Web Service as a source, Security Lake starts collecting logs and events from it, You can use this API only to enable natively supported Amazon Web Services as a source. Use CreateCustomLogSource to enable data collection from a custom source. + /// Adds a natively supported Amazon Web Service as an Amazon Security Lake source. Enables source types for member accounts in required Amazon Web Services Regions, based on the parameters you specify. You can choose any source type in any Region for either accounts that are part of a trusted organization or standalone accounts. Once you add an Amazon Web Service as a source, Security Lake starts collecting logs and events from it. You can use this API only to enable natively supported Amazon Web Services as a source. Use CreateCustomLogSource to enable data collection from a custom source. func createAwsLogSource(input: CreateAwsLogSourceInput) async throws -> CreateAwsLogSourceOutputResponse /// Adds a third-party custom source in Amazon Security Lake, from the Amazon Web Services Region where you want to create a custom source. Security Lake can collect logs and events from third-party custom sources. After creating the appropriate IAM role to invoke Glue crawler, use this API to add a custom source name in Security Lake. This operation creates a partition in the Amazon S3 bucket for Security Lake as the target location for log files from the custom source. In addition, this operation also creates an associated Glue table and an Glue crawler. func createCustomLogSource(input: CreateCustomLogSourceInput) async throws -> CreateCustomLogSourceOutputResponse - /// Initializes an Amazon Security Lake instance with the provided (or default) configuration. You can enable Security Lake in Amazon Web Services Regions with customized settings before enabling log collection in Regions. By default, the CreateDataLake Security Lake in all Regions. To specify particular Regions, configure these Regions using the configurations parameter. If you have already enabled Security Lake in a Region when you call this command, the command will update the Region if you provide new configuration parameters. If you have not already enabled Security Lake in the Region when you call this API, it will set up the data lake in the Region with the specified configurations. When you enable Security Lake, it starts ingesting security data after the CreateAwsLogSource call. This includes ingesting security data from sources, storing data, and making data accessible to subscribers. Security Lake also enables all the existing settings and resources that it stores or maintains for your Amazon Web Services account in the current Region, including security log and event data. For more information, see the [Amazon Security Lake User Guide](https://docs.aws.amazon.com/security-lake/latest/userguide/what-is-security-lake.html). + /// Initializes an Amazon Security Lake instance with the provided (or default) configuration. You can enable Security Lake in Amazon Web Services Regions with customized settings before enabling log collection in Regions. To specify particular Regions, configure these Regions using the configurations parameter. If you have already enabled Security Lake in a Region when you call this command, the command will update the Region if you provide new configuration parameters. If you have not already enabled Security Lake in the Region when you call this API, it will set up the data lake in the Region with the specified configurations. When you enable Security Lake, it starts ingesting security data after the CreateAwsLogSource call. This includes ingesting security data from sources, storing data, and making data accessible to subscribers. Security Lake also enables all the existing settings and resources that it stores or maintains for your Amazon Web Services account in the current Region, including security log and event data. For more information, see the [Amazon Security Lake User Guide](https://docs.aws.amazon.com/security-lake/latest/userguide/what-is-security-lake.html). func createDataLake(input: CreateDataLakeInput) async throws -> CreateDataLakeOutputResponse /// Creates the specified notification subscription in Amazon Security Lake for the organization you specify. func createDataLakeExceptionSubscription(input: CreateDataLakeExceptionSubscriptionInput) async throws -> CreateDataLakeExceptionSubscriptionOutputResponse @@ -26,7 +26,7 @@ public protocol SecurityLakeClientProtocol { func deleteDataLake(input: DeleteDataLakeInput) async throws -> DeleteDataLakeOutputResponse /// Deletes the specified notification subscription in Amazon Security Lake for the organization you specify. func deleteDataLakeExceptionSubscription(input: DeleteDataLakeExceptionSubscriptionInput) async throws -> DeleteDataLakeExceptionSubscriptionOutputResponse - /// Removes automatic the enablement of configuration settings for new member accounts (but retains the settings for the delegated administrator) from Amazon Security Lake. You must run this API using the credentials of the delegated administrator. When you run this API, new member accounts that are added after the organization enables Security Lake won't contribute to the data lake. + /// Turns off automatic enablement of Amazon Security Lake for member accounts that are added to an organization in Organizations. Only the delegated Security Lake administrator for an organization can perform this operation. If the delegated Security Lake administrator performs this operation, new member accounts won't automatically contribute data to the data lake. func deleteDataLakeOrganizationConfiguration(input: DeleteDataLakeOrganizationConfigurationInput) async throws -> DeleteDataLakeOrganizationConfigurationOutputResponse /// Deletes the subscription permission and all notification settings for accounts that are already enabled in Amazon Security Lake. When you run DeleteSubscriber, the subscriber will no longer consume data from Security Lake and the subscriber is removed. This operation deletes the subscriber and removes access to data in the current Amazon Web Services Region. func deleteSubscriber(input: DeleteSubscriberInput) async throws -> DeleteSubscriberOutputResponse @@ -44,14 +44,20 @@ public protocol SecurityLakeClientProtocol { func getSubscriber(input: GetSubscriberInput) async throws -> GetSubscriberOutputResponse /// Lists the Amazon Security Lake exceptions that you can use to find the source of problems and fix them. func listDataLakeExceptions(input: ListDataLakeExceptionsInput) async throws -> ListDataLakeExceptionsOutputResponse - /// Retrieves the Amazon Security Lake configuration object for the specified Amazon Web Services account ID. You can use the ListDataLakes API to know whether Security Lake is enabled for any region. + /// Retrieves the Amazon Security Lake configuration object for the specified Amazon Web Services Regions. You can use this operation to determine whether Security Lake is enabled for a Region. func listDataLakes(input: ListDataLakesInput) async throws -> ListDataLakesOutputResponse /// Retrieves the log sources in the current Amazon Web Services Region. func listLogSources(input: ListLogSourcesInput) async throws -> ListLogSourcesOutputResponse /// List all subscribers for the specific Amazon Security Lake account ID. You can retrieve a list of subscriptions associated with a specific organization or Amazon Web Services account. func listSubscribers(input: ListSubscribersInput) async throws -> ListSubscribersOutputResponse + /// Retrieves the tags (keys and values) that are associated with an Amazon Security Lake resource: a subscriber, or the data lake configuration for your Amazon Web Services account in a particular Amazon Web Services Region. + func listTagsForResource(input: ListTagsForResourceInput) async throws -> ListTagsForResourceOutputResponse /// Designates the Amazon Security Lake delegated administrator account for the organization. This API can only be called by the organization management account. The organization management account cannot be the delegated administrator account. func registerDataLakeDelegatedAdministrator(input: RegisterDataLakeDelegatedAdministratorInput) async throws -> RegisterDataLakeDelegatedAdministratorOutputResponse + /// Adds or updates one or more tags that are associated with an Amazon Security Lake resource: a subscriber, or the data lake configuration for your Amazon Web Services account in a particular Amazon Web Services Region. A tag is a label that you can define and associate with Amazon Web Services resources. Each tag consists of a required tag key and an associated tag value. A tag key is a general label that acts as a category for a more specific tag value. A tag value acts as a descriptor for a tag key. Tags can help you identify, categorize, and manage resources in different ways, such as by owner, environment, or other criteria. For more information, see [Tagging Amazon Security Lake resources](https://docs.aws.amazon.com/security-lake/latest/userguide/tagging-resources.html) in the Amazon Security Lake User Guide. + func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse + /// Removes one or more tags (keys and values) from an Amazon Security Lake resource: a subscriber, or the data lake configuration for your Amazon Web Services account in a particular Amazon Web Services Region. + func untagResource(input: UntagResourceInput) async throws -> UntagResourceOutputResponse /// Specifies where to store your security data and for how long. You can add a rollup Region to consolidate data from multiple Amazon Web Services Regions. func updateDataLake(input: UpdateDataLakeInput) async throws -> UpdateDataLakeOutputResponse /// Updates the specified notification subscription in Amazon Security Lake for the organization you specify. diff --git a/Sources/Services/AWSSecurityLake/models/Models.swift b/Sources/Services/AWSSecurityLake/models/Models.swift index 9eb4e340f1d..ef70f0ca717 100644 --- a/Sources/Services/AWSSecurityLake/models/Models.swift +++ b/Sources/Services/AWSSecurityLake/models/Models.swift @@ -894,6 +894,7 @@ extension CreateDataLakeInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case configurations case metaStoreManagerRoleArn + case tags } public func encode(to encoder: Swift.Encoder) throws { @@ -907,6 +908,12 @@ extension CreateDataLakeInput: Swift.Encodable { if let metaStoreManagerRoleArn = self.metaStoreManagerRoleArn { try encodeContainer.encode(metaStoreManagerRoleArn, forKey: .metaStoreManagerRoleArn) } + if let tags = tags { + var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) + for tag0 in tags { + try tagsContainer.encode(tag0) + } + } } } @@ -923,26 +930,32 @@ public struct CreateDataLakeInput: Swift.Equatable { /// The Amazon Resource Name (ARN) used to create and update the Glue table. This table contains partitions generated by the ingestion and normalization of Amazon Web Services log sources and custom sources. /// This member is required. public var metaStoreManagerRoleArn: Swift.String? + /// An array of objects, one for each tag to associate with the data lake configuration. For each tag, you must specify both a tag key and a tag value. A tag value cannot be null, but it can be an empty string. + public var tags: [SecurityLakeClientTypes.Tag]? public init( configurations: [SecurityLakeClientTypes.DataLakeConfiguration]? = nil, - metaStoreManagerRoleArn: Swift.String? = nil + metaStoreManagerRoleArn: Swift.String? = nil, + tags: [SecurityLakeClientTypes.Tag]? = nil ) { self.configurations = configurations self.metaStoreManagerRoleArn = metaStoreManagerRoleArn + self.tags = tags } } struct CreateDataLakeInputBody: Swift.Equatable { let configurations: [SecurityLakeClientTypes.DataLakeConfiguration]? let metaStoreManagerRoleArn: Swift.String? + let tags: [SecurityLakeClientTypes.Tag]? } extension CreateDataLakeInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case configurations case metaStoreManagerRoleArn + case tags } public init(from decoder: Swift.Decoder) throws { @@ -960,6 +973,17 @@ extension CreateDataLakeInputBody: Swift.Decodable { configurations = configurationsDecoded0 let metaStoreManagerRoleArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .metaStoreManagerRoleArn) metaStoreManagerRoleArn = metaStoreManagerRoleArnDecoded + let tagsContainer = try containerValues.decodeIfPresent([SecurityLakeClientTypes.Tag?].self, forKey: .tags) + var tagsDecoded0:[SecurityLakeClientTypes.Tag]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [SecurityLakeClientTypes.Tag]() + for structure0 in tagsContainer { + if let structure0 = structure0 { + tagsDecoded0?.append(structure0) + } + } + } + tags = tagsDecoded0 } } @@ -1121,6 +1145,7 @@ extension CreateSubscriberInput: Swift.Encodable { case subscriberDescription case subscriberIdentity case subscriberName + case tags } public func encode(to encoder: Swift.Encoder) throws { @@ -1146,6 +1171,12 @@ extension CreateSubscriberInput: Swift.Encodable { if let subscriberName = self.subscriberName { try encodeContainer.encode(subscriberName, forKey: .subscriberName) } + if let tags = tags { + var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) + for tag0 in tags { + try tagsContainer.encode(tag0) + } + } } } @@ -1169,13 +1200,16 @@ public struct CreateSubscriberInput: Swift.Equatable { /// The name of your Security Lake subscriber account. /// This member is required. public var subscriberName: Swift.String? + /// An array of objects, one for each tag to associate with the subscriber. For each tag, you must specify both a tag key and a tag value. A tag value cannot be null, but it can be an empty string. + public var tags: [SecurityLakeClientTypes.Tag]? public init( accessTypes: [SecurityLakeClientTypes.AccessType]? = nil, sources: [SecurityLakeClientTypes.LogSourceResource]? = nil, subscriberDescription: Swift.String? = nil, subscriberIdentity: SecurityLakeClientTypes.AwsIdentity? = nil, - subscriberName: Swift.String? = nil + subscriberName: Swift.String? = nil, + tags: [SecurityLakeClientTypes.Tag]? = nil ) { self.accessTypes = accessTypes @@ -1183,6 +1217,7 @@ public struct CreateSubscriberInput: Swift.Equatable { self.subscriberDescription = subscriberDescription self.subscriberIdentity = subscriberIdentity self.subscriberName = subscriberName + self.tags = tags } } @@ -1192,6 +1227,7 @@ struct CreateSubscriberInputBody: Swift.Equatable { let subscriberDescription: Swift.String? let sources: [SecurityLakeClientTypes.LogSourceResource]? let accessTypes: [SecurityLakeClientTypes.AccessType]? + let tags: [SecurityLakeClientTypes.Tag]? } extension CreateSubscriberInputBody: Swift.Decodable { @@ -1201,6 +1237,7 @@ extension CreateSubscriberInputBody: Swift.Decodable { case subscriberDescription case subscriberIdentity case subscriberName + case tags } public init(from decoder: Swift.Decoder) throws { @@ -1233,6 +1270,17 @@ extension CreateSubscriberInputBody: Swift.Decodable { } } accessTypes = accessTypesDecoded0 + let tagsContainer = try containerValues.decodeIfPresent([SecurityLakeClientTypes.Tag?].self, forKey: .tags) + var tagsDecoded0:[SecurityLakeClientTypes.Tag]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [SecurityLakeClientTypes.Tag]() + for structure0 in tagsContainer { + if let structure0 = structure0 { + tagsDecoded0?.append(structure0) + } + } + } + tags = tagsDecoded0 } } @@ -1854,7 +1902,7 @@ extension SecurityLakeClientTypes.DataLakeException: Swift.Codable { } extension SecurityLakeClientTypes { - /// The details for a Security Lake exception + /// The details for an Amazon Security Lake exception. public struct DataLakeException: Swift.Equatable { /// The underlying exception of a Security Lake exception. public var exception: Swift.String? @@ -2840,7 +2888,7 @@ extension DeleteDataLakeOrganizationConfigurationInput: ClientRuntime.URLPathPro } public struct DeleteDataLakeOrganizationConfigurationInput: Swift.Equatable { - /// Removes the automatic enablement of configuration settings for new member accounts in Security Lake. + /// Turns off automatic enablement of Security Lake for member accounts that are added to an organization. /// This member is required. public var autoEnableNewAccount: [SecurityLakeClientTypes.DataLakeAutoEnableNewAccountConfiguration]? @@ -4283,6 +4331,102 @@ extension ListSubscribersOutputResponseBody: Swift.Decodable { } } +extension ListTagsForResourceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let resourceArn = resourceArn else { + return nil + } + return "/v1/tags/\(resourceArn.urlPercentEncoding())" + } +} + +public struct ListTagsForResourceInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the Amazon Security Lake resource to retrieve the tags for. + /// 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 { + } +} + +public enum ListTagsForResourceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "BadRequestException": return try await BadRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListTagsForResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListTagsForResourceOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.tags = output.tags + } else { + self.tags = nil + } + } +} + +public struct ListTagsForResourceOutputResponse: Swift.Equatable { + /// An array of objects, one for each tag (key and value) that’s associated with the Amazon Security Lake resource. + public var tags: [SecurityLakeClientTypes.Tag]? + + public init( + tags: [SecurityLakeClientTypes.Tag]? = nil + ) + { + self.tags = tags + } +} + +struct ListTagsForResourceOutputResponseBody: Swift.Equatable { + let tags: [SecurityLakeClientTypes.Tag]? +} + +extension ListTagsForResourceOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case tags + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tagsContainer = try containerValues.decodeIfPresent([SecurityLakeClientTypes.Tag?].self, forKey: .tags) + var tagsDecoded0:[SecurityLakeClientTypes.Tag]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [SecurityLakeClientTypes.Tag]() + for structure0 in tagsContainer { + if let structure0 = structure0 { + tagsDecoded0?.append(structure0) + } + } + } + tags = tagsDecoded0 + } +} + extension SecurityLakeClientTypes.LogSource: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case account @@ -4386,11 +4530,11 @@ extension SecurityLakeClientTypes.LogSourceResource: Swift.Codable { } extension SecurityLakeClientTypes { - /// The supported source types from which logs and events are collected in Amazon Security Lake. For the list of supported Amazon Web Services, see the [Amazon Security Lake User Guide](https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html). + /// The supported source types from which logs and events are collected in Amazon Security Lake. For a list of supported Amazon Web Services, see the [Amazon Security Lake User Guide](https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html). public enum LogSourceResource: Swift.Equatable { - /// Amazon Security Lake supports log and event collection for natively supported Amazon Web Services. + /// Amazon Security Lake supports log and event collection for natively supported Amazon Web Services. For more information, see the [Amazon Security Lake User Guide](https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html). case awslogsource(SecurityLakeClientTypes.AwsLogSourceResource) - /// Amazon Security Lake supports custom source types. For a detailed list, see the Amazon Security Lake User Guide. + /// Amazon Security Lake supports custom source types. For more information, see the [Amazon Security Lake User Guide](https://docs.aws.amazon.com/security-lake/latest/userguide/custom-sources.html). case customlogsource(SecurityLakeClientTypes.CustomLogSourceResource) case sdkUnknown(Swift.String) } @@ -4790,7 +4934,7 @@ extension SecurityLakeClientTypes { public var roleArn: Swift.String? /// The ARN for the Amazon S3 bucket. public var s3BucketArn: Swift.String? - /// Amazon Security Lake supports log and event collection for natively supported Amazon Web Services. For more information, see the Amazon Security Lake User Guide. + /// Amazon Security Lake supports log and event collection for natively supported Amazon Web Services. For more information, see the [Amazon Security Lake User Guide](https://docs.aws.amazon.com/security-lake/latest/userguide/source-management.html). /// This member is required. public var sources: [SecurityLakeClientTypes.LogSourceResource]? /// The subscriber ARN of the Amazon Security Lake subscriber account. @@ -4890,6 +5034,147 @@ extension SecurityLakeClientTypes { } } +extension SecurityLakeClientTypes.Tag: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case key + case value + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let key = self.key { + try encodeContainer.encode(key, forKey: .key) + } + if let value = self.value { + try encodeContainer.encode(value, forKey: .value) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let keyDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .key) + key = keyDecoded + let valueDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .value) + value = valueDecoded + } +} + +extension SecurityLakeClientTypes { + /// A tag is a label that you can define and associate with Amazon Web Services resources, including certain types of Amazon Security Lake resources. Tags can help you identify, categorize, and manage resources in different ways, such as by owner, environment, or other criteria. You can associate tags with the following types of Security Lake resources: subscribers, and the data lake configuration for your Amazon Web Services account in individual Amazon Web Services Regions. A resource can have up to 50 tags. Each tag consists of a required tag key and an associated tag value. A tag key is a general label that acts as a category for a more specific tag value. Each tag key must be unique and it can have only one tag value. A tag value acts as a descriptor for a tag key. Tag keys and values are case sensitive. They can contain letters, numbers, spaces, or the following symbols: _ . : / = + @ - For more information, see [Tagging Amazon Security Lake resources](https://docs.aws.amazon.com/security-lake/latest/userguide/tagging-resources.html) in the Amazon Security Lake User Guide. + public struct Tag: Swift.Equatable { + /// The name of the tag. This is a general label that acts as a category for a more specific tag value (value). + /// This member is required. + public var key: Swift.String? + /// The value that’s associated with the specified tag key (key). This value acts as a descriptor for the tag key. A tag value cannot be null, but it can be an empty string. + /// This member is required. + public var value: Swift.String? + + public init( + key: Swift.String? = nil, + value: Swift.String? = nil + ) + { + self.key = key + self.value = value + } + } + +} + +extension TagResourceInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case tags + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let tags = tags { + var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) + for tag0 in tags { + try tagsContainer.encode(tag0) + } + } + } +} + +extension TagResourceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let resourceArn = resourceArn else { + return nil + } + return "/v1/tags/\(resourceArn.urlPercentEncoding())" + } +} + +public struct TagResourceInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the Amazon Security Lake resource to add or update the tags for. + /// This member is required. + public var resourceArn: Swift.String? + /// An array of objects, one for each tag (key and value) to associate with the Amazon Security Lake resource. For each tag, you must specify both a tag key and a tag value. A tag value cannot be null, but it can be an empty string. + /// This member is required. + public var tags: [SecurityLakeClientTypes.Tag]? + + public init( + resourceArn: Swift.String? = nil, + tags: [SecurityLakeClientTypes.Tag]? = nil + ) + { + self.resourceArn = resourceArn + self.tags = tags + } +} + +struct TagResourceInputBody: Swift.Equatable { + let tags: [SecurityLakeClientTypes.Tag]? +} + +extension TagResourceInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case tags + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let tagsContainer = try containerValues.decodeIfPresent([SecurityLakeClientTypes.Tag?].self, forKey: .tags) + var tagsDecoded0:[SecurityLakeClientTypes.Tag]? = nil + if let tagsContainer = tagsContainer { + tagsDecoded0 = [SecurityLakeClientTypes.Tag]() + for structure0 in tagsContainer { + if let structure0 = structure0 { + tagsDecoded0?.append(structure0) + } + } + } + tags = tagsDecoded0 + } +} + +public enum TagResourceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "BadRequestException": return try await BadRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension TagResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct TagResourceOutputResponse: Swift.Equatable { + + public init() { } +} + extension ThrottlingException { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let retryAfterSecondsHeaderValue = httpResponse.headers.value(for: "Retry-After") { @@ -4974,6 +5259,85 @@ extension ThrottlingExceptionBody: Swift.Decodable { } } +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.unknownError(message) + } + tagKeys.forEach { queryItemValue in + let queryItem = ClientRuntime.URLQueryItem(name: "tagKeys".urlPercentEncoding(), value: Swift.String(queryItemValue).urlPercentEncoding()) + items.append(queryItem) + } + return items + } + } +} + +extension UntagResourceInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + guard let resourceArn = resourceArn else { + return nil + } + return "/v1/tags/\(resourceArn.urlPercentEncoding())" + } +} + +public struct UntagResourceInput: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the Amazon Security Lake resource to remove one or more tags from. + /// This member is required. + public var resourceArn: Swift.String? + /// A list of one or more tag keys. For each value in the list, specify the tag key for a tag to remove from the Amazon Security Lake resource. + /// This member is required. + public var tagKeys: [Swift.String]? + + public init( + resourceArn: Swift.String? = nil, + tagKeys: [Swift.String]? = nil + ) + { + self.resourceArn = resourceArn + self.tagKeys = tagKeys + } +} + +struct UntagResourceInputBody: Swift.Equatable { +} + +extension UntagResourceInputBody: Swift.Decodable { + + public init(from decoder: Swift.Decoder) throws { + } +} + +public enum UntagResourceOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "AccessDeniedException": return try await AccessDeniedException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "BadRequestException": return try await BadRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ThrottlingException": return try await ThrottlingException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension UntagResourceOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + } +} + +public struct UntagResourceOutputResponse: Swift.Equatable { + + public init() { } +} + extension UpdateDataLakeExceptionSubscriptionInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case exceptionTimeToLive diff --git a/Sources/Services/AWSSnowball/Paginators.swift b/Sources/Services/AWSSnowball/Paginators.swift index ea7402e233e..b1ece4c5423 100644 --- a/Sources/Services/AWSSnowball/Paginators.swift +++ b/Sources/Services/AWSSnowball/Paginators.swift @@ -183,3 +183,24 @@ extension PaginatorSequence where Input == ListLongTermPricingInput, Output == L return try await self.asyncCompactMap { item in item.longTermPricingEntries } } } +extension SnowballClient { + /// Paginate over `[ListPickupLocationsOutputResponse]` 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 `[ListPickupLocationsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListPickupLocationsOutputResponse` + public func listPickupLocationsPaginated(input: ListPickupLocationsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \ListPickupLocationsInput.nextToken, outputKey: \ListPickupLocationsOutputResponse.nextToken, paginationFunction: self.listPickupLocations(input:)) + } +} + +extension ListPickupLocationsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListPickupLocationsInput { + return ListPickupLocationsInput( + maxResults: self.maxResults, + nextToken: token + )} +} diff --git a/Sources/Services/AWSSnowball/SnowballClient.swift b/Sources/Services/AWSSnowball/SnowballClient.swift index b08d859fb7a..fe7a092b60d 100644 --- a/Sources/Services/AWSSnowball/SnowballClient.swift +++ b/Sources/Services/AWSSnowball/SnowballClient.swift @@ -269,7 +269,7 @@ extension SnowballClient: SnowballClientProtocol { /// * Description: Snowball Edge Storage Optimized with EC2 Compute /// /// - /// + /// This device is replaced with T98. /// /// * Device type: STANDARD /// @@ -289,11 +289,11 @@ extension SnowballClient: SnowballClientProtocol { /// /// /// - /// * Device type: V3_5C + /// * Snow Family device type: RACK_5U_C /// - /// * Capacity: T32 + /// * Capacity: T13 /// - /// * Description: Snowball Edge Compute Optimized without GPU + /// * Description: Snowblade. /// /// /// @@ -820,7 +820,7 @@ extension SnowballClient: SnowballClientProtocol { return result } - /// This action returns a list of the different Amazon EC2 Amazon Machine Images (AMIs) that are owned by your Amazon Web Services accountthat would be supported for use on a Snow device. Currently, supported AMIs are based on the Amazon Linux-2, Ubuntu 20.04 LTS - Focal, or Ubuntu 22.04 LTS - Jammy images, available on the Amazon Web Services Marketplace. Ubuntu 16.04 LTS - Xenial (HVM) images are no longer supported in the Market, but still supported for use on devices through Amazon EC2 VM Import/Export and running locally in AMIs. + /// This action returns a list of the different Amazon EC2-compatible Amazon Machine Images (AMIs) that are owned by your Amazon Web Services accountthat would be supported for use on a Snow device. Currently, supported AMIs are based on the Amazon Linux-2, Ubuntu 20.04 LTS - Focal, or Ubuntu 22.04 LTS - Jammy images, available on the Amazon Web Services Marketplace. Ubuntu 16.04 LTS - Xenial (HVM) images are no longer supported in the Market, but still supported for use on devices through Amazon EC2 VM Import/Export and running locally in AMIs. public func listCompatibleImages(input: ListCompatibleImagesInput) async throws -> ListCompatibleImagesOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -931,6 +931,43 @@ extension SnowballClient: SnowballClientProtocol { return result } + /// A list of locations from which the customer can choose to pickup a device. + public func listPickupLocations(input: ListPickupLocationsInput) async throws -> ListPickupLocationsOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "listPickupLocations") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "snowball") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "listPickupLocations") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "AWSIESnowballJobManagementService.ListPickupLocations")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "ListPickupLocationsRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Lists all supported versions for Snow on-device services. Returns an array of ServiceVersion object containing the supported versions for a particular service. public func listServiceVersions(input: ListServiceVersionsInput) async throws -> ListServiceVersionsOutputResponse { diff --git a/Sources/Services/AWSSnowball/SnowballClientProtocol.swift b/Sources/Services/AWSSnowball/SnowballClientProtocol.swift index 193393de157..45069d13874 100644 --- a/Sources/Services/AWSSnowball/SnowballClientProtocol.swift +++ b/Sources/Services/AWSSnowball/SnowballClientProtocol.swift @@ -66,7 +66,7 @@ public protocol SnowballClientProtocol { /// * Description: Snowball Edge Storage Optimized with EC2 Compute /// /// - /// + /// This device is replaced with T98. /// /// * Device type: STANDARD /// @@ -86,11 +86,11 @@ public protocol SnowballClientProtocol { /// /// /// - /// * Device type: V3_5C + /// * Snow Family device type: RACK_5U_C /// - /// * Capacity: T32 + /// * Capacity: T13 /// - /// * Description: Snowball Edge Compute Optimized without GPU + /// * Description: Snowblade. /// /// /// @@ -127,12 +127,14 @@ public protocol SnowballClientProtocol { func listClusterJobs(input: ListClusterJobsInput) async throws -> ListClusterJobsOutputResponse /// Returns an array of ClusterListEntry objects of the specified length. Each ClusterListEntry object contains a cluster's state, a cluster's ID, and other important status information. func listClusters(input: ListClustersInput) async throws -> ListClustersOutputResponse - /// This action returns a list of the different Amazon EC2 Amazon Machine Images (AMIs) that are owned by your Amazon Web Services accountthat would be supported for use on a Snow device. Currently, supported AMIs are based on the Amazon Linux-2, Ubuntu 20.04 LTS - Focal, or Ubuntu 22.04 LTS - Jammy images, available on the Amazon Web Services Marketplace. Ubuntu 16.04 LTS - Xenial (HVM) images are no longer supported in the Market, but still supported for use on devices through Amazon EC2 VM Import/Export and running locally in AMIs. + /// This action returns a list of the different Amazon EC2-compatible Amazon Machine Images (AMIs) that are owned by your Amazon Web Services accountthat would be supported for use on a Snow device. Currently, supported AMIs are based on the Amazon Linux-2, Ubuntu 20.04 LTS - Focal, or Ubuntu 22.04 LTS - Jammy images, available on the Amazon Web Services Marketplace. Ubuntu 16.04 LTS - Xenial (HVM) images are no longer supported in the Market, but still supported for use on devices through Amazon EC2 VM Import/Export and running locally in AMIs. func listCompatibleImages(input: ListCompatibleImagesInput) async throws -> ListCompatibleImagesOutputResponse /// Returns an array of JobListEntry objects of the specified length. Each JobListEntry object contains a job's state, a job's ID, and a value that indicates whether the job is a job part, in the case of export jobs. Calling this API action in one of the US regions will return jobs from the list of all jobs associated with this account in all US regions. func listJobs(input: ListJobsInput) async throws -> ListJobsOutputResponse /// Lists all long-term pricing types. func listLongTermPricing(input: ListLongTermPricingInput) async throws -> ListLongTermPricingOutputResponse + /// A list of locations from which the customer can choose to pickup a device. + func listPickupLocations(input: ListPickupLocationsInput) async throws -> ListPickupLocationsOutputResponse /// Lists all supported versions for Snow on-device services. Returns an array of ServiceVersion object containing the supported versions for a particular service. func listServiceVersions(input: ListServiceVersionsInput) async throws -> ListServiceVersionsOutputResponse /// While a cluster's ClusterState value is in the AwaitingQuorum state, you can update some of the information associated with a cluster. Once the cluster changes to a different job state, usually 60 minutes after the cluster being created, this action is no longer available. diff --git a/Sources/Services/AWSSnowball/models/Models.swift b/Sources/Services/AWSSnowball/models/Models.swift index 0c1bfcdfd34..0508eb5014c 100644 --- a/Sources/Services/AWSSnowball/models/Models.swift +++ b/Sources/Services/AWSSnowball/models/Models.swift @@ -18,6 +18,7 @@ extension SnowballClientTypes.Address: Swift.Codable { case street1 = "Street1" case street2 = "Street2" case street3 = "Street3" + case type = "Type" } public func encode(to encoder: Swift.Encoder) throws { @@ -64,6 +65,9 @@ extension SnowballClientTypes.Address: Swift.Codable { if let street3 = self.street3 { try encodeContainer.encode(street3, forKey: .street3) } + if let type = self.type { + try encodeContainer.encode(type.rawValue, forKey: .type) + } } public init(from decoder: Swift.Decoder) throws { @@ -96,6 +100,8 @@ extension SnowballClientTypes.Address: Swift.Codable { phoneNumber = phoneNumberDecoded let isRestrictedDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .isRestricted) ?? false isRestricted = isRestrictedDecoded + let typeDecoded = try containerValues.decodeIfPresent(SnowballClientTypes.AddressType.self, forKey: .type) + type = typeDecoded } } @@ -130,6 +136,8 @@ extension SnowballClientTypes { public var street2: Swift.String? /// The third line in a street address that a Snow device is to be delivered to. public var street3: Swift.String? + /// Differentiates between delivery address and pickup address in the customer account. Provided at job creation. + public var type: SnowballClientTypes.AddressType? public init( addressId: Swift.String? = nil, @@ -145,7 +153,8 @@ extension SnowballClientTypes { stateOrProvince: Swift.String? = nil, street1: Swift.String? = nil, street2: Swift.String? = nil, - street3: Swift.String? = nil + street3: Swift.String? = nil, + type: SnowballClientTypes.AddressType? = nil ) { self.addressId = addressId @@ -162,11 +171,44 @@ extension SnowballClientTypes { self.street1 = street1 self.street2 = street2 self.street3 = street3 + self.type = type } } } +extension SnowballClientTypes { + public enum AddressType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case awsShip + case custPickup + case sdkUnknown(Swift.String) + + public static var allCases: [AddressType] { + return [ + .awsShip, + .custPickup, + .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 .awsShip: return "AWS_SHIP" + case .custPickup: return "CUST_PICKUP" + 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 = AddressType(rawValue: rawValue) ?? AddressType.sdkUnknown(rawValue) + } + } +} + extension CancelClusterInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case clusterId = "ClusterId" @@ -1168,7 +1210,7 @@ extension CreateClusterOutputResponse: ClientRuntime.HttpResponseBinding { public struct CreateClusterOutputResponse: Swift.Equatable { /// The automatically generated ID for a cluster. public var clusterId: Swift.String? - /// List of jobs created for this cluster. For syntax, see [ListJobsResult$JobListEntries](https://docs.aws.amazon.com/snowball/latest/api-reference/API_ListJobs.html#API_ListJobs_ResponseSyntax) in this guide. + /// List of jobs created for this cluster. For syntax, see [ListJobsResult$JobListEntries](http://amazonaws.com/snowball/latest/api-reference/API_ListJobs.html#API_ListJobs_ResponseSyntax) in this guide. public var jobListEntries: [SnowballClientTypes.JobListEntry]? public init( @@ -1217,11 +1259,13 @@ extension CreateJobInput: Swift.Encodable { case description = "Description" case deviceConfiguration = "DeviceConfiguration" case forwardingAddressId = "ForwardingAddressId" + case impactLevel = "ImpactLevel" case jobType = "JobType" case kmsKeyARN = "KmsKeyARN" case longTermPricingId = "LongTermPricingId" case notification = "Notification" case onDeviceServiceConfiguration = "OnDeviceServiceConfiguration" + case pickupDetails = "PickupDetails" case remoteManagement = "RemoteManagement" case resources = "Resources" case roleARN = "RoleARN" @@ -1248,6 +1292,9 @@ extension CreateJobInput: Swift.Encodable { if let forwardingAddressId = self.forwardingAddressId { try encodeContainer.encode(forwardingAddressId, forKey: .forwardingAddressId) } + if let impactLevel = self.impactLevel { + try encodeContainer.encode(impactLevel.rawValue, forKey: .impactLevel) + } if let jobType = self.jobType { try encodeContainer.encode(jobType.rawValue, forKey: .jobType) } @@ -1263,6 +1310,9 @@ extension CreateJobInput: Swift.Encodable { if let onDeviceServiceConfiguration = self.onDeviceServiceConfiguration { try encodeContainer.encode(onDeviceServiceConfiguration, forKey: .onDeviceServiceConfiguration) } + if let pickupDetails = self.pickupDetails { + try encodeContainer.encode(pickupDetails, forKey: .pickupDetails) + } if let remoteManagement = self.remoteManagement { try encodeContainer.encode(remoteManagement.rawValue, forKey: .remoteManagement) } @@ -1304,6 +1354,8 @@ public struct CreateJobInput: Swift.Equatable { public var deviceConfiguration: SnowballClientTypes.DeviceConfiguration? /// The forwarding address ID for a job. This field is not supported in most Regions. public var forwardingAddressId: Swift.String? + /// The highest impact level of data that will be stored or processed on the device, provided at job creation. + public var impactLevel: SnowballClientTypes.ImpactLevel? /// Defines the type of job that you're creating. public var jobType: SnowballClientTypes.JobType? /// The KmsKeyARN that you want to associate with this job. KmsKeyARNs are created using the [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) Key Management Service (KMS) API action. @@ -1314,7 +1366,9 @@ public struct CreateJobInput: Swift.Equatable { public var notification: SnowballClientTypes.Notification? /// Specifies the service or services on the Snow Family device that your transferred data will be exported from or imported into. Amazon Web Services Snow Family supports Amazon S3 and NFS (Network File System) and the Amazon Web Services Storage Gateway service Tape Gateway type. public var onDeviceServiceConfiguration: SnowballClientTypes.OnDeviceServiceConfiguration? - /// Allows you to securely operate and manage Snowcone devices remotely from outside of your internal network. When set to INSTALLED_AUTOSTART, remote management will automatically be available when the device arrives at your location. Otherwise, you need to use the Snowball Client to manage the device. + /// Information identifying the person picking up the device. + public var pickupDetails: SnowballClientTypes.PickupDetails? + /// Allows you to securely operate and manage Snowcone devices remotely from outside of your internal network. When set to INSTALLED_AUTOSTART, remote management will automatically be available when the device arrives at your location. Otherwise, you need to use the Snowball Edge client to manage the device. When set to NOT_INSTALLED, remote management will not be available on the device. public var remoteManagement: SnowballClientTypes.RemoteManagement? /// Defines the Amazon S3 buckets associated with this job. With IMPORT jobs, you specify the bucket or buckets that your transferred data will be imported into. With EXPORT jobs, you specify the bucket or buckets that your transferred data will be exported from. Optionally, you can also specify a KeyRange value. If you choose to export a range, you define the length of the range by providing either an inclusive BeginMarker value, an inclusive EndMarker value, or both. Ranges are UTF-8 binary sorted. public var resources: SnowballClientTypes.JobResource? @@ -1343,11 +1397,13 @@ public struct CreateJobInput: Swift.Equatable { description: Swift.String? = nil, deviceConfiguration: SnowballClientTypes.DeviceConfiguration? = nil, forwardingAddressId: Swift.String? = nil, + impactLevel: SnowballClientTypes.ImpactLevel? = nil, jobType: SnowballClientTypes.JobType? = nil, kmsKeyARN: Swift.String? = nil, longTermPricingId: Swift.String? = nil, notification: SnowballClientTypes.Notification? = nil, onDeviceServiceConfiguration: SnowballClientTypes.OnDeviceServiceConfiguration? = nil, + pickupDetails: SnowballClientTypes.PickupDetails? = nil, remoteManagement: SnowballClientTypes.RemoteManagement? = nil, resources: SnowballClientTypes.JobResource? = nil, roleARN: Swift.String? = nil, @@ -1362,11 +1418,13 @@ public struct CreateJobInput: Swift.Equatable { self.description = description self.deviceConfiguration = deviceConfiguration self.forwardingAddressId = forwardingAddressId + self.impactLevel = impactLevel self.jobType = jobType self.kmsKeyARN = kmsKeyARN self.longTermPricingId = longTermPricingId self.notification = notification self.onDeviceServiceConfiguration = onDeviceServiceConfiguration + self.pickupDetails = pickupDetails self.remoteManagement = remoteManagement self.resources = resources self.roleARN = roleARN @@ -1395,6 +1453,8 @@ struct CreateJobInputBody: Swift.Equatable { let deviceConfiguration: SnowballClientTypes.DeviceConfiguration? let remoteManagement: SnowballClientTypes.RemoteManagement? let longTermPricingId: Swift.String? + let impactLevel: SnowballClientTypes.ImpactLevel? + let pickupDetails: SnowballClientTypes.PickupDetails? } extension CreateJobInputBody: Swift.Decodable { @@ -1404,11 +1464,13 @@ extension CreateJobInputBody: Swift.Decodable { case description = "Description" case deviceConfiguration = "DeviceConfiguration" case forwardingAddressId = "ForwardingAddressId" + case impactLevel = "ImpactLevel" case jobType = "JobType" case kmsKeyARN = "KmsKeyARN" case longTermPricingId = "LongTermPricingId" case notification = "Notification" case onDeviceServiceConfiguration = "OnDeviceServiceConfiguration" + case pickupDetails = "PickupDetails" case remoteManagement = "RemoteManagement" case resources = "Resources" case roleARN = "RoleARN" @@ -1454,6 +1516,10 @@ extension CreateJobInputBody: Swift.Decodable { remoteManagement = remoteManagementDecoded let longTermPricingIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .longTermPricingId) longTermPricingId = longTermPricingIdDecoded + let impactLevelDecoded = try containerValues.decodeIfPresent(SnowballClientTypes.ImpactLevel.self, forKey: .impactLevel) + impactLevel = impactLevelDecoded + let pickupDetailsDecoded = try containerValues.decodeIfPresent(SnowballClientTypes.PickupDetails.self, forKey: .pickupDetails) + pickupDetails = pickupDetailsDecoded } } @@ -1546,6 +1612,7 @@ public struct CreateLongTermPricingInput: Swift.Equatable { /// This member is required. public var longTermPricingType: SnowballClientTypes.LongTermPricingType? /// The type of Snow Family devices to use for the long-term pricing job. + /// This member is required. public var snowballType: SnowballClientTypes.SnowballType? public init( @@ -2565,7 +2632,7 @@ extension SnowballClientTypes.Ec2AmiResource: Swift.Codable { } extension SnowballClientTypes { - /// A JSON-formatted object that contains the IDs for an Amazon Machine Image (AMI), including the Amazon EC2 AMI ID and the Snow device AMI ID. Each AMI has these two IDs to simplify identifying the AMI in both the Amazon Web Services Cloud and on the device. + /// A JSON-formatted object that contains the IDs for an Amazon Machine Image (AMI), including the Amazon EC2-compatible AMI ID and the Snow device AMI ID. Each AMI has these two IDs to simplify identifying the AMI in both the Amazon Web Services Cloud and on the device. public struct Ec2AmiResource: Swift.Equatable { /// The ID of the AMI in Amazon EC2. /// This member is required. @@ -3098,6 +3165,47 @@ extension SnowballClientTypes { } +extension SnowballClientTypes { + public enum ImpactLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case il2 + case il4 + case il5 + case il6 + case il99 + case sdkUnknown(Swift.String) + + public static var allCases: [ImpactLevel] { + return [ + .il2, + .il4, + .il5, + .il6, + .il99, + .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 .il2: return "IL2" + case .il4: return "IL4" + case .il5: return "IL5" + case .il6: return "IL6" + case .il99: return "IL99" + 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 = ImpactLevel(rawValue: rawValue) ?? ImpactLevel.sdkUnknown(rawValue) + } + } +} + extension InvalidAddressException { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -3542,6 +3650,7 @@ extension SnowballClientTypes.JobMetadata: Swift.Codable { case description = "Description" case deviceConfiguration = "DeviceConfiguration" case forwardingAddressId = "ForwardingAddressId" + case impactLevel = "ImpactLevel" case jobId = "JobId" case jobLogInfo = "JobLogInfo" case jobState = "JobState" @@ -3550,11 +3659,13 @@ extension SnowballClientTypes.JobMetadata: Swift.Codable { case longTermPricingId = "LongTermPricingId" case notification = "Notification" case onDeviceServiceConfiguration = "OnDeviceServiceConfiguration" + case pickupDetails = "PickupDetails" case remoteManagement = "RemoteManagement" case resources = "Resources" case roleARN = "RoleARN" case shippingDetails = "ShippingDetails" case snowballCapacityPreference = "SnowballCapacityPreference" + case snowballId = "SnowballId" case snowballType = "SnowballType" case taxDocuments = "TaxDocuments" } @@ -3582,6 +3693,9 @@ extension SnowballClientTypes.JobMetadata: Swift.Codable { if let forwardingAddressId = self.forwardingAddressId { try encodeContainer.encode(forwardingAddressId, forKey: .forwardingAddressId) } + if let impactLevel = self.impactLevel { + try encodeContainer.encode(impactLevel.rawValue, forKey: .impactLevel) + } if let jobId = self.jobId { try encodeContainer.encode(jobId, forKey: .jobId) } @@ -3606,6 +3720,9 @@ extension SnowballClientTypes.JobMetadata: Swift.Codable { if let onDeviceServiceConfiguration = self.onDeviceServiceConfiguration { try encodeContainer.encode(onDeviceServiceConfiguration, forKey: .onDeviceServiceConfiguration) } + if let pickupDetails = self.pickupDetails { + try encodeContainer.encode(pickupDetails, forKey: .pickupDetails) + } if let remoteManagement = self.remoteManagement { try encodeContainer.encode(remoteManagement.rawValue, forKey: .remoteManagement) } @@ -3621,6 +3738,9 @@ extension SnowballClientTypes.JobMetadata: Swift.Codable { if let snowballCapacityPreference = self.snowballCapacityPreference { try encodeContainer.encode(snowballCapacityPreference.rawValue, forKey: .snowballCapacityPreference) } + if let snowballId = self.snowballId { + try encodeContainer.encode(snowballId, forKey: .snowballId) + } if let snowballType = self.snowballType { try encodeContainer.encode(snowballType.rawValue, forKey: .snowballType) } @@ -3675,6 +3795,12 @@ extension SnowballClientTypes.JobMetadata: Swift.Codable { longTermPricingId = longTermPricingIdDecoded let onDeviceServiceConfigurationDecoded = try containerValues.decodeIfPresent(SnowballClientTypes.OnDeviceServiceConfiguration.self, forKey: .onDeviceServiceConfiguration) onDeviceServiceConfiguration = onDeviceServiceConfigurationDecoded + let impactLevelDecoded = try containerValues.decodeIfPresent(SnowballClientTypes.ImpactLevel.self, forKey: .impactLevel) + impactLevel = impactLevelDecoded + let pickupDetailsDecoded = try containerValues.decodeIfPresent(SnowballClientTypes.PickupDetails.self, forKey: .pickupDetails) + pickupDetails = pickupDetailsDecoded + let snowballIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .snowballId) + snowballId = snowballIdDecoded } } @@ -3695,6 +3821,8 @@ extension SnowballClientTypes { public var deviceConfiguration: SnowballClientTypes.DeviceConfiguration? /// The ID of the address that you want a job shipped to, after it will be shipped to its primary address. This field is not supported in most regions. public var forwardingAddressId: Swift.String? + /// The highest impact level of data that will be stored or processed on the device, provided at job creation. + public var impactLevel: SnowballClientTypes.ImpactLevel? /// The automatically generated ID for a job, for example JID123e4567-e89b-12d3-a456-426655440000. public var jobId: Swift.String? /// Links to Amazon S3 presigned URLs for the job report and logs. For import jobs, the PDF job report becomes available at the end of the import process. For export jobs, your job report typically becomes available while the Snow device for your job part is being delivered to you. @@ -3711,6 +3839,8 @@ extension SnowballClientTypes { public var notification: SnowballClientTypes.Notification? /// Represents metadata and configuration settings for services on an Amazon Web Services Snow Family device. public var onDeviceServiceConfiguration: SnowballClientTypes.OnDeviceServiceConfiguration? + /// Information identifying the person picking up the device. + public var pickupDetails: SnowballClientTypes.PickupDetails? /// Allows you to securely operate and manage Snowcone devices remotely from outside of your internal network. When set to INSTALLED_AUTOSTART, remote management will automatically be available when the device arrives at your location. Otherwise, you need to use the Snowball Client to manage the device. public var remoteManagement: SnowballClientTypes.RemoteManagement? /// An array of S3Resource objects. Each S3Resource object represents an Amazon S3 bucket that your transferred data will be exported from or imported into. @@ -3721,6 +3851,8 @@ extension SnowballClientTypes { public var shippingDetails: SnowballClientTypes.ShippingDetails? /// The Snow device capacity preference for this job, specified at job creation. In US regions, you can choose between 50 TB and 80 TB Snowballs. All other regions use 80 TB capacity Snowballs. For more information, see "https://docs.aws.amazon.com/snowball/latest/snowcone-guide/snow-device-types.html" (Snow Family Devices and Capacity) in the Snowcone User Guide or "https://docs.aws.amazon.com/snowball/latest/developer-guide/snow-device-types.html" (Snow Family Devices and Capacity) in the Snowcone User Guide. public var snowballCapacityPreference: SnowballClientTypes.SnowballCapacity? + /// Unique ID associated with a device. + public var snowballId: Swift.String? /// The type of device used with this job. public var snowballType: SnowballClientTypes.SnowballType? /// The metadata associated with the tax documents required in your Amazon Web Services Region. @@ -3734,6 +3866,7 @@ extension SnowballClientTypes { description: Swift.String? = nil, deviceConfiguration: SnowballClientTypes.DeviceConfiguration? = nil, forwardingAddressId: Swift.String? = nil, + impactLevel: SnowballClientTypes.ImpactLevel? = nil, jobId: Swift.String? = nil, jobLogInfo: SnowballClientTypes.JobLogs? = nil, jobState: SnowballClientTypes.JobState? = nil, @@ -3742,11 +3875,13 @@ extension SnowballClientTypes { longTermPricingId: Swift.String? = nil, notification: SnowballClientTypes.Notification? = nil, onDeviceServiceConfiguration: SnowballClientTypes.OnDeviceServiceConfiguration? = nil, + pickupDetails: SnowballClientTypes.PickupDetails? = nil, remoteManagement: SnowballClientTypes.RemoteManagement? = nil, resources: SnowballClientTypes.JobResource? = nil, roleARN: Swift.String? = nil, shippingDetails: SnowballClientTypes.ShippingDetails? = nil, snowballCapacityPreference: SnowballClientTypes.SnowballCapacity? = nil, + snowballId: Swift.String? = nil, snowballType: SnowballClientTypes.SnowballType? = nil, taxDocuments: SnowballClientTypes.TaxDocuments? = nil ) @@ -3758,6 +3893,7 @@ extension SnowballClientTypes { self.description = description self.deviceConfiguration = deviceConfiguration self.forwardingAddressId = forwardingAddressId + self.impactLevel = impactLevel self.jobId = jobId self.jobLogInfo = jobLogInfo self.jobState = jobState @@ -3766,11 +3902,13 @@ extension SnowballClientTypes { self.longTermPricingId = longTermPricingId self.notification = notification self.onDeviceServiceConfiguration = onDeviceServiceConfiguration + self.pickupDetails = pickupDetails self.remoteManagement = remoteManagement self.resources = resources self.roleARN = roleARN self.shippingDetails = shippingDetails self.snowballCapacityPreference = snowballCapacityPreference + self.snowballId = snowballId self.snowballType = snowballType self.taxDocuments = taxDocuments } @@ -4787,6 +4925,135 @@ extension ListLongTermPricingOutputResponseBody: Swift.Decodable { } } +extension ListPickupLocationsInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults = "MaxResults" + case nextToken = "NextToken" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let maxResults = self.maxResults { + try encodeContainer.encode(maxResults, forKey: .maxResults) + } + if let nextToken = self.nextToken { + try encodeContainer.encode(nextToken, forKey: .nextToken) + } + } +} + +extension ListPickupLocationsInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct ListPickupLocationsInput: Swift.Equatable { + /// The maximum number of locations to list per page. + public var maxResults: Swift.Int? + /// HTTP requests are stateless. To identify what object comes "next" in the list of ListPickupLocationsRequest objects, you have the option of specifying NextToken as the starting point for your returned list. + public var nextToken: Swift.String? + + public init( + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +struct ListPickupLocationsInputBody: Swift.Equatable { + let maxResults: Swift.Int? + let nextToken: Swift.String? +} + +extension ListPickupLocationsInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case maxResults = "MaxResults" + case nextToken = "NextToken" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let maxResultsDecoded = try containerValues.decodeIfPresent(Swift.Int.self, forKey: .maxResults) + maxResults = maxResultsDecoded + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + +public enum ListPickupLocationsOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InvalidResourceException": return try await InvalidResourceException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension ListPickupLocationsOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: ListPickupLocationsOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.addresses = output.addresses + self.nextToken = output.nextToken + } else { + self.addresses = nil + self.nextToken = nil + } + } +} + +public struct ListPickupLocationsOutputResponse: Swift.Equatable { + /// Information about the address of pickup locations. + public var addresses: [SnowballClientTypes.Address]? + /// HTTP requests are stateless. To identify what object comes "next" in the list of ListPickupLocationsResult objects, you have the option of specifying NextToken as the starting point for your returned list. + public var nextToken: Swift.String? + + public init( + addresses: [SnowballClientTypes.Address]? = nil, + nextToken: Swift.String? = nil + ) + { + self.addresses = addresses + self.nextToken = nextToken + } +} + +struct ListPickupLocationsOutputResponseBody: Swift.Equatable { + let addresses: [SnowballClientTypes.Address]? + let nextToken: Swift.String? +} + +extension ListPickupLocationsOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case addresses = "Addresses" + case nextToken = "NextToken" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let addressesContainer = try containerValues.decodeIfPresent([SnowballClientTypes.Address?].self, forKey: .addresses) + var addressesDecoded0:[SnowballClientTypes.Address]? = nil + if let addressesContainer = addressesContainer { + addressesDecoded0 = [SnowballClientTypes.Address]() + for structure0 in addressesContainer { + if let structure0 = structure0 { + addressesDecoded0?.append(structure0) + } + } + } + addresses = addressesDecoded0 + let nextTokenDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .nextToken) + nextToken = nextTokenDecoded + } +} + extension ListServiceVersionsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case dependentServices = "DependentServices" @@ -5204,6 +5471,7 @@ extension SnowballClientTypes { extension SnowballClientTypes.Notification: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case devicePickupSnsTopicARN = "DevicePickupSnsTopicARN" case jobStatesToNotify = "JobStatesToNotify" case notifyAll = "NotifyAll" case snsTopicARN = "SnsTopicARN" @@ -5211,6 +5479,9 @@ extension SnowballClientTypes.Notification: Swift.Codable { public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let devicePickupSnsTopicARN = self.devicePickupSnsTopicARN { + try encodeContainer.encode(devicePickupSnsTopicARN, forKey: .devicePickupSnsTopicARN) + } if let jobStatesToNotify = jobStatesToNotify { var jobStatesToNotifyContainer = encodeContainer.nestedUnkeyedContainer(forKey: .jobStatesToNotify) for jobstate0 in jobStatesToNotify { @@ -5242,12 +5513,16 @@ extension SnowballClientTypes.Notification: Swift.Codable { jobStatesToNotify = jobStatesToNotifyDecoded0 let notifyAllDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .notifyAll) ?? false notifyAll = notifyAllDecoded + let devicePickupSnsTopicARNDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .devicePickupSnsTopicARN) + devicePickupSnsTopicARN = devicePickupSnsTopicARNDecoded } } extension SnowballClientTypes { /// The Amazon Simple Notification Service (Amazon SNS) notification settings associated with a specific job. The Notification object is returned as a part of the response syntax of the DescribeJob action in the JobMetadata data type. When the notification settings are defined during job creation, you can choose to notify based on a specific set of job states using the JobStatesToNotify array of strings, or you can specify that you want to have Amazon SNS notifications sent out for all job states with NotifyAll set to true. public struct Notification: Swift.Equatable { + /// Used to send SNS notifications for the person picking up the device (identified during job creation). + public var devicePickupSnsTopicARN: Swift.String? /// The list of job states that will trigger a notification for this job. public var jobStatesToNotify: [SnowballClientTypes.JobState]? /// Any change in job state will trigger a notification for this job. @@ -5256,11 +5531,13 @@ extension SnowballClientTypes { public var snsTopicARN: Swift.String? public init( + devicePickupSnsTopicARN: Swift.String? = nil, jobStatesToNotify: [SnowballClientTypes.JobState]? = nil, notifyAll: Swift.Bool = false, snsTopicARN: Swift.String? = nil ) { + self.devicePickupSnsTopicARN = devicePickupSnsTopicARN self.jobStatesToNotify = jobStatesToNotify self.notifyAll = notifyAll self.snsTopicARN = snsTopicARN @@ -5334,16 +5611,118 @@ extension SnowballClientTypes { } +extension SnowballClientTypes.PickupDetails: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case devicePickupId = "DevicePickupId" + case email = "Email" + case identificationExpirationDate = "IdentificationExpirationDate" + case identificationIssuingOrg = "IdentificationIssuingOrg" + case identificationNumber = "IdentificationNumber" + case name = "Name" + case phoneNumber = "PhoneNumber" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let devicePickupId = self.devicePickupId { + try encodeContainer.encode(devicePickupId, forKey: .devicePickupId) + } + if let email = self.email { + try encodeContainer.encode(email, forKey: .email) + } + if let identificationExpirationDate = self.identificationExpirationDate { + try encodeContainer.encodeTimestamp(identificationExpirationDate, format: .epochSeconds, forKey: .identificationExpirationDate) + } + if let identificationIssuingOrg = self.identificationIssuingOrg { + try encodeContainer.encode(identificationIssuingOrg, forKey: .identificationIssuingOrg) + } + if let identificationNumber = self.identificationNumber { + try encodeContainer.encode(identificationNumber, forKey: .identificationNumber) + } + if let name = self.name { + try encodeContainer.encode(name, forKey: .name) + } + if let phoneNumber = self.phoneNumber { + try encodeContainer.encode(phoneNumber, forKey: .phoneNumber) + } + } + + 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 phoneNumberDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .phoneNumber) + phoneNumber = phoneNumberDecoded + let emailDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .email) + email = emailDecoded + let identificationNumberDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .identificationNumber) + identificationNumber = identificationNumberDecoded + let identificationExpirationDateDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .identificationExpirationDate) + identificationExpirationDate = identificationExpirationDateDecoded + let identificationIssuingOrgDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .identificationIssuingOrg) + identificationIssuingOrg = identificationIssuingOrgDecoded + let devicePickupIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .devicePickupId) + devicePickupId = devicePickupIdDecoded + } +} + +extension SnowballClientTypes.PickupDetails: Swift.CustomDebugStringConvertible { + public var debugDescription: Swift.String { + "PickupDetails(devicePickupId: \(Swift.String(describing: devicePickupId)), identificationExpirationDate: \(Swift.String(describing: identificationExpirationDate)), identificationIssuingOrg: \(Swift.String(describing: identificationIssuingOrg)), identificationNumber: \(Swift.String(describing: identificationNumber)), name: \(Swift.String(describing: name)), email: \"CONTENT_REDACTED\", phoneNumber: \"CONTENT_REDACTED\")"} +} + +extension SnowballClientTypes { + /// Information identifying the person picking up the device. + public struct PickupDetails: Swift.Equatable { + /// The unique ID for a device that will be picked up. + public var devicePickupId: Swift.String? + /// The email address of the person picking up the device. + public var email: Swift.String? + /// Expiration date of the credential identifying the person picking up the device. + public var identificationExpirationDate: ClientRuntime.Date? + /// Organization that issued the credential identifying the person picking up the device. + public var identificationIssuingOrg: Swift.String? + /// The number on the credential identifying the person picking up the device. + public var identificationNumber: Swift.String? + /// The name of the person picking up the device. + public var name: Swift.String? + /// The phone number of the person picking up the device. + public var phoneNumber: Swift.String? + + public init( + devicePickupId: Swift.String? = nil, + email: Swift.String? = nil, + identificationExpirationDate: ClientRuntime.Date? = nil, + identificationIssuingOrg: Swift.String? = nil, + identificationNumber: Swift.String? = nil, + name: Swift.String? = nil, + phoneNumber: Swift.String? = nil + ) + { + self.devicePickupId = devicePickupId + self.email = email + self.identificationExpirationDate = identificationExpirationDate + self.identificationIssuingOrg = identificationIssuingOrg + self.identificationNumber = identificationNumber + self.name = name + self.phoneNumber = phoneNumber + } + } + +} + extension SnowballClientTypes { public enum RemoteManagement: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case installedAutostart case installedOnly + case notInstalled case sdkUnknown(Swift.String) public static var allCases: [RemoteManagement] { return [ .installedAutostart, .installedOnly, + .notInstalled, .sdkUnknown("") ] } @@ -5355,6 +5734,7 @@ extension SnowballClientTypes { switch self { case .installedAutostart: return "INSTALLED_AUTOSTART" case .installedOnly: return "INSTALLED_ONLY" + case .notInstalled: return "NOT_INSTALLED" case let .sdkUnknown(s): return s } } @@ -5840,6 +6220,7 @@ extension SnowballClientTypes { public enum SnowballCapacity: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case noPreference case t100 + case t13 case t14 case t240 case t32 @@ -5854,6 +6235,7 @@ extension SnowballClientTypes { return [ .noPreference, .t100, + .t13, .t14, .t240, .t32, @@ -5873,6 +6255,7 @@ extension SnowballClientTypes { switch self { case .noPreference: return "NoPreference" case .t100: return "T100" + case .t13: return "T13" case .t14: return "T14" case .t240: return "T240" case .t32: return "T32" @@ -5898,6 +6281,7 @@ extension SnowballClientTypes { case edgeC case edgeCg case edgeS + case rack5uC case snc1Hdd case snc1Ssd case standard @@ -5911,6 +6295,7 @@ extension SnowballClientTypes { .edgeC, .edgeCg, .edgeS, + .rack5uC, .snc1Hdd, .snc1Ssd, .standard, @@ -5929,6 +6314,7 @@ extension SnowballClientTypes { case .edgeC: return "EDGE_C" case .edgeCg: return "EDGE_CG" case .edgeS: return "EDGE_S" + case .rack5uC: return "RACK_5U_C" case .snc1Hdd: return "SNC1_HDD" case .snc1Ssd: return "SNC1_SSD" case .standard: return "STANDARD" @@ -6401,6 +6787,7 @@ extension UpdateJobInput: Swift.Encodable { case jobId = "JobId" case notification = "Notification" case onDeviceServiceConfiguration = "OnDeviceServiceConfiguration" + case pickupDetails = "PickupDetails" case resources = "Resources" case roleARN = "RoleARN" case shippingOption = "ShippingOption" @@ -6427,6 +6814,9 @@ extension UpdateJobInput: Swift.Encodable { if let onDeviceServiceConfiguration = self.onDeviceServiceConfiguration { try encodeContainer.encode(onDeviceServiceConfiguration, forKey: .onDeviceServiceConfiguration) } + if let pickupDetails = self.pickupDetails { + try encodeContainer.encode(pickupDetails, forKey: .pickupDetails) + } if let resources = self.resources { try encodeContainer.encode(resources, forKey: .resources) } @@ -6462,6 +6852,8 @@ public struct UpdateJobInput: Swift.Equatable { public var notification: SnowballClientTypes.Notification? /// Specifies the service or services on the Snow Family device that your transferred data will be exported from or imported into. Amazon Web Services Snow Family supports Amazon S3 and NFS (Network File System) and the Amazon Web Services Storage Gateway service Tape Gateway type. public var onDeviceServiceConfiguration: SnowballClientTypes.OnDeviceServiceConfiguration? + /// Information identifying the person picking up the device. + public var pickupDetails: SnowballClientTypes.PickupDetails? /// The updated JobResource object, or the updated [JobResource] object. public var resources: SnowballClientTypes.JobResource? /// The new role Amazon Resource Name (ARN) that you want to associate with this job. To create a role ARN, use the [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html)Identity and Access Management (IAM) API action. @@ -6478,6 +6870,7 @@ public struct UpdateJobInput: Swift.Equatable { jobId: Swift.String? = nil, notification: SnowballClientTypes.Notification? = nil, onDeviceServiceConfiguration: SnowballClientTypes.OnDeviceServiceConfiguration? = nil, + pickupDetails: SnowballClientTypes.PickupDetails? = nil, resources: SnowballClientTypes.JobResource? = nil, roleARN: Swift.String? = nil, shippingOption: SnowballClientTypes.ShippingOption? = nil, @@ -6490,6 +6883,7 @@ public struct UpdateJobInput: Swift.Equatable { self.jobId = jobId self.notification = notification self.onDeviceServiceConfiguration = onDeviceServiceConfiguration + self.pickupDetails = pickupDetails self.resources = resources self.roleARN = roleARN self.shippingOption = shippingOption @@ -6508,6 +6902,7 @@ struct UpdateJobInputBody: Swift.Equatable { let description: Swift.String? let snowballCapacityPreference: SnowballClientTypes.SnowballCapacity? let forwardingAddressId: Swift.String? + let pickupDetails: SnowballClientTypes.PickupDetails? } extension UpdateJobInputBody: Swift.Decodable { @@ -6518,6 +6913,7 @@ extension UpdateJobInputBody: Swift.Decodable { case jobId = "JobId" case notification = "Notification" case onDeviceServiceConfiguration = "OnDeviceServiceConfiguration" + case pickupDetails = "PickupDetails" case resources = "Resources" case roleARN = "RoleARN" case shippingOption = "ShippingOption" @@ -6546,6 +6942,8 @@ extension UpdateJobInputBody: Swift.Decodable { snowballCapacityPreference = snowballCapacityPreferenceDecoded let forwardingAddressIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .forwardingAddressId) forwardingAddressId = forwardingAddressIdDecoded + let pickupDetailsDecoded = try containerValues.decodeIfPresent(SnowballClientTypes.PickupDetails.self, forKey: .pickupDetails) + pickupDetails = pickupDetailsDecoded } } diff --git a/Sources/Services/AWSSsmSap/SsmSapClient.swift b/Sources/Services/AWSSsmSap/SsmSapClient.swift index ccc9fd968cd..ac23a3540d4 100644 --- a/Sources/Services/AWSSsmSap/SsmSapClient.swift +++ b/Sources/Services/AWSSsmSap/SsmSapClient.swift @@ -568,6 +568,42 @@ extension SsmSapClient: SsmSapClientProtocol { return result } + /// Refreshes a registered application. + public func startApplicationRefresh(input: StartApplicationRefreshInput) async throws -> StartApplicationRefreshOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "startApplicationRefresh") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "ssm-sap") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "startApplicationRefresh") + 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.serviceSpecific.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: "StartApplicationRefreshInput")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// Creates tag for a resource by specifying the ARN. public func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse { diff --git a/Sources/Services/AWSSsmSap/SsmSapClientProtocol.swift b/Sources/Services/AWSSsmSap/SsmSapClientProtocol.swift index 288212e5c01..ae9d6a3cdfb 100644 --- a/Sources/Services/AWSSsmSap/SsmSapClientProtocol.swift +++ b/Sources/Services/AWSSsmSap/SsmSapClientProtocol.swift @@ -32,6 +32,8 @@ public protocol SsmSapClientProtocol { func putResourcePermission(input: PutResourcePermissionInput) async throws -> PutResourcePermissionOutputResponse /// Register an SAP application with AWS Systems Manager for SAP. You must meet the following requirements before registering. The SAP application you want to register with AWS Systems Manager for SAP is running on Amazon EC2. AWS Systems Manager Agent must be setup on an Amazon EC2 instance along with the required IAM permissions. Amazon EC2 instance(s) must have access to the secrets created in AWS Secrets Manager to manage SAP applications and components. func registerApplication(input: RegisterApplicationInput) async throws -> RegisterApplicationOutputResponse + /// Refreshes a registered application. + func startApplicationRefresh(input: StartApplicationRefreshInput) async throws -> StartApplicationRefreshOutputResponse /// Creates tag for a resource by specifying the ARN. func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse /// Delete the tags for a resource. diff --git a/Sources/Services/AWSSsmSap/models/Models.swift b/Sources/Services/AWSSsmSap/models/Models.swift index 468888f0714..490b5081a9c 100644 --- a/Sources/Services/AWSSsmSap/models/Models.swift +++ b/Sources/Services/AWSSsmSap/models/Models.swift @@ -7,6 +7,7 @@ extension SsmSapClientTypes.Application: Swift.Codable { case appRegistryArn = "AppRegistryArn" case arn = "Arn" case components = "Components" + case discoveryStatus = "DiscoveryStatus" case id = "Id" case lastUpdated = "LastUpdated" case status = "Status" @@ -28,6 +29,9 @@ extension SsmSapClientTypes.Application: Swift.Codable { try componentsContainer.encode(componentid0) } } + if let discoveryStatus = self.discoveryStatus { + try encodeContainer.encode(discoveryStatus.rawValue, forKey: .discoveryStatus) + } if let id = self.id { try encodeContainer.encode(id, forKey: .id) } @@ -57,6 +61,8 @@ extension SsmSapClientTypes.Application: Swift.Codable { appRegistryArn = appRegistryArnDecoded let statusDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.ApplicationStatus.self, forKey: .status) status = statusDecoded + let discoveryStatusDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.ApplicationDiscoveryStatus.self, forKey: .discoveryStatus) + discoveryStatus = discoveryStatusDecoded let componentsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .components) var componentsDecoded0:[Swift.String]? = nil if let componentsContainer = componentsContainer { @@ -84,6 +90,8 @@ extension SsmSapClientTypes { public var arn: Swift.String? /// The components of the application. public var components: [Swift.String]? + /// The latest discovery result for the application. + public var discoveryStatus: SsmSapClientTypes.ApplicationDiscoveryStatus? /// The ID of the application. public var id: Swift.String? /// The time at which the application was last updated. @@ -99,6 +107,7 @@ extension SsmSapClientTypes { appRegistryArn: Swift.String? = nil, arn: Swift.String? = nil, components: [Swift.String]? = nil, + discoveryStatus: SsmSapClientTypes.ApplicationDiscoveryStatus? = nil, id: Swift.String? = nil, lastUpdated: ClientRuntime.Date? = nil, status: SsmSapClientTypes.ApplicationStatus? = nil, @@ -109,6 +118,7 @@ extension SsmSapClientTypes { self.appRegistryArn = appRegistryArn self.arn = arn self.components = components + self.discoveryStatus = discoveryStatus self.id = id self.lastUpdated = lastUpdated self.status = status @@ -182,6 +192,47 @@ extension SsmSapClientTypes { } +extension SsmSapClientTypes { + public enum ApplicationDiscoveryStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case deleting + case refreshFailed + case registering + case registrationFailed + case success + case sdkUnknown(Swift.String) + + public static var allCases: [ApplicationDiscoveryStatus] { + return [ + .deleting, + .refreshFailed, + .registering, + .registrationFailed, + .success, + .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 .deleting: return "DELETING" + case .refreshFailed: return "REFRESH_FAILED" + case .registering: return "REGISTERING" + case .registrationFailed: return "REGISTRATION_FAILED" + case .success: return "SUCCESS" + 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 = ApplicationDiscoveryStatus(rawValue: rawValue) ?? ApplicationDiscoveryStatus.sdkUnknown(rawValue) + } + } +} + extension SsmSapClientTypes { public enum ApplicationStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case activated @@ -338,15 +389,195 @@ extension SsmSapClientTypes { } } +extension SsmSapClientTypes.AssociatedHost: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case ec2InstanceId = "Ec2InstanceId" + case hostname = "Hostname" + case osVersion = "OsVersion" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let ec2InstanceId = self.ec2InstanceId { + try encodeContainer.encode(ec2InstanceId, forKey: .ec2InstanceId) + } + if let hostname = self.hostname { + try encodeContainer.encode(hostname, forKey: .hostname) + } + if let osVersion = self.osVersion { + try encodeContainer.encode(osVersion, forKey: .osVersion) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let hostnameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .hostname) + hostname = hostnameDecoded + let ec2InstanceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .ec2InstanceId) + ec2InstanceId = ec2InstanceIdDecoded + let osVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .osVersion) + osVersion = osVersionDecoded + } +} + +extension SsmSapClientTypes { + /// Describes the properties of the associated host. + public struct AssociatedHost: Swift.Equatable { + /// The ID of the Amazon EC2 instance. + public var ec2InstanceId: Swift.String? + /// The name of the host. + public var hostname: Swift.String? + /// The version of the operating system. + public var osVersion: Swift.String? + + public init( + ec2InstanceId: Swift.String? = nil, + hostname: Swift.String? = nil, + osVersion: Swift.String? = nil + ) + { + self.ec2InstanceId = ec2InstanceId + self.hostname = hostname + self.osVersion = osVersion + } + } + +} + +extension SsmSapClientTypes.BackintConfig: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case backintMode = "BackintMode" + case ensureNoBackupInProcess = "EnsureNoBackupInProcess" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let backintMode = self.backintMode { + try encodeContainer.encode(backintMode.rawValue, forKey: .backintMode) + } + if let ensureNoBackupInProcess = self.ensureNoBackupInProcess { + try encodeContainer.encode(ensureNoBackupInProcess, forKey: .ensureNoBackupInProcess) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let backintModeDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.BackintMode.self, forKey: .backintMode) + backintMode = backintModeDecoded + let ensureNoBackupInProcessDecoded = try containerValues.decodeIfPresent(Swift.Bool.self, forKey: .ensureNoBackupInProcess) + ensureNoBackupInProcess = ensureNoBackupInProcessDecoded + } +} + +extension SsmSapClientTypes { + /// Configuration parameters for AWS Backint Agent for SAP HANA. You can backup your SAP HANA database with AWS Backup or Amazon S3. + public struct BackintConfig: Swift.Equatable { + /// AWS service for your database backup. + /// This member is required. + public var backintMode: SsmSapClientTypes.BackintMode? + /// + /// This member is required. + public var ensureNoBackupInProcess: Swift.Bool? + + public init( + backintMode: SsmSapClientTypes.BackintMode? = nil, + ensureNoBackupInProcess: Swift.Bool? = nil + ) + { + self.backintMode = backintMode + self.ensureNoBackupInProcess = ensureNoBackupInProcess + } + } + +} + +extension SsmSapClientTypes { + public enum BackintMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case awsbackup + case sdkUnknown(Swift.String) + + public static var allCases: [BackintMode] { + return [ + .awsbackup, + .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 .awsbackup: return "AWSBackup" + 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 = BackintMode(rawValue: rawValue) ?? BackintMode.sdkUnknown(rawValue) + } + } +} + +extension SsmSapClientTypes { + public enum ClusterStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case maintenance + case `none` + case offline + case online + case standby + case sdkUnknown(Swift.String) + + public static var allCases: [ClusterStatus] { + return [ + .maintenance, + .none, + .offline, + .online, + .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 .maintenance: return "MAINTENANCE" + case .none: return "NONE" + case .offline: return "OFFLINE" + case .online: return "ONLINE" + case .standby: return "STANDBY" + 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 = ClusterStatus(rawValue: rawValue) ?? ClusterStatus.sdkUnknown(rawValue) + } + } +} + extension SsmSapClientTypes.Component: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case applicationId = "ApplicationId" + case arn = "Arn" + case associatedHost = "AssociatedHost" + case childComponents = "ChildComponents" case componentId = "ComponentId" case componentType = "ComponentType" case databases = "Databases" + case hdbVersion = "HdbVersion" case hosts = "Hosts" case lastUpdated = "LastUpdated" + case parentComponent = "ParentComponent" case primaryHost = "PrimaryHost" + case resilience = "Resilience" + case sapHostname = "SapHostname" + case sapKernelVersion = "SapKernelVersion" case status = "Status" } @@ -355,6 +586,18 @@ extension SsmSapClientTypes.Component: Swift.Codable { if let applicationId = self.applicationId { try encodeContainer.encode(applicationId, forKey: .applicationId) } + if let arn = self.arn { + try encodeContainer.encode(arn, forKey: .arn) + } + if let associatedHost = self.associatedHost { + try encodeContainer.encode(associatedHost, forKey: .associatedHost) + } + if let childComponents = childComponents { + var childComponentsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .childComponents) + for componentid0 in childComponents { + try childComponentsContainer.encode(componentid0) + } + } if let componentId = self.componentId { try encodeContainer.encode(componentId, forKey: .componentId) } @@ -367,6 +610,9 @@ extension SsmSapClientTypes.Component: Swift.Codable { try databasesContainer.encode(databaseid0) } } + if let hdbVersion = self.hdbVersion { + try encodeContainer.encode(hdbVersion, forKey: .hdbVersion) + } if let hosts = hosts { var hostsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .hosts) for host0 in hosts { @@ -376,9 +622,21 @@ extension SsmSapClientTypes.Component: Swift.Codable { if let lastUpdated = self.lastUpdated { try encodeContainer.encodeTimestamp(lastUpdated, format: .epochSeconds, forKey: .lastUpdated) } + if let parentComponent = self.parentComponent { + try encodeContainer.encode(parentComponent, forKey: .parentComponent) + } if let primaryHost = self.primaryHost { try encodeContainer.encode(primaryHost, forKey: .primaryHost) } + if let resilience = self.resilience { + try encodeContainer.encode(resilience, forKey: .resilience) + } + if let sapHostname = self.sapHostname { + try encodeContainer.encode(sapHostname, forKey: .sapHostname) + } + if let sapKernelVersion = self.sapKernelVersion { + try encodeContainer.encode(sapKernelVersion, forKey: .sapKernelVersion) + } if let status = self.status { try encodeContainer.encode(status.rawValue, forKey: .status) } @@ -388,12 +646,35 @@ extension SsmSapClientTypes.Component: Swift.Codable { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let componentIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .componentId) componentId = componentIdDecoded + let parentComponentDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .parentComponent) + parentComponent = parentComponentDecoded + let childComponentsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .childComponents) + var childComponentsDecoded0:[Swift.String]? = nil + if let childComponentsContainer = childComponentsContainer { + childComponentsDecoded0 = [Swift.String]() + for string0 in childComponentsContainer { + if let string0 = string0 { + childComponentsDecoded0?.append(string0) + } + } + } + childComponents = childComponentsDecoded0 let applicationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .applicationId) applicationId = applicationIdDecoded let componentTypeDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.ComponentType.self, forKey: .componentType) componentType = componentTypeDecoded let statusDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.ComponentStatus.self, forKey: .status) status = statusDecoded + let sapHostnameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sapHostname) + sapHostname = sapHostnameDecoded + let sapKernelVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .sapKernelVersion) + sapKernelVersion = sapKernelVersionDecoded + let hdbVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .hdbVersion) + hdbVersion = hdbVersionDecoded + let resilienceDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.Resilience.self, forKey: .resilience) + resilience = resilienceDecoded + let associatedHostDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.AssociatedHost.self, forKey: .associatedHost) + associatedHost = associatedHostDecoded let databasesContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .databases) var databasesDecoded0:[Swift.String]? = nil if let databasesContainer = databasesContainer { @@ -420,6 +701,8 @@ extension SsmSapClientTypes.Component: Swift.Codable { primaryHost = primaryHostDecoded let lastUpdatedDecoded = try containerValues.decodeTimestampIfPresent(.epochSeconds, forKey: .lastUpdated) lastUpdated = lastUpdatedDecoded + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded } } @@ -428,39 +711,73 @@ extension SsmSapClientTypes { public struct Component: Swift.Equatable { /// The ID of the application. public var applicationId: Swift.String? + /// The Amazon Resource Name (ARN) of the component. + public var arn: Swift.String? + /// The associated host of the component. + public var associatedHost: SsmSapClientTypes.AssociatedHost? + /// The child components of a highly available environment. For example, in a highly available SAP on AWS workload, the child component consists of the primary and secondar instances. + public var childComponents: [Swift.String]? /// The ID of the component. public var componentId: Swift.String? /// The type of the component. public var componentType: SsmSapClientTypes.ComponentType? /// The SAP HANA databases of the component. public var databases: [Swift.String]? + /// The SAP HANA version of the component. + public var hdbVersion: Swift.String? /// The hosts of the component. + @available(*, deprecated, message: "This shape is no longer used. Please use AssociatedHost.") public var hosts: [SsmSapClientTypes.Host]? /// The time at which the component was last updated. public var lastUpdated: ClientRuntime.Date? + /// The parent component of a highly available environment. For example, in a highly available SAP on AWS workload, the parent component consists of the entire setup, including the child components. + public var parentComponent: Swift.String? /// The primary host of the component. + @available(*, deprecated, message: "This shape is no longer used. Please use AssociatedHost.") public var primaryHost: Swift.String? + /// Details of the SAP HANA system replication for the component. + public var resilience: SsmSapClientTypes.Resilience? + /// The hostname of the component. + public var sapHostname: Swift.String? + /// The kernel version of the component. + public var sapKernelVersion: Swift.String? /// The status of the component. public var status: SsmSapClientTypes.ComponentStatus? public init( applicationId: Swift.String? = nil, + arn: Swift.String? = nil, + associatedHost: SsmSapClientTypes.AssociatedHost? = nil, + childComponents: [Swift.String]? = nil, componentId: Swift.String? = nil, componentType: SsmSapClientTypes.ComponentType? = nil, databases: [Swift.String]? = nil, + hdbVersion: Swift.String? = nil, hosts: [SsmSapClientTypes.Host]? = nil, lastUpdated: ClientRuntime.Date? = nil, + parentComponent: Swift.String? = nil, primaryHost: Swift.String? = nil, + resilience: SsmSapClientTypes.Resilience? = nil, + sapHostname: Swift.String? = nil, + sapKernelVersion: Swift.String? = nil, status: SsmSapClientTypes.ComponentStatus? = nil ) { self.applicationId = applicationId + self.arn = arn + self.associatedHost = associatedHost + self.childComponents = childComponents self.componentId = componentId self.componentType = componentType self.databases = databases + self.hdbVersion = hdbVersion self.hosts = hosts self.lastUpdated = lastUpdated + self.parentComponent = parentComponent self.primaryHost = primaryHost + self.resilience = resilience + self.sapHostname = sapHostname + self.sapKernelVersion = sapKernelVersion self.status = status } } @@ -470,11 +787,23 @@ extension SsmSapClientTypes { extension SsmSapClientTypes { public enum ComponentStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case activated + case running + case runningWithError + case starting + case stopped + case stopping + case undefined case sdkUnknown(Swift.String) public static var allCases: [ComponentStatus] { return [ .activated, + .running, + .runningWithError, + .starting, + .stopped, + .stopping, + .undefined, .sdkUnknown("") ] } @@ -485,6 +814,12 @@ extension SsmSapClientTypes { public var rawValue: Swift.String { switch self { case .activated: return "ACTIVATED" + case .running: return "RUNNING" + case .runningWithError: return "RUNNING_WITH_ERROR" + case .starting: return "STARTING" + case .stopped: return "STOPPED" + case .stopping: return "STOPPING" + case .undefined: return "UNDEFINED" case let .sdkUnknown(s): return s } } @@ -499,6 +834,7 @@ extension SsmSapClientTypes { extension SsmSapClientTypes.ComponentSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case applicationId = "ApplicationId" + case arn = "Arn" case componentId = "ComponentId" case componentType = "ComponentType" case tags = "Tags" @@ -509,6 +845,9 @@ extension SsmSapClientTypes.ComponentSummary: Swift.Codable { if let applicationId = self.applicationId { try encodeContainer.encode(applicationId, forKey: .applicationId) } + if let arn = self.arn { + try encodeContainer.encode(arn, forKey: .arn) + } if let componentId = self.componentId { try encodeContainer.encode(componentId, forKey: .componentId) } @@ -542,6 +881,8 @@ extension SsmSapClientTypes.ComponentSummary: Swift.Codable { } } tags = tagsDecoded0 + let arnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .arn) + arn = arnDecoded } } @@ -550,6 +891,8 @@ extension SsmSapClientTypes { public struct ComponentSummary: Swift.Equatable { /// The ID of the application. public var applicationId: Swift.String? + /// The Amazon Resource Name (ARN) of the component summary. + public var arn: Swift.String? /// The ID of the component. public var componentId: Swift.String? /// The type of the component. @@ -559,12 +902,14 @@ extension SsmSapClientTypes { public init( applicationId: Swift.String? = nil, + arn: Swift.String? = nil, componentId: Swift.String? = nil, componentType: SsmSapClientTypes.ComponentType? = nil, tags: [Swift.String:Swift.String]? = nil ) { self.applicationId = applicationId + self.arn = arn self.componentId = componentId self.componentType = componentType self.tags = tags @@ -576,11 +921,13 @@ extension SsmSapClientTypes { extension SsmSapClientTypes { public enum ComponentType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case hana + case hanaNode case sdkUnknown(Swift.String) public static var allCases: [ComponentType] { return [ .hana, + .hanaNode, .sdkUnknown("") ] } @@ -591,6 +938,7 @@ extension SsmSapClientTypes { public var rawValue: Swift.String { switch self { case .hana: return "HANA" + case .hanaNode: return "HANA_NODE" case let .sdkUnknown(s): return s } } @@ -835,6 +1183,7 @@ extension SsmSapClientTypes { extension SsmSapClientTypes { public enum DatabaseStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case error case running case starting case stopped @@ -844,6 +1193,7 @@ extension SsmSapClientTypes { public static var allCases: [DatabaseStatus] { return [ + .error, .running, .starting, .stopped, @@ -858,6 +1208,7 @@ extension SsmSapClientTypes { } public var rawValue: Swift.String { switch self { + case .error: return "ERROR" case .running: return "RUNNING" case .starting: return "STARTING" case .stopped: return "STOPPED" @@ -1512,8 +1863,10 @@ extension GetComponentOutputResponse: ClientRuntime.HttpResponseBinding { let responseDecoder = decoder { let output: GetComponentOutputResponseBody = try responseDecoder.decode(responseBody: data) self.component = output.component + self.tags = output.tags } else { self.component = nil + self.tags = nil } } } @@ -1521,28 +1874,45 @@ extension GetComponentOutputResponse: ClientRuntime.HttpResponseBinding { public struct GetComponentOutputResponse: Swift.Equatable { /// The component of an application registered with AWS Systems Manager for SAP. public var component: SsmSapClientTypes.Component? + /// The tags of a component. + public var tags: [Swift.String:Swift.String]? public init( - component: SsmSapClientTypes.Component? = nil + component: SsmSapClientTypes.Component? = nil, + tags: [Swift.String:Swift.String]? = nil ) { self.component = component + self.tags = tags } } struct GetComponentOutputResponseBody: Swift.Equatable { let component: SsmSapClientTypes.Component? + let tags: [Swift.String:Swift.String]? } extension GetComponentOutputResponseBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case component = "Component" + case tags = "Tags" } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let componentDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.Component.self, forKey: .component) component = componentDecoded + 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 } } @@ -1915,14 +2285,19 @@ extension GetResourcePermissionOutputResponseBody: Swift.Decodable { extension SsmSapClientTypes.Host: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { + case ec2InstanceId = "EC2InstanceId" case hostIp = "HostIp" case hostName = "HostName" case hostRole = "HostRole" case instanceId = "InstanceId" + case osVersion = "OsVersion" } public func encode(to encoder: Swift.Encoder) throws { var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let ec2InstanceId = self.ec2InstanceId { + try encodeContainer.encode(ec2InstanceId, forKey: .ec2InstanceId) + } if let hostIp = self.hostIp { try encodeContainer.encode(hostIp, forKey: .hostIp) } @@ -1935,24 +2310,33 @@ extension SsmSapClientTypes.Host: Swift.Codable { if let instanceId = self.instanceId { try encodeContainer.encode(instanceId, forKey: .instanceId) } + if let osVersion = self.osVersion { + try encodeContainer.encode(osVersion, forKey: .osVersion) + } } public init(from decoder: Swift.Decoder) throws { let containerValues = try decoder.container(keyedBy: CodingKeys.self) let hostNameDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .hostName) hostName = hostNameDecoded - let hostRoleDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.HostRole.self, forKey: .hostRole) - hostRole = hostRoleDecoded let hostIpDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .hostIp) hostIp = hostIpDecoded + let ec2InstanceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .ec2InstanceId) + ec2InstanceId = ec2InstanceIdDecoded let instanceIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .instanceId) instanceId = instanceIdDecoded + let hostRoleDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.HostRole.self, forKey: .hostRole) + hostRole = hostRoleDecoded + let osVersionDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .osVersion) + osVersion = osVersionDecoded } } extension SsmSapClientTypes { /// Describes the properties of the Dedicated Host. public struct Host: Swift.Equatable { + /// The ID of Amazon EC2 instance. + public var ec2InstanceId: Swift.String? /// The IP address of the Dedicated Host. public var hostIp: Swift.String? /// The name of the Dedicated Host. @@ -1961,18 +2345,24 @@ extension SsmSapClientTypes { public var hostRole: SsmSapClientTypes.HostRole? /// The instance ID of the instance on the Dedicated Host. public var instanceId: Swift.String? + /// The version of the operating system. + public var osVersion: Swift.String? public init( + ec2InstanceId: Swift.String? = nil, hostIp: Swift.String? = nil, hostName: Swift.String? = nil, hostRole: SsmSapClientTypes.HostRole? = nil, - instanceId: Swift.String? = nil + instanceId: Swift.String? = nil, + osVersion: Swift.String? = nil ) { + self.ec2InstanceId = ec2InstanceId self.hostIp = hostIp self.hostName = hostName self.hostRole = hostRole self.instanceId = instanceId + self.osVersion = osVersion } } @@ -2909,6 +3299,47 @@ extension SsmSapClientTypes { } +extension SsmSapClientTypes { + public enum OperationMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case deltaDatashipping + case logreplay + case logreplayReadaccess + case `none` + case primary + case sdkUnknown(Swift.String) + + public static var allCases: [OperationMode] { + return [ + .deltaDatashipping, + .logreplay, + .logreplayReadaccess, + .none, + .primary, + .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 .deltaDatashipping: return "DELTA_DATASHIPPING" + case .logreplay: return "LOGREPLAY" + case .logreplayReadaccess: return "LOGREPLAY_READACCESS" + case .none: return "NONE" + case .primary: return "PRIMARY" + 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 = OperationMode(rawValue: rawValue) ?? OperationMode.sdkUnknown(rawValue) + } + } +} + extension SsmSapClientTypes { public enum OperationStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case error @@ -3322,6 +3753,112 @@ extension RegisterApplicationOutputResponseBody: Swift.Decodable { } } +extension SsmSapClientTypes { + public enum ReplicationMode: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case async + case `none` + case primary + case sync + case syncmem + case sdkUnknown(Swift.String) + + public static var allCases: [ReplicationMode] { + return [ + .async, + .none, + .primary, + .sync, + .syncmem, + .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 .async: return "ASYNC" + case .none: return "NONE" + case .primary: return "PRIMARY" + case .sync: return "SYNC" + case .syncmem: return "SYNCMEM" + 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 = ReplicationMode(rawValue: rawValue) ?? ReplicationMode.sdkUnknown(rawValue) + } + } +} + +extension SsmSapClientTypes.Resilience: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case clusterStatus = "ClusterStatus" + case hsrOperationMode = "HsrOperationMode" + case hsrReplicationMode = "HsrReplicationMode" + case hsrTier = "HsrTier" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let clusterStatus = self.clusterStatus { + try encodeContainer.encode(clusterStatus.rawValue, forKey: .clusterStatus) + } + if let hsrOperationMode = self.hsrOperationMode { + try encodeContainer.encode(hsrOperationMode.rawValue, forKey: .hsrOperationMode) + } + if let hsrReplicationMode = self.hsrReplicationMode { + try encodeContainer.encode(hsrReplicationMode.rawValue, forKey: .hsrReplicationMode) + } + if let hsrTier = self.hsrTier { + try encodeContainer.encode(hsrTier, forKey: .hsrTier) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let hsrTierDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .hsrTier) + hsrTier = hsrTierDecoded + let hsrReplicationModeDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.ReplicationMode.self, forKey: .hsrReplicationMode) + hsrReplicationMode = hsrReplicationModeDecoded + let hsrOperationModeDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.OperationMode.self, forKey: .hsrOperationMode) + hsrOperationMode = hsrOperationModeDecoded + let clusterStatusDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.ClusterStatus.self, forKey: .clusterStatus) + clusterStatus = clusterStatusDecoded + } +} + +extension SsmSapClientTypes { + /// Details of the SAP HANA system replication for the instance. + public struct Resilience: Swift.Equatable { + /// The cluster status of the component. + public var clusterStatus: SsmSapClientTypes.ClusterStatus? + /// The operation mode of the component. + public var hsrOperationMode: SsmSapClientTypes.OperationMode? + /// The replication mode of the component. + public var hsrReplicationMode: SsmSapClientTypes.ReplicationMode? + /// The tier of the component. + public var hsrTier: Swift.String? + + public init( + clusterStatus: SsmSapClientTypes.ClusterStatus? = nil, + hsrOperationMode: SsmSapClientTypes.OperationMode? = nil, + hsrReplicationMode: SsmSapClientTypes.ReplicationMode? = nil, + hsrTier: Swift.String? = nil + ) + { + self.clusterStatus = clusterStatus + self.hsrOperationMode = hsrOperationMode + self.hsrReplicationMode = hsrReplicationMode + self.hsrTier = hsrTier + } + } + +} + extension ResourceNotFoundException { public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil, message: Swift.String? = nil, requestID: Swift.String? = nil) async throws { if let data = try await httpResponse.body.readData(), @@ -3377,6 +3914,108 @@ extension ResourceNotFoundExceptionBody: Swift.Decodable { } } +extension StartApplicationRefreshInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case applicationId = "ApplicationId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let applicationId = self.applicationId { + try encodeContainer.encode(applicationId, forKey: .applicationId) + } + } +} + +extension StartApplicationRefreshInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/start-application-refresh" + } +} + +public struct StartApplicationRefreshInput: Swift.Equatable { + /// The ID of the application. + /// This member is required. + public var applicationId: Swift.String? + + public init( + applicationId: Swift.String? = nil + ) + { + self.applicationId = applicationId + } +} + +struct StartApplicationRefreshInputBody: Swift.Equatable { + let applicationId: Swift.String? +} + +extension StartApplicationRefreshInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case applicationId = "ApplicationId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let applicationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .applicationId) + applicationId = applicationIdDecoded + } +} + +public enum StartApplicationRefreshOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension StartApplicationRefreshOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: StartApplicationRefreshOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.operationId = output.operationId + } else { + self.operationId = nil + } + } +} + +public struct StartApplicationRefreshOutputResponse: Swift.Equatable { + /// The ID of the operation. + public var operationId: Swift.String? + + public init( + operationId: Swift.String? = nil + ) + { + self.operationId = operationId + } +} + +struct StartApplicationRefreshOutputResponseBody: Swift.Equatable { + let operationId: Swift.String? +} + +extension StartApplicationRefreshOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case operationId = "OperationId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let operationIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .operationId) + operationId = operationIdDecoded + } +} + extension TagResourceInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case tags @@ -3547,6 +4186,7 @@ public struct UntagResourceOutputResponse: Swift.Equatable { extension UpdateApplicationSettingsInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case applicationId = "ApplicationId" + case backint = "Backint" case credentialsToAddOrUpdate = "CredentialsToAddOrUpdate" case credentialsToRemove = "CredentialsToRemove" } @@ -3556,6 +4196,9 @@ extension UpdateApplicationSettingsInput: Swift.Encodable { if let applicationId = self.applicationId { try encodeContainer.encode(applicationId, forKey: .applicationId) } + if let backint = self.backint { + try encodeContainer.encode(backint, forKey: .backint) + } if let credentialsToAddOrUpdate = credentialsToAddOrUpdate { var credentialsToAddOrUpdateContainer = encodeContainer.nestedUnkeyedContainer(forKey: .credentialsToAddOrUpdate) for applicationcredential0 in credentialsToAddOrUpdate { @@ -3581,6 +4224,8 @@ public struct UpdateApplicationSettingsInput: Swift.Equatable { /// The ID of the application. /// This member is required. public var applicationId: Swift.String? + /// Installation of AWS Backint Agent for SAP HANA. + public var backint: SsmSapClientTypes.BackintConfig? /// The credentials to be added or updated. public var credentialsToAddOrUpdate: [SsmSapClientTypes.ApplicationCredential]? /// The credentials to be removed. @@ -3588,11 +4233,13 @@ public struct UpdateApplicationSettingsInput: Swift.Equatable { public init( applicationId: Swift.String? = nil, + backint: SsmSapClientTypes.BackintConfig? = nil, credentialsToAddOrUpdate: [SsmSapClientTypes.ApplicationCredential]? = nil, credentialsToRemove: [SsmSapClientTypes.ApplicationCredential]? = nil ) { self.applicationId = applicationId + self.backint = backint self.credentialsToAddOrUpdate = credentialsToAddOrUpdate self.credentialsToRemove = credentialsToRemove } @@ -3602,11 +4249,13 @@ struct UpdateApplicationSettingsInputBody: Swift.Equatable { let applicationId: Swift.String? let credentialsToAddOrUpdate: [SsmSapClientTypes.ApplicationCredential]? let credentialsToRemove: [SsmSapClientTypes.ApplicationCredential]? + let backint: SsmSapClientTypes.BackintConfig? } extension UpdateApplicationSettingsInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case applicationId = "ApplicationId" + case backint = "Backint" case credentialsToAddOrUpdate = "CredentialsToAddOrUpdate" case credentialsToRemove = "CredentialsToRemove" } @@ -3637,6 +4286,8 @@ extension UpdateApplicationSettingsInputBody: Swift.Decodable { } } credentialsToRemove = credentialsToRemoveDecoded0 + let backintDecoded = try containerValues.decodeIfPresent(SsmSapClientTypes.BackintConfig.self, forKey: .backint) + backint = backintDecoded } } @@ -3645,6 +4296,7 @@ public enum UpdateApplicationSettingsOutputError: ClientRuntime.HttpResponseErro let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) let requestID = httpResponse.requestId switch restJSONError.errorType { + case "ConflictException": return try await ConflictException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "InternalServerException": return try await InternalServerException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) case "ValidationException": return try await ValidationException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) diff --git a/Sources/Services/AWSTranscribe/models/Models.swift b/Sources/Services/AWSTranscribe/models/Models.swift index b47fdb6171c..20ded5f8da5 100644 --- a/Sources/Services/AWSTranscribe/models/Models.swift +++ b/Sources/Services/AWSTranscribe/models/Models.swift @@ -6959,6 +6959,7 @@ extension StartTranscriptionJobInput: Swift.Encodable { case settings = "Settings" case subtitles = "Subtitles" case tags = "Tags" + case toxicityDetection = "ToxicityDetection" } public func encode(to encoder: Swift.Encoder) throws { @@ -7029,6 +7030,12 @@ extension StartTranscriptionJobInput: Swift.Encodable { try tagsContainer.encode(tag0) } } + if let toxicityDetection = toxicityDetection { + var toxicityDetectionContainer = encodeContainer.nestedUnkeyedContainer(forKey: .toxicityDetection) + for toxicitydetectionsettings0 in toxicityDetection { + try toxicityDetectionContainer.encode(toxicitydetectionsettings0) + } + } } } @@ -7105,6 +7112,8 @@ public struct StartTranscriptionJobInput: Swift.Equatable { public var subtitles: TranscribeClientTypes.Subtitles? /// Adds one or more custom tags, each in the form of a key:value pair, to a new transcription job at the time you start this new job. To learn more about using tags with Amazon Transcribe, refer to [Tagging resources](https://docs.aws.amazon.com/transcribe/latest/dg/tagging.html). public var tags: [TranscribeClientTypes.Tag]? + /// Enables toxic speech detection in your transcript. If you include ToxicityDetection in your request, you must also include ToxicityCategories. For information on the types of toxic speech Amazon Transcribe can detect, see [Detecting toxic speech](https://docs.aws.amazon.com/transcribe/latest/dg/toxic-language.html). + public var toxicityDetection: [TranscribeClientTypes.ToxicityDetectionSettings]? /// A unique name, chosen by you, for your transcription job. The name that you specify is also used as the default name of your transcription output file. If you want to specify a different name for your transcription output, use the OutputKey parameter. This name is case sensitive, cannot contain spaces, and must be unique within an Amazon Web Services account. If you try to create a new job with the same name as an existing job, you get a ConflictException error. /// This member is required. public var transcriptionJobName: Swift.String? @@ -7128,6 +7137,7 @@ public struct StartTranscriptionJobInput: Swift.Equatable { settings: TranscribeClientTypes.Settings? = nil, subtitles: TranscribeClientTypes.Subtitles? = nil, tags: [TranscribeClientTypes.Tag]? = nil, + toxicityDetection: [TranscribeClientTypes.ToxicityDetectionSettings]? = nil, transcriptionJobName: Swift.String? = nil ) { @@ -7149,6 +7159,7 @@ public struct StartTranscriptionJobInput: Swift.Equatable { self.settings = settings self.subtitles = subtitles self.tags = tags + self.toxicityDetection = toxicityDetection self.transcriptionJobName = transcriptionJobName } } @@ -7172,6 +7183,7 @@ struct StartTranscriptionJobInputBody: Swift.Equatable { let subtitles: TranscribeClientTypes.Subtitles? let tags: [TranscribeClientTypes.Tag]? let languageIdSettings: [Swift.String:TranscribeClientTypes.LanguageIdSettings]? + let toxicityDetection: [TranscribeClientTypes.ToxicityDetectionSettings]? } extension StartTranscriptionJobInputBody: Swift.Decodable { @@ -7194,6 +7206,7 @@ extension StartTranscriptionJobInputBody: Swift.Decodable { case settings = "Settings" case subtitles = "Subtitles" case tags = "Tags" + case toxicityDetection = "ToxicityDetection" } public init(from decoder: Swift.Decoder) throws { @@ -7270,6 +7283,17 @@ extension StartTranscriptionJobInputBody: Swift.Decodable { } } languageIdSettings = languageIdSettingsDecoded0 + let toxicityDetectionContainer = try containerValues.decodeIfPresent([TranscribeClientTypes.ToxicityDetectionSettings?].self, forKey: .toxicityDetection) + var toxicityDetectionDecoded0:[TranscribeClientTypes.ToxicityDetectionSettings]? = nil + if let toxicityDetectionContainer = toxicityDetectionContainer { + toxicityDetectionDecoded0 = [TranscribeClientTypes.ToxicityDetectionSettings]() + for structure0 in toxicityDetectionContainer { + if let structure0 = structure0 { + toxicityDetectionDecoded0?.append(structure0) + } + } + } + toxicityDetection = toxicityDetectionDecoded0 } } @@ -7632,6 +7656,83 @@ public struct TagResourceOutputResponse: Swift.Equatable { public init() { } } +extension TranscribeClientTypes { + public enum ToxicityCategory: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { + case all + case sdkUnknown(Swift.String) + + public static var allCases: [ToxicityCategory] { + return [ + .all, + .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 .all: return "ALL" + 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 = ToxicityCategory(rawValue: rawValue) ?? ToxicityCategory.sdkUnknown(rawValue) + } + } +} + +extension TranscribeClientTypes.ToxicityDetectionSettings: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case toxicityCategories = "ToxicityCategories" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let toxicityCategories = toxicityCategories { + var toxicityCategoriesContainer = encodeContainer.nestedUnkeyedContainer(forKey: .toxicityCategories) + for toxicitycategory0 in toxicityCategories { + try toxicityCategoriesContainer.encode(toxicitycategory0.rawValue) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let toxicityCategoriesContainer = try containerValues.decodeIfPresent([TranscribeClientTypes.ToxicityCategory?].self, forKey: .toxicityCategories) + var toxicityCategoriesDecoded0:[TranscribeClientTypes.ToxicityCategory]? = nil + if let toxicityCategoriesContainer = toxicityCategoriesContainer { + toxicityCategoriesDecoded0 = [TranscribeClientTypes.ToxicityCategory]() + for enum0 in toxicityCategoriesContainer { + if let enum0 = enum0 { + toxicityCategoriesDecoded0?.append(enum0) + } + } + } + toxicityCategories = toxicityCategoriesDecoded0 + } +} + +extension TranscribeClientTypes { + /// Contains ToxicityCategories, which is a required parameter if you want to enable toxicity detection (ToxicityDetection) in your transcription request. + public struct ToxicityDetectionSettings: Swift.Equatable { + /// If you include ToxicityDetection in your transcription request, you must also include ToxicityCategories. The only accepted value for this parameter is ALL. + /// This member is required. + public var toxicityCategories: [TranscribeClientTypes.ToxicityCategory]? + + public init( + toxicityCategories: [TranscribeClientTypes.ToxicityCategory]? = nil + ) + { + self.toxicityCategories = toxicityCategories + } + } + +} + extension TranscribeClientTypes.Transcript: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case redactedTranscriptFileUri = "RedactedTranscriptFileUri" @@ -7836,6 +7937,7 @@ extension TranscribeClientTypes.TranscriptionJob: Swift.Codable { case startTime = "StartTime" case subtitles = "Subtitles" case tags = "Tags" + case toxicityDetection = "ToxicityDetection" case transcript = "Transcript" case transcriptionJobName = "TranscriptionJobName" case transcriptionJobStatus = "TranscriptionJobStatus" @@ -7915,6 +8017,12 @@ extension TranscribeClientTypes.TranscriptionJob: Swift.Codable { try tagsContainer.encode(tag0) } } + if let toxicityDetection = toxicityDetection { + var toxicityDetectionContainer = encodeContainer.nestedUnkeyedContainer(forKey: .toxicityDetection) + for toxicitydetectionsettings0 in toxicityDetection { + try toxicityDetectionContainer.encode(toxicitydetectionsettings0) + } + } if let transcript = self.transcript { try encodeContainer.encode(transcript, forKey: .transcript) } @@ -8010,6 +8118,17 @@ extension TranscribeClientTypes.TranscriptionJob: Swift.Codable { } } languageIdSettings = languageIdSettingsDecoded0 + let toxicityDetectionContainer = try containerValues.decodeIfPresent([TranscribeClientTypes.ToxicityDetectionSettings?].self, forKey: .toxicityDetection) + var toxicityDetectionDecoded0:[TranscribeClientTypes.ToxicityDetectionSettings]? = nil + if let toxicityDetectionContainer = toxicityDetectionContainer { + toxicityDetectionDecoded0 = [TranscribeClientTypes.ToxicityDetectionSettings]() + for structure0 in toxicityDetectionContainer { + if let structure0 = structure0 { + toxicityDetectionDecoded0?.append(structure0) + } + } + } + toxicityDetection = toxicityDetectionDecoded0 } } @@ -8068,6 +8187,8 @@ extension TranscribeClientTypes { public var subtitles: TranscribeClientTypes.SubtitlesOutput? /// The tags, each in the form of a key:value pair, assigned to the specified transcription job. public var tags: [TranscribeClientTypes.Tag]? + /// Provides information about the toxicity detection settings applied to your transcription. + public var toxicityDetection: [TranscribeClientTypes.ToxicityDetectionSettings]? /// Provides you with the Amazon S3 URI you can use to access your transcript. public var transcript: TranscribeClientTypes.Transcript? /// The name of the transcription job. Job names are case sensitive and must be unique within an Amazon Web Services account. @@ -8096,6 +8217,7 @@ extension TranscribeClientTypes { startTime: ClientRuntime.Date? = nil, subtitles: TranscribeClientTypes.SubtitlesOutput? = nil, tags: [TranscribeClientTypes.Tag]? = nil, + toxicityDetection: [TranscribeClientTypes.ToxicityDetectionSettings]? = nil, transcript: TranscribeClientTypes.Transcript? = nil, transcriptionJobName: Swift.String? = nil, transcriptionJobStatus: TranscribeClientTypes.TranscriptionJobStatus? = nil @@ -8121,6 +8243,7 @@ extension TranscribeClientTypes { self.startTime = startTime self.subtitles = subtitles self.tags = tags + self.toxicityDetection = toxicityDetection self.transcript = transcript self.transcriptionJobName = transcriptionJobName self.transcriptionJobStatus = transcriptionJobStatus @@ -8181,6 +8304,7 @@ extension TranscribeClientTypes.TranscriptionJobSummary: Swift.Codable { case modelSettings = "ModelSettings" case outputLocationType = "OutputLocationType" case startTime = "StartTime" + case toxicityDetection = "ToxicityDetection" case transcriptionJobName = "TranscriptionJobName" case transcriptionJobStatus = "TranscriptionJobStatus" } @@ -8226,6 +8350,12 @@ extension TranscribeClientTypes.TranscriptionJobSummary: Swift.Codable { if let startTime = self.startTime { try encodeContainer.encodeTimestamp(startTime, format: .epochSeconds, forKey: .startTime) } + if let toxicityDetection = toxicityDetection { + var toxicityDetectionContainer = encodeContainer.nestedUnkeyedContainer(forKey: .toxicityDetection) + for toxicitydetectionsettings0 in toxicityDetection { + try toxicityDetectionContainer.encode(toxicitydetectionsettings0) + } + } if let transcriptionJobName = self.transcriptionJobName { try encodeContainer.encode(transcriptionJobName, forKey: .transcriptionJobName) } @@ -8273,6 +8403,17 @@ extension TranscribeClientTypes.TranscriptionJobSummary: Swift.Codable { } } languageCodes = languageCodesDecoded0 + let toxicityDetectionContainer = try containerValues.decodeIfPresent([TranscribeClientTypes.ToxicityDetectionSettings?].self, forKey: .toxicityDetection) + var toxicityDetectionDecoded0:[TranscribeClientTypes.ToxicityDetectionSettings]? = nil + if let toxicityDetectionContainer = toxicityDetectionContainer { + toxicityDetectionDecoded0 = [TranscribeClientTypes.ToxicityDetectionSettings]() + for structure0 in toxicityDetectionContainer { + if let structure0 = structure0 { + toxicityDetectionDecoded0?.append(structure0) + } + } + } + toxicityDetection = toxicityDetectionDecoded0 } } @@ -8303,6 +8444,8 @@ extension TranscribeClientTypes { public var outputLocationType: TranscribeClientTypes.OutputLocationType? /// The date and time your transcription job began processing. Timestamps are in the format YYYY-MM-DD'T'HH:MM:SS.SSSSSS-UTC. For example, 2022-05-04T12:32:58.789000-07:00 represents a transcription job that started processing at 12:32 PM UTC-7 on May 4, 2022. public var startTime: ClientRuntime.Date? + /// Indicates whether toxicity detection was enabled for the specified transcription job. + public var toxicityDetection: [TranscribeClientTypes.ToxicityDetectionSettings]? /// The name of the transcription job. Job names are case sensitive and must be unique within an Amazon Web Services account. public var transcriptionJobName: Swift.String? /// Provides the status of your transcription job. If the status is COMPLETED, the job is finished and you can find the results at the location specified in TranscriptFileUri (or RedactedTranscriptFileUri, if you requested transcript redaction). If the status is FAILED, FailureReason provides details on why your transcription job failed. @@ -8321,6 +8464,7 @@ extension TranscribeClientTypes { modelSettings: TranscribeClientTypes.ModelSettings? = nil, outputLocationType: TranscribeClientTypes.OutputLocationType? = nil, startTime: ClientRuntime.Date? = nil, + toxicityDetection: [TranscribeClientTypes.ToxicityDetectionSettings]? = nil, transcriptionJobName: Swift.String? = nil, transcriptionJobStatus: TranscribeClientTypes.TranscriptionJobStatus? = nil ) @@ -8337,6 +8481,7 @@ extension TranscribeClientTypes { self.modelSettings = modelSettings self.outputLocationType = outputLocationType self.startTime = startTime + self.toxicityDetection = toxicityDetection self.transcriptionJobName = transcriptionJobName self.transcriptionJobStatus = transcriptionJobStatus } diff --git a/Sources/Services/AWSTransfer/TransferClient.swift b/Sources/Services/AWSTransfer/TransferClient.swift index 632453974af..f2b4c65aebd 100644 --- a/Sources/Services/AWSTransfer/TransferClient.swift +++ b/Sources/Services/AWSTransfer/TransferClient.swift @@ -141,7 +141,7 @@ extension TransferClient: TransferClientProtocol { return result } - /// Creates the connector, which captures the parameters for an outbound connection for the AS2 protocol. The connector is required for sending files to an externally hosted AS2 server. For more details about connectors, see [Create AS2 connectors](https://docs.aws.amazon.com/transfer/latest/userguide/create-b2b-server.html#configure-as2-connector). + /// Creates the connector, which captures the parameters for an outbound connection for the AS2 or SFTP protocol. The connector is required for sending files to an externally hosted AS2 or SFTP server. For more details about AS2 connectors, see [Create AS2 connectors](https://docs.aws.amazon.com/transfer/latest/userguide/create-b2b-server.html#configure-as2-connector). You must specify exactly one configuration object: either for AS2 (As2Config) or SFTP (SftpConfig). public func createConnector(input: CreateConnectorInput) async throws -> CreateConnectorOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -437,7 +437,7 @@ extension TransferClient: TransferClientProtocol { return result } - /// Deletes the agreement that's specified in the provided ConnectorId. + /// Deletes the connector that's specified in the provided ConnectorId. public func deleteConnector(input: DeleteConnectorInput) async throws -> DeleteConnectorOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1695,7 +1695,15 @@ extension TransferClient: TransferClientProtocol { return result } - /// Begins an outbound file transfer to a remote AS2 server. You specify the ConnectorId and the file paths for where to send the files. + /// Begins a file transfer between local Amazon Web Services storage and a remote AS2 or SFTP server. + /// + /// * For an AS2 connector, you specify the ConnectorId and one or more SendFilePaths to identify the files you want to transfer. + /// + /// * For an SFTP connector, the file transfer can be either outbound or inbound. In both cases, you specify the ConnectorId. Depending on the direction of the transfer, you also specify the following items: + /// + /// * If you are transferring file from a partner's SFTP server to a Transfer Family server, you specify one or more RetreiveFilePaths to identify the files you want to transfer, and a LocalDirectoryPath to specify the destination folder. + /// + /// * If you are transferring file to a partner's SFTP server from Amazon Web Services storage, you specify one or more SendFilePaths to identify the files you want to transfer, and a RemoteDirectoryPath to specify the destination folder. public func startFileTransfer(input: StartFileTransferInput) async throws -> StartFileTransferOutputResponse { let context = ClientRuntime.HttpContextBuilder() @@ -1843,6 +1851,43 @@ extension TransferClient: TransferClientProtocol { return result } + /// Tests whether your SFTP connector is set up successfully. We highly recommend that you call this operation to test your ability to transfer files between a Transfer Family server and a trading partner's SFTP server. + public func testConnection(input: TestConnectionInput) async throws -> TestConnectionOutputResponse + { + let context = ClientRuntime.HttpContextBuilder() + .withEncoder(value: encoder) + .withDecoder(value: decoder) + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "testConnection") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withCredentialsProvider(value: config.credentialsProvider) + .withRegion(value: config.region) + .withSigningName(value: "transfer") + .withSigningRegion(value: config.signingRegion) + .build() + var operation = ClientRuntime.OperationStack(id: "testConnection") + 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.serviceSpecific.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: .before, middleware: AWSClientRuntime.XAmzTargetMiddleware(xAmzTarget: "TransferService.TestConnection")) + operation.serializeStep.intercept(position: .after, middleware: ClientRuntime.SerializableBodyMiddleware(xmlName: "TestConnectionRequest")) + operation.serializeStep.intercept(position: .after, middleware: ContentTypeMiddleware(contentType: "application/x-amz-json-1.1")) + operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware()) + operation.finalizeStep.intercept(position: .after, middleware: ClientRuntime.RetryMiddleware(options: config.retryStrategyOptions)) + 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, input: input, next: client.getHandler()) + return result + } + /// If the IdentityProviderType of a file transfer protocol-enabled server is AWS_DIRECTORY_SERVICE or API_Gateway, tests whether your identity provider is set up successfully. We highly recommend that you call this operation to test your authentication method as soon as you create your server. By doing so, you can troubleshoot issues with the identity provider integration to ensure that your users can successfully use the service. The ServerId and UserName parameters are required. The ServerProtocol, SourceIp, and UserPassword are all optional. Note the following: /// /// * You cannot use TestIdentityProvider if the IdentityProviderType of your server is SERVICE_MANAGED. diff --git a/Sources/Services/AWSTransfer/TransferClientProtocol.swift b/Sources/Services/AWSTransfer/TransferClientProtocol.swift index f9ea3eb67a8..f5594c44dd9 100644 --- a/Sources/Services/AWSTransfer/TransferClientProtocol.swift +++ b/Sources/Services/AWSTransfer/TransferClientProtocol.swift @@ -8,7 +8,7 @@ public protocol TransferClientProtocol { func createAccess(input: CreateAccessInput) async throws -> CreateAccessOutputResponse /// Creates an agreement. An agreement is a bilateral trading partner agreement, or partnership, between an Transfer Family server and an AS2 process. The agreement defines the file and message transfer relationship between the server and the AS2 process. To define an agreement, Transfer Family combines a server, local profile, partner profile, certificate, and other attributes. The partner is identified with the PartnerProfileId, and the AS2 process is identified with the LocalProfileId. func createAgreement(input: CreateAgreementInput) async throws -> CreateAgreementOutputResponse - /// Creates the connector, which captures the parameters for an outbound connection for the AS2 protocol. The connector is required for sending files to an externally hosted AS2 server. For more details about connectors, see [Create AS2 connectors](https://docs.aws.amazon.com/transfer/latest/userguide/create-b2b-server.html#configure-as2-connector). + /// Creates the connector, which captures the parameters for an outbound connection for the AS2 or SFTP protocol. The connector is required for sending files to an externally hosted AS2 or SFTP server. For more details about AS2 connectors, see [Create AS2 connectors](https://docs.aws.amazon.com/transfer/latest/userguide/create-b2b-server.html#configure-as2-connector). You must specify exactly one configuration object: either for AS2 (As2Config) or SFTP (SftpConfig). func createConnector(input: CreateConnectorInput) async throws -> CreateConnectorOutputResponse /// Creates the local or partner profile to use for AS2 transfers. func createProfile(input: CreateProfileInput) async throws -> CreateProfileOutputResponse @@ -24,7 +24,7 @@ public protocol TransferClientProtocol { func deleteAgreement(input: DeleteAgreementInput) async throws -> DeleteAgreementOutputResponse /// Deletes the certificate that's specified in the CertificateId parameter. func deleteCertificate(input: DeleteCertificateInput) async throws -> DeleteCertificateOutputResponse - /// Deletes the agreement that's specified in the provided ConnectorId. + /// Deletes the connector that's specified in the provided ConnectorId. func deleteConnector(input: DeleteConnectorInput) async throws -> DeleteConnectorOutputResponse /// Deletes the host key that's specified in the HostKeyId parameter. func deleteHostKey(input: DeleteHostKeyInput) async throws -> DeleteHostKeyOutputResponse @@ -92,7 +92,15 @@ public protocol TransferClientProtocol { func listWorkflows(input: ListWorkflowsInput) async throws -> ListWorkflowsOutputResponse /// Sends a callback for asynchronous custom steps. The ExecutionId, WorkflowId, and Token are passed to the target resource during execution of a custom step of a workflow. You must include those with their callback as well as providing a status. func sendWorkflowStepState(input: SendWorkflowStepStateInput) async throws -> SendWorkflowStepStateOutputResponse - /// Begins an outbound file transfer to a remote AS2 server. You specify the ConnectorId and the file paths for where to send the files. + /// Begins a file transfer between local Amazon Web Services storage and a remote AS2 or SFTP server. + /// + /// * For an AS2 connector, you specify the ConnectorId and one or more SendFilePaths to identify the files you want to transfer. + /// + /// * For an SFTP connector, the file transfer can be either outbound or inbound. In both cases, you specify the ConnectorId. Depending on the direction of the transfer, you also specify the following items: + /// + /// * If you are transferring file from a partner's SFTP server to a Transfer Family server, you specify one or more RetreiveFilePaths to identify the files you want to transfer, and a LocalDirectoryPath to specify the destination folder. + /// + /// * If you are transferring file to a partner's SFTP server from Amazon Web Services storage, you specify one or more SendFilePaths to identify the files you want to transfer, and a RemoteDirectoryPath to specify the destination folder. func startFileTransfer(input: StartFileTransferInput) async throws -> StartFileTransferOutputResponse /// Changes the state of a file transfer protocol-enabled server from OFFLINE to ONLINE. It has no impact on a server that is already ONLINE. An ONLINE server can accept and process file transfer jobs. The state of STARTING indicates that the server is in an intermediate state, either not fully able to respond, or not fully online. The values of START_FAILED can indicate an error condition. No response is returned from this call. func startServer(input: StartServerInput) async throws -> StartServerOutputResponse @@ -100,6 +108,8 @@ public protocol TransferClientProtocol { func stopServer(input: StopServerInput) async throws -> StopServerOutputResponse /// Attaches a key-value pair to a resource, as identified by its Amazon Resource Name (ARN). Resources are users, servers, roles, and other entities. There is no response returned from this call. func tagResource(input: TagResourceInput) async throws -> TagResourceOutputResponse + /// Tests whether your SFTP connector is set up successfully. We highly recommend that you call this operation to test your ability to transfer files between a Transfer Family server and a trading partner's SFTP server. + func testConnection(input: TestConnectionInput) async throws -> TestConnectionOutputResponse /// If the IdentityProviderType of a file transfer protocol-enabled server is AWS_DIRECTORY_SERVICE or API_Gateway, tests whether your identity provider is set up successfully. We highly recommend that you call this operation to test your authentication method as soon as you create your server. By doing so, you can troubleshoot issues with the identity provider integration to ensure that your users can successfully use the service. The ServerId and UserName parameters are required. The ServerProtocol, SourceIp, and UserPassword are all optional. Note the following: /// /// * You cannot use TestIdentityProvider if the IdentityProviderType of your server is SERVICE_MANAGED. diff --git a/Sources/Services/AWSTransfer/models/Models.swift b/Sources/Services/AWSTransfer/models/Models.swift index 423449c40c8..b4dace2686f 100644 --- a/Sources/Services/AWSTransfer/models/Models.swift +++ b/Sources/Services/AWSTransfer/models/Models.swift @@ -157,7 +157,7 @@ extension TransferClientTypes.As2ConnectorConfig: Swift.Codable { } extension TransferClientTypes { - /// Contains the details for a connector object. The connector object is used for AS2 outbound processes, to connect the Transfer Family customer with the trading partner. + /// Contains the details for an AS2 connector object. The connector object is used for AS2 outbound processes, to connect the Transfer Family customer with the trading partner. public struct As2ConnectorConfig: Swift.Equatable { /// Provides Basic authentication support to the AS2 Connectors API. To use Basic authentication, you must provide the name or Amazon Resource Name (ARN) of a secret in Secrets Manager. The default value for this parameter is null, which indicates that Basic authentication is not enabled for the connector. If the connector should use Basic authentication, the secret needs to be in the following format: { "Username": "user-name", "Password": "user-password" } Replace user-name and user-password with the credentials for the actual user that is being authenticated. Note the following: /// @@ -931,6 +931,7 @@ extension CreateConnectorInput: Swift.Encodable { case accessRole = "AccessRole" case as2Config = "As2Config" case loggingRole = "LoggingRole" + case sftpConfig = "SftpConfig" case tags = "Tags" case url = "Url" } @@ -946,6 +947,9 @@ extension CreateConnectorInput: Swift.Encodable { if let loggingRole = self.loggingRole { try encodeContainer.encode(loggingRole, forKey: .loggingRole) } + if let sftpConfig = self.sftpConfig { + try encodeContainer.encode(sftpConfig, forKey: .sftpConfig) + } if let tags = tags { var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) for tag0 in tags { @@ -968,14 +972,15 @@ public struct CreateConnectorInput: Swift.Equatable { /// With AS2, you can send files by calling StartFileTransfer and specifying the file paths in the request parameter, SendFilePaths. We use the file’s parent directory (for example, for --send-file-paths /bucket/dir/file.txt, parent directory is /bucket/dir/) to temporarily store a processed AS2 message file, store the MDN when we receive them from the partner, and write a final JSON file containing relevant metadata of the transmission. So, the AccessRole needs to provide read and write access to the parent directory of the file location used in the StartFileTransfer request. Additionally, you need to provide read and write access to the parent directory of the files that you intend to send with StartFileTransfer. If you are using Basic authentication for your AS2 connector, the access role requires the secretsmanager:GetSecretValue permission for the secret. If the secret is encrypted using a customer-managed key instead of the Amazon Web Services managed key in Secrets Manager, then the role also needs the kms:Decrypt permission for that key. /// This member is required. public var accessRole: Swift.String? - /// A structure that contains the parameters for a connector object. - /// This member is required. + /// A structure that contains the parameters for an AS2 connector object. public var as2Config: TransferClientTypes.As2ConnectorConfig? /// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a connector to turn on CloudWatch logging for Amazon S3 events. When set, you can view connector activity in your CloudWatch logs. public var loggingRole: Swift.String? + /// A structure that contains the parameters for an SFTP connector object. + public var sftpConfig: TransferClientTypes.SftpConnectorConfig? /// Key-value pairs that can be used to group and search for connectors. Tags are metadata attached to connectors for any purpose. public var tags: [TransferClientTypes.Tag]? - /// The URL of the partner's AS2 endpoint. + /// The URL of the partner's AS2 or SFTP endpoint. /// This member is required. public var url: Swift.String? @@ -983,6 +988,7 @@ public struct CreateConnectorInput: Swift.Equatable { accessRole: Swift.String? = nil, as2Config: TransferClientTypes.As2ConnectorConfig? = nil, loggingRole: Swift.String? = nil, + sftpConfig: TransferClientTypes.SftpConnectorConfig? = nil, tags: [TransferClientTypes.Tag]? = nil, url: Swift.String? = nil ) @@ -990,6 +996,7 @@ public struct CreateConnectorInput: Swift.Equatable { self.accessRole = accessRole self.as2Config = as2Config self.loggingRole = loggingRole + self.sftpConfig = sftpConfig self.tags = tags self.url = url } @@ -1001,6 +1008,7 @@ struct CreateConnectorInputBody: Swift.Equatable { let accessRole: Swift.String? let loggingRole: Swift.String? let tags: [TransferClientTypes.Tag]? + let sftpConfig: TransferClientTypes.SftpConnectorConfig? } extension CreateConnectorInputBody: Swift.Decodable { @@ -1008,6 +1016,7 @@ extension CreateConnectorInputBody: Swift.Decodable { case accessRole = "AccessRole" case as2Config = "As2Config" case loggingRole = "LoggingRole" + case sftpConfig = "SftpConfig" case tags = "Tags" case url = "Url" } @@ -1033,6 +1042,8 @@ extension CreateConnectorInputBody: Swift.Decodable { } } tags = tagsDecoded0 + let sftpConfigDecoded = try containerValues.decodeIfPresent(TransferClientTypes.SftpConnectorConfig.self, forKey: .sftpConfig) + sftpConfig = sftpConfigDecoded } } @@ -1694,7 +1705,7 @@ extension CreateUserInput: ClientRuntime.URLPathProvider { public struct CreateUserInput: Swift.Equatable { /// The landing directory (folder) for a user when they log in to the server using the client. A HomeDirectory example is /bucket_name/home/mydirectory. public var homeDirectory: Swift.String? - /// Logical directory mappings that specify what Amazon S3 or Amazon EFS paths and keys should be visible to your user and how you want to make them visible. You must specify the Entry and Target pair, where Entry shows how the path is made visible and Target is the actual Amazon S3 or Amazon EFS path. If you only specify a target, it is displayed as is. You also must ensure that your Identity and Access Management (IAM) role provides access to paths in Target. This value can be set only when HomeDirectoryType is set to LOGICAL. The following is an Entry and Target pair example. [ { "Entry": "/directory1", "Target": "/bucket_name/home/mydirectory" } ] In most cases, you can use this value instead of the session policy to lock your user down to the designated home directory ("chroot"). To do this, you can set Entry to / and set Target to the HomeDirectory parameter value. The following is an Entry and Target pair example for chroot. [ { "Entry": "/", "Target": "/bucket_name/home/mydirectory" } ] + /// Logical directory mappings that specify what Amazon S3 or Amazon EFS paths and keys should be visible to your user and how you want to make them visible. You must specify the Entry and Target pair, where Entry shows how the path is made visible and Target is the actual Amazon S3 or Amazon EFS path. If you only specify a target, it is displayed as is. You also must ensure that your Identity and Access Management (IAM) role provides access to paths in Target. This value can be set only when HomeDirectoryType is set to LOGICAL. The following is an Entry and Target pair example. [ { "Entry": "/directory1", "Target": "/bucket_name/home/mydirectory" } ] In most cases, you can use this value instead of the session policy to lock your user down to the designated home directory ("chroot"). To do this, you can set Entry to / and set Target to the value the user should see for their home directory when they log in. The following is an Entry and Target pair example for chroot. [ { "Entry": "/", "Target": "/bucket_name/home/mydirectory" } ] public var homeDirectoryMappings: [TransferClientTypes.HomeDirectoryMapEntry]? /// The type of landing directory (folder) that you want your users' home directory to be when they log in to the server. If you set it to PATH, the user will see the absolute Amazon S3 bucket or EFS paths as is in their file transfer protocol clients. If you set it LOGICAL, you need to provide mappings in the HomeDirectoryMappings for how you want to make Amazon S3 or Amazon EFS paths visible to your users. public var homeDirectoryType: TransferClientTypes.HomeDirectoryType? @@ -4782,6 +4793,7 @@ extension TransferClientTypes.DescribedConnector: Swift.Codable { case as2Config = "As2Config" case connectorId = "ConnectorId" case loggingRole = "LoggingRole" + case sftpConfig = "SftpConfig" case tags = "Tags" case url = "Url" } @@ -4803,6 +4815,9 @@ extension TransferClientTypes.DescribedConnector: Swift.Codable { if let loggingRole = self.loggingRole { try encodeContainer.encode(loggingRole, forKey: .loggingRole) } + if let sftpConfig = self.sftpConfig { + try encodeContainer.encode(sftpConfig, forKey: .sftpConfig) + } if let tags = tags { var tagsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .tags) for tag0 in tags { @@ -4839,6 +4854,8 @@ extension TransferClientTypes.DescribedConnector: Swift.Codable { } } tags = tagsDecoded0 + let sftpConfigDecoded = try containerValues.decodeIfPresent(TransferClientTypes.SftpConnectorConfig.self, forKey: .sftpConfig) + sftpConfig = sftpConfigDecoded } } @@ -4850,15 +4867,17 @@ extension TransferClientTypes { /// The unique Amazon Resource Name (ARN) for the connector. /// This member is required. public var arn: Swift.String? - /// A structure that contains the parameters for a connector object. + /// A structure that contains the parameters for an AS2 connector object. public var as2Config: TransferClientTypes.As2ConnectorConfig? /// The unique identifier for the connector. public var connectorId: Swift.String? /// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a connector to turn on CloudWatch logging for Amazon S3 events. When set, you can view connector activity in your CloudWatch logs. public var loggingRole: Swift.String? + /// A structure that contains the parameters for an SFTP connector object. + public var sftpConfig: TransferClientTypes.SftpConnectorConfig? /// Key-value pairs that can be used to group and search for connectors. public var tags: [TransferClientTypes.Tag]? - /// The URL of the partner's AS2 endpoint. + /// The URL of the partner's AS2 or SFTP endpoint. public var url: Swift.String? public init( @@ -4867,6 +4886,7 @@ extension TransferClientTypes { as2Config: TransferClientTypes.As2ConnectorConfig? = nil, connectorId: Swift.String? = nil, loggingRole: Swift.String? = nil, + sftpConfig: TransferClientTypes.SftpConnectorConfig? = nil, tags: [TransferClientTypes.Tag]? = nil, url: Swift.String? = nil ) @@ -4876,6 +4896,7 @@ extension TransferClientTypes { self.as2Config = as2Config self.connectorId = connectorId self.loggingRole = loggingRole + self.sftpConfig = sftpConfig self.tags = tags self.url = url } @@ -9542,7 +9563,7 @@ extension TransferClientTypes { public var arn: Swift.String? /// The unique identifier for the connector. public var connectorId: Swift.String? - /// The URL of the partner's AS2 endpoint. + /// The URL of the partner's AS2 or SFTP endpoint. public var url: Swift.String? public init( @@ -10990,6 +11011,67 @@ extension TransferClientTypes { } } +extension TransferClientTypes.SftpConnectorConfig: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case trustedHostKeys = "TrustedHostKeys" + case userSecretId = "UserSecretId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let trustedHostKeys = trustedHostKeys { + var trustedHostKeysContainer = encodeContainer.nestedUnkeyedContainer(forKey: .trustedHostKeys) + for sftpconnectortrustedhostkey0 in trustedHostKeys { + try trustedHostKeysContainer.encode(sftpconnectortrustedhostkey0) + } + } + if let userSecretId = self.userSecretId { + try encodeContainer.encode(userSecretId, forKey: .userSecretId) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let userSecretIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .userSecretId) + userSecretId = userSecretIdDecoded + let trustedHostKeysContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .trustedHostKeys) + var trustedHostKeysDecoded0:[Swift.String]? = nil + if let trustedHostKeysContainer = trustedHostKeysContainer { + trustedHostKeysDecoded0 = [Swift.String]() + for string0 in trustedHostKeysContainer { + if let string0 = string0 { + trustedHostKeysDecoded0?.append(string0) + } + } + } + trustedHostKeys = trustedHostKeysDecoded0 + } +} + +extension TransferClientTypes { + /// Contains the details for an SFTP connector object. The connector object is used for transferring files to and from a partner's SFTP server. + public struct SftpConnectorConfig: Swift.Equatable { + /// The public portion of the host key, or keys, that are used to authenticate the user to the external server to which you are connecting. You can use the ssh-keyscan command against the SFTP server to retrieve the necessary key. The three standard SSH public key format elements are , , and an optional , with spaces between each element. For the trusted host key, Transfer Family accepts RSA and ECDSA keys. + /// + /// * For RSA keys, the key type is ssh-rsa. + /// + /// * For ECDSA keys, the key type is either ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, or ecdsa-sha2-nistp521, depending on the size of the key you generated. + public var trustedHostKeys: [Swift.String]? + /// The identifiers for the secrets (in Amazon Web Services Secrets Manager) that contain the SFTP user's private keys or passwords. + public var userSecretId: Swift.String? + + public init( + trustedHostKeys: [Swift.String]? = nil, + userSecretId: Swift.String? = nil + ) + { + self.trustedHostKeys = trustedHostKeys + self.userSecretId = userSecretId + } + } + +} + extension TransferClientTypes { public enum SigningAlg: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case `none` @@ -11092,6 +11174,9 @@ extension TransferClientTypes { extension StartFileTransferInput: Swift.Encodable { enum CodingKeys: Swift.String, Swift.CodingKey { case connectorId = "ConnectorId" + case localDirectoryPath = "LocalDirectoryPath" + case remoteDirectoryPath = "RemoteDirectoryPath" + case retrieveFilePaths = "RetrieveFilePaths" case sendFilePaths = "SendFilePaths" } @@ -11100,6 +11185,18 @@ extension StartFileTransferInput: Swift.Encodable { if let connectorId = self.connectorId { try encodeContainer.encode(connectorId, forKey: .connectorId) } + if let localDirectoryPath = self.localDirectoryPath { + try encodeContainer.encode(localDirectoryPath, forKey: .localDirectoryPath) + } + if let remoteDirectoryPath = self.remoteDirectoryPath { + try encodeContainer.encode(remoteDirectoryPath, forKey: .remoteDirectoryPath) + } + if let retrieveFilePaths = retrieveFilePaths { + var retrieveFilePathsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .retrieveFilePaths) + for filepath0 in retrieveFilePaths { + try retrieveFilePathsContainer.encode(filepath0) + } + } if let sendFilePaths = sendFilePaths { var sendFilePathsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .sendFilePaths) for filepath0 in sendFilePaths { @@ -11119,16 +11216,27 @@ public struct StartFileTransferInput: Swift.Equatable { /// The unique identifier for the connector. /// This member is required. public var connectorId: Swift.String? - /// An array of strings. Each string represents the absolute path for one outbound file transfer. For example, DOC-EXAMPLE-BUCKET/myfile.txt . - /// This member is required. + /// For an inbound transfer, the LocaDirectoryPath specifies the destination for one or more files that are transferred from the partner's SFTP server. + public var localDirectoryPath: Swift.String? + /// For an outbound transfer, the RemoteDirectoryPath specifies the destination for one or more files that are transferred to the partner's SFTP server. If you don't specify a RemoteDirectoryPath, the destination for transferred files is the SFTP user's home directory. + public var remoteDirectoryPath: Swift.String? + /// One or more source paths for the partner's SFTP server. Each string represents a source file path for one inbound file transfer. + public var retrieveFilePaths: [Swift.String]? + /// One or more source paths for the Transfer Family server. Each string represents a source file path for one outbound file transfer. For example, DOC-EXAMPLE-BUCKET/myfile.txt . public var sendFilePaths: [Swift.String]? public init( connectorId: Swift.String? = nil, + localDirectoryPath: Swift.String? = nil, + remoteDirectoryPath: Swift.String? = nil, + retrieveFilePaths: [Swift.String]? = nil, sendFilePaths: [Swift.String]? = nil ) { self.connectorId = connectorId + self.localDirectoryPath = localDirectoryPath + self.remoteDirectoryPath = remoteDirectoryPath + self.retrieveFilePaths = retrieveFilePaths self.sendFilePaths = sendFilePaths } } @@ -11136,11 +11244,17 @@ public struct StartFileTransferInput: Swift.Equatable { struct StartFileTransferInputBody: Swift.Equatable { let connectorId: Swift.String? let sendFilePaths: [Swift.String]? + let retrieveFilePaths: [Swift.String]? + let localDirectoryPath: Swift.String? + let remoteDirectoryPath: Swift.String? } extension StartFileTransferInputBody: Swift.Decodable { enum CodingKeys: Swift.String, Swift.CodingKey { case connectorId = "ConnectorId" + case localDirectoryPath = "LocalDirectoryPath" + case remoteDirectoryPath = "RemoteDirectoryPath" + case retrieveFilePaths = "RetrieveFilePaths" case sendFilePaths = "SendFilePaths" } @@ -11159,6 +11273,21 @@ extension StartFileTransferInputBody: Swift.Decodable { } } sendFilePaths = sendFilePathsDecoded0 + let retrieveFilePathsContainer = try containerValues.decodeIfPresent([Swift.String?].self, forKey: .retrieveFilePaths) + var retrieveFilePathsDecoded0:[Swift.String]? = nil + if let retrieveFilePathsContainer = retrieveFilePathsContainer { + retrieveFilePathsDecoded0 = [Swift.String]() + for string0 in retrieveFilePathsContainer { + if let string0 = string0 { + retrieveFilePathsDecoded0?.append(string0) + } + } + } + retrieveFilePaths = retrieveFilePathsDecoded0 + let localDirectoryPathDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .localDirectoryPath) + localDirectoryPath = localDirectoryPathDecoded + let remoteDirectoryPathDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .remoteDirectoryPath) + remoteDirectoryPath = remoteDirectoryPathDecoded } } @@ -11190,7 +11319,7 @@ extension StartFileTransferOutputResponse: ClientRuntime.HttpResponseBinding { } public struct StartFileTransferOutputResponse: Swift.Equatable { - /// Returns the unique identifier for this file transfer. + /// Returns the unique identifier for the file transfer. /// This member is required. public var transferId: Swift.String? @@ -11624,6 +11753,136 @@ extension TransferClientTypes { } +extension TestConnectionInput: Swift.Encodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case connectorId = "ConnectorId" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let connectorId = self.connectorId { + try encodeContainer.encode(connectorId, forKey: .connectorId) + } + } +} + +extension TestConnectionInput: ClientRuntime.URLPathProvider { + public var urlPath: Swift.String? { + return "/" + } +} + +public struct TestConnectionInput: Swift.Equatable { + /// The unique identifier for the connector. + /// This member is required. + public var connectorId: Swift.String? + + public init( + connectorId: Swift.String? = nil + ) + { + self.connectorId = connectorId + } +} + +struct TestConnectionInputBody: Swift.Equatable { + let connectorId: Swift.String? +} + +extension TestConnectionInputBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case connectorId = "ConnectorId" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let connectorIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .connectorId) + connectorId = connectorIdDecoded + } +} + +public enum TestConnectionOutputError: ClientRuntime.HttpResponseErrorBinding { + public static func makeError(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws -> Swift.Error { + let restJSONError = try await AWSClientRuntime.RestJSONError(httpResponse: httpResponse) + let requestID = httpResponse.requestId + switch restJSONError.errorType { + case "InternalServiceError": return try await InternalServiceError(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "InvalidRequestException": return try await InvalidRequestException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ResourceNotFoundException": return try await ResourceNotFoundException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + case "ServiceUnavailable": return try await ServiceUnavailableException(httpResponse: httpResponse, decoder: decoder, message: restJSONError.errorMessage, requestID: requestID) + default: return try await AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(httpResponse: httpResponse, message: restJSONError.errorMessage, requestID: requestID, typeName: restJSONError.errorType) + } + } +} + +extension TestConnectionOutputResponse: ClientRuntime.HttpResponseBinding { + public init(httpResponse: ClientRuntime.HttpResponse, decoder: ClientRuntime.ResponseDecoder? = nil) async throws { + if let data = try await httpResponse.body.readData(), + let responseDecoder = decoder { + let output: TestConnectionOutputResponseBody = try responseDecoder.decode(responseBody: data) + self.connectorId = output.connectorId + self.status = output.status + self.statusMessage = output.statusMessage + } else { + self.connectorId = nil + self.status = nil + self.statusMessage = nil + } + } +} + +public struct TestConnectionOutputResponse: Swift.Equatable { + /// Returns the identifier of the connector object that you are testing. + public var connectorId: Swift.String? + /// Returns OK for successful test, or ERROR if the test fails. + public var status: Swift.String? + /// Returns Connection succeeded if the test is successful. Or, returns a descriptive error message if the test fails. The following list provides the details for some error messages and troubleshooting steps for each. + /// + /// * Unable to access secrets manager: Verify that your secret name aligns with the one in Transfer Role permissions. + /// + /// * Unknown Host/Connection failed: Verify the server URL in the connector configuration , and verify that the login credentials work successfully outside of the connector. + /// + /// * Private key not found: Verify that the secret exists and is formatted correctly. + /// + /// * Invalid trusted host keys: Verify that the trusted host key in the connector configuration matches the ssh-keyscan output. + public var statusMessage: Swift.String? + + public init( + connectorId: Swift.String? = nil, + status: Swift.String? = nil, + statusMessage: Swift.String? = nil + ) + { + self.connectorId = connectorId + self.status = status + self.statusMessage = statusMessage + } +} + +struct TestConnectionOutputResponseBody: Swift.Equatable { + let connectorId: Swift.String? + let status: Swift.String? + let statusMessage: Swift.String? +} + +extension TestConnectionOutputResponseBody: Swift.Decodable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case connectorId = "ConnectorId" + case status = "Status" + case statusMessage = "StatusMessage" + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let connectorIdDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .connectorId) + connectorId = connectorIdDecoded + let statusDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .status) + status = statusDecoded + let statusMessageDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .statusMessage) + statusMessage = statusMessageDecoded + } +} + extension TestIdentityProviderInput: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { "TestIdentityProviderInput(serverId: \(Swift.String(describing: serverId)), serverProtocol: \(Swift.String(describing: serverProtocol)), sourceIp: \(Swift.String(describing: sourceIp)), userName: \(Swift.String(describing: userName)), userPassword: \"CONTENT_REDACTED\")"} @@ -12538,6 +12797,7 @@ extension UpdateConnectorInput: Swift.Encodable { case as2Config = "As2Config" case connectorId = "ConnectorId" case loggingRole = "LoggingRole" + case sftpConfig = "SftpConfig" case url = "Url" } @@ -12555,6 +12815,9 @@ extension UpdateConnectorInput: Swift.Encodable { if let loggingRole = self.loggingRole { try encodeContainer.encode(loggingRole, forKey: .loggingRole) } + if let sftpConfig = self.sftpConfig { + try encodeContainer.encode(sftpConfig, forKey: .sftpConfig) + } if let url = self.url { try encodeContainer.encode(url, forKey: .url) } @@ -12570,14 +12833,16 @@ extension UpdateConnectorInput: ClientRuntime.URLPathProvider { public struct UpdateConnectorInput: Swift.Equatable { /// With AS2, you can send files by calling StartFileTransfer and specifying the file paths in the request parameter, SendFilePaths. We use the file’s parent directory (for example, for --send-file-paths /bucket/dir/file.txt, parent directory is /bucket/dir/) to temporarily store a processed AS2 message file, store the MDN when we receive them from the partner, and write a final JSON file containing relevant metadata of the transmission. So, the AccessRole needs to provide read and write access to the parent directory of the file location used in the StartFileTransfer request. Additionally, you need to provide read and write access to the parent directory of the files that you intend to send with StartFileTransfer. If you are using Basic authentication for your AS2 connector, the access role requires the secretsmanager:GetSecretValue permission for the secret. If the secret is encrypted using a customer-managed key instead of the Amazon Web Services managed key in Secrets Manager, then the role also needs the kms:Decrypt permission for that key. public var accessRole: Swift.String? - /// A structure that contains the parameters for a connector object. + /// A structure that contains the parameters for an AS2 connector object. public var as2Config: TransferClientTypes.As2ConnectorConfig? /// The unique identifier for the connector. /// This member is required. public var connectorId: Swift.String? /// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role that allows a connector to turn on CloudWatch logging for Amazon S3 events. When set, you can view connector activity in your CloudWatch logs. public var loggingRole: Swift.String? - /// The URL of the partner's AS2 endpoint. + /// A structure that contains the parameters for an SFTP connector object. + public var sftpConfig: TransferClientTypes.SftpConnectorConfig? + /// The URL of the partner's AS2 or SFTP endpoint. public var url: Swift.String? public init( @@ -12585,6 +12850,7 @@ public struct UpdateConnectorInput: Swift.Equatable { as2Config: TransferClientTypes.As2ConnectorConfig? = nil, connectorId: Swift.String? = nil, loggingRole: Swift.String? = nil, + sftpConfig: TransferClientTypes.SftpConnectorConfig? = nil, url: Swift.String? = nil ) { @@ -12592,6 +12858,7 @@ public struct UpdateConnectorInput: Swift.Equatable { self.as2Config = as2Config self.connectorId = connectorId self.loggingRole = loggingRole + self.sftpConfig = sftpConfig self.url = url } } @@ -12602,6 +12869,7 @@ struct UpdateConnectorInputBody: Swift.Equatable { let as2Config: TransferClientTypes.As2ConnectorConfig? let accessRole: Swift.String? let loggingRole: Swift.String? + let sftpConfig: TransferClientTypes.SftpConnectorConfig? } extension UpdateConnectorInputBody: Swift.Decodable { @@ -12610,6 +12878,7 @@ extension UpdateConnectorInputBody: Swift.Decodable { case as2Config = "As2Config" case connectorId = "ConnectorId" case loggingRole = "LoggingRole" + case sftpConfig = "SftpConfig" case url = "Url" } @@ -12625,6 +12894,8 @@ extension UpdateConnectorInputBody: Swift.Decodable { accessRole = accessRoleDecoded let loggingRoleDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .loggingRole) loggingRole = loggingRoleDecoded + let sftpConfigDecoded = try containerValues.decodeIfPresent(TransferClientTypes.SftpConnectorConfig.self, forKey: .sftpConfig) + sftpConfig = sftpConfigDecoded } } diff --git a/Sources/Services/AWSTranslate/models/Models.swift b/Sources/Services/AWSTranslate/models/Models.swift index a256110ab5b..94194d09bd1 100644 --- a/Sources/Services/AWSTranslate/models/Models.swift +++ b/Sources/Services/AWSTranslate/models/Models.swift @@ -838,6 +838,8 @@ extension TranslateClientTypes { /// * text/html - The input data consists of HTML content. Amazon Translate translates only the text in the HTML element. /// /// * text/plain - The input data consists of unformatted text. Amazon Translate translates every character in the content. + /// + /// * application/vnd.openxmlformats-officedocument.wordprocessingml.document - The input data consists of a Word document (.docx). /// This member is required. public var contentType: Swift.String? diff --git a/Sources/Services/AWSWAFV2/models/Models.swift b/Sources/Services/AWSWAFV2/models/Models.swift index 07a83b6c6c7..a12079f38d5 100644 --- a/Sources/Services/AWSWAFV2/models/Models.swift +++ b/Sources/Services/AWSWAFV2/models/Models.swift @@ -1450,7 +1450,7 @@ extension WAFV2ClientTypes.CookieMatchPattern: Swift.Codable { } extension WAFV2ClientTypes { - /// The filter to use to identify the subset of cookies to inspect in a web request. You must specify exactly one setting: either All, IncludedCookies, or ExcludedCookies. Example JSON: "MatchPattern": { "IncludedCookies": {"KeyToInclude1", "KeyToInclude2", "KeyToInclude3"} } + /// The filter to use to identify the subset of cookies to inspect in a web request. You must specify exactly one setting: either All, IncludedCookies, or ExcludedCookies. Example JSON: "MatchPattern": { "IncludedCookies": [ "session-id-time", "session-id" ] } public struct CookieMatchPattern: Swift.Equatable { /// Inspect all cookies. public var all: WAFV2ClientTypes.All? @@ -1507,7 +1507,7 @@ extension WAFV2ClientTypes.Cookies: Swift.Codable { extension WAFV2ClientTypes { /// Inspect the cookies in the web request. You can specify the parts of the cookies to inspect and you can narrow the set of cookies to inspect by including or excluding specific keys. This is used to indicate the web request component to inspect, in the [FieldToMatch] specification. Example JSON: "Cookies": { "MatchPattern": { "All": {} }, "MatchScope": "KEY", "OversizeHandling": "MATCH" } public struct Cookies: Swift.Equatable { - /// The filter to use to identify the subset of cookies to inspect in a web request. You must specify exactly one setting: either All, IncludedCookies, or ExcludedCookies. Example JSON: "MatchPattern": { "IncludedCookies": {"KeyToInclude1", "KeyToInclude2", "KeyToInclude3"} } + /// The filter to use to identify the subset of cookies to inspect in a web request. You must specify exactly one setting: either All, IncludedCookies, or ExcludedCookies. Example JSON: "MatchPattern": { "IncludedCookies": [ "session-id-time", "session-id" ] } /// This member is required. public var matchPattern: WAFV2ClientTypes.CookieMatchPattern? /// The parts of the cookies to inspect with the rule inspection criteria. If you specify All, WAF inspects both keys and values. @@ -7627,7 +7627,7 @@ extension WAFV2ClientTypes.HeaderMatchPattern: Swift.Codable { } extension WAFV2ClientTypes { - /// The filter to use to identify the subset of headers to inspect in a web request. You must specify exactly one setting: either All, IncludedHeaders, or ExcludedHeaders. Example JSON: "MatchPattern": { "ExcludedHeaders": {"KeyToExclude1", "KeyToExclude2"} } + /// The filter to use to identify the subset of headers to inspect in a web request. You must specify exactly one setting: either All, IncludedHeaders, or ExcludedHeaders. Example JSON: "MatchPattern": { "ExcludedHeaders": [ "KeyToExclude1", "KeyToExclude2" ] } public struct HeaderMatchPattern: Swift.Equatable { /// Inspect all headers. public var all: WAFV2ClientTypes.All? @@ -7726,7 +7726,7 @@ extension WAFV2ClientTypes.Headers: Swift.Codable { extension WAFV2ClientTypes { /// Inspect all headers in the web request. You can specify the parts of the headers to inspect and you can narrow the set of headers to inspect by including or excluding specific keys. This is used to indicate the web request component to inspect, in the [FieldToMatch] specification. If you want to inspect just the value of a single header, use the SingleHeaderFieldToMatch setting instead. Example JSON: "Headers": { "MatchPattern": { "All": {} }, "MatchScope": "KEY", "OversizeHandling": "MATCH" } public struct Headers: Swift.Equatable { - /// The filter to use to identify the subset of headers to inspect in a web request. You must specify exactly one setting: either All, IncludedHeaders, or ExcludedHeaders. Example JSON: "MatchPattern": { "ExcludedHeaders": {"KeyToExclude1", "KeyToExclude2"} } + /// The filter to use to identify the subset of headers to inspect in a web request. You must specify exactly one setting: either All, IncludedHeaders, or ExcludedHeaders. Example JSON: "MatchPattern": { "ExcludedHeaders": [ "KeyToExclude1", "KeyToExclude2" ] } /// This member is required. public var matchPattern: WAFV2ClientTypes.HeaderMatchPattern? /// The parts of the headers to match with the rule inspection criteria. If you specify All, WAF inspects both keys and values. @@ -12593,6 +12593,7 @@ extension WAFV2ClientTypes.RateBasedStatementCustomKey: Swift.Codable { case labelNamespace = "LabelNamespace" case queryArgument = "QueryArgument" case queryString = "QueryString" + case uriPath = "UriPath" } public func encode(to encoder: Swift.Encoder) throws { @@ -12621,6 +12622,9 @@ extension WAFV2ClientTypes.RateBasedStatementCustomKey: Swift.Codable { if let queryString = self.queryString { try encodeContainer.encode(queryString, forKey: .queryString) } + if let uriPath = self.uriPath { + try encodeContainer.encode(uriPath, forKey: .uriPath) + } } public init(from decoder: Swift.Decoder) throws { @@ -12641,6 +12645,8 @@ extension WAFV2ClientTypes.RateBasedStatementCustomKey: Swift.Codable { ip = ipDecoded let labelNamespaceDecoded = try containerValues.decodeIfPresent(WAFV2ClientTypes.RateLimitLabelNamespace.self, forKey: .labelNamespace) labelNamespace = labelNamespaceDecoded + let uriPathDecoded = try containerValues.decodeIfPresent(WAFV2ClientTypes.RateLimitUriPath.self, forKey: .uriPath) + uriPath = uriPathDecoded } } @@ -12663,6 +12669,8 @@ extension WAFV2ClientTypes { public var queryArgument: WAFV2ClientTypes.RateLimitQueryArgument? /// Use the request's query string as an aggregate key. Each distinct string contributes to the aggregation instance. If you use just the query string as your custom key, then each string fully defines an aggregation instance. public var queryString: WAFV2ClientTypes.RateLimitQueryString? + /// Use the request's URI path as an aggregate key. Each distinct URI path contributes to the aggregation instance. If you use just the URI path as your custom key, then each URI path fully defines an aggregation instance. + public var uriPath: WAFV2ClientTypes.RateLimitUriPath? public init( cookie: WAFV2ClientTypes.RateLimitCookie? = nil, @@ -12672,7 +12680,8 @@ extension WAFV2ClientTypes { ip: WAFV2ClientTypes.RateLimitIP? = nil, labelNamespace: WAFV2ClientTypes.RateLimitLabelNamespace? = nil, queryArgument: WAFV2ClientTypes.RateLimitQueryArgument? = nil, - queryString: WAFV2ClientTypes.RateLimitQueryString? = nil + queryString: WAFV2ClientTypes.RateLimitQueryString? = nil, + uriPath: WAFV2ClientTypes.RateLimitUriPath? = nil ) { self.cookie = cookie @@ -12683,6 +12692,7 @@ extension WAFV2ClientTypes { self.labelNamespace = labelNamespace self.queryArgument = queryArgument self.queryString = queryString + self.uriPath = uriPath } } @@ -13066,6 +13076,54 @@ extension WAFV2ClientTypes { } +extension WAFV2ClientTypes.RateLimitUriPath: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case textTransformations = "TextTransformations" + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let textTransformations = textTransformations { + var textTransformationsContainer = encodeContainer.nestedUnkeyedContainer(forKey: .textTransformations) + for texttransformation0 in textTransformations { + try textTransformationsContainer.encode(texttransformation0) + } + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let textTransformationsContainer = try containerValues.decodeIfPresent([WAFV2ClientTypes.TextTransformation?].self, forKey: .textTransformations) + var textTransformationsDecoded0:[WAFV2ClientTypes.TextTransformation]? = nil + if let textTransformationsContainer = textTransformationsContainer { + textTransformationsDecoded0 = [WAFV2ClientTypes.TextTransformation]() + for structure0 in textTransformationsContainer { + if let structure0 = structure0 { + textTransformationsDecoded0?.append(structure0) + } + } + } + textTransformations = textTransformationsDecoded0 + } +} + +extension WAFV2ClientTypes { + /// Specifies the request's URI path as an aggregate key for a rate-based rule. Each distinct URI path contributes to the aggregation instance. If you use just the URI path as your custom key, then each URI path fully defines an aggregation instance. + public struct RateLimitUriPath: Swift.Equatable { + /// Text transformations eliminate some of the unusual formatting that attackers use in web requests in an effort to bypass detection. Text transformations are used in rule match statements, to transform the FieldToMatch request component before inspecting it, and they're used in rate-based rule statements, to transform request components before using them as custom aggregation keys. If you specify one or more transformations to apply, WAF performs all transformations on the specified content, starting from the lowest priority setting, and then uses the component contents. + /// This member is required. + public var textTransformations: [WAFV2ClientTypes.TextTransformation]? + + public init( + textTransformations: [WAFV2ClientTypes.TextTransformation]? = nil + ) + { + self.textTransformations = textTransformations + } + } + +} + extension WAFV2ClientTypes.Regex: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case regexString = "RegexString" diff --git a/Sources/Services/AWSWisdom/models/Models.swift b/Sources/Services/AWSWisdom/models/Models.swift index c02e85a05b0..d78f30de547 100644 --- a/Sources/Services/AWSWisdom/models/Models.swift +++ b/Sources/Services/AWSWisdom/models/Models.swift @@ -437,6 +437,7 @@ extension WisdomClientTypes.AssistantData: Swift.Codable { case assistantArn case assistantId case description + case integrationConfiguration case name case serverSideEncryptionConfiguration case status @@ -455,6 +456,9 @@ extension WisdomClientTypes.AssistantData: Swift.Codable { if let description = self.description { try encodeContainer.encode(description, forKey: .description) } + if let integrationConfiguration = self.integrationConfiguration { + try encodeContainer.encode(integrationConfiguration, forKey: .integrationConfiguration) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -502,6 +506,8 @@ extension WisdomClientTypes.AssistantData: Swift.Codable { tags = tagsDecoded0 let serverSideEncryptionConfigurationDecoded = try containerValues.decodeIfPresent(WisdomClientTypes.ServerSideEncryptionConfiguration.self, forKey: .serverSideEncryptionConfiguration) serverSideEncryptionConfiguration = serverSideEncryptionConfigurationDecoded + let integrationConfigurationDecoded = try containerValues.decodeIfPresent(WisdomClientTypes.AssistantIntegrationConfiguration.self, forKey: .integrationConfiguration) + integrationConfiguration = integrationConfigurationDecoded } } @@ -516,6 +522,8 @@ extension WisdomClientTypes { public var assistantId: Swift.String? /// The description. public var description: Swift.String? + /// The configuration information for the Wisdom assistant integration. + public var integrationConfiguration: WisdomClientTypes.AssistantIntegrationConfiguration? /// The name. /// This member is required. public var name: Swift.String? @@ -534,6 +542,7 @@ extension WisdomClientTypes { assistantArn: Swift.String? = nil, assistantId: Swift.String? = nil, description: Swift.String? = nil, + integrationConfiguration: WisdomClientTypes.AssistantIntegrationConfiguration? = nil, name: Swift.String? = nil, serverSideEncryptionConfiguration: WisdomClientTypes.ServerSideEncryptionConfiguration? = nil, status: WisdomClientTypes.AssistantStatus? = nil, @@ -544,6 +553,7 @@ extension WisdomClientTypes { self.assistantArn = assistantArn self.assistantId = assistantId self.description = description + self.integrationConfiguration = integrationConfiguration self.name = name self.serverSideEncryptionConfiguration = serverSideEncryptionConfiguration self.status = status @@ -554,6 +564,41 @@ extension WisdomClientTypes { } +extension WisdomClientTypes.AssistantIntegrationConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case topicIntegrationArn + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let topicIntegrationArn = self.topicIntegrationArn { + try encodeContainer.encode(topicIntegrationArn, forKey: .topicIntegrationArn) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let topicIntegrationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .topicIntegrationArn) + topicIntegrationArn = topicIntegrationArnDecoded + } +} + +extension WisdomClientTypes { + /// The configuration information for the Wisdom assistant integration. + public struct AssistantIntegrationConfiguration: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the integrated Amazon SNS topic used for streaming chat messages. + public var topicIntegrationArn: Swift.String? + + public init( + topicIntegrationArn: Swift.String? = nil + ) + { + self.topicIntegrationArn = topicIntegrationArn + } + } + +} + extension WisdomClientTypes { public enum AssistantStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Codable, Swift.Hashable { case active @@ -603,6 +648,7 @@ extension WisdomClientTypes.AssistantSummary: Swift.Codable { case assistantArn case assistantId case description + case integrationConfiguration case name case serverSideEncryptionConfiguration case status @@ -621,6 +667,9 @@ extension WisdomClientTypes.AssistantSummary: Swift.Codable { if let description = self.description { try encodeContainer.encode(description, forKey: .description) } + if let integrationConfiguration = self.integrationConfiguration { + try encodeContainer.encode(integrationConfiguration, forKey: .integrationConfiguration) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -668,6 +717,8 @@ extension WisdomClientTypes.AssistantSummary: Swift.Codable { tags = tagsDecoded0 let serverSideEncryptionConfigurationDecoded = try containerValues.decodeIfPresent(WisdomClientTypes.ServerSideEncryptionConfiguration.self, forKey: .serverSideEncryptionConfiguration) serverSideEncryptionConfiguration = serverSideEncryptionConfigurationDecoded + let integrationConfigurationDecoded = try containerValues.decodeIfPresent(WisdomClientTypes.AssistantIntegrationConfiguration.self, forKey: .integrationConfiguration) + integrationConfiguration = integrationConfigurationDecoded } } @@ -682,6 +733,8 @@ extension WisdomClientTypes { public var assistantId: Swift.String? /// The description of the assistant. public var description: Swift.String? + /// The configuration information for the Wisdom assistant integration. + public var integrationConfiguration: WisdomClientTypes.AssistantIntegrationConfiguration? /// The name of the assistant. /// This member is required. public var name: Swift.String? @@ -700,6 +753,7 @@ extension WisdomClientTypes { assistantArn: Swift.String? = nil, assistantId: Swift.String? = nil, description: Swift.String? = nil, + integrationConfiguration: WisdomClientTypes.AssistantIntegrationConfiguration? = nil, name: Swift.String? = nil, serverSideEncryptionConfiguration: WisdomClientTypes.ServerSideEncryptionConfiguration? = nil, status: WisdomClientTypes.AssistantStatus? = nil, @@ -710,6 +764,7 @@ extension WisdomClientTypes { self.assistantArn = assistantArn self.assistantId = assistantId self.description = description + self.integrationConfiguration = integrationConfiguration self.name = name self.serverSideEncryptionConfiguration = serverSideEncryptionConfiguration self.status = status @@ -5879,6 +5934,7 @@ extension ServiceQuotaExceededExceptionBody: Swift.Decodable { extension WisdomClientTypes.SessionData: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case description + case integrationConfiguration case name case sessionArn case sessionId @@ -5890,6 +5946,9 @@ extension WisdomClientTypes.SessionData: Swift.Codable { if let description = self.description { try encodeContainer.encode(description, forKey: .description) } + if let integrationConfiguration = self.integrationConfiguration { + try encodeContainer.encode(integrationConfiguration, forKey: .integrationConfiguration) + } if let name = self.name { try encodeContainer.encode(name, forKey: .name) } @@ -5928,6 +5987,8 @@ extension WisdomClientTypes.SessionData: Swift.Codable { } } tags = tagsDecoded0 + let integrationConfigurationDecoded = try containerValues.decodeIfPresent(WisdomClientTypes.SessionIntegrationConfiguration.self, forKey: .integrationConfiguration) + integrationConfiguration = integrationConfigurationDecoded } } @@ -5936,6 +5997,8 @@ extension WisdomClientTypes { public struct SessionData: Swift.Equatable { /// The description of the session. public var description: Swift.String? + /// The configuration information for the session integration. + public var integrationConfiguration: WisdomClientTypes.SessionIntegrationConfiguration? /// The name of the session. /// This member is required. public var name: Swift.String? @@ -5950,6 +6013,7 @@ extension WisdomClientTypes { public init( description: Swift.String? = nil, + integrationConfiguration: WisdomClientTypes.SessionIntegrationConfiguration? = nil, name: Swift.String? = nil, sessionArn: Swift.String? = nil, sessionId: Swift.String? = nil, @@ -5957,6 +6021,7 @@ extension WisdomClientTypes { ) { self.description = description + self.integrationConfiguration = integrationConfiguration self.name = name self.sessionArn = sessionArn self.sessionId = sessionId @@ -5966,6 +6031,41 @@ extension WisdomClientTypes { } +extension WisdomClientTypes.SessionIntegrationConfiguration: Swift.Codable { + enum CodingKeys: Swift.String, Swift.CodingKey { + case topicIntegrationArn + } + + public func encode(to encoder: Swift.Encoder) throws { + var encodeContainer = encoder.container(keyedBy: CodingKeys.self) + if let topicIntegrationArn = self.topicIntegrationArn { + try encodeContainer.encode(topicIntegrationArn, forKey: .topicIntegrationArn) + } + } + + public init(from decoder: Swift.Decoder) throws { + let containerValues = try decoder.container(keyedBy: CodingKeys.self) + let topicIntegrationArnDecoded = try containerValues.decodeIfPresent(Swift.String.self, forKey: .topicIntegrationArn) + topicIntegrationArn = topicIntegrationArnDecoded + } +} + +extension WisdomClientTypes { + /// The configuration information for the session integration. + public struct SessionIntegrationConfiguration: Swift.Equatable { + /// The Amazon Resource Name (ARN) of the integrated Amazon SNS topic used for streaming chat messages. + public var topicIntegrationArn: Swift.String? + + public init( + topicIntegrationArn: Swift.String? = nil + ) + { + self.topicIntegrationArn = topicIntegrationArn + } + } + +} + extension WisdomClientTypes.SessionSummary: Swift.Codable { enum CodingKeys: Swift.String, Swift.CodingKey { case assistantArn diff --git a/Sources/Services/AWSWorkSpaces/models/Models.swift b/Sources/Services/AWSWorkSpaces/models/Models.swift index 1aa846fb4e0..a569f8968d5 100644 --- a/Sources/Services/AWSWorkSpaces/models/Models.swift +++ b/Sources/Services/AWSWorkSpaces/models/Models.swift @@ -11737,7 +11737,7 @@ extension WorkSpacesClientTypes { public var userName: Swift.String? /// Indicates whether the data stored on the user volume is encrypted. public var userVolumeEncryptionEnabled: Swift.Bool? - /// The symmetric KMS key used to encrypt data stored on your WorkSpace. Amazon WorkSpaces does not support asymmetric KMS keys. + /// The ARN of the symmetric KMS key used to encrypt data stored on your WorkSpace. Amazon WorkSpaces does not support asymmetric KMS keys. public var volumeEncryptionKey: Swift.String? /// The identifier of the WorkSpace. public var workspaceId: Swift.String? @@ -12980,7 +12980,7 @@ extension WorkSpacesClientTypes { public var userName: Swift.String? /// Indicates whether the data stored on the user volume is encrypted. public var userVolumeEncryptionEnabled: Swift.Bool? - /// The symmetric KMS key used to encrypt data stored on your WorkSpace. Amazon WorkSpaces does not support asymmetric KMS keys. + /// The ARN of the symmetric KMS key used to encrypt data stored on your WorkSpace. Amazon WorkSpaces does not support asymmetric KMS keys. public var volumeEncryptionKey: Swift.String? /// The WorkSpace properties. public var workspaceProperties: WorkSpacesClientTypes.WorkspaceProperties? diff --git a/Tests/Services/AWSEntityResolutionTests/EndpointResolverTest.swift b/Tests/Services/AWSEntityResolutionTests/EndpointResolverTest.swift new file mode 100644 index 00000000000..4e311114d53 --- /dev/null +++ b/Tests/Services/AWSEntityResolutionTests/EndpointResolverTest.swift @@ -0,0 +1,473 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import AWSClientRuntime +@testable import AWSEntityResolution +import AwsCommonRuntimeKit +import ClientRuntime +import SmithyTestUtil +import XCTest + +class EndpointResolverTest: XCTestCase { + + override class func setUp() { + AwsCommonRuntimeKit.CommonRuntimeKit.initialize() + } + + /// For region us-gov-east-1 with FIPS enabled and DualStack enabled + func testResolve1() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution-fips.us-gov-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS enabled and DualStack disabled + func testResolve2() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution-fips.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS disabled and DualStack enabled + func testResolve3() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution.us-gov-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS disabled and DualStack disabled + func testResolve4() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS enabled and DualStack enabled + func testResolve5() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution-fips.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS enabled and DualStack disabled + func testResolve6() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution-fips.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS disabled and DualStack enabled + func testResolve7() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS disabled and DualStack disabled + func testResolve8() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-iso-east-1 with FIPS enabled and DualStack enabled + func testResolve9() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("FIPS and DualStack are enabled, but this partition does not support one or both", message) + default: + XCTFail() + } + } + } + + /// For region us-iso-east-1 with FIPS enabled and DualStack disabled + func testResolve10() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution-fips.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-iso-east-1 with FIPS disabled and DualStack enabled + func testResolve11() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("DualStack is enabled but this partition does not support DualStack", message) + default: + XCTFail() + } + } + } + + /// For region us-iso-east-1 with FIPS disabled and DualStack disabled + func testResolve12() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS enabled and DualStack enabled + func testResolve13() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution-fips.us-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS enabled and DualStack disabled + func testResolve14() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution-fips.us-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS disabled and DualStack enabled + func testResolve15() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution.us-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS disabled and DualStack disabled + func testResolve16() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution.us-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isob-east-1 with FIPS enabled and DualStack enabled + func testResolve17() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("FIPS and DualStack are enabled, but this partition does not support one or both", message) + default: + XCTFail() + } + } + } + + /// For region us-isob-east-1 with FIPS enabled and DualStack disabled + func testResolve18() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution-fips.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isob-east-1 with FIPS disabled and DualStack enabled + func testResolve19() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("DualStack is enabled but this partition does not support DualStack", message) + default: + XCTFail() + } + } + } + + /// For region us-isob-east-1 with FIPS disabled and DualStack disabled + func testResolve20() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://entityresolution.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with fips disabled and dualstack disabled + func testResolve21() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://example.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with fips enabled and dualstack disabled + func testResolve22() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: FIPS and custom endpoint are not supported", message) + default: + XCTFail() + } + } + } + + /// For custom endpoint with fips disabled and dualstack enabled + func testResolve23() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: Dualstack and custom endpoint are not supported", message) + default: + XCTFail() + } + } + } + +} diff --git a/Tests/Services/AWSManagedBlockchainQueryTests/EndpointResolverTest.swift b/Tests/Services/AWSManagedBlockchainQueryTests/EndpointResolverTest.swift new file mode 100644 index 00000000000..aa5e5051db2 --- /dev/null +++ b/Tests/Services/AWSManagedBlockchainQueryTests/EndpointResolverTest.swift @@ -0,0 +1,509 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import AWSClientRuntime +@testable import AWSManagedBlockchainQuery +import AwsCommonRuntimeKit +import ClientRuntime +import SmithyTestUtil +import XCTest + +class EndpointResolverTest: XCTestCase { + + override class func setUp() { + AwsCommonRuntimeKit.CommonRuntimeKit.initialize() + } + + /// For region us-east-1 with FIPS enabled and DualStack enabled + func testResolve1() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query-fips.us-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS enabled and DualStack disabled + func testResolve2() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query-fips.us-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS disabled and DualStack enabled + func testResolve3() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query.us-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS disabled and DualStack disabled + func testResolve4() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query.us-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS enabled and DualStack enabled + func testResolve5() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query-fips.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS enabled and DualStack disabled + func testResolve6() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query-fips.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS disabled and DualStack enabled + func testResolve7() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS disabled and DualStack disabled + func testResolve8() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS enabled and DualStack enabled + func testResolve9() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query-fips.us-gov-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS enabled and DualStack disabled + func testResolve10() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query-fips.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS disabled and DualStack enabled + func testResolve11() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query.us-gov-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS disabled and DualStack disabled + func testResolve12() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-iso-east-1 with FIPS enabled and DualStack enabled + func testResolve13() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("FIPS and DualStack are enabled, but this partition does not support one or both", message) + default: + XCTFail() + } + } + } + + /// For region us-iso-east-1 with FIPS enabled and DualStack disabled + func testResolve14() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query-fips.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-iso-east-1 with FIPS disabled and DualStack enabled + func testResolve15() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("DualStack is enabled but this partition does not support DualStack", message) + default: + XCTFail() + } + } + } + + /// For region us-iso-east-1 with FIPS disabled and DualStack disabled + func testResolve16() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isob-east-1 with FIPS enabled and DualStack enabled + func testResolve17() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("FIPS and DualStack are enabled, but this partition does not support one or both", message) + default: + XCTFail() + } + } + } + + /// For region us-isob-east-1 with FIPS enabled and DualStack disabled + func testResolve18() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query-fips.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isob-east-1 with FIPS disabled and DualStack enabled + func testResolve19() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("DualStack is enabled but this partition does not support DualStack", message) + default: + XCTFail() + } + } + } + + /// For region us-isob-east-1 with FIPS disabled and DualStack disabled + func testResolve20() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://managedblockchain-query.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with region set and fips disabled and dualstack disabled + func testResolve21() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://example.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with region not set and fips disabled and dualstack disabled + func testResolve22() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://example.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with fips enabled and dualstack disabled + func testResolve23() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: FIPS and custom endpoint are not supported", message) + default: + XCTFail() + } + } + } + + /// For custom endpoint with fips disabled and dualstack enabled + func testResolve24() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: Dualstack and custom endpoint are not supported", message) + default: + XCTFail() + } + } + } + + /// Missing region + func testResolve25() throws { + let endpointParams = EndpointParams( + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: Missing Region", message) + default: + XCTFail() + } + } + } + +} diff --git a/Tests/Services/AWSMedicalImagingTests/EndpointResolverTest.swift b/Tests/Services/AWSMedicalImagingTests/EndpointResolverTest.swift new file mode 100644 index 00000000000..ae4142dda8d --- /dev/null +++ b/Tests/Services/AWSMedicalImagingTests/EndpointResolverTest.swift @@ -0,0 +1,473 @@ +// Code generated by smithy-swift-codegen. DO NOT EDIT! + +import AWSClientRuntime +@testable import AWSMedicalImaging +import AwsCommonRuntimeKit +import ClientRuntime +import SmithyTestUtil +import XCTest + +class EndpointResolverTest: XCTestCase { + + override class func setUp() { + AwsCommonRuntimeKit.CommonRuntimeKit.initialize() + } + + /// For region us-gov-east-1 with FIPS enabled and DualStack enabled + func testResolve1() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging-fips.us-gov-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS enabled and DualStack disabled + func testResolve2() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging-fips.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS disabled and DualStack enabled + func testResolve3() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging.us-gov-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-gov-east-1 with FIPS disabled and DualStack disabled + func testResolve4() throws { + let endpointParams = EndpointParams( + region: "us-gov-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS enabled and DualStack enabled + func testResolve5() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging-fips.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS enabled and DualStack disabled + func testResolve6() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging-fips.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS disabled and DualStack enabled + func testResolve7() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging.cn-north-1.api.amazonwebservices.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region cn-north-1 with FIPS disabled and DualStack disabled + func testResolve8() throws { + let endpointParams = EndpointParams( + region: "cn-north-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging.cn-north-1.amazonaws.com.cn", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-iso-east-1 with FIPS enabled and DualStack enabled + func testResolve9() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("FIPS and DualStack are enabled, but this partition does not support one or both", message) + default: + XCTFail() + } + } + } + + /// For region us-iso-east-1 with FIPS enabled and DualStack disabled + func testResolve10() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging-fips.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-iso-east-1 with FIPS disabled and DualStack enabled + func testResolve11() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("DualStack is enabled but this partition does not support DualStack", message) + default: + XCTFail() + } + } + } + + /// For region us-iso-east-1 with FIPS disabled and DualStack disabled + func testResolve12() throws { + let endpointParams = EndpointParams( + region: "us-iso-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS enabled and DualStack enabled + func testResolve13() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging-fips.us-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS enabled and DualStack disabled + func testResolve14() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging-fips.us-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS disabled and DualStack enabled + func testResolve15() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging.us-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-east-1 with FIPS disabled and DualStack disabled + func testResolve16() throws { + let endpointParams = EndpointParams( + region: "us-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging.us-east-1.amazonaws.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isob-east-1 with FIPS enabled and DualStack enabled + func testResolve17() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: true, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("FIPS and DualStack are enabled, but this partition does not support one or both", message) + default: + XCTFail() + } + } + } + + /// For region us-isob-east-1 with FIPS enabled and DualStack disabled + func testResolve18() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging-fips.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For region us-isob-east-1 with FIPS disabled and DualStack enabled + func testResolve19() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("DualStack is enabled but this partition does not support DualStack", message) + default: + XCTFail() + } + } + } + + /// For region us-isob-east-1 with FIPS disabled and DualStack disabled + func testResolve20() throws { + let endpointParams = EndpointParams( + region: "us-isob-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://medical-imaging.us-isob-east-1.sc2s.sgov.gov", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with fips disabled and dualstack disabled + func testResolve21() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://example.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with fips enabled and dualstack disabled + func testResolve22() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: false, + useFIPS: true + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: FIPS and custom endpoint are not supported", message) + default: + XCTFail() + } + } + } + + /// For custom endpoint with fips disabled and dualstack enabled + func testResolve23() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + region: "us-east-1", + useDualStack: true, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: Dualstack and custom endpoint are not supported", message) + default: + XCTFail() + } + } + } + +} diff --git a/Tests/Services/AWSOmicsTests/EndpointResolverTest.swift b/Tests/Services/AWSOmicsTests/EndpointResolverTest.swift index 844b296f8e0..6e9018e5035 100644 --- a/Tests/Services/AWSOmicsTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSOmicsTests/EndpointResolverTest.swift @@ -13,10 +13,10 @@ class EndpointResolverTest: XCTestCase { AwsCommonRuntimeKit.CommonRuntimeKit.initialize() } - /// For region us-gov-east-1 with FIPS enabled and DualStack enabled + /// For region us-east-1 with FIPS enabled and DualStack enabled func testResolve1() throws { let endpointParams = EndpointParams( - region: "us-gov-east-1", + region: "us-east-1", useDualStack: true, useFIPS: true ) @@ -28,15 +28,15 @@ class EndpointResolverTest: XCTestCase { [:] let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://omics-fips.us-gov-east-1.api.aws", headers: headers, properties: properties) + let expected = try ClientRuntime.Endpoint(urlString: "https://omics-fips.us-east-1.api.aws", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } - /// For region us-gov-east-1 with FIPS enabled and DualStack disabled + /// For region us-east-1 with FIPS enabled and DualStack disabled func testResolve2() throws { let endpointParams = EndpointParams( - region: "us-gov-east-1", + region: "us-east-1", useDualStack: false, useFIPS: true ) @@ -48,15 +48,15 @@ class EndpointResolverTest: XCTestCase { [:] let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://omics-fips.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + let expected = try ClientRuntime.Endpoint(urlString: "https://omics-fips.us-east-1.amazonaws.com", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } - /// For region us-gov-east-1 with FIPS disabled and DualStack enabled + /// For region us-east-1 with FIPS disabled and DualStack enabled func testResolve3() throws { let endpointParams = EndpointParams( - region: "us-gov-east-1", + region: "us-east-1", useDualStack: true, useFIPS: false ) @@ -68,15 +68,15 @@ class EndpointResolverTest: XCTestCase { [:] let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://omics.us-gov-east-1.api.aws", headers: headers, properties: properties) + let expected = try ClientRuntime.Endpoint(urlString: "https://omics.us-east-1.api.aws", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } - /// For region us-gov-east-1 with FIPS disabled and DualStack disabled + /// For region us-east-1 with FIPS disabled and DualStack disabled func testResolve4() throws { let endpointParams = EndpointParams( - region: "us-gov-east-1", + region: "us-east-1", useDualStack: false, useFIPS: false ) @@ -88,7 +88,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://omics.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) + let expected = try ClientRuntime.Endpoint(urlString: "https://omics.us-east-1.amazonaws.com", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -173,29 +173,30 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// For region us-iso-east-1 with FIPS enabled and DualStack enabled + /// For region us-gov-east-1 with FIPS enabled and DualStack enabled func testResolve9() throws { let endpointParams = EndpointParams( - region: "us-iso-east-1", + region: "us-gov-east-1", useDualStack: true, useFIPS: true ) let resolver = try DefaultEndpointResolver() - XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in - switch error { - case EndpointError.unresolved(let message): - XCTAssertEqual("FIPS and DualStack are enabled, but this partition does not support one or both", message) - default: - XCTFail() - } - } + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://omics-fips.us-gov-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) } - /// For region us-iso-east-1 with FIPS enabled and DualStack disabled + /// For region us-gov-east-1 with FIPS enabled and DualStack disabled func testResolve10() throws { let endpointParams = EndpointParams( - region: "us-iso-east-1", + region: "us-gov-east-1", useDualStack: false, useFIPS: true ) @@ -207,34 +208,35 @@ class EndpointResolverTest: XCTestCase { [:] let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://omics-fips.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + let expected = try ClientRuntime.Endpoint(urlString: "https://omics-fips.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } - /// For region us-iso-east-1 with FIPS disabled and DualStack enabled + /// For region us-gov-east-1 with FIPS disabled and DualStack enabled func testResolve11() throws { let endpointParams = EndpointParams( - region: "us-iso-east-1", + region: "us-gov-east-1", useDualStack: true, useFIPS: false ) let resolver = try DefaultEndpointResolver() - XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in - switch error { - case EndpointError.unresolved(let message): - XCTAssertEqual("DualStack is enabled but this partition does not support DualStack", message) - default: - XCTFail() - } - } + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://omics.us-gov-east-1.api.aws", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) } - /// For region us-iso-east-1 with FIPS disabled and DualStack disabled + /// For region us-gov-east-1 with FIPS disabled and DualStack disabled func testResolve12() throws { let endpointParams = EndpointParams( - region: "us-iso-east-1", + region: "us-gov-east-1", useDualStack: false, useFIPS: false ) @@ -246,35 +248,34 @@ class EndpointResolverTest: XCTestCase { [:] let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://omics.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) + let expected = try ClientRuntime.Endpoint(urlString: "https://omics.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } - /// For region us-east-1 with FIPS enabled and DualStack enabled + /// For region us-iso-east-1 with FIPS enabled and DualStack enabled func testResolve13() throws { let endpointParams = EndpointParams( - region: "us-east-1", + region: "us-iso-east-1", useDualStack: true, useFIPS: true ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [:] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://omics-fips.us-east-1.api.aws", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("FIPS and DualStack are enabled, but this partition does not support one or both", message) + default: + XCTFail() + } + } } - /// For region us-east-1 with FIPS enabled and DualStack disabled + /// For region us-iso-east-1 with FIPS enabled and DualStack disabled func testResolve14() throws { let endpointParams = EndpointParams( - region: "us-east-1", + region: "us-iso-east-1", useDualStack: false, useFIPS: true ) @@ -286,35 +287,34 @@ class EndpointResolverTest: XCTestCase { [:] let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://omics-fips.us-east-1.amazonaws.com", headers: headers, properties: properties) + let expected = try ClientRuntime.Endpoint(urlString: "https://omics-fips.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } - /// For region us-east-1 with FIPS disabled and DualStack enabled + /// For region us-iso-east-1 with FIPS disabled and DualStack enabled func testResolve15() throws { let endpointParams = EndpointParams( - region: "us-east-1", + region: "us-iso-east-1", useDualStack: true, useFIPS: false ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [:] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://omics.us-east-1.api.aws", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("DualStack is enabled but this partition does not support DualStack", message) + default: + XCTFail() + } + } } - /// For region us-east-1 with FIPS disabled and DualStack disabled + /// For region us-iso-east-1 with FIPS disabled and DualStack disabled func testResolve16() throws { let endpointParams = EndpointParams( - region: "us-east-1", + region: "us-iso-east-1", useDualStack: false, useFIPS: false ) @@ -326,7 +326,7 @@ class EndpointResolverTest: XCTestCase { [:] let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://omics.us-east-1.amazonaws.com", headers: headers, properties: properties) + let expected = try ClientRuntime.Endpoint(urlString: "https://omics.us-iso-east-1.c2s.ic.gov", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } @@ -409,7 +409,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// For custom endpoint with fips disabled and dualstack disabled + /// For custom endpoint with region set and fips disabled and dualstack disabled func testResolve21() throws { let endpointParams = EndpointParams( endpoint: "https://example.com", @@ -430,8 +430,28 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// For custom endpoint with fips enabled and dualstack disabled + /// For custom endpoint with region not set and fips disabled and dualstack disabled func testResolve22() throws { + let endpointParams = EndpointParams( + endpoint: "https://example.com", + useDualStack: false, + useFIPS: false + ) + let resolver = try DefaultEndpointResolver() + + let actual = try resolver.resolve(params: endpointParams) + + let properties: [String: AnyHashable] = + [:] + + let headers = Headers() + let expected = try ClientRuntime.Endpoint(urlString: "https://example.com", headers: headers, properties: properties) + + XCTAssertEqual(expected, actual) + } + + /// For custom endpoint with fips enabled and dualstack disabled + func testResolve23() throws { let endpointParams = EndpointParams( endpoint: "https://example.com", region: "us-east-1", @@ -451,7 +471,7 @@ class EndpointResolverTest: XCTestCase { } /// For custom endpoint with fips disabled and dualstack enabled - func testResolve23() throws { + func testResolve24() throws { let endpointParams = EndpointParams( endpoint: "https://example.com", region: "us-east-1", @@ -470,4 +490,20 @@ class EndpointResolverTest: XCTestCase { } } + /// Missing region + func testResolve25() throws { + let endpointParams = EndpointParams( + ) + let resolver = try DefaultEndpointResolver() + + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Invalid Configuration: Missing Region", message) + default: + XCTFail() + } + } + } + } diff --git a/Tests/Services/AWSRoute53ResolverTests/EndpointResolverTest.swift b/Tests/Services/AWSRoute53ResolverTests/EndpointResolverTest.swift index 160d9ca7aee..4647ae5d908 100644 --- a/Tests/Services/AWSRoute53ResolverTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSRoute53ResolverTests/EndpointResolverTest.swift @@ -633,28 +633,8 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// For region us-gov-east-1 with FIPS enabled and DualStack disabled - func testResolve32() throws { - let endpointParams = EndpointParams( - region: "us-gov-east-1", - useDualStack: false, - useFIPS: true - ) - let resolver = try DefaultEndpointResolver() - - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [:] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://route53resolver.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) - } - /// For region us-gov-west-1 with FIPS disabled and DualStack disabled - func testResolve33() throws { + func testResolve32() throws { let endpointParams = EndpointParams( region: "us-gov-west-1", useDualStack: false, @@ -673,11 +653,11 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// For region us-gov-west-1 with FIPS enabled and DualStack disabled - func testResolve34() throws { + /// For region us-gov-east-1 with FIPS enabled and DualStack enabled + func testResolve33() throws { let endpointParams = EndpointParams( - region: "us-gov-west-1", - useDualStack: false, + region: "us-gov-east-1", + useDualStack: true, useFIPS: true ) let resolver = try DefaultEndpointResolver() @@ -688,16 +668,16 @@ class EndpointResolverTest: XCTestCase { [:] let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://route53resolver.us-gov-west-1.amazonaws.com", headers: headers, properties: properties) + let expected = try ClientRuntime.Endpoint(urlString: "https://route53resolver-fips.us-gov-east-1.api.aws", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } - /// For region us-gov-east-1 with FIPS enabled and DualStack enabled - func testResolve35() throws { + /// For region us-gov-east-1 with FIPS enabled and DualStack disabled + func testResolve34() throws { let endpointParams = EndpointParams( region: "us-gov-east-1", - useDualStack: true, + useDualStack: false, useFIPS: true ) let resolver = try DefaultEndpointResolver() @@ -708,13 +688,13 @@ class EndpointResolverTest: XCTestCase { [:] let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://route53resolver-fips.us-gov-east-1.api.aws", headers: headers, properties: properties) + let expected = try ClientRuntime.Endpoint(urlString: "https://route53resolver-fips.us-gov-east-1.amazonaws.com", headers: headers, properties: properties) XCTAssertEqual(expected, actual) } /// For region us-gov-east-1 with FIPS disabled and DualStack enabled - func testResolve36() throws { + func testResolve35() throws { let endpointParams = EndpointParams( region: "us-gov-east-1", useDualStack: true, @@ -734,7 +714,7 @@ class EndpointResolverTest: XCTestCase { } /// For region us-iso-east-1 with FIPS disabled and DualStack disabled - func testResolve37() throws { + func testResolve36() throws { let endpointParams = EndpointParams( region: "us-iso-east-1", useDualStack: false, @@ -754,7 +734,7 @@ class EndpointResolverTest: XCTestCase { } /// For region us-iso-east-1 with FIPS enabled and DualStack enabled - func testResolve38() throws { + func testResolve37() throws { let endpointParams = EndpointParams( region: "us-iso-east-1", useDualStack: true, @@ -773,7 +753,7 @@ class EndpointResolverTest: XCTestCase { } /// For region us-iso-east-1 with FIPS enabled and DualStack disabled - func testResolve39() throws { + func testResolve38() throws { let endpointParams = EndpointParams( region: "us-iso-east-1", useDualStack: false, @@ -793,7 +773,7 @@ class EndpointResolverTest: XCTestCase { } /// For region us-iso-east-1 with FIPS disabled and DualStack enabled - func testResolve40() throws { + func testResolve39() throws { let endpointParams = EndpointParams( region: "us-iso-east-1", useDualStack: true, @@ -812,7 +792,7 @@ class EndpointResolverTest: XCTestCase { } /// For region us-isob-east-1 with FIPS enabled and DualStack enabled - func testResolve41() throws { + func testResolve40() throws { let endpointParams = EndpointParams( region: "us-isob-east-1", useDualStack: true, @@ -831,7 +811,7 @@ class EndpointResolverTest: XCTestCase { } /// For region us-isob-east-1 with FIPS enabled and DualStack disabled - func testResolve42() throws { + func testResolve41() throws { let endpointParams = EndpointParams( region: "us-isob-east-1", useDualStack: false, @@ -851,7 +831,7 @@ class EndpointResolverTest: XCTestCase { } /// For region us-isob-east-1 with FIPS disabled and DualStack enabled - func testResolve43() throws { + func testResolve42() throws { let endpointParams = EndpointParams( region: "us-isob-east-1", useDualStack: true, @@ -870,7 +850,7 @@ class EndpointResolverTest: XCTestCase { } /// For region us-isob-east-1 with FIPS disabled and DualStack disabled - func testResolve44() throws { + func testResolve43() throws { let endpointParams = EndpointParams( region: "us-isob-east-1", useDualStack: false, @@ -890,7 +870,7 @@ class EndpointResolverTest: XCTestCase { } /// For custom endpoint with region set and fips disabled and dualstack disabled - func testResolve45() throws { + func testResolve44() throws { let endpointParams = EndpointParams( endpoint: "https://example.com", region: "us-east-1", @@ -911,7 +891,7 @@ class EndpointResolverTest: XCTestCase { } /// For custom endpoint with region not set and fips disabled and dualstack disabled - func testResolve46() throws { + func testResolve45() throws { let endpointParams = EndpointParams( endpoint: "https://example.com", useDualStack: false, @@ -931,7 +911,7 @@ class EndpointResolverTest: XCTestCase { } /// For custom endpoint with fips enabled and dualstack disabled - func testResolve47() throws { + func testResolve46() throws { let endpointParams = EndpointParams( endpoint: "https://example.com", region: "us-east-1", @@ -951,7 +931,7 @@ class EndpointResolverTest: XCTestCase { } /// For custom endpoint with fips disabled and dualstack enabled - func testResolve48() throws { + func testResolve47() throws { let endpointParams = EndpointParams( endpoint: "https://example.com", region: "us-east-1", @@ -971,7 +951,7 @@ class EndpointResolverTest: XCTestCase { } /// Missing region - func testResolve49() throws { + func testResolve48() throws { let endpointParams = EndpointParams( ) let resolver = try DefaultEndpointResolver() diff --git a/Tests/Services/AWSS3Tests/EndpointResolverTest.swift b/Tests/Services/AWSS3Tests/EndpointResolverTest.swift index 3166fc4bd05..b5bd5dc3eac 100644 --- a/Tests/Services/AWSS3Tests/EndpointResolverTest.swift +++ b/Tests/Services/AWSS3Tests/EndpointResolverTest.swift @@ -273,7 +273,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in switch error { case EndpointError.unresolved(let message): - XCTAssertEqual("DualStack cannot be combined with a Host override (PrivateLink)", message) + XCTAssertEqual("Cannot set dual-stack in combination with a custom endpoint.", message) default: XCTFail() } @@ -2270,7 +2270,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// non-bucket endpoint with FIPS: TODO(descriptive) + /// non-bucket endpoint override with FIPS = error func testResolve80() throws { let endpointParams = EndpointParams( endpoint: "http://beta.example.com:1234/path", @@ -2280,27 +2280,17 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "name": "sigv4", - "signingName": "s3", - "signingRegion": "us-west-2", - "disableDoubleEncoding": true - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://beta.example.com:1234/path", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("A custom endpoint cannot be combined with FIPS", message) + default: + XCTFail() + } + } } - /// FIPS + dualstack + custom endpoint TODO(descriptive) + /// FIPS + dualstack + custom endpoint func testResolve81() throws { let endpointParams = EndpointParams( endpoint: "http://beta.example.com:1234/path", @@ -2310,27 +2300,17 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "name": "sigv4", - "signingName": "s3", - "signingRegion": "us-west-2", - "disableDoubleEncoding": true - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://beta.example.com:1234/path", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Cannot set dual-stack in combination with a custom endpoint.", message) + default: + XCTFail() + } + } } - /// dualstack + custom endpoint TODO(descriptive) + /// dualstack + custom endpoint func testResolve82() throws { let endpointParams = EndpointParams( endpoint: "http://beta.example.com:1234/path", @@ -2340,24 +2320,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "name": "sigv4", - "signingName": "s3", - "signingRegion": "us-west-2", - "disableDoubleEncoding": true - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://beta.example.com:1234/path", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Cannot set dual-stack in combination with a custom endpoint.", message) + default: + XCTFail() + } + } } /// custom endpoint without FIPS/dualstack @@ -2693,24 +2663,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true, - "signingRegion": "us-east-1" - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://foo.com/bucket%21", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("A custom endpoint cannot be combined with FIPS", message) + default: + XCTFail() + } + } } /// endpoint override + non-dns bucket + FIPS (BUG) @@ -2724,24 +2684,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true, - "signingRegion": "us-east-1" - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://foo.com/bucket%21", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("A custom endpoint cannot be combined with FIPS", message) + default: + XCTFail() + } + } } /// FIPS + bucket endpoint + force path style @@ -2851,24 +2801,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true, - "signingRegion": "us-east-1" - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://foo.com/bucket%21", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("A custom endpoint cannot be combined with FIPS", message) + default: + XCTFail() + } + } } /// FIPS + path based endpoint @@ -3014,24 +2954,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true, - "signingRegion": "us-east-1" - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://foo.com/bucket%21", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("A custom endpoint cannot be combined with FIPS", message) + default: + XCTFail() + } + } } /// FIPS + Dualstack + global endpoint + non-dns bucket @@ -3066,7 +2996,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// endpoint override + FIPS + dualstack (this is wrong—it's a bug in the UseGlobalEndpoint branch) + /// endpoint override + FIPS + dualstack func testResolve106() throws { let endpointParams = EndpointParams( endpoint: "http://foo.com", @@ -3077,24 +3007,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true, - "signingRegion": "us-east-1" - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://foo.com", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Cannot set dual-stack in combination with a custom endpoint.", message) + default: + XCTFail() + } + } } /// non-bucket endpoint override + dualstack + global endpoint @@ -3108,24 +3028,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true, - "signingRegion": "us-east-1" - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://foo.com", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Cannot set dual-stack in combination with a custom endpoint.", message) + default: + XCTFail() + } + } } /// Endpoint override + UseGlobalEndpoint + us-east-1 @@ -3139,30 +3049,19 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true, - "signingRegion": "us-east-1" - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://foo.com", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("A custom endpoint cannot be combined with FIPS", message) + default: + XCTFail() + } + } } /// non-FIPS partition with FIPS set + custom endpoint func testResolve109() throws { let endpointParams = EndpointParams( - endpoint: "http://foo.com", region: "cn-north-1", useDualStack: false, useFIPS: true, @@ -3302,7 +3201,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// aws-global + fips + custom endpoint (TODO: should be an error) + /// aws-global + fips + custom endpoint func testResolve114() throws { let endpointParams = EndpointParams( accelerate: false, @@ -3314,24 +3213,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "signingRegion": "us-east-1", - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://foo.com/bucket%21", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("A custom endpoint cannot be combined with FIPS", message) + default: + XCTFail() + } + } } /// aws-global, endpoint override & path only-bucket @@ -3366,7 +3255,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// aws-global + dualstack + custom endpoint (TODO: should be an error) + /// aws-global + dualstack + custom endpoint func testResolve116() throws { let endpointParams = EndpointParams( accelerate: false, @@ -3377,24 +3266,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "signingRegion": "us-east-1", - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://foo.com", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Cannot set dual-stack in combination with a custom endpoint.", message) + default: + XCTFail() + } + } } /// accelerate, dualstack + aws-global @@ -3428,7 +3307,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// FIPS + aws-global + path only bucket. TODO: this should be an error + /// FIPS + aws-global + path only bucket. This is not supported by S3 but we allow garbage in garbage out func testResolve118() throws { let endpointParams = EndpointParams( accelerate: false, @@ -3460,7 +3339,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// aws-global + FIPS + endpoint override. TODO: should this be an error? + /// aws-global + FIPS + endpoint override. func testResolve119() throws { let endpointParams = EndpointParams( endpoint: "http://foo.com", @@ -3469,27 +3348,17 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "signingRegion": "us-east-1", - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://foo.com", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("A custom endpoint cannot be combined with FIPS", message) + default: + XCTFail() + } + } } - /// force path style, aws-global & endpoint override + /// force path style, FIPS, aws-global & endpoint override func testResolve120() throws { let endpointParams = EndpointParams( bucket: "bucket!", @@ -3500,24 +3369,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "signingRegion": "us-east-1", - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://foo.com/bucket%21", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("A custom endpoint cannot be combined with FIPS", message) + default: + XCTFail() + } + } } /// ip address causes path style to be forced @@ -3559,24 +3418,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "signingRegion": "us-east-1", - "name": "sigv4", - "signingName": "s3", - "disableDoubleEncoding": true - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "http://foo.com", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Cannot set dual-stack in combination with a custom endpoint.", message) + default: + XCTFail() + } + } } /// FIPS + path-only (TODO: consider making this an error) @@ -4828,24 +4677,14 @@ class EndpointResolverTest: XCTestCase { ) let resolver = try DefaultEndpointResolver() - let actual = try resolver.resolve(params: endpointParams) - - let properties: [String: AnyHashable] = - [ - "authSchemes": [ - [ - "signingName": "s3", - "signingRegion": "cn-north-1", - "disableDoubleEncoding": true, - "name": "sigv4" - ] as [String: AnyHashable] - ] as [AnyHashable] - ] - - let headers = Headers() - let expected = try ClientRuntime.Endpoint(urlString: "https://s3-fips.cn-north-1.amazonaws.com.cn/bucket-name", headers: headers, properties: properties) - - XCTAssertEqual(expected, actual) + XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in + switch error { + case EndpointError.unresolved(let message): + XCTAssertEqual("Partition does not support FIPS", message) + default: + XCTFail() + } + } } /// path style + accelerate = error@cn-north-1 @@ -5272,7 +5111,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in switch error { case EndpointError.unresolved(let message): - XCTAssertEqual("Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate", message) + XCTAssertEqual("A custom endpoint cannot be combined with FIPS", message) default: XCTFail() } @@ -5295,7 +5134,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in switch error { case EndpointError.unresolved(let message): - XCTAssertEqual("Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate", message) + XCTAssertEqual("Cannot set dual-stack in combination with a custom endpoint.", message) default: XCTFail() } @@ -5318,7 +5157,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in switch error { case EndpointError.unresolved(let message): - XCTAssertEqual("Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate", message) + XCTAssertEqual("A custom endpoint cannot be combined with S3 Accelerate", message) default: XCTFail() } @@ -5424,12 +5263,11 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// SDK::Host + FIPS@cn-north-1 + /// FIPS@cn-north-1 func testResolve191() throws { let endpointParams = EndpointParams( accelerate: false, bucket: "bucket-name", - endpoint: "https://control.vpce-1a2b3c4d-5e6f.s3.us-west-2.vpce.amazonaws.com", forcePathStyle: false, region: "cn-north-1", useDualStack: false, @@ -5463,7 +5301,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in switch error { case EndpointError.unresolved(let message): - XCTAssertEqual("Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate", message) + XCTAssertEqual("Cannot set dual-stack in combination with a custom endpoint.", message) default: XCTFail() } @@ -5486,7 +5324,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in switch error { case EndpointError.unresolved(let message): - XCTAssertEqual("S3 Accelerate cannot be used in this region", message) + XCTAssertEqual("A custom endpoint cannot be combined with S3 Accelerate", message) default: XCTFail() } @@ -5608,7 +5446,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in switch error { case EndpointError.unresolved(let message): - XCTAssertEqual("Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate", message) + XCTAssertEqual("A custom endpoint cannot be combined with FIPS", message) default: XCTFail() } @@ -5631,7 +5469,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in switch error { case EndpointError.unresolved(let message): - XCTAssertEqual("Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate", message) + XCTAssertEqual("Cannot set dual-stack in combination with a custom endpoint.", message) default: XCTFail() } @@ -5654,7 +5492,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertThrowsError(try resolver.resolve(params: endpointParams)) { error in switch error { case EndpointError.unresolved(let message): - XCTAssertEqual("Host override cannot be combined with Dualstack, FIPS, or S3 Accelerate", message) + XCTAssertEqual("A custom endpoint cannot be combined with S3 Accelerate", message) default: XCTFail() } @@ -7224,7 +7062,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// S3 Outposts Abba Real Outpost Prod us-west-1 + /// S3 Outposts bucketAlias Real Outpost Prod us-west-1 func testResolve259() throws { let endpointParams = EndpointParams( accelerate: false, @@ -7255,7 +7093,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// S3 Outposts Abba Real Outpost Prod ap-east-1 + /// S3 Outposts bucketAlias Real Outpost Prod ap-east-1 func testResolve260() throws { let endpointParams = EndpointParams( accelerate: false, @@ -7286,7 +7124,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// S3 Outposts Abba Ec2 Outpost Prod us-east-1 + /// S3 Outposts bucketAlias Ec2 Outpost Prod us-east-1 func testResolve261() throws { let endpointParams = EndpointParams( accelerate: false, @@ -7317,7 +7155,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// S3 Outposts Abba Ec2 Outpost Prod me-south-1 + /// S3 Outposts bucketAlias Ec2 Outpost Prod me-south-1 func testResolve262() throws { let endpointParams = EndpointParams( accelerate: false, @@ -7348,7 +7186,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// S3 Outposts Abba Real Outpost Beta + /// S3 Outposts bucketAlias Real Outpost Beta func testResolve263() throws { let endpointParams = EndpointParams( accelerate: false, @@ -7380,7 +7218,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// S3 Outposts Abba Ec2 Outpost Beta + /// S3 Outposts bucketAlias Ec2 Outpost Beta func testResolve264() throws { let endpointParams = EndpointParams( accelerate: false, @@ -7412,7 +7250,7 @@ class EndpointResolverTest: XCTestCase { XCTAssertEqual(expected, actual) } - /// S3 Outposts Abba - No endpoint set for beta + /// S3 Outposts bucketAlias - No endpoint set for beta func testResolve265() throws { let endpointParams = EndpointParams( accelerate: false, @@ -7433,7 +7271,7 @@ class EndpointResolverTest: XCTestCase { } } - /// S3 Outposts Abba Invalid hardware type + /// S3 Outposts bucketAlias Invalid hardware type func testResolve266() throws { let endpointParams = EndpointParams( accelerate: false, @@ -7454,7 +7292,7 @@ class EndpointResolverTest: XCTestCase { } } - /// S3 Outposts Abba Special character in Outpost Arn + /// S3 Outposts bucketAlias Special character in Outpost Arn func testResolve267() throws { let endpointParams = EndpointParams( accelerate: false, @@ -7475,7 +7313,7 @@ class EndpointResolverTest: XCTestCase { } } - /// S3 Outposts Abba - No endpoint set for beta + /// S3 Outposts bucketAlias - No endpoint set for beta func testResolve268() throws { let endpointParams = EndpointParams( accelerate: false, diff --git a/Tests/Services/AWSSTSTests/EndpointResolverTest.swift b/Tests/Services/AWSSTSTests/EndpointResolverTest.swift index 0b2b1632c7c..ff2eb1fd4e9 100644 --- a/Tests/Services/AWSSTSTests/EndpointResolverTest.swift +++ b/Tests/Services/AWSSTSTests/EndpointResolverTest.swift @@ -1110,9 +1110,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1139,9 +1139,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1168,9 +1168,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1197,9 +1197,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1226,9 +1226,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1255,9 +1255,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1284,9 +1284,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1313,9 +1313,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1342,9 +1342,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1371,9 +1371,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1400,9 +1400,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1429,9 +1429,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1458,9 +1458,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1487,9 +1487,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1516,9 +1516,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1545,9 +1545,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-1", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-1" ] as [String: AnyHashable] ] as [AnyHashable] ] @@ -1574,9 +1574,9 @@ class EndpointResolverTest: XCTestCase { [ "authSchemes": [ [ - "signingRegion": "us-east-3", "signingName": "sts", - "name": "sigv4" + "name": "sigv4", + "signingRegion": "us-east-3" ] as [String: AnyHashable] ] as [AnyHashable] ] diff --git a/packageDependencies.plist b/packageDependencies.plist index b5b83807e35..36920d112f5 100644 --- a/packageDependencies.plist +++ b/packageDependencies.plist @@ -9,6 +9,6 @@ clientRuntimeBranch main clientRuntimeVersion - 0.25.0 + 0.26.0