//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2021 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

import Foundation
import SotoCore

extension Chime {
    // MARK: Enums

    public enum AccountStatus: String, CustomStringConvertible, Codable {
        case active = "Active"
        case suspended = "Suspended"
        public var description: String { return self.rawValue }
    }

    public enum AccountType: String, CustomStringConvertible, Codable {
        case enterprisedirectory = "EnterpriseDirectory"
        case enterpriselwa = "EnterpriseLWA"
        case enterpriseoidc = "EnterpriseOIDC"
        case team = "Team"
        public var description: String { return self.rawValue }
    }

    public enum AppInstanceDataType: String, CustomStringConvertible, Codable {
        case channel = "Channel"
        case channelmessage = "ChannelMessage"
        public var description: String { return self.rawValue }
    }

    public enum ArtifactsState: String, CustomStringConvertible, Codable {
        case disabled = "Disabled"
        case enabled = "Enabled"
        public var description: String { return self.rawValue }
    }

    public enum AudioMuxType: String, CustomStringConvertible, Codable {
        case audioonly = "AudioOnly"
        case audiowithactivespeakervideo = "AudioWithActiveSpeakerVideo"
        public var description: String { return self.rawValue }
    }

    public enum BotType: String, CustomStringConvertible, Codable {
        case chatbot = "ChatBot"
        public var description: String { return self.rawValue }
    }

    public enum CallingNameStatus: String, CustomStringConvertible, Codable {
        case unassigned = "Unassigned"
        case updatefailed = "UpdateFailed"
        case updateinprogress = "UpdateInProgress"
        case updatesucceeded = "UpdateSucceeded"
        public var description: String { return self.rawValue }
    }

    public enum Capability: String, CustomStringConvertible, Codable {
        case sms = "SMS"
        case voice = "Voice"
        public var description: String { return self.rawValue }
    }

    public enum ChannelMembershipType: String, CustomStringConvertible, Codable {
        case `default` = "DEFAULT"
        case hidden = "HIDDEN"
        public var description: String { return self.rawValue }
    }

    public enum ChannelMessagePersistenceType: String, CustomStringConvertible, Codable {
        case nonPersistent = "NON_PERSISTENT"
        case persistent = "PERSISTENT"
        public var description: String { return self.rawValue }
    }

    public enum ChannelMessageType: String, CustomStringConvertible, Codable {
        case control = "CONTROL"
        case standard = "STANDARD"
        public var description: String { return self.rawValue }
    }

    public enum ChannelMode: String, CustomStringConvertible, Codable {
        case restricted = "RESTRICTED"
        case unrestricted = "UNRESTRICTED"
        public var description: String { return self.rawValue }
    }

    public enum ChannelPrivacy: String, CustomStringConvertible, Codable {
        case `private` = "PRIVATE"
        case `public` = "PUBLIC"
        public var description: String { return self.rawValue }
    }

    public enum ContentMuxType: String, CustomStringConvertible, Codable {
        case contentonly = "ContentOnly"
        public var description: String { return self.rawValue }
    }

    public enum EmailStatus: String, CustomStringConvertible, Codable {
        case failed = "Failed"
        case notsent = "NotSent"
        case sent = "Sent"
        public var description: String { return self.rawValue }
    }

    public enum ErrorCode: String, CustomStringConvertible, Codable {
        case accessdenied = "AccessDenied"
        case badrequest = "BadRequest"
        case conflict = "Conflict"
        case forbidden = "Forbidden"
        case notfound = "NotFound"
        case phonenumberassociationsexist = "PhoneNumberAssociationsExist"
        case preconditionfailed = "PreconditionFailed"
        case resourcelimitexceeded = "ResourceLimitExceeded"
        case servicefailure = "ServiceFailure"
        case serviceunavailable = "ServiceUnavailable"
        case throttled = "Throttled"
        case throttling = "Throttling"
        case unauthorized = "Unauthorized"
        case unprocessable = "Unprocessable"
        case voiceconnectorgroupassociationsexist = "VoiceConnectorGroupAssociationsExist"
        public var description: String { return self.rawValue }
    }

    public enum GeoMatchLevel: String, CustomStringConvertible, Codable {
        case areacode = "AreaCode"
        case country = "Country"
        public var description: String { return self.rawValue }
    }

    public enum InviteStatus: String, CustomStringConvertible, Codable {
        case accepted = "Accepted"
        case failed = "Failed"
        case pending = "Pending"
        public var description: String { return self.rawValue }
    }

    public enum License: String, CustomStringConvertible, Codable {
        case basic = "Basic"
        case plus = "Plus"
        case pro = "Pro"
        case protrial = "ProTrial"
        public var description: String { return self.rawValue }
    }

    public enum MediaPipelineSinkType: String, CustomStringConvertible, Codable {
        case s3bucket = "S3Bucket"
        public var description: String { return self.rawValue }
    }

    public enum MediaPipelineSourceType: String, CustomStringConvertible, Codable {
        case chimesdkmeeting = "ChimeSdkMeeting"
        public var description: String { return self.rawValue }
    }

    public enum MediaPipelineStatus: String, CustomStringConvertible, Codable {
        case failed = "Failed"
        case inprogress = "InProgress"
        case initializing = "Initializing"
        case stopped = "Stopped"
        case stopping = "Stopping"
        public var description: String { return self.rawValue }
    }

    public enum MemberType: String, CustomStringConvertible, Codable {
        case bot = "Bot"
        case user = "User"
        case webhook = "Webhook"
        public var description: String { return self.rawValue }
    }

    public enum NotificationTarget: String, CustomStringConvertible, Codable {
        case eventbridge = "EventBridge"
        case sns = "SNS"
        case sqs = "SQS"
        public var description: String { return self.rawValue }
    }

    public enum NumberSelectionBehavior: String, CustomStringConvertible, Codable {
        case avoidsticky = "AvoidSticky"
        case prefersticky = "PreferSticky"
        public var description: String { return self.rawValue }
    }

    public enum OrderedPhoneNumberStatus: String, CustomStringConvertible, Codable {
        case acquired = "Acquired"
        case failed = "Failed"
        case processing = "Processing"
        public var description: String { return self.rawValue }
    }

    public enum OriginationRouteProtocol: String, CustomStringConvertible, Codable {
        case tcp = "TCP"
        case udp = "UDP"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberAssociationName: String, CustomStringConvertible, Codable {
        case accountid = "AccountId"
        case sipruleid = "SipRuleId"
        case userid = "UserId"
        case voiceconnectorgroupid = "VoiceConnectorGroupId"
        case voiceconnectorid = "VoiceConnectorId"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberOrderStatus: String, CustomStringConvertible, Codable {
        case failed = "Failed"
        case partial = "Partial"
        case processing = "Processing"
        case successful = "Successful"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberProductType: String, CustomStringConvertible, Codable {
        case businesscalling = "BusinessCalling"
        case sipmediaapplicationdialin = "SipMediaApplicationDialIn"
        case voiceconnector = "VoiceConnector"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberStatus: String, CustomStringConvertible, Codable {
        case acquirefailed = "AcquireFailed"
        case acquireinprogress = "AcquireInProgress"
        case assigned = "Assigned"
        case deletefailed = "DeleteFailed"
        case deleteinprogress = "DeleteInProgress"
        case releasefailed = "ReleaseFailed"
        case releaseinprogress = "ReleaseInProgress"
        case unassigned = "Unassigned"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberType: String, CustomStringConvertible, Codable {
        case local = "Local"
        case tollfree = "TollFree"
        public var description: String { return self.rawValue }
    }

    public enum ProxySessionStatus: String, CustomStringConvertible, Codable {
        case closed = "Closed"
        case inprogress = "InProgress"
        case open = "Open"
        public var description: String { return self.rawValue }
    }

    public enum RegistrationStatus: String, CustomStringConvertible, Codable {
        case registered = "Registered"
        case suspended = "Suspended"
        case unregistered = "Unregistered"
        public var description: String { return self.rawValue }
    }

    public enum RoomMembershipRole: String, CustomStringConvertible, Codable {
        case administrator = "Administrator"
        case member = "Member"
        public var description: String { return self.rawValue }
    }

    public enum SipRuleTriggerType: String, CustomStringConvertible, Codable {
        case requesturihostname = "RequestUriHostname"
        case tophonenumber = "ToPhoneNumber"
        public var description: String { return self.rawValue }
    }

    public enum SortOrder: String, CustomStringConvertible, Codable {
        case ascending = "ASCENDING"
        case descending = "DESCENDING"
        public var description: String { return self.rawValue }
    }

    public enum TranscribeContentIdentificationType: String, CustomStringConvertible, Codable {
        case pii = "PII"
        public var description: String { return self.rawValue }
    }

    public enum TranscribeContentRedactionType: String, CustomStringConvertible, Codable {
        case pii = "PII"
        public var description: String { return self.rawValue }
    }

    public enum TranscribeLanguageCode: String, CustomStringConvertible, Codable {
        case deDe = "de-DE"
        case enAu = "en-AU"
        case enGb = "en-GB"
        case enUs = "en-US"
        case esUs = "es-US"
        case frCa = "fr-CA"
        case frFr = "fr-FR"
        case itIt = "it-IT"
        case jaJp = "ja-JP"
        case koKr = "ko-KR"
        case ptBr = "pt-BR"
        case zhCn = "zh-CN"
        public var description: String { return self.rawValue }
    }

    public enum TranscribeMedicalContentIdentificationType: String, CustomStringConvertible, Codable {
        case phi = "PHI"
        public var description: String { return self.rawValue }
    }

    public enum TranscribeMedicalLanguageCode: String, CustomStringConvertible, Codable {
        case enUs = "en-US"
        public var description: String { return self.rawValue }
    }

    public enum TranscribeMedicalRegion: String, CustomStringConvertible, Codable {
        case apSoutheast2 = "ap-southeast-2"
        case auto
        case caCentral1 = "ca-central-1"
        case euWest1 = "eu-west-1"
        case usEast1 = "us-east-1"
        case usEast2 = "us-east-2"
        case usWest2 = "us-west-2"
        public var description: String { return self.rawValue }
    }

    public enum TranscribeMedicalSpecialty: String, CustomStringConvertible, Codable {
        case cardiology = "CARDIOLOGY"
        case neurology = "NEUROLOGY"
        case oncology = "ONCOLOGY"
        case primarycare = "PRIMARYCARE"
        case radiology = "RADIOLOGY"
        case urology = "UROLOGY"
        public var description: String { return self.rawValue }
    }

    public enum TranscribeMedicalType: String, CustomStringConvertible, Codable {
        case conversation = "CONVERSATION"
        case dictation = "DICTATION"
        public var description: String { return self.rawValue }
    }

    public enum TranscribePartialResultsStability: String, CustomStringConvertible, Codable {
        case high
        case low
        case medium
        public var description: String { return self.rawValue }
    }

    public enum TranscribeRegion: String, CustomStringConvertible, Codable {
        case apNortheast1 = "ap-northeast-1"
        case apNortheast2 = "ap-northeast-2"
        case apSoutheast2 = "ap-southeast-2"
        case auto
        case caCentral1 = "ca-central-1"
        case euCentral1 = "eu-central-1"
        case euWest1 = "eu-west-1"
        case euWest2 = "eu-west-2"
        case saEast1 = "sa-east-1"
        case usEast1 = "us-east-1"
        case usEast2 = "us-east-2"
        case usWest2 = "us-west-2"
        public var description: String { return self.rawValue }
    }

    public enum TranscribeVocabularyFilterMethod: String, CustomStringConvertible, Codable {
        case mask
        case remove
        case tag
        public var description: String { return self.rawValue }
    }

    public enum UserType: String, CustomStringConvertible, Codable {
        case privateuser = "PrivateUser"
        case shareddevice = "SharedDevice"
        public var description: String { return self.rawValue }
    }

    public enum VideoMuxType: String, CustomStringConvertible, Codable {
        case videoonly = "VideoOnly"
        public var description: String { return self.rawValue }
    }

    public enum VoiceConnectorAwsRegion: String, CustomStringConvertible, Codable {
        case usEast1 = "us-east-1"
        case usWest2 = "us-west-2"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct Account: AWSDecodableShape {
        /// The Amazon Chime account ID.
        public let accountId: String
        /// The status of the account.
        public let accountStatus: AccountStatus?
        /// The Amazon Chime account type. For more information about different account types, see  Managing Your Amazon Chime Accounts in the Amazon Chime Administration Guide.
        public let accountType: AccountType?
        /// The AWS account ID.
        public let awsAccountId: String
        /// The Amazon Chime account creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The default license for the Amazon Chime account.
        public let defaultLicense: License?
        /// The Amazon Chime account name.
        public let name: String
        /// The sign-in delegate groups associated with the account.
        public let signinDelegateGroups: [SigninDelegateGroup]?
        /// Supported licenses for the Amazon Chime account.
        public let supportedLicenses: [License]?

        public init(accountId: String, accountStatus: AccountStatus? = nil, accountType: AccountType? = nil, awsAccountId: String, createdTimestamp: Date? = nil, defaultLicense: License? = nil, name: String, signinDelegateGroups: [SigninDelegateGroup]? = nil, supportedLicenses: [License]? = nil) {
            self.accountId = accountId
            self.accountStatus = accountStatus
            self.accountType = accountType
            self.awsAccountId = awsAccountId
            self.createdTimestamp = createdTimestamp
            self.defaultLicense = defaultLicense
            self.name = name
            self.signinDelegateGroups = signinDelegateGroups
            self.supportedLicenses = supportedLicenses
        }

        private enum CodingKeys: String, CodingKey {
            case accountId = "AccountId"
            case accountStatus = "AccountStatus"
            case accountType = "AccountType"
            case awsAccountId = "AwsAccountId"
            case createdTimestamp = "CreatedTimestamp"
            case defaultLicense = "DefaultLicense"
            case name = "Name"
            case signinDelegateGroups = "SigninDelegateGroups"
            case supportedLicenses = "SupportedLicenses"
        }
    }

    public struct AccountSettings: AWSEncodableShape & AWSDecodableShape {
        /// Setting that stops or starts remote control of shared screens during meetings.
        public let disableRemoteControl: Bool?
        /// Setting that allows meeting participants to choose the Call me at a phone number option. For more information, see  Join a Meeting without the Amazon Chime App.
        public let enableDialOut: Bool?

        public init(disableRemoteControl: Bool? = nil, enableDialOut: Bool? = nil) {
            self.disableRemoteControl = disableRemoteControl
            self.enableDialOut = enableDialOut
        }

        private enum CodingKeys: String, CodingKey {
            case disableRemoteControl = "DisableRemoteControl"
            case enableDialOut = "EnableDialOut"
        }
    }

    public struct AlexaForBusinessMetadata: AWSEncodableShape & AWSDecodableShape {
        /// The ARN of the room resource.
        public let alexaForBusinessRoomArn: String?
        /// Starts or stops Alexa for Business.
        public let isAlexaForBusinessEnabled: Bool?

        public init(alexaForBusinessRoomArn: String? = nil, isAlexaForBusinessEnabled: Bool? = nil) {
            self.alexaForBusinessRoomArn = alexaForBusinessRoomArn
            self.isAlexaForBusinessEnabled = isAlexaForBusinessEnabled
        }

        private enum CodingKeys: String, CodingKey {
            case alexaForBusinessRoomArn = "AlexaForBusinessRoomArn"
            case isAlexaForBusinessEnabled = "IsAlexaForBusinessEnabled"
        }
    }

    public struct AppInstance: AWSDecodableShape {
        /// The ARN of the messaging instance.
        public let appInstanceArn: String?
        /// The time at which an AppInstance was created. In epoch milliseconds.
        public let createdTimestamp: Date?
        /// The time an AppInstance was last updated. In epoch milliseconds.
        public let lastUpdatedTimestamp: Date?
        /// The metadata of an AppInstance.
        public let metadata: String?
        /// The name of an AppInstance.
        public let name: String?

        public init(appInstanceArn: String? = nil, createdTimestamp: Date? = nil, lastUpdatedTimestamp: Date? = nil, metadata: String? = nil, name: String? = nil) {
            self.appInstanceArn = appInstanceArn
            self.createdTimestamp = createdTimestamp
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.metadata = metadata
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
            case createdTimestamp = "CreatedTimestamp"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct AppInstanceAdmin: AWSDecodableShape {
        /// The AppInstanceAdmin data.
        public let admin: Identity?
        /// The ARN of the AppInstance for which the user is an administrator.
        public let appInstanceArn: String?
        /// The time at which an administrator was created.
        public let createdTimestamp: Date?

        public init(admin: Identity? = nil, appInstanceArn: String? = nil, createdTimestamp: Date? = nil) {
            self.admin = admin
            self.appInstanceArn = appInstanceArn
            self.createdTimestamp = createdTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case admin = "Admin"
            case appInstanceArn = "AppInstanceArn"
            case createdTimestamp = "CreatedTimestamp"
        }
    }

    public struct AppInstanceAdminSummary: AWSDecodableShape {
        /// The details of the AppInstanceAdmin.
        public let admin: Identity?

        public init(admin: Identity? = nil) {
            self.admin = admin
        }

        private enum CodingKeys: String, CodingKey {
            case admin = "Admin"
        }
    }

    public struct AppInstanceRetentionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The length of time in days to retain the messages in a channel.
        public let channelRetentionSettings: ChannelRetentionSettings?

        public init(channelRetentionSettings: ChannelRetentionSettings? = nil) {
            self.channelRetentionSettings = channelRetentionSettings
        }

        public func validate(name: String) throws {
            try self.channelRetentionSettings?.validate(name: "\(name).channelRetentionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case channelRetentionSettings = "ChannelRetentionSettings"
        }
    }

    public struct AppInstanceStreamingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The type of data to be streamed.
        public let appInstanceDataType: AppInstanceDataType
        /// The resource ARN.
        public let resourceArn: String

        public init(appInstanceDataType: AppInstanceDataType, resourceArn: String) {
            self.appInstanceDataType = appInstanceDataType
            self.resourceArn = resourceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 1024)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 1)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceDataType = "AppInstanceDataType"
            case resourceArn = "ResourceArn"
        }
    }

    public struct AppInstanceSummary: AWSDecodableShape {
        /// The AppInstance ARN.
        public let appInstanceArn: String?
        /// The metadata of the AppInstance.
        public let metadata: String?
        /// The name of the AppInstance.
        public let name: String?

        public init(appInstanceArn: String? = nil, metadata: String? = nil, name: String? = nil) {
            self.appInstanceArn = appInstanceArn
            self.metadata = metadata
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct AppInstanceUser: AWSDecodableShape {
        /// The ARN of the AppInstanceUser.
        public let appInstanceUserArn: String?
        /// The time at which the AppInstanceUser was created.
        public let createdTimestamp: Date?
        /// The time at which the AppInstanceUser was last updated.
        public let lastUpdatedTimestamp: Date?
        /// The metadata of the AppInstanceUser.
        public let metadata: String?
        /// The name of the AppInstanceUser.
        public let name: String?

        public init(appInstanceUserArn: String? = nil, createdTimestamp: Date? = nil, lastUpdatedTimestamp: Date? = nil, metadata: String? = nil, name: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.createdTimestamp = createdTimestamp
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.metadata = metadata
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUserArn = "AppInstanceUserArn"
            case createdTimestamp = "CreatedTimestamp"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct AppInstanceUserMembershipSummary: AWSDecodableShape {
        /// The time at which a message was last read.
        public let readMarkerTimestamp: Date?
        /// The type of ChannelMembership.
        public let type: ChannelMembershipType?

        public init(readMarkerTimestamp: Date? = nil, type: ChannelMembershipType? = nil) {
            self.readMarkerTimestamp = readMarkerTimestamp
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case readMarkerTimestamp = "ReadMarkerTimestamp"
            case type = "Type"
        }
    }

    public struct AppInstanceUserSummary: AWSDecodableShape {
        /// The ARN of the AppInstanceUser.
        public let appInstanceUserArn: String?
        /// The metadata of the AppInstanceUser.
        public let metadata: String?
        /// The name of an AppInstanceUser.
        public let name: String?

        public init(appInstanceUserArn: String? = nil, metadata: String? = nil, name: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.metadata = metadata
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUserArn = "AppInstanceUserArn"
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct ArtifactsConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The configuration for the audio artifacts.
        public let audio: AudioArtifactsConfiguration
        /// The configuration for the content artifacts.
        public let content: ContentArtifactsConfiguration
        /// The configuration for the video artifacts.
        public let video: VideoArtifactsConfiguration

        public init(audio: AudioArtifactsConfiguration, content: ContentArtifactsConfiguration, video: VideoArtifactsConfiguration) {
            self.audio = audio
            self.content = content
            self.video = video
        }

        private enum CodingKeys: String, CodingKey {
            case audio = "Audio"
            case content = "Content"
            case video = "Video"
        }
    }

    public struct AssociatePhoneNumberWithUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "userId", location: .uri("UserId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The phone number, in E.164 format.
        public let e164PhoneNumber: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, e164PhoneNumber: String, userId: String) {
            self.accountId = accountId
            self.e164PhoneNumber = e164PhoneNumber
            self.userId = userId
        }

        public func validate(name: String) throws {
            try self.validate(self.e164PhoneNumber, name: "e164PhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumber = "E164PhoneNumber"
        }
    }

    public struct AssociatePhoneNumberWithUserResponse: AWSDecodableShape {
        public init() {}
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri("VoiceConnectorGroupId"))
        ]

        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]
        /// If true, associates the provided phone numbers with the provided Amazon Chime Voice Connector Group and removes any previously existing associations. If false, does not associate any phone numbers that have previously existing associations.
        public let forceAssociate: Bool?
        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String

        public init(e164PhoneNumbers: [String], forceAssociate: Bool? = nil, voiceConnectorGroupId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.forceAssociate = forceAssociate
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
            case forceAssociate = "ForceAssociate"
        }
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorGroupResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]
        /// If true, associates the provided phone numbers with the provided Amazon Chime Voice Connector and removes any previously existing associations. If false, does not associate any phone numbers that have previously existing associations.
        public let forceAssociate: Bool?
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(e164PhoneNumbers: [String], forceAssociate: Bool? = nil, voiceConnectorId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.forceAssociate = forceAssociate
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
            case forceAssociate = "ForceAssociate"
        }
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and  error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct AssociateSigninDelegateGroupsWithAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The sign-in delegate groups.
        public let signinDelegateGroups: [SigninDelegateGroup]

        public init(accountId: String, signinDelegateGroups: [SigninDelegateGroup]) {
            self.accountId = accountId
            self.signinDelegateGroups = signinDelegateGroups
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.signinDelegateGroups.forEach {
                try $0.validate(name: "\(name).signinDelegateGroups[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case signinDelegateGroups = "SigninDelegateGroups"
        }
    }

    public struct AssociateSigninDelegateGroupsWithAccountResponse: AWSDecodableShape {
        public init() {}
    }

    public struct Attendee: AWSDecodableShape {
        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String?
        /// The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.
        public let externalUserId: String?
        /// The join token used by the Amazon Chime SDK attendee.
        public let joinToken: String?

        public init(attendeeId: String? = nil, externalUserId: String? = nil, joinToken: String? = nil) {
            self.attendeeId = attendeeId
            self.externalUserId = externalUserId
            self.joinToken = joinToken
        }

        private enum CodingKeys: String, CodingKey {
            case attendeeId = "AttendeeId"
            case externalUserId = "ExternalUserId"
            case joinToken = "JoinToken"
        }
    }

    public struct AudioArtifactsConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The MUX type of the audio artifact configuration object.
        public let muxType: AudioMuxType

        public init(muxType: AudioMuxType) {
            self.muxType = muxType
        }

        private enum CodingKeys: String, CodingKey {
            case muxType = "MuxType"
        }
    }

    public struct BatchChannelMemberships: AWSDecodableShape {
        /// The ARN of the channel to which you're adding users.
        public let channelArn: String?
        /// The identifier of the member who invited another member.
        public let invitedBy: Identity?
        /// The users successfully added to the request.
        public let members: [Identity]?
        /// The membership types set for the channel users.
        public let type: ChannelMembershipType?

        public init(channelArn: String? = nil, invitedBy: Identity? = nil, members: [Identity]? = nil, type: ChannelMembershipType? = nil) {
            self.channelArn = channelArn
            self.invitedBy = invitedBy
            self.members = members
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case invitedBy = "InvitedBy"
            case members = "Members"
            case type = "Type"
        }
    }

    public struct BatchCreateAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The request containing the attendees to create.
        public let attendees: [CreateAttendeeRequestItem]
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(attendees: [CreateAttendeeRequestItem], meetingId: String) {
            self.attendees = attendees
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.attendees.forEach {
                try $0.validate(name: "\(name).attendees[]")
            }
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case attendees = "Attendees"
        }
    }

    public struct BatchCreateAttendeeResponse: AWSDecodableShape {
        /// The attendee information, including attendees IDs and join tokens.
        public let attendees: [Attendee]?
        /// If the action fails for one or more of the attendees in the request, a list of the attendees is returned, along with error codes and error messages.
        public let errors: [CreateAttendeeError]?

        public init(attendees: [Attendee]? = nil, errors: [CreateAttendeeError]? = nil) {
            self.attendees = attendees
            self.errors = errors
        }

        private enum CodingKeys: String, CodingKey {
            case attendees = "Attendees"
            case errors = "Errors"
        }
    }

    public struct BatchCreateChannelMembershipError: AWSDecodableShape {
        /// The error code.
        public let errorCode: ErrorCode?
        /// The error message.
        public let errorMessage: String?
        /// The ARN of the member that the service couldn't add.
        public let memberArn: String?

        public init(errorCode: ErrorCode? = nil, errorMessage: String? = nil, memberArn: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.memberArn = memberArn
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case memberArn = "MemberArn"
        }
    }

    public struct BatchCreateChannelMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the channel to which you're adding users.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARNs of the members you want to add to the channel.
        public let memberArns: [String]
        /// The membership type of a user, DEFAULT or HIDDEN. Default members are always returned as part of ListChannelMemberships. Hidden members are only returned if the type filter in ListChannelMemberships equals HIDDEN. Otherwise hidden members are not returned. This is only supported by moderators.
        public let type: ChannelMembershipType?

        public init(channelArn: String, chimeBearer: String? = nil, memberArns: [String], type: ChannelMembershipType? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArns = memberArns
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.memberArns.forEach {
                try validate($0, name: "memberArns[]", parent: name, max: 1600)
                try validate($0, name: "memberArns[]", parent: name, min: 5)
                try validate($0, name: "memberArns[]", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            }
            try self.validate(self.memberArns, name: "memberArns", parent: name, max: 100)
            try self.validate(self.memberArns, name: "memberArns", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case memberArns = "MemberArns"
            case type = "Type"
        }
    }

    public struct BatchCreateChannelMembershipResponse: AWSDecodableShape {
        /// The list of channel memberships in the response.
        public let batchChannelMemberships: BatchChannelMemberships?
        /// If the action fails for one or more of the memberships in the request, a list of the memberships is returned, along with error codes and error messages.
        public let errors: [BatchCreateChannelMembershipError]?

        public init(batchChannelMemberships: BatchChannelMemberships? = nil, errors: [BatchCreateChannelMembershipError]? = nil) {
            self.batchChannelMemberships = batchChannelMemberships
            self.errors = errors
        }

        private enum CodingKeys: String, CodingKey {
            case batchChannelMemberships = "BatchChannelMemberships"
            case errors = "Errors"
        }
    }

    public struct BatchCreateRoomMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "roomId", location: .uri("RoomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The list of membership items.
        public let membershipItemList: [MembershipItem]
        /// The room ID.
        public let roomId: String

        public init(accountId: String, membershipItemList: [MembershipItem], roomId: String) {
            self.accountId = accountId
            self.membershipItemList = membershipItemList
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.membershipItemList.forEach {
                try $0.validate(name: "\(name).membershipItemList[]")
            }
            try self.validate(self.membershipItemList, name: "membershipItemList", parent: name, max: 50)
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case membershipItemList = "MembershipItemList"
        }
    }

    public struct BatchCreateRoomMembershipResponse: AWSDecodableShape {
        /// If the action fails for one or more of the member IDs in the request, a list of the member IDs is returned, along with error codes and error messages.
        public let errors: [MemberError]?

        public init(errors: [MemberError]? = nil) {
            self.errors = errors
        }

        private enum CodingKeys: String, CodingKey {
            case errors = "Errors"
        }
    }

    public struct BatchDeletePhoneNumberRequest: AWSEncodableShape {
        /// List of phone number IDs.
        public let phoneNumberIds: [String]

        public init(phoneNumberIds: [String]) {
            self.phoneNumberIds = phoneNumberIds
        }

        public func validate(name: String) throws {
            try self.validate(self.phoneNumberIds, name: "phoneNumberIds", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberIds = "PhoneNumberIds"
        }
    }

    public struct BatchDeletePhoneNumberResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct BatchSuspendUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The request containing the user IDs to suspend.
        public let userIdList: [String]

        public init(accountId: String, userIdList: [String]) {
            self.accountId = accountId
            self.userIdList = userIdList
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.userIdList.forEach {
                try validate($0, name: "userIdList[]", parent: name, pattern: "\\S")
            }
            try self.validate(self.userIdList, name: "userIdList", parent: name, max: 50)
        }

        private enum CodingKeys: String, CodingKey {
            case userIdList = "UserIdList"
        }
    }

    public struct BatchSuspendUserResponse: AWSDecodableShape {
        /// If the BatchSuspendUser action fails for one or more of the user IDs in the request, a list of the user IDs is returned, along with error codes and error messages.
        public let userErrors: [UserError]?

        public init(userErrors: [UserError]? = nil) {
            self.userErrors = userErrors
        }

        private enum CodingKeys: String, CodingKey {
            case userErrors = "UserErrors"
        }
    }

    public struct BatchUnsuspendUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The request containing the user IDs to unsuspend.
        public let userIdList: [String]

        public init(accountId: String, userIdList: [String]) {
            self.accountId = accountId
            self.userIdList = userIdList
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.userIdList.forEach {
                try validate($0, name: "userIdList[]", parent: name, pattern: "\\S")
            }
            try self.validate(self.userIdList, name: "userIdList", parent: name, max: 50)
        }

        private enum CodingKeys: String, CodingKey {
            case userIdList = "UserIdList"
        }
    }

    public struct BatchUnsuspendUserResponse: AWSDecodableShape {
        /// If the BatchUnsuspendUser action fails for one or more of the user IDs in the request, a list of the user IDs is returned, along with error codes and error messages.
        public let userErrors: [UserError]?

        public init(userErrors: [UserError]? = nil) {
            self.userErrors = userErrors
        }

        private enum CodingKeys: String, CodingKey {
            case userErrors = "UserErrors"
        }
    }

    public struct BatchUpdatePhoneNumberRequest: AWSEncodableShape {
        /// The request containing the phone number IDs and product types or calling names to update.
        public let updatePhoneNumberRequestItems: [UpdatePhoneNumberRequestItem]

        public init(updatePhoneNumberRequestItems: [UpdatePhoneNumberRequestItem]) {
            self.updatePhoneNumberRequestItems = updatePhoneNumberRequestItems
        }

        public func validate(name: String) throws {
            try self.updatePhoneNumberRequestItems.forEach {
                try $0.validate(name: "\(name).updatePhoneNumberRequestItems[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case updatePhoneNumberRequestItems = "UpdatePhoneNumberRequestItems"
        }
    }

    public struct BatchUpdatePhoneNumberResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct BatchUpdateUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The request containing the user IDs and details to update.
        public let updateUserRequestItems: [UpdateUserRequestItem]

        public init(accountId: String, updateUserRequestItems: [UpdateUserRequestItem]) {
            self.accountId = accountId
            self.updateUserRequestItems = updateUserRequestItems
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.updateUserRequestItems.forEach {
                try $0.validate(name: "\(name).updateUserRequestItems[]")
            }
            try self.validate(self.updateUserRequestItems, name: "updateUserRequestItems", parent: name, max: 20)
        }

        private enum CodingKeys: String, CodingKey {
            case updateUserRequestItems = "UpdateUserRequestItems"
        }
    }

    public struct BatchUpdateUserResponse: AWSDecodableShape {
        /// If the BatchUpdateUser action fails for one or more of the user IDs in the request, a list of the user IDs is returned, along with error codes and error messages.
        public let userErrors: [UserError]?

        public init(userErrors: [UserError]? = nil) {
            self.userErrors = userErrors
        }

        private enum CodingKeys: String, CodingKey {
            case userErrors = "UserErrors"
        }
    }

    public struct Bot: AWSDecodableShape {
        /// The bot email address.
        public let botEmail: String?
        /// The bot ID.
        public let botId: String?
        /// The bot type.
        public let botType: BotType?
        /// The bot creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// When true, the bot is stopped from running in your account.
        public let disabled: Bool?
        /// The bot display name.
        public let displayName: String?
        /// The security token used to authenticate Amazon Chime with the outgoing event endpoint.
        public let securityToken: String?
        /// The updated bot timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?
        /// The unique ID for the bot user.
        public let userId: String?

        public init(botEmail: String? = nil, botId: String? = nil, botType: BotType? = nil, createdTimestamp: Date? = nil, disabled: Bool? = nil, displayName: String? = nil, securityToken: String? = nil, updatedTimestamp: Date? = nil, userId: String? = nil) {
            self.botEmail = botEmail
            self.botId = botId
            self.botType = botType
            self.createdTimestamp = createdTimestamp
            self.disabled = disabled
            self.displayName = displayName
            self.securityToken = securityToken
            self.updatedTimestamp = updatedTimestamp
            self.userId = userId
        }

        private enum CodingKeys: String, CodingKey {
            case botEmail = "BotEmail"
            case botId = "BotId"
            case botType = "BotType"
            case createdTimestamp = "CreatedTimestamp"
            case disabled = "Disabled"
            case displayName = "DisplayName"
            case securityToken = "SecurityToken"
            case updatedTimestamp = "UpdatedTimestamp"
            case userId = "UserId"
        }
    }

    public struct BusinessCallingSettings: AWSEncodableShape & AWSDecodableShape {
        /// The Amazon S3 bucket designated for call detail record storage.
        public let cdrBucket: String?

        public init(cdrBucket: String? = nil) {
            self.cdrBucket = cdrBucket
        }

        private enum CodingKeys: String, CodingKey {
            case cdrBucket = "CdrBucket"
        }
    }

    public struct Channel: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The AppInstanceUser who created the channel.
        public let createdBy: Identity?
        /// The time at which the AppInstanceUser created the channel.
        public let createdTimestamp: Date?
        /// The time at which a member sent the last message in the channel.
        public let lastMessageTimestamp: Date?
        /// The time at which a channel was last updated.
        public let lastUpdatedTimestamp: Date?
        /// The channel's metadata.
        public let metadata: String?
        /// The mode of the channel.
        public let mode: ChannelMode?
        /// The name of the channel.
        public let name: String?
        /// The channel's privacy setting.
        public let privacy: ChannelPrivacy?

        public init(channelArn: String? = nil, createdBy: Identity? = nil, createdTimestamp: Date? = nil, lastMessageTimestamp: Date? = nil, lastUpdatedTimestamp: Date? = nil, metadata: String? = nil, mode: ChannelMode? = nil, name: String? = nil, privacy: ChannelPrivacy? = nil) {
            self.channelArn = channelArn
            self.createdBy = createdBy
            self.createdTimestamp = createdTimestamp
            self.lastMessageTimestamp = lastMessageTimestamp
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.metadata = metadata
            self.mode = mode
            self.name = name
            self.privacy = privacy
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case createdBy = "CreatedBy"
            case createdTimestamp = "CreatedTimestamp"
            case lastMessageTimestamp = "LastMessageTimestamp"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case metadata = "Metadata"
            case mode = "Mode"
            case name = "Name"
            case privacy = "Privacy"
        }
    }

    public struct ChannelBan: AWSDecodableShape {
        /// The ARN of the channel from which a member is being banned.
        public let channelArn: String?
        /// The AppInstanceUser who created the ban.
        public let createdBy: Identity?
        /// The time at which the ban was created.
        public let createdTimestamp: Date?
        /// The member being banned from the channel.
        public let member: Identity?

        public init(channelArn: String? = nil, createdBy: Identity? = nil, createdTimestamp: Date? = nil, member: Identity? = nil) {
            self.channelArn = channelArn
            self.createdBy = createdBy
            self.createdTimestamp = createdTimestamp
            self.member = member
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case createdBy = "CreatedBy"
            case createdTimestamp = "CreatedTimestamp"
            case member = "Member"
        }
    }

    public struct ChannelBanSummary: AWSDecodableShape {
        /// The member being banned from a channel.
        public let member: Identity?

        public init(member: Identity? = nil) {
            self.member = member
        }

        private enum CodingKeys: String, CodingKey {
            case member = "Member"
        }
    }

    public struct ChannelMembership: AWSDecodableShape {
        /// The ARN of the member's channel.
        public let channelArn: String?
        /// The time at which the channel membership was created.
        public let createdTimestamp: Date?
        /// The identifier of the member who invited another member.
        public let invitedBy: Identity?
        /// The time at which a channel membership was last updated.
        public let lastUpdatedTimestamp: Date?
        /// The data of the channel member.
        public let member: Identity?
        /// The membership type set for the channel member.
        public let type: ChannelMembershipType?

        public init(channelArn: String? = nil, createdTimestamp: Date? = nil, invitedBy: Identity? = nil, lastUpdatedTimestamp: Date? = nil, member: Identity? = nil, type: ChannelMembershipType? = nil) {
            self.channelArn = channelArn
            self.createdTimestamp = createdTimestamp
            self.invitedBy = invitedBy
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.member = member
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case createdTimestamp = "CreatedTimestamp"
            case invitedBy = "InvitedBy"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case member = "Member"
            case type = "Type"
        }
    }

    public struct ChannelMembershipForAppInstanceUserSummary: AWSDecodableShape {
        public let appInstanceUserMembershipSummary: AppInstanceUserMembershipSummary?
        public let channelSummary: ChannelSummary?

        public init(appInstanceUserMembershipSummary: AppInstanceUserMembershipSummary? = nil, channelSummary: ChannelSummary? = nil) {
            self.appInstanceUserMembershipSummary = appInstanceUserMembershipSummary
            self.channelSummary = channelSummary
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUserMembershipSummary = "AppInstanceUserMembershipSummary"
            case channelSummary = "ChannelSummary"
        }
    }

    public struct ChannelMembershipSummary: AWSDecodableShape {
        /// A member's summary data.
        public let member: Identity?

        public init(member: Identity? = nil) {
            self.member = member
        }

        private enum CodingKeys: String, CodingKey {
            case member = "Member"
        }
    }

    public struct ChannelMessage: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The message content.
        public let content: String?
        /// The time at which the message was created.
        public let createdTimestamp: Date?
        /// The time at which a message was edited.
        public let lastEditedTimestamp: Date?
        /// The time at which a message was updated.
        public let lastUpdatedTimestamp: Date?
        /// The ID of a message.
        public let messageId: String?
        /// The message metadata.
        public let metadata: String?
        /// The persistence setting for a channel message.
        public let persistence: ChannelMessagePersistenceType?
        /// Hides the content of a message.
        public let redacted: Bool?
        /// The message sender.
        public let sender: Identity?
        /// The message type.
        public let type: ChannelMessageType?

        public init(channelArn: String? = nil, content: String? = nil, createdTimestamp: Date? = nil, lastEditedTimestamp: Date? = nil, lastUpdatedTimestamp: Date? = nil, messageId: String? = nil, metadata: String? = nil, persistence: ChannelMessagePersistenceType? = nil, redacted: Bool? = nil, sender: Identity? = nil, type: ChannelMessageType? = nil) {
            self.channelArn = channelArn
            self.content = content
            self.createdTimestamp = createdTimestamp
            self.lastEditedTimestamp = lastEditedTimestamp
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.messageId = messageId
            self.metadata = metadata
            self.persistence = persistence
            self.redacted = redacted
            self.sender = sender
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case content = "Content"
            case createdTimestamp = "CreatedTimestamp"
            case lastEditedTimestamp = "LastEditedTimestamp"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case messageId = "MessageId"
            case metadata = "Metadata"
            case persistence = "Persistence"
            case redacted = "Redacted"
            case sender = "Sender"
            case type = "Type"
        }
    }

    public struct ChannelMessageSummary: AWSDecodableShape {
        /// The content of the message.
        public let content: String?
        /// The time at which the message summary was created.
        public let createdTimestamp: Date?
        /// The time at which a message was last edited.
        public let lastEditedTimestamp: Date?
        /// The time at which a message was last updated.
        public let lastUpdatedTimestamp: Date?
        /// The ID of the message.
        public let messageId: String?
        /// The metadata of the message.
        public let metadata: String?
        /// Indicates whether a message was redacted.
        public let redacted: Bool?
        /// The message sender.
        public let sender: Identity?
        /// The type of message.
        public let type: ChannelMessageType?

        public init(content: String? = nil, createdTimestamp: Date? = nil, lastEditedTimestamp: Date? = nil, lastUpdatedTimestamp: Date? = nil, messageId: String? = nil, metadata: String? = nil, redacted: Bool? = nil, sender: Identity? = nil, type: ChannelMessageType? = nil) {
            self.content = content
            self.createdTimestamp = createdTimestamp
            self.lastEditedTimestamp = lastEditedTimestamp
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.messageId = messageId
            self.metadata = metadata
            self.redacted = redacted
            self.sender = sender
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case content = "Content"
            case createdTimestamp = "CreatedTimestamp"
            case lastEditedTimestamp = "LastEditedTimestamp"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case messageId = "MessageId"
            case metadata = "Metadata"
            case redacted = "Redacted"
            case sender = "Sender"
            case type = "Type"
        }
    }

    public struct ChannelModeratedByAppInstanceUserSummary: AWSDecodableShape {
        /// Summary of the details of a Channel.
        public let channelSummary: ChannelSummary?

        public init(channelSummary: ChannelSummary? = nil) {
            self.channelSummary = channelSummary
        }

        private enum CodingKeys: String, CodingKey {
            case channelSummary = "ChannelSummary"
        }
    }

    public struct ChannelModerator: AWSDecodableShape {
        /// The ARN of the moderator's channel.
        public let channelArn: String?
        /// The AppInstanceUser who created the moderator.
        public let createdBy: Identity?
        /// The time at which the moderator was created.
        public let createdTimestamp: Date?
        /// The moderator's data.
        public let moderator: Identity?

        public init(channelArn: String? = nil, createdBy: Identity? = nil, createdTimestamp: Date? = nil, moderator: Identity? = nil) {
            self.channelArn = channelArn
            self.createdBy = createdBy
            self.createdTimestamp = createdTimestamp
            self.moderator = moderator
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case createdBy = "CreatedBy"
            case createdTimestamp = "CreatedTimestamp"
            case moderator = "Moderator"
        }
    }

    public struct ChannelModeratorSummary: AWSDecodableShape {
        /// The data for a moderator.
        public let moderator: Identity?

        public init(moderator: Identity? = nil) {
            self.moderator = moderator
        }

        private enum CodingKeys: String, CodingKey {
            case moderator = "Moderator"
        }
    }

    public struct ChannelRetentionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The time in days to retain the messages in a channel.
        public let retentionDays: Int?

        public init(retentionDays: Int? = nil) {
            self.retentionDays = retentionDays
        }

        public func validate(name: String) throws {
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, max: 5475)
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case retentionDays = "RetentionDays"
        }
    }

    public struct ChannelSummary: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The time at which the last message in a channel was sent.
        public let lastMessageTimestamp: Date?
        /// The metadata of the channel.
        public let metadata: String?
        /// The mode of the channel.
        public let mode: ChannelMode?
        /// The name of the channel.
        public let name: String?
        /// The privacy setting of the channel.
        public let privacy: ChannelPrivacy?

        public init(channelArn: String? = nil, lastMessageTimestamp: Date? = nil, metadata: String? = nil, mode: ChannelMode? = nil, name: String? = nil, privacy: ChannelPrivacy? = nil) {
            self.channelArn = channelArn
            self.lastMessageTimestamp = lastMessageTimestamp
            self.metadata = metadata
            self.mode = mode
            self.name = name
            self.privacy = privacy
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case lastMessageTimestamp = "LastMessageTimestamp"
            case metadata = "Metadata"
            case mode = "Mode"
            case name = "Name"
            case privacy = "Privacy"
        }
    }

    public struct ChimeSdkMeetingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The configuration for the artifacts in an Amazon Chime SDK meeting.
        public let artifactsConfiguration: ArtifactsConfiguration?
        /// The source configuration for a specified media capture pipline.
        public let sourceConfiguration: SourceConfiguration?

        public init(artifactsConfiguration: ArtifactsConfiguration? = nil, sourceConfiguration: SourceConfiguration? = nil) {
            self.artifactsConfiguration = artifactsConfiguration
            self.sourceConfiguration = sourceConfiguration
        }

        public func validate(name: String) throws {
            try self.sourceConfiguration?.validate(name: "\(name).sourceConfiguration")
        }

        private enum CodingKeys: String, CodingKey {
            case artifactsConfiguration = "ArtifactsConfiguration"
            case sourceConfiguration = "SourceConfiguration"
        }
    }

    public struct ContentArtifactsConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The MUX type of the artifact configuration.
        public let muxType: ContentMuxType?
        /// Indicates whether the content artifact is enabled or disabled.
        public let state: ArtifactsState

        public init(muxType: ContentMuxType? = nil, state: ArtifactsState) {
            self.muxType = muxType
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case muxType = "MuxType"
            case state = "State"
        }
    }

    public struct ConversationRetentionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The number of days for which to retain conversation messages.
        public let retentionDays: Int?

        public init(retentionDays: Int? = nil) {
            self.retentionDays = retentionDays
        }

        public func validate(name: String) throws {
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, max: 5475)
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case retentionDays = "RetentionDays"
        }
    }

    public struct CreateAccountRequest: AWSEncodableShape {
        /// The name of the Amazon Chime account.
        public let name: String

        public init(name: String) {
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 100)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
        }
    }

    public struct CreateAccountResponse: AWSDecodableShape {
        /// The Amazon Chime account details.
        public let account: Account?

        public init(account: Account? = nil) {
            self.account = account
        }

        private enum CodingKeys: String, CodingKey {
            case account = "Account"
        }
    }

    public struct CreateAppInstanceAdminRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn"))
        ]

        /// The ARN of the administrator of the current AppInstance.
        public let appInstanceAdminArn: String
        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceAdminArn: String, appInstanceArn: String) {
            self.appInstanceAdminArn = appInstanceAdminArn
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, max: 1600)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, min: 5)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceAdminArn = "AppInstanceAdminArn"
        }
    }

    public struct CreateAppInstanceAdminResponse: AWSDecodableShape {
        /// The name and ARN of the admin for the AppInstance.
        public let appInstanceAdmin: Identity?
        /// The ARN of the of the admin for the AppInstance.
        public let appInstanceArn: String?

        public init(appInstanceAdmin: Identity? = nil, appInstanceArn: String? = nil) {
            self.appInstanceAdmin = appInstanceAdmin
            self.appInstanceArn = appInstanceArn
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceAdmin = "AppInstanceAdmin"
            case appInstanceArn = "AppInstanceArn"
        }
    }

    public struct CreateAppInstanceRequest: AWSEncodableShape {
        /// The ClientRequestToken of the AppInstance.
        public let clientRequestToken: String
        /// The metadata of the AppInstance. Limited to a 1KB string in UTF-8.
        public let metadata: String?
        /// The name of the AppInstance.
        public let name: String
        /// Tags assigned to the AppInstanceUser.
        public let tags: [Tag]?

        public init(clientRequestToken: String = CreateAppInstanceRequest.idempotencyToken(), metadata: String? = nil, name: String, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.metadata = metadata
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]*$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case metadata = "Metadata"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateAppInstanceResponse: AWSDecodableShape {
        /// The Amazon Resource Number (ARN) of the AppInstance.
        public let appInstanceArn: String?

        public init(appInstanceArn: String? = nil) {
            self.appInstanceArn = appInstanceArn
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
        }
    }

    public struct CreateAppInstanceUserRequest: AWSEncodableShape {
        /// The ARN of the AppInstance request.
        public let appInstanceArn: String
        /// The user ID of the AppInstance.
        public let appInstanceUserId: String
        /// The token assigned to the user requesting an AppInstance.
        public let clientRequestToken: String
        /// The request's metadata. Limited to a 1KB string in UTF-8.
        public let metadata: String?
        /// The user's name.
        public let name: String
        /// Tags assigned to the AppInstanceUser.
        public let tags: [Tag]?

        public init(appInstanceArn: String, appInstanceUserId: String, clientRequestToken: String = CreateAppInstanceUserRequest.idempotencyToken(), metadata: String? = nil, name: String, tags: [Tag]? = nil) {
            self.appInstanceArn = appInstanceArn
            self.appInstanceUserId = appInstanceUserId
            self.clientRequestToken = clientRequestToken
            self.metadata = metadata
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.appInstanceUserId, name: "appInstanceUserId", parent: name, max: 64)
            try self.validate(self.appInstanceUserId, name: "appInstanceUserId", parent: name, min: 1)
            try self.validate(self.appInstanceUserId, name: "appInstanceUserId", parent: name, pattern: "^[A-Za-z0-9]([A-Za-z0-9\\:\\-\\_\\.\\@]{0,62}[A-Za-z0-9])?$")
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 100)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "\\S")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
            case appInstanceUserId = "AppInstanceUserId"
            case clientRequestToken = "ClientRequestToken"
            case metadata = "Metadata"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateAppInstanceUserResponse: AWSDecodableShape {
        /// The user's ARN.
        public let appInstanceUserArn: String?

        public init(appInstanceUserArn: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUserArn = "AppInstanceUserArn"
        }
    }

    public struct CreateAttendeeError: AWSDecodableShape {
        /// The error code.
        public let errorCode: String?
        /// The error message.
        public let errorMessage: String?
        /// The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.
        public let externalUserId: String?

        public init(errorCode: String? = nil, errorMessage: String? = nil, externalUserId: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.externalUserId = externalUserId
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case externalUserId = "ExternalUserId"
        }
    }

    public struct CreateAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.
        public let externalUserId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The tag key-value pairs.
        public let tags: [Tag]?

        public init(externalUserId: String, meetingId: String, tags: [Tag]? = nil) {
            self.externalUserId = externalUserId
            self.meetingId = meetingId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.externalUserId, name: "externalUserId", parent: name, max: 64)
            try self.validate(self.externalUserId, name: "externalUserId", parent: name, min: 2)
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 10)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case externalUserId = "ExternalUserId"
            case tags = "Tags"
        }
    }

    public struct CreateAttendeeRequestItem: AWSEncodableShape {
        /// The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.
        public let externalUserId: String
        /// The tag key-value pairs.
        public let tags: [Tag]?

        public init(externalUserId: String, tags: [Tag]? = nil) {
            self.externalUserId = externalUserId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.externalUserId, name: "externalUserId", parent: name, max: 64)
            try self.validate(self.externalUserId, name: "externalUserId", parent: name, min: 2)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 10)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case externalUserId = "ExternalUserId"
            case tags = "Tags"
        }
    }

    public struct CreateAttendeeResponse: AWSDecodableShape {
        /// The attendee information, including attendee ID and join token.
        public let attendee: Attendee?

        public init(attendee: Attendee? = nil) {
            self.attendee = attendee
        }

        private enum CodingKeys: String, CodingKey {
            case attendee = "Attendee"
        }
    }

    public struct CreateBotRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot display name.
        public let displayName: String
        /// The domain of the Amazon Chime Enterprise account.
        public let domain: String?

        public init(accountId: String, displayName: String, domain: String? = nil) {
            self.accountId = accountId
            self.displayName = displayName
            self.domain = domain
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.domain, name: "domain", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case displayName = "DisplayName"
            case domain = "Domain"
        }
    }

    public struct CreateBotResponse: AWSDecodableShape {
        /// The bot details.
        public let bot: Bot?

        public init(bot: Bot? = nil) {
            self.bot = bot
        }

        private enum CodingKeys: String, CodingKey {
            case bot = "Bot"
        }
    }

    public struct CreateChannelBanRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the ban request.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the member being banned.
        public let memberArn: String

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: String, CodingKey {
            case memberArn = "MemberArn"
        }
    }

    public struct CreateChannelBanResponse: AWSDecodableShape {
        /// The ARN of the response to the ban request.
        public let channelArn: String?
        /// The ChannelArn and BannedIdentity of the member in the ban response.
        public let member: Identity?

        public init(channelArn: String? = nil, member: Identity? = nil) {
            self.channelArn = channelArn
            self.member = member
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case member = "Member"
        }
    }

    public struct CreateChannelMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the channel to which you're adding users.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the member you want to add to the channel.
        public let memberArn: String
        /// The membership type of a user, DEFAULT or HIDDEN. Default members are always returned as part of ListChannelMemberships. Hidden members are only returned if the type filter in ListChannelMemberships equals HIDDEN. Otherwise hidden members are not returned. This is only supported by moderators.
        public let type: ChannelMembershipType

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String, type: ChannelMembershipType) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: String, CodingKey {
            case memberArn = "MemberArn"
            case type = "Type"
        }
    }

    public struct CreateChannelMembershipResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The ARN and metadata of the member being added.
        public let member: Identity?

        public init(channelArn: String? = nil, member: Identity? = nil) {
            self.channelArn = channelArn
            self.member = member
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case member = "Member"
        }
    }

    public struct CreateChannelModeratorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The ARN of the moderator.
        public let channelModeratorArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, channelModeratorArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.channelModeratorArn = channelModeratorArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, max: 1600)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, min: 5)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: String, CodingKey {
            case channelModeratorArn = "ChannelModeratorArn"
        }
    }

    public struct CreateChannelModeratorResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The ARNs of the channel and the moderator.
        public let channelModerator: Identity?

        public init(channelArn: String? = nil, channelModerator: Identity? = nil) {
            self.channelArn = channelArn
            self.channelModerator = channelModerator
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case channelModerator = "ChannelModerator"
        }
    }

    public struct CreateChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the channel request.
        public let appInstanceArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The client token for the request. An Idempotency token.
        public let clientRequestToken: String
        /// The metadata of the creation request. Limited to 1KB and UTF-8.
        public let metadata: String?
        /// The channel mode: UNRESTRICTED or RESTRICTED. Administrators, moderators, and channel members can add themselves and other members to unrestricted channels. Only administrators and moderators can add members to restricted channels.
        public let mode: ChannelMode?
        /// The name of the channel.
        public let name: String
        /// The channel's privacy level: PUBLIC or PRIVATE. Private channels aren't discoverable by users outside the channel. Public channels are discoverable by anyone in the AppInstance.
        public let privacy: ChannelPrivacy?
        /// The tags for the creation request.
        public let tags: [Tag]?

        public init(appInstanceArn: String, chimeBearer: String? = nil, clientRequestToken: String = CreateChannelRequest.idempotencyToken(), metadata: String? = nil, mode: ChannelMode? = nil, name: String, privacy: ChannelPrivacy? = nil, tags: [Tag]? = nil) {
            self.appInstanceArn = appInstanceArn
            self.chimeBearer = chimeBearer
            self.clientRequestToken = clientRequestToken
            self.metadata = metadata
            self.mode = mode
            self.name = name
            self.privacy = privacy
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]*$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
            case clientRequestToken = "ClientRequestToken"
            case metadata = "Metadata"
            case mode = "Mode"
            case name = "Name"
            case privacy = "Privacy"
            case tags = "Tags"
        }
    }

    public struct CreateChannelResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?

        public init(channelArn: String? = nil) {
            self.channelArn = channelArn
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
        }
    }

    public struct CreateMediaCapturePipelineRequest: AWSEncodableShape {
        /// The configuration for a specified media capture pipeline. SourceType must be ChimeSdkMeeting.
        public let chimeSdkMeetingConfiguration: ChimeSdkMeetingConfiguration?
        /// The token assigned to the client making the pipeline request.
        public let clientRequestToken: String?
        /// The ARN of the sink type.
        public let sinkArn: String
        /// Destination type to which the media artifacts are saved. You must use an S3 bucket.
        public let sinkType: MediaPipelineSinkType
        /// ARN of the source from which the media artifacts are captured.
        public let sourceArn: String
        /// Source type from which the media artifacts will be captured. A Chime SDK Meeting  is the only supported source.
        public let sourceType: MediaPipelineSourceType

        public init(chimeSdkMeetingConfiguration: ChimeSdkMeetingConfiguration? = nil, clientRequestToken: String? = CreateMediaCapturePipelineRequest.idempotencyToken(), sinkArn: String, sinkType: MediaPipelineSinkType, sourceArn: String, sourceType: MediaPipelineSourceType) {
            self.chimeSdkMeetingConfiguration = chimeSdkMeetingConfiguration
            self.clientRequestToken = clientRequestToken
            self.sinkArn = sinkArn
            self.sinkType = sinkType
            self.sourceArn = sourceArn
            self.sourceType = sourceType
        }

        public func validate(name: String) throws {
            try self.chimeSdkMeetingConfiguration?.validate(name: "\(name).chimeSdkMeetingConfiguration")
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
            try self.validate(self.sinkArn, name: "sinkArn", parent: name, max: 1024)
            try self.validate(self.sinkArn, name: "sinkArn", parent: name, min: 1)
            try self.validate(self.sinkArn, name: "sinkArn", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
            try self.validate(self.sourceArn, name: "sourceArn", parent: name, max: 1024)
            try self.validate(self.sourceArn, name: "sourceArn", parent: name, min: 1)
            try self.validate(self.sourceArn, name: "sourceArn", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case chimeSdkMeetingConfiguration = "ChimeSdkMeetingConfiguration"
            case clientRequestToken = "ClientRequestToken"
            case sinkArn = "SinkArn"
            case sinkType = "SinkType"
            case sourceArn = "SourceArn"
            case sourceType = "SourceType"
        }
    }

    public struct CreateMediaCapturePipelineResponse: AWSDecodableShape {
        /// A media capture pipeline object, the ID, source type, source ARN, sink type, and  sink ARN of a media capture pipeline object.
        public let mediaCapturePipeline: MediaCapturePipeline?

        public init(mediaCapturePipeline: MediaCapturePipeline? = nil) {
            self.mediaCapturePipeline = mediaCapturePipeline
        }

        private enum CodingKeys: String, CodingKey {
            case mediaCapturePipeline = "MediaCapturePipeline"
        }
    }

    public struct CreateMeetingDialOutRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// Phone number used as the caller ID when the remote party receives a call.
        public let fromPhoneNumber: String
        /// Token used by the Amazon Chime SDK attendee. Call the CreateAttendee action to get a join token.
        public let joinToken: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// Phone number called when inviting someone to a meeting.
        public let toPhoneNumber: String

        public init(fromPhoneNumber: String, joinToken: String, meetingId: String, toPhoneNumber: String) {
            self.fromPhoneNumber = fromPhoneNumber
            self.joinToken = joinToken
            self.meetingId = meetingId
            self.toPhoneNumber = toPhoneNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.fromPhoneNumber, name: "fromPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            try self.validate(self.joinToken, name: "joinToken", parent: name, max: 2048)
            try self.validate(self.joinToken, name: "joinToken", parent: name, min: 2)
            try self.validate(self.joinToken, name: "joinToken", parent: name, pattern: "^[a-zA-Z0-9+/]+$")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.validate(self.toPhoneNumber, name: "toPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case fromPhoneNumber = "FromPhoneNumber"
            case joinToken = "JoinToken"
            case toPhoneNumber = "ToPhoneNumber"
        }
    }

    public struct CreateMeetingDialOutResponse: AWSDecodableShape {
        /// Unique ID that tracks API calls.
        public let transactionId: String?

        public init(transactionId: String? = nil) {
            self.transactionId = transactionId
        }

        private enum CodingKeys: String, CodingKey {
            case transactionId = "TransactionId"
        }
    }

    public struct CreateMeetingRequest: AWSEncodableShape {
        /// The unique identifier for the client request. Use a different token for different meetings.
        public let clientRequestToken: String
        /// The external meeting ID.
        public let externalMeetingId: String?
        /// The Region in which to create the meeting. Default: us-east-1.
        ///
        /// Available values:
        /// af-south-1
        /// ,
        /// ap-northeast-1
        /// ,
        /// ap-northeast-2
        /// ,
        /// ap-south-1
        /// ,
        /// ap-southeast-1
        /// ,
        /// ap-southeast-2
        /// ,
        /// ca-central-1
        /// ,
        /// eu-central-1
        /// ,
        /// eu-north-1
        /// ,
        /// eu-south-1
        /// ,
        /// eu-west-1
        /// ,
        /// eu-west-2
        /// ,
        /// eu-west-3
        /// ,
        /// sa-east-1
        /// ,
        /// us-east-1
        /// ,
        /// us-east-2
        /// ,
        /// us-west-1
        /// ,
        /// us-west-2
        /// .
        public let mediaRegion: String?
        /// Reserved.
        public let meetingHostId: String?
        /// The configuration for resource targets to receive notifications when meeting and attendee events occur.
        public let notificationsConfiguration: MeetingNotificationConfiguration?
        /// The tag key-value pairs.
        public let tags: [Tag]?

        public init(clientRequestToken: String = CreateMeetingRequest.idempotencyToken(), externalMeetingId: String? = nil, mediaRegion: String? = nil, meetingHostId: String? = nil, notificationsConfiguration: MeetingNotificationConfiguration? = nil, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.externalMeetingId = externalMeetingId
            self.mediaRegion = mediaRegion
            self.meetingHostId = meetingHostId
            self.notificationsConfiguration = notificationsConfiguration
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
            try self.validate(self.externalMeetingId, name: "externalMeetingId", parent: name, max: 64)
            try self.validate(self.externalMeetingId, name: "externalMeetingId", parent: name, min: 2)
            try self.validate(self.meetingHostId, name: "meetingHostId", parent: name, max: 64)
            try self.validate(self.meetingHostId, name: "meetingHostId", parent: name, min: 2)
            try self.notificationsConfiguration?.validate(name: "\(name).notificationsConfiguration")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case externalMeetingId = "ExternalMeetingId"
            case mediaRegion = "MediaRegion"
            case meetingHostId = "MeetingHostId"
            case notificationsConfiguration = "NotificationsConfiguration"
            case tags = "Tags"
        }
    }

    public struct CreateMeetingResponse: AWSDecodableShape {
        /// The meeting information, including the meeting ID and
        /// MediaPlacement
        /// .
        public let meeting: Meeting?

        public init(meeting: Meeting? = nil) {
            self.meeting = meeting
        }

        private enum CodingKeys: String, CodingKey {
            case meeting = "Meeting"
        }
    }

    public struct CreateMeetingWithAttendeesRequest: AWSEncodableShape {
        /// The request containing the attendees to create.
        public let attendees: [CreateAttendeeRequestItem]?
        /// The unique identifier for the client request. Use a different token for different meetings.
        public let clientRequestToken: String
        /// The external meeting ID.
        public let externalMeetingId: String?
        /// The Region in which to create the meeting. Default: us-east-1
        /// .
        ///
        /// Available values:
        /// af-south-1
        /// ,
        /// ap-northeast-1
        /// ,
        /// ap-northeast-2
        /// ,
        /// ap-south-1
        /// ,
        /// ap-southeast-1
        /// ,
        /// ap-southeast-2
        /// ,
        /// ca-central-1
        /// ,
        /// eu-central-1
        /// ,
        /// eu-north-1
        /// ,
        /// eu-south-1
        /// ,
        /// eu-west-1
        /// ,
        /// eu-west-2
        /// ,
        /// eu-west-3
        /// ,
        /// sa-east-1
        /// ,
        /// us-east-1
        /// ,
        /// us-east-2
        /// ,
        /// us-west-1
        /// ,
        /// us-west-2
        /// .
        public let mediaRegion: String?
        /// Reserved.
        public let meetingHostId: String?
        public let notificationsConfiguration: MeetingNotificationConfiguration?
        /// The tag key-value pairs.
        public let tags: [Tag]?

        public init(attendees: [CreateAttendeeRequestItem]? = nil, clientRequestToken: String = CreateMeetingWithAttendeesRequest.idempotencyToken(), externalMeetingId: String? = nil, mediaRegion: String? = nil, meetingHostId: String? = nil, notificationsConfiguration: MeetingNotificationConfiguration? = nil, tags: [Tag]? = nil) {
            self.attendees = attendees
            self.clientRequestToken = clientRequestToken
            self.externalMeetingId = externalMeetingId
            self.mediaRegion = mediaRegion
            self.meetingHostId = meetingHostId
            self.notificationsConfiguration = notificationsConfiguration
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.attendees?.forEach {
                try $0.validate(name: "\(name).attendees[]")
            }
            try self.validate(self.attendees, name: "attendees", parent: name, max: 10)
            try self.validate(self.attendees, name: "attendees", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
            try self.validate(self.externalMeetingId, name: "externalMeetingId", parent: name, max: 64)
            try self.validate(self.externalMeetingId, name: "externalMeetingId", parent: name, min: 2)
            try self.validate(self.meetingHostId, name: "meetingHostId", parent: name, max: 64)
            try self.validate(self.meetingHostId, name: "meetingHostId", parent: name, min: 2)
            try self.notificationsConfiguration?.validate(name: "\(name).notificationsConfiguration")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case attendees = "Attendees"
            case clientRequestToken = "ClientRequestToken"
            case externalMeetingId = "ExternalMeetingId"
            case mediaRegion = "MediaRegion"
            case meetingHostId = "MeetingHostId"
            case notificationsConfiguration = "NotificationsConfiguration"
            case tags = "Tags"
        }
    }

    public struct CreateMeetingWithAttendeesResponse: AWSDecodableShape {
        /// The attendee information, including attendees IDs and join tokens.
        public let attendees: [Attendee]?
        /// If the action fails for one or more of the attendees in the request, a list of the attendees is returned, along with error codes and error messages.
        public let errors: [CreateAttendeeError]?
        public let meeting: Meeting?

        public init(attendees: [Attendee]? = nil, errors: [CreateAttendeeError]? = nil, meeting: Meeting? = nil) {
            self.attendees = attendees
            self.errors = errors
            self.meeting = meeting
        }

        private enum CodingKeys: String, CodingKey {
            case attendees = "Attendees"
            case errors = "Errors"
            case meeting = "Meeting"
        }
    }

    public struct CreatePhoneNumberOrderRequest: AWSEncodableShape {
        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]
        /// The phone number product type.
        public let productType: PhoneNumberProductType

        public init(e164PhoneNumbers: [String], productType: PhoneNumberProductType) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.productType = productType
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
            case productType = "ProductType"
        }
    }

    public struct CreatePhoneNumberOrderResponse: AWSDecodableShape {
        /// The phone number order details.
        public let phoneNumberOrder: PhoneNumberOrder?

        public init(phoneNumberOrder: PhoneNumberOrder? = nil) {
            self.phoneNumberOrder = phoneNumberOrder
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberOrder = "PhoneNumberOrder"
        }
    }

    public struct CreateProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The proxy session capabilities.
        public let capabilities: [Capability]
        /// The number of minutes allowed for the proxy session.
        public let expiryMinutes: Int?
        /// The preference for matching the country or area code of the proxy phone number with that of the first participant.
        public let geoMatchLevel: GeoMatchLevel?
        /// The country and area code for the proxy phone number.
        public let geoMatchParams: GeoMatchParams?
        /// The name of the proxy session.
        public let name: String?
        /// The preference for proxy phone number reuse, or stickiness, between the same participants across sessions.
        public let numberSelectionBehavior: NumberSelectionBehavior?
        /// The participant phone numbers.
        public let participantPhoneNumbers: [String]
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(capabilities: [Capability], expiryMinutes: Int? = nil, geoMatchLevel: GeoMatchLevel? = nil, geoMatchParams: GeoMatchParams? = nil, name: String? = nil, numberSelectionBehavior: NumberSelectionBehavior? = nil, participantPhoneNumbers: [String], voiceConnectorId: String) {
            self.capabilities = capabilities
            self.expiryMinutes = expiryMinutes
            self.geoMatchLevel = geoMatchLevel
            self.geoMatchParams = geoMatchParams
            self.name = name
            self.numberSelectionBehavior = numberSelectionBehavior
            self.participantPhoneNumbers = participantPhoneNumbers
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.expiryMinutes, name: "expiryMinutes", parent: name, min: 1)
            try self.geoMatchParams?.validate(name: "\(name).geoMatchParams")
            try self.validate(self.name, name: "name", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{0,30}$")
            try self.participantPhoneNumbers.forEach {
                try validate($0, name: "participantPhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.participantPhoneNumbers, name: "participantPhoneNumbers", parent: name, max: 2)
            try self.validate(self.participantPhoneNumbers, name: "participantPhoneNumbers", parent: name, min: 2)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case capabilities = "Capabilities"
            case expiryMinutes = "ExpiryMinutes"
            case geoMatchLevel = "GeoMatchLevel"
            case geoMatchParams = "GeoMatchParams"
            case name = "Name"
            case numberSelectionBehavior = "NumberSelectionBehavior"
            case participantPhoneNumbers = "ParticipantPhoneNumbers"
        }
    }

    public struct CreateProxySessionResponse: AWSDecodableShape {
        /// The proxy session details.
        public let proxySession: ProxySession?

        public init(proxySession: ProxySession? = nil) {
            self.proxySession = proxySession
        }

        private enum CodingKeys: String, CodingKey {
            case proxySession = "ProxySession"
        }
    }

    public struct CreateRoomMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "roomId", location: .uri("RoomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The Amazon Chime member ID (user ID or bot ID).
        public let memberId: String
        /// The role of the member.
        public let role: RoomMembershipRole?
        /// The room ID.
        public let roomId: String

        public init(accountId: String, memberId: String, role: RoomMembershipRole? = nil, roomId: String) {
            self.accountId = accountId
            self.memberId = memberId
            self.role = role
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.memberId, name: "memberId", parent: name, pattern: "\\S")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case memberId = "MemberId"
            case role = "Role"
        }
    }

    public struct CreateRoomMembershipResponse: AWSDecodableShape {
        /// The room membership details.
        public let roomMembership: RoomMembership?

        public init(roomMembership: RoomMembership? = nil) {
            self.roomMembership = roomMembership
        }

        private enum CodingKeys: String, CodingKey {
            case roomMembership = "RoomMembership"
        }
    }

    public struct CreateRoomRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The idempotency token for the request.
        public let clientRequestToken: String?
        /// The room name.
        public let name: String

        public init(accountId: String, clientRequestToken: String? = CreateRoomRequest.idempotencyToken(), name: String) {
            self.accountId = accountId
            self.clientRequestToken = clientRequestToken
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case name = "Name"
        }
    }

    public struct CreateRoomResponse: AWSDecodableShape {
        /// The room details.
        public let room: Room?

        public init(room: Room? = nil) {
            self.room = room
        }

        private enum CodingKeys: String, CodingKey {
            case room = "Room"
        }
    }

    public struct CreateSipMediaApplicationCallRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        /// The phone number that a user calls from. This is a phone number in your Amazon Chime phone number inventory.
        public let fromPhoneNumber: String
        /// The SIP headers added to an outbound call leg.
        public let sipHeaders: [String: String]?
        /// The ID of the SIP media application.
        public let sipMediaApplicationId: String
        /// The phone number that the service should call.
        public let toPhoneNumber: String

        public init(fromPhoneNumber: String, sipHeaders: [String: String]? = nil, sipMediaApplicationId: String, toPhoneNumber: String) {
            self.fromPhoneNumber = fromPhoneNumber
            self.sipHeaders = sipHeaders
            self.sipMediaApplicationId = sipMediaApplicationId
            self.toPhoneNumber = toPhoneNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.fromPhoneNumber, name: "fromPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            try self.validate(self.sipHeaders, name: "sipHeaders", parent: name, max: 20)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
            try self.validate(self.toPhoneNumber, name: "toPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case fromPhoneNumber = "FromPhoneNumber"
            case sipHeaders = "SipHeaders"
            case toPhoneNumber = "ToPhoneNumber"
        }
    }

    public struct CreateSipMediaApplicationCallResponse: AWSDecodableShape {
        /// The actual call.
        public let sipMediaApplicationCall: SipMediaApplicationCall?

        public init(sipMediaApplicationCall: SipMediaApplicationCall? = nil) {
            self.sipMediaApplicationCall = sipMediaApplicationCall
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationCall = "SipMediaApplicationCall"
        }
    }

    public struct CreateSipMediaApplicationRequest: AWSEncodableShape {
        /// The AWS Region assigned to the SIP media application.
        public let awsRegion: String
        /// List of endpoints (Lambda Amazon Resource Names) specified for the SIP media application. Currently, only one endpoint is supported.
        public let endpoints: [SipMediaApplicationEndpoint]
        /// The SIP media application name.
        public let name: String

        public init(awsRegion: String, endpoints: [SipMediaApplicationEndpoint], name: String) {
            self.awsRegion = awsRegion
            self.endpoints = endpoints
            self.name = name
        }

        public func validate(name: String) throws {
            try self.endpoints.forEach {
                try $0.validate(name: "\(name).endpoints[]")
            }
            try self.validate(self.endpoints, name: "endpoints", parent: name, max: 1)
            try self.validate(self.endpoints, name: "endpoints", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case endpoints = "Endpoints"
            case name = "Name"
        }
    }

    public struct CreateSipMediaApplicationResponse: AWSDecodableShape {
        /// The SIP media application details.
        public let sipMediaApplication: SipMediaApplication?

        public init(sipMediaApplication: SipMediaApplication? = nil) {
            self.sipMediaApplication = sipMediaApplication
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplication = "SipMediaApplication"
        }
    }

    public struct CreateSipRuleRequest: AWSEncodableShape {
        /// Enables or disables a rule. You must disable rules before you can delete them.
        public let disabled: Bool?
        /// The name of the SIP rule.
        public let name: String
        /// List of SIP media applications with priority and AWS Region. Only one SIP application per AWS Region can be used.
        public let targetApplications: [SipRuleTargetApplication]
        /// The type of trigger assigned to the SIP rule in TriggerValue, currently RequestUriHostname or ToPhoneNumber.
        public let triggerType: SipRuleTriggerType
        /// If TriggerType is RequestUriHostname, the value can be the outbound host name of an Amazon Chime Voice Connector. If TriggerType is ToPhoneNumber, the value can be a customer-owned phone number in the E164 format. The SipMediaApplication specified in the SipRule is triggered if the request URI in an incoming SIP  request matches the RequestUriHostname, or if the To header in the incoming SIP request matches the  ToPhoneNumber value.
        public let triggerValue: String

        public init(disabled: Bool? = nil, name: String, targetApplications: [SipRuleTargetApplication], triggerType: SipRuleTriggerType, triggerValue: String) {
            self.disabled = disabled
            self.name = name
            self.targetApplications = targetApplications
            self.triggerType = triggerType
            self.triggerValue = triggerValue
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.targetApplications.forEach {
                try $0.validate(name: "\(name).targetApplications[]")
            }
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, max: 25)
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, min: 1)
            try self.validate(self.triggerValue, name: "triggerValue", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case disabled = "Disabled"
            case name = "Name"
            case targetApplications = "TargetApplications"
            case triggerType = "TriggerType"
            case triggerValue = "TriggerValue"
        }
    }

    public struct CreateSipRuleResponse: AWSDecodableShape {
        /// Returns the SIP rule information, including the rule ID, triggers, and target applications.
        public let sipRule: SipRule?

        public init(sipRule: SipRule? = nil) {
            self.sipRule = sipRule
        }

        private enum CodingKeys: String, CodingKey {
            case sipRule = "SipRule"
        }
    }

    public struct CreateUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user's email address.
        public let email: String?
        /// The user name.
        public let username: String?
        /// The user type.
        public let userType: UserType?

        public init(accountId: String, email: String? = nil, username: String? = nil, userType: UserType? = nil) {
            self.accountId = accountId
            self.email = email
            self.username = username
            self.userType = userType
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.email, name: "email", parent: name, pattern: "^.+@.+\\..+$")
        }

        private enum CodingKeys: String, CodingKey {
            case email = "Email"
            case username = "Username"
            case userType = "UserType"
        }
    }

    public struct CreateUserResponse: AWSDecodableShape {
        public let user: User?

        public init(user: User? = nil) {
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case user = "User"
        }
    }

    public struct CreateVoiceConnectorGroupRequest: AWSEncodableShape {
        /// The name of the Amazon Chime Voice Connector group.
        public let name: String
        /// The Amazon Chime Voice Connectors to route inbound calls to.
        public let voiceConnectorItems: [VoiceConnectorItem]?

        public init(name: String, voiceConnectorItems: [VoiceConnectorItem]? = nil) {
            self.name = name
            self.voiceConnectorItems = voiceConnectorItems
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.voiceConnectorItems?.forEach {
                try $0.validate(name: "\(name).voiceConnectorItems[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case voiceConnectorItems = "VoiceConnectorItems"
        }
    }

    public struct CreateVoiceConnectorGroupResponse: AWSDecodableShape {
        /// The Amazon Chime Voice Connector group details.
        public let voiceConnectorGroup: VoiceConnectorGroup?

        public init(voiceConnectorGroup: VoiceConnectorGroup? = nil) {
            self.voiceConnectorGroup = voiceConnectorGroup
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnectorGroup = "VoiceConnectorGroup"
        }
    }

    public struct CreateVoiceConnectorRequest: AWSEncodableShape {
        /// The AWS Region in which the Amazon Chime Voice Connector is created. Default value:
        /// us-east-1
        /// .
        public let awsRegion: VoiceConnectorAwsRegion?
        /// The name of the Amazon Chime Voice Connector.
        public let name: String
        /// When enabled, requires encryption for the Amazon Chime Voice Connector.
        public let requireEncryption: Bool

        public init(awsRegion: VoiceConnectorAwsRegion? = nil, name: String, requireEncryption: Bool) {
            self.awsRegion = awsRegion
            self.name = name
            self.requireEncryption = requireEncryption
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case name = "Name"
            case requireEncryption = "RequireEncryption"
        }
    }

    public struct CreateVoiceConnectorResponse: AWSDecodableShape {
        /// The Amazon Chime Voice Connector details.
        public let voiceConnector: VoiceConnector?

        public init(voiceConnector: VoiceConnector? = nil) {
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct Credential: AWSEncodableShape {
        /// The RFC2617 compliant password associated with the SIP credentials, in US-ASCII format.
        public let password: String?
        /// The RFC2617 compliant user name associated with the SIP credentials, in US-ASCII format.
        public let username: String?

        public init(password: String? = nil, username: String? = nil) {
            self.password = password
            self.username = username
        }

        private enum CodingKeys: String, CodingKey {
            case password = "Password"
            case username = "Username"
        }
    }

    public struct DNISEmergencyCallingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The country from which emergency calls are allowed, in ISO 3166-1 alpha-2 format.
        public let callingCountry: String
        /// The DNIS phone number to route emergency calls to, in E.164 format.
        public let emergencyPhoneNumber: String
        /// The DNIS phone number to route test emergency calls to, in E.164 format.
        public let testPhoneNumber: String?

        public init(callingCountry: String, emergencyPhoneNumber: String, testPhoneNumber: String? = nil) {
            self.callingCountry = callingCountry
            self.emergencyPhoneNumber = emergencyPhoneNumber
            self.testPhoneNumber = testPhoneNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.callingCountry, name: "callingCountry", parent: name, pattern: "^[A-Z]{2}$")
            try self.validate(self.emergencyPhoneNumber, name: "emergencyPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            try self.validate(self.testPhoneNumber, name: "testPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case callingCountry = "CallingCountry"
            case emergencyPhoneNumber = "EmergencyPhoneNumber"
            case testPhoneNumber = "TestPhoneNumber"
        }
    }

    public struct DeleteAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String

        public init(accountId: String) {
            self.accountId = accountId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAccountResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteAppInstanceAdminRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceAdminArn", location: .uri("AppInstanceAdminArn")),
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn"))
        ]

        /// The ARN of the AppInstance's administrator.
        public let appInstanceAdminArn: String
        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceAdminArn: String, appInstanceArn: String) {
            self.appInstanceAdminArn = appInstanceAdminArn
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, max: 1600)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, min: 5)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAppInstanceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceArn: String) {
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAppInstanceStreamingConfigurationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn"))
        ]

        /// The ARN of the streaming configurations being deleted.
        public let appInstanceArn: String

        public init(appInstanceArn: String) {
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .uri("AppInstanceUserArn"))
        ]

        /// The ARN of the user request being deleted.
        public let appInstanceUserArn: String

        public init(appInstanceUserArn: String) {
            self.appInstanceUserArn = appInstanceUserArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "attendeeId", location: .uri("AttendeeId")),
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(attendeeId: String, meetingId: String) {
            self.attendeeId = attendeeId
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.attendeeId, name: "attendeeId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelBanRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "memberArn", location: .uri("MemberArn"))
        ]

        /// The ARN of the channel from which the AppInstanceUser was banned.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the AppInstanceUser that you want to reinstate.
        public let memberArn: String

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "memberArn", location: .uri("MemberArn"))
        ]

        /// The ARN of the channel from which you want to remove the user.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the member that you're removing from the channel.
        public let memberArn: String

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "messageId", location: .uri("MessageId"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ID of the message being deleted.
        public let messageId: String

        public init(channelArn: String, chimeBearer: String? = nil, messageId: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.messageId = messageId
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.messageId, name: "messageId", parent: name, max: 128)
            try self.validate(self.messageId, name: "messageId", parent: name, min: 1)
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelModeratorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "channelModeratorArn", location: .uri("ChannelModeratorArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The ARN of the moderator being deleted.
        public let channelModeratorArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, channelModeratorArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.channelModeratorArn = channelModeratorArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, max: 1600)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, min: 5)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the channel being deleted.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteEventsConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "botId", location: .uri("BotId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String

        public init(accountId: String, botId: String) {
            self.accountId = accountId
            self.botId = botId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.botId, name: "botId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteMediaCapturePipelineRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "mediaPipelineId", location: .uri("MediaPipelineId"))
        ]

        /// The ID of the media capture pipeline being deleted.
        public let mediaPipelineId: String

        public init(mediaPipelineId: String) {
            self.mediaPipelineId = mediaPipelineId
        }

        public func validate(name: String) throws {
            try self.validate(self.mediaPipelineId, name: "mediaPipelineId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteMeetingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(meetingId: String) {
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeletePhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri("PhoneNumberId"))
        ]

        /// The phone number ID.
        public let phoneNumberId: String

        public init(phoneNumberId: String) {
            self.phoneNumberId = phoneNumberId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "proxySessionId", location: .uri("ProxySessionId")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The proxy session ID.
        public let proxySessionId: String
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(proxySessionId: String, voiceConnectorId: String) {
            self.proxySessionId = proxySessionId
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, max: 128)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, pattern: "\\S")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteRoomMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "memberId", location: .uri("MemberId")),
            AWSMemberEncoding(label: "roomId", location: .uri("RoomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The member ID (user ID or bot ID).
        public let memberId: String
        /// The room ID.
        public let roomId: String

        public init(accountId: String, memberId: String, roomId: String) {
            self.accountId = accountId
            self.memberId = memberId
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.memberId, name: "memberId", parent: name, pattern: "\\S")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteRoomRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "roomId", location: .uri("RoomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The chat room ID.
        public let roomId: String

        public init(accountId: String, roomId: String) {
            self.accountId = accountId
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteSipMediaApplicationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        /// The SIP media application ID.
        public let sipMediaApplicationId: String

        public init(sipMediaApplicationId: String) {
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteSipRuleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipRuleId", location: .uri("SipRuleId"))
        ]

        /// The SIP rule ID.
        public let sipRuleId: String

        public init(sipRuleId: String) {
            self.sipRuleId = sipRuleId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipRuleId, name: "sipRuleId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorEmergencyCallingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri("VoiceConnectorGroupId"))
        ]

        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String

        public init(voiceConnectorGroupId: String) {
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorOriginationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorProxyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorStreamingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorTerminationCredentialsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The RFC2617 compliant username associated with the SIP credentials, in US-ASCII format.
        public let usernames: [String]
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(usernames: [String], voiceConnectorId: String) {
            self.usernames = usernames
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case usernames = "Usernames"
        }
    }

    public struct DeleteVoiceConnectorTerminationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeAppInstanceAdminRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceAdminArn", location: .uri("AppInstanceAdminArn")),
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn"))
        ]

        /// The ARN of the AppInstanceAdmin.
        public let appInstanceAdminArn: String
        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceAdminArn: String, appInstanceArn: String) {
            self.appInstanceAdminArn = appInstanceAdminArn
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, max: 1600)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, min: 5)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeAppInstanceAdminResponse: AWSDecodableShape {
        /// The ARN and name of the AppInstanceUser, the ARN of the AppInstance, and the created and last-updated timestamps. All timestamps use epoch milliseconds.
        public let appInstanceAdmin: AppInstanceAdmin?

        public init(appInstanceAdmin: AppInstanceAdmin? = nil) {
            self.appInstanceAdmin = appInstanceAdmin
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceAdmin = "AppInstanceAdmin"
        }
    }

    public struct DescribeAppInstanceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceArn: String) {
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeAppInstanceResponse: AWSDecodableShape {
        /// The ARN, metadata, created and last-updated timestamps, and the name of the AppInstance. All timestamps use epoch milliseconds.
        public let appInstance: AppInstance?

        public init(appInstance: AppInstance? = nil) {
            self.appInstance = appInstance
        }

        private enum CodingKeys: String, CodingKey {
            case appInstance = "AppInstance"
        }
    }

    public struct DescribeAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .uri("AppInstanceUserArn"))
        ]

        /// The ARN of the AppInstanceUser.
        public let appInstanceUserArn: String

        public init(appInstanceUserArn: String) {
            self.appInstanceUserArn = appInstanceUserArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeAppInstanceUserResponse: AWSDecodableShape {
        /// The name of the AppInstanceUser.
        public let appInstanceUser: AppInstanceUser?

        public init(appInstanceUser: AppInstanceUser? = nil) {
            self.appInstanceUser = appInstanceUser
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUser = "AppInstanceUser"
        }
    }

    public struct DescribeChannelBanRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "memberArn", location: .uri("MemberArn"))
        ]

        /// The ARN of the channel from which the user is banned.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the member being banned.
        public let memberArn: String

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelBanResponse: AWSDecodableShape {
        /// The details of the ban.
        public let channelBan: ChannelBan?

        public init(channelBan: ChannelBan? = nil) {
            self.channelBan = channelBan
        }

        private enum CodingKeys: String, CodingKey {
            case channelBan = "ChannelBan"
        }
    }

    public struct DescribeChannelMembershipForAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .querystring("app-instance-user-arn")),
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the user in a channel.
        public let appInstanceUserArn: String
        /// The ARN of the channel to which the user belongs.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(appInstanceUserArn: String, channelArn: String, chimeBearer: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelMembershipForAppInstanceUserResponse: AWSDecodableShape {
        /// The channel to which a user belongs.
        public let channelMembership: ChannelMembershipForAppInstanceUserSummary?

        public init(channelMembership: ChannelMembershipForAppInstanceUserSummary? = nil) {
            self.channelMembership = channelMembership
        }

        private enum CodingKeys: String, CodingKey {
            case channelMembership = "ChannelMembership"
        }
    }

    public struct DescribeChannelMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "memberArn", location: .uri("MemberArn"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the member.
        public let memberArn: String

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelMembershipResponse: AWSDecodableShape {
        /// The details of the membership.
        public let channelMembership: ChannelMembership?

        public init(channelMembership: ChannelMembership? = nil) {
            self.channelMembership = channelMembership
        }

        private enum CodingKeys: String, CodingKey {
            case channelMembership = "ChannelMembership"
        }
    }

    public struct DescribeChannelModeratedByAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .querystring("app-instance-user-arn")),
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the AppInstanceUser in the moderated channel.
        public let appInstanceUserArn: String
        /// The ARN of the moderated channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(appInstanceUserArn: String, channelArn: String, chimeBearer: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelModeratedByAppInstanceUserResponse: AWSDecodableShape {
        /// The moderated channel.
        public let channel: ChannelModeratedByAppInstanceUserSummary?

        public init(channel: ChannelModeratedByAppInstanceUserSummary? = nil) {
            self.channel = channel
        }

        private enum CodingKeys: String, CodingKey {
            case channel = "Channel"
        }
    }

    public struct DescribeChannelModeratorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "channelModeratorArn", location: .uri("ChannelModeratorArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The ARN of the channel moderator.
        public let channelModeratorArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, channelModeratorArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.channelModeratorArn = channelModeratorArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, max: 1600)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, min: 5)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelModeratorResponse: AWSDecodableShape {
        /// The details of the channel moderator.
        public let channelModerator: ChannelModerator?

        public init(channelModerator: ChannelModerator? = nil) {
            self.channelModerator = channelModerator
        }

        private enum CodingKeys: String, CodingKey {
            case channelModerator = "ChannelModerator"
        }
    }

    public struct DescribeChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelResponse: AWSDecodableShape {
        /// The channel details.
        public let channel: Channel?

        public init(channel: Channel? = nil) {
            self.channel = channel
        }

        private enum CodingKeys: String, CodingKey {
            case channel = "Channel"
        }
    }

    public struct DisassociatePhoneNumberFromUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "userId", location: .uri("UserId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, userId: String) {
            self.accountId = accountId
            self.userId = userId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociatePhoneNumberFromUserResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri("VoiceConnectorGroupId"))
        ]

        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]
        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String

        public init(e164PhoneNumbers: [String], voiceConnectorGroupId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
        }
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorGroupResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(e164PhoneNumbers: [String], voiceConnectorId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
        }
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct DisassociateSigninDelegateGroupsFromAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The sign-in delegate group names.
        public let groupNames: [String]

        public init(accountId: String, groupNames: [String]) {
            self.accountId = accountId
            self.groupNames = groupNames
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.groupNames, name: "groupNames", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case groupNames = "GroupNames"
        }
    }

    public struct DisassociateSigninDelegateGroupsFromAccountResponse: AWSDecodableShape {
        public init() {}
    }

    public struct EmergencyCallingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The Dialed Number Identification Service (DNIS) emergency calling configuration details.
        public let dnis: [DNISEmergencyCallingConfiguration]?

        public init(dnis: [DNISEmergencyCallingConfiguration]? = nil) {
            self.dnis = dnis
        }

        public func validate(name: String) throws {
            try self.dnis?.forEach {
                try $0.validate(name: "\(name).dnis[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case dnis = "DNIS"
        }
    }

    public struct EngineTranscribeMedicalSettings: AWSEncodableShape {
        /// Set this field to PHI to identify personal health information in the transcription output.
        public let contentIdentificationType: TranscribeMedicalContentIdentificationType?
        /// The language code specified for the Amazon Transcribe Medical engine.
        public let languageCode: TranscribeMedicalLanguageCode
        /// The AWS Region passed to Amazon Transcribe Medical. If you don't specify a Region, Amazon Chime uses the meeting's Region.
        public let region: TranscribeMedicalRegion?
        /// The specialty specified for the Amazon Transcribe Medical engine.
        public let specialty: TranscribeMedicalSpecialty
        /// The type of transcription.
        public let type: TranscribeMedicalType
        /// The name of the vocabulary passed to Amazon Transcribe Medical.
        public let vocabularyName: String?

        public init(contentIdentificationType: TranscribeMedicalContentIdentificationType? = nil, languageCode: TranscribeMedicalLanguageCode, region: TranscribeMedicalRegion? = nil, specialty: TranscribeMedicalSpecialty, type: TranscribeMedicalType, vocabularyName: String? = nil) {
            self.contentIdentificationType = contentIdentificationType
            self.languageCode = languageCode
            self.region = region
            self.specialty = specialty
            self.type = type
            self.vocabularyName = vocabularyName
        }

        private enum CodingKeys: String, CodingKey {
            case contentIdentificationType = "ContentIdentificationType"
            case languageCode = "LanguageCode"
            case region = "Region"
            case specialty = "Specialty"
            case type = "Type"
            case vocabularyName = "VocabularyName"
        }
    }

    public struct EngineTranscribeSettings: AWSEncodableShape {
        /// Set this field to PII to identify personal health information in the transcription output.
        public let contentIdentificationType: TranscribeContentIdentificationType?
        /// Set this field to PII to redact personally identifiable information in the transcription output. Content redaction is performed only upon complete transcription of the audio segments.
        public let contentRedactionType: TranscribeContentRedactionType?
        /// Generates partial transcription results that are less likely to change as meeting attendees speak. It does so by only allowing the last few words from the partial results to change.
        public let enablePartialResultsStabilization: Bool?
        /// The language code specified for the Amazon Transcribe engine.
        public let languageCode: TranscribeLanguageCode
        /// The name of the language model used during transcription.
        public let languageModelName: String?
        /// The stabity level of a partial results transcription. Determines how stable you want the transcription results to be. A higher level means the transcription results are less likely to change.
        public let partialResultsStability: TranscribePartialResultsStability?
        /// Lists the PII entity types you want to identify or redact. To specify entity types, you must enable ContentIdentificationType or ContentRedactionType.  PIIEntityTypes must be comma-separated. The available values are:  BANK_ACCOUNT_NUMBER, BANK_ROUTING, CREDIT_DEBIT_NUMBER, CREDIT_DEBIT_CVV, CREDIT_DEBIT_EXPIRY, PIN, EMAIL,  ADDRESS, NAME, PHONE, SSN, and ALL.   PiiEntityTypes is an optional parameter with a default value of ALL.
        public let piiEntityTypes: String?
        /// The AWS Region passed to Amazon Transcribe. If you don't specify a Region, Amazon Chime uses the meeting's Region.
        public let region: TranscribeRegion?
        /// The filtering method passed to Amazon Transcribe.
        public let vocabularyFilterMethod: TranscribeVocabularyFilterMethod?
        /// The name of the vocabulary filter passed to Amazon Transcribe.
        public let vocabularyFilterName: String?
        /// The name of the vocabulary passed to Amazon Transcribe.
        public let vocabularyName: String?

        public init(contentIdentificationType: TranscribeContentIdentificationType? = nil, contentRedactionType: TranscribeContentRedactionType? = nil, enablePartialResultsStabilization: Bool? = nil, languageCode: TranscribeLanguageCode, languageModelName: String? = nil, partialResultsStability: TranscribePartialResultsStability? = nil, piiEntityTypes: String? = nil, region: TranscribeRegion? = nil, vocabularyFilterMethod: TranscribeVocabularyFilterMethod? = nil, vocabularyFilterName: String? = nil, vocabularyName: String? = nil) {
            self.contentIdentificationType = contentIdentificationType
            self.contentRedactionType = contentRedactionType
            self.enablePartialResultsStabilization = enablePartialResultsStabilization
            self.languageCode = languageCode
            self.languageModelName = languageModelName
            self.partialResultsStability = partialResultsStability
            self.piiEntityTypes = piiEntityTypes
            self.region = region
            self.vocabularyFilterMethod = vocabularyFilterMethod
            self.vocabularyFilterName = vocabularyFilterName
            self.vocabularyName = vocabularyName
        }

        public func validate(name: String) throws {
            try self.validate(self.languageModelName, name: "languageModelName", parent: name, max: 200)
            try self.validate(self.languageModelName, name: "languageModelName", parent: name, min: 1)
            try self.validate(self.languageModelName, name: "languageModelName", parent: name, pattern: "^[0-9a-zA-Z._-]+$")
            try self.validate(self.piiEntityTypes, name: "piiEntityTypes", parent: name, max: 300)
            try self.validate(self.piiEntityTypes, name: "piiEntityTypes", parent: name, min: 1)
            try self.validate(self.piiEntityTypes, name: "piiEntityTypes", parent: name, pattern: "^[A-Z_, ]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case contentIdentificationType = "ContentIdentificationType"
            case contentRedactionType = "ContentRedactionType"
            case enablePartialResultsStabilization = "EnablePartialResultsStabilization"
            case languageCode = "LanguageCode"
            case languageModelName = "LanguageModelName"
            case partialResultsStability = "PartialResultsStability"
            case piiEntityTypes = "PiiEntityTypes"
            case region = "Region"
            case vocabularyFilterMethod = "VocabularyFilterMethod"
            case vocabularyFilterName = "VocabularyFilterName"
            case vocabularyName = "VocabularyName"
        }
    }

    public struct EventsConfiguration: AWSDecodableShape {
        /// The bot ID.
        public let botId: String?
        /// Lambda function ARN that allows a bot to receive outgoing events.
        public let lambdaFunctionArn: String?
        /// HTTPS endpoint that allows a bot to receive outgoing events.
        public let outboundEventsHTTPSEndpoint: String?

        public init(botId: String? = nil, lambdaFunctionArn: String? = nil, outboundEventsHTTPSEndpoint: String? = nil) {
            self.botId = botId
            self.lambdaFunctionArn = lambdaFunctionArn
            self.outboundEventsHTTPSEndpoint = outboundEventsHTTPSEndpoint
        }

        private enum CodingKeys: String, CodingKey {
            case botId = "BotId"
            case lambdaFunctionArn = "LambdaFunctionArn"
            case outboundEventsHTTPSEndpoint = "OutboundEventsHTTPSEndpoint"
        }
    }

    public struct GeoMatchParams: AWSEncodableShape & AWSDecodableShape {
        /// The area code.
        public let areaCode: String
        /// The country.
        public let country: String

        public init(areaCode: String, country: String) {
            self.areaCode = areaCode
            self.country = country
        }

        public func validate(name: String) throws {
            try self.validate(self.areaCode, name: "areaCode", parent: name, pattern: "^$|^[0-9]{3,3}$")
            try self.validate(self.country, name: "country", parent: name, pattern: "^$|^[A-Z]{2,2}$")
        }

        private enum CodingKeys: String, CodingKey {
            case areaCode = "AreaCode"
            case country = "Country"
        }
    }

    public struct GetAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String

        public init(accountId: String) {
            self.accountId = accountId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAccountResponse: AWSDecodableShape {
        /// The Amazon Chime account details.
        public let account: Account?

        public init(account: Account? = nil) {
            self.account = account
        }

        private enum CodingKeys: String, CodingKey {
            case account = "Account"
        }
    }

    public struct GetAccountSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String

        public init(accountId: String) {
            self.accountId = accountId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAccountSettingsResponse: AWSDecodableShape {
        /// The Amazon Chime account settings.
        public let accountSettings: AccountSettings?

        public init(accountSettings: AccountSettings? = nil) {
            self.accountSettings = accountSettings
        }

        private enum CodingKeys: String, CodingKey {
            case accountSettings = "AccountSettings"
        }
    }

    public struct GetAppInstanceRetentionSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceArn: String) {
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAppInstanceRetentionSettingsResponse: AWSDecodableShape {
        /// The retention settings for the AppInstance.
        public let appInstanceRetentionSettings: AppInstanceRetentionSettings?
        /// The timestamp representing the time at which the specified items are retained, in Epoch Seconds.
        public let initiateDeletionTimestamp: Date?

        public init(appInstanceRetentionSettings: AppInstanceRetentionSettings? = nil, initiateDeletionTimestamp: Date? = nil) {
            self.appInstanceRetentionSettings = appInstanceRetentionSettings
            self.initiateDeletionTimestamp = initiateDeletionTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceRetentionSettings = "AppInstanceRetentionSettings"
            case initiateDeletionTimestamp = "InitiateDeletionTimestamp"
        }
    }

    public struct GetAppInstanceStreamingConfigurationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceArn: String) {
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAppInstanceStreamingConfigurationsResponse: AWSDecodableShape {
        /// The streaming settings.
        public let appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]?

        public init(appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]? = nil) {
            self.appInstanceStreamingConfigurations = appInstanceStreamingConfigurations
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceStreamingConfigurations = "AppInstanceStreamingConfigurations"
        }
    }

    public struct GetAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "attendeeId", location: .uri("AttendeeId")),
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(attendeeId: String, meetingId: String) {
            self.attendeeId = attendeeId
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.attendeeId, name: "attendeeId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAttendeeResponse: AWSDecodableShape {
        /// The Amazon Chime SDK attendee information.
        public let attendee: Attendee?

        public init(attendee: Attendee? = nil) {
            self.attendee = attendee
        }

        private enum CodingKeys: String, CodingKey {
            case attendee = "Attendee"
        }
    }

    public struct GetBotRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "botId", location: .uri("BotId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String

        public init(accountId: String, botId: String) {
            self.accountId = accountId
            self.botId = botId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.botId, name: "botId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetBotResponse: AWSDecodableShape {
        /// The chat bot details.
        public let bot: Bot?

        public init(bot: Bot? = nil) {
            self.bot = bot
        }

        private enum CodingKeys: String, CodingKey {
            case bot = "Bot"
        }
    }

    public struct GetChannelMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "messageId", location: .uri("MessageId"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ID of the message.
        public let messageId: String

        public init(channelArn: String, chimeBearer: String? = nil, messageId: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.messageId = messageId
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.messageId, name: "messageId", parent: name, max: 128)
            try self.validate(self.messageId, name: "messageId", parent: name, min: 1)
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetChannelMessageResponse: AWSDecodableShape {
        /// The details of and content in the message.
        public let channelMessage: ChannelMessage?

        public init(channelMessage: ChannelMessage? = nil) {
            self.channelMessage = channelMessage
        }

        private enum CodingKeys: String, CodingKey {
            case channelMessage = "ChannelMessage"
        }
    }

    public struct GetEventsConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "botId", location: .uri("BotId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String

        public init(accountId: String, botId: String) {
            self.accountId = accountId
            self.botId = botId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.botId, name: "botId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEventsConfigurationResponse: AWSDecodableShape {
        /// The events configuration details.
        public let eventsConfiguration: EventsConfiguration?

        public init(eventsConfiguration: EventsConfiguration? = nil) {
            self.eventsConfiguration = eventsConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case eventsConfiguration = "EventsConfiguration"
        }
    }

    public struct GetGlobalSettingsResponse: AWSDecodableShape {
        /// The Amazon Chime Business Calling settings.
        public let businessCalling: BusinessCallingSettings?
        /// The Amazon Chime Voice Connector settings.
        public let voiceConnector: VoiceConnectorSettings?

        public init(businessCalling: BusinessCallingSettings? = nil, voiceConnector: VoiceConnectorSettings? = nil) {
            self.businessCalling = businessCalling
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case businessCalling = "BusinessCalling"
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct GetMediaCapturePipelineRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "mediaPipelineId", location: .uri("MediaPipelineId"))
        ]

        /// The ID of the pipeline that you want to get.
        public let mediaPipelineId: String

        public init(mediaPipelineId: String) {
            self.mediaPipelineId = mediaPipelineId
        }

        public func validate(name: String) throws {
            try self.validate(self.mediaPipelineId, name: "mediaPipelineId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetMediaCapturePipelineResponse: AWSDecodableShape {
        /// The media capture pipeline object.
        public let mediaCapturePipeline: MediaCapturePipeline?

        public init(mediaCapturePipeline: MediaCapturePipeline? = nil) {
            self.mediaCapturePipeline = mediaCapturePipeline
        }

        private enum CodingKeys: String, CodingKey {
            case mediaCapturePipeline = "MediaCapturePipeline"
        }
    }

    public struct GetMeetingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(meetingId: String) {
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetMeetingResponse: AWSDecodableShape {
        /// The Amazon Chime SDK meeting information.
        public let meeting: Meeting?

        public init(meeting: Meeting? = nil) {
            self.meeting = meeting
        }

        private enum CodingKeys: String, CodingKey {
            case meeting = "Meeting"
        }
    }

    public struct GetMessagingSessionEndpointRequest: AWSEncodableShape {
        public init() {}
    }

    public struct GetMessagingSessionEndpointResponse: AWSDecodableShape {
        /// The endpoint returned in the response.
        public let endpoint: MessagingSessionEndpoint?

        public init(endpoint: MessagingSessionEndpoint? = nil) {
            self.endpoint = endpoint
        }

        private enum CodingKeys: String, CodingKey {
            case endpoint = "Endpoint"
        }
    }

    public struct GetPhoneNumberOrderRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberOrderId", location: .uri("PhoneNumberOrderId"))
        ]

        /// The ID for the phone number order.
        public let phoneNumberOrderId: String

        public init(phoneNumberOrderId: String) {
            self.phoneNumberOrderId = phoneNumberOrderId
        }

        public func validate(name: String) throws {
            try self.validate(self.phoneNumberOrderId, name: "phoneNumberOrderId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetPhoneNumberOrderResponse: AWSDecodableShape {
        /// The phone number order details.
        public let phoneNumberOrder: PhoneNumberOrder?

        public init(phoneNumberOrder: PhoneNumberOrder? = nil) {
            self.phoneNumberOrder = phoneNumberOrder
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberOrder = "PhoneNumberOrder"
        }
    }

    public struct GetPhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri("PhoneNumberId"))
        ]

        /// The phone number ID.
        public let phoneNumberId: String

        public init(phoneNumberId: String) {
            self.phoneNumberId = phoneNumberId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetPhoneNumberResponse: AWSDecodableShape {
        /// The phone number details.
        public let phoneNumber: PhoneNumber?

        public init(phoneNumber: PhoneNumber? = nil) {
            self.phoneNumber = phoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
        }
    }

    public struct GetPhoneNumberSettingsResponse: AWSDecodableShape {
        /// The default outbound calling name for the account.
        public let callingName: String?
        /// The updated outbound calling name timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var callingNameUpdatedTimestamp: Date?

        public init(callingName: String? = nil, callingNameUpdatedTimestamp: Date? = nil) {
            self.callingName = callingName
            self.callingNameUpdatedTimestamp = callingNameUpdatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
            case callingNameUpdatedTimestamp = "CallingNameUpdatedTimestamp"
        }
    }

    public struct GetProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "proxySessionId", location: .uri("ProxySessionId")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The proxy session ID.
        public let proxySessionId: String
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(proxySessionId: String, voiceConnectorId: String) {
            self.proxySessionId = proxySessionId
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, max: 128)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, pattern: "\\S")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetProxySessionResponse: AWSDecodableShape {
        /// The proxy session details.
        public let proxySession: ProxySession?

        public init(proxySession: ProxySession? = nil) {
            self.proxySession = proxySession
        }

        private enum CodingKeys: String, CodingKey {
            case proxySession = "ProxySession"
        }
    }

    public struct GetRetentionSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String

        public init(accountId: String) {
            self.accountId = accountId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetRetentionSettingsResponse: AWSDecodableShape {
        /// The timestamp representing the time at which the specified items are permanently deleted, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var initiateDeletionTimestamp: Date?
        /// The retention settings.
        public let retentionSettings: RetentionSettings?

        public init(initiateDeletionTimestamp: Date? = nil, retentionSettings: RetentionSettings? = nil) {
            self.initiateDeletionTimestamp = initiateDeletionTimestamp
            self.retentionSettings = retentionSettings
        }

        private enum CodingKeys: String, CodingKey {
            case initiateDeletionTimestamp = "InitiateDeletionTimestamp"
            case retentionSettings = "RetentionSettings"
        }
    }

    public struct GetRoomRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "roomId", location: .uri("RoomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The room ID.
        public let roomId: String

        public init(accountId: String, roomId: String) {
            self.accountId = accountId
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetRoomResponse: AWSDecodableShape {
        /// The room details.
        public let room: Room?

        public init(room: Room? = nil) {
            self.room = room
        }

        private enum CodingKeys: String, CodingKey {
            case room = "Room"
        }
    }

    public struct GetSipMediaApplicationLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        /// The SIP media application ID.
        public let sipMediaApplicationId: String

        public init(sipMediaApplicationId: String) {
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSipMediaApplicationLoggingConfigurationResponse: AWSDecodableShape {
        /// The actual logging configuration.
        public let sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration?

        public init(sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration? = nil) {
            self.sipMediaApplicationLoggingConfiguration = sipMediaApplicationLoggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationLoggingConfiguration = "SipMediaApplicationLoggingConfiguration"
        }
    }

    public struct GetSipMediaApplicationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        /// The SIP media application ID.
        public let sipMediaApplicationId: String

        public init(sipMediaApplicationId: String) {
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSipMediaApplicationResponse: AWSDecodableShape {
        /// The SIP media application details.
        public let sipMediaApplication: SipMediaApplication?

        public init(sipMediaApplication: SipMediaApplication? = nil) {
            self.sipMediaApplication = sipMediaApplication
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplication = "SipMediaApplication"
        }
    }

    public struct GetSipRuleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipRuleId", location: .uri("SipRuleId"))
        ]

        /// The SIP rule ID.
        public let sipRuleId: String

        public init(sipRuleId: String) {
            self.sipRuleId = sipRuleId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipRuleId, name: "sipRuleId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSipRuleResponse: AWSDecodableShape {
        /// The SIP rule details.
        public let sipRule: SipRule?

        public init(sipRule: SipRule? = nil) {
            self.sipRule = sipRule
        }

        private enum CodingKeys: String, CodingKey {
            case sipRule = "SipRule"
        }
    }

    public struct GetUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "userId", location: .uri("UserId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, userId: String) {
            self.accountId = accountId
            self.userId = userId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.userId, name: "userId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetUserResponse: AWSDecodableShape {
        /// The user details.
        public let user: User?

        public init(user: User? = nil) {
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case user = "User"
        }
    }

    public struct GetUserSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "userId", location: .uri("UserId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, userId: String) {
            self.accountId = accountId
            self.userId = userId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetUserSettingsResponse: AWSDecodableShape {
        /// The user settings.
        public let userSettings: UserSettings?

        public init(userSettings: UserSettings? = nil) {
            self.userSettings = userSettings
        }

        private enum CodingKeys: String, CodingKey {
            case userSettings = "UserSettings"
        }
    }

    public struct GetVoiceConnectorEmergencyCallingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorEmergencyCallingConfigurationResponse: AWSDecodableShape {
        /// The emergency calling configuration details.
        public let emergencyCallingConfiguration: EmergencyCallingConfiguration?

        public init(emergencyCallingConfiguration: EmergencyCallingConfiguration? = nil) {
            self.emergencyCallingConfiguration = emergencyCallingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case emergencyCallingConfiguration = "EmergencyCallingConfiguration"
        }
    }

    public struct GetVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri("VoiceConnectorGroupId"))
        ]

        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String

        public init(voiceConnectorGroupId: String) {
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorGroupResponse: AWSDecodableShape {
        /// The Amazon Chime Voice Connector group details.
        public let voiceConnectorGroup: VoiceConnectorGroup?

        public init(voiceConnectorGroup: VoiceConnectorGroup? = nil) {
            self.voiceConnectorGroup = voiceConnectorGroup
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnectorGroup = "VoiceConnectorGroup"
        }
    }

    public struct GetVoiceConnectorLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorLoggingConfigurationResponse: AWSDecodableShape {
        /// The logging configuration details.
        public let loggingConfiguration: LoggingConfiguration?

        public init(loggingConfiguration: LoggingConfiguration? = nil) {
            self.loggingConfiguration = loggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case loggingConfiguration = "LoggingConfiguration"
        }
    }

    public struct GetVoiceConnectorOriginationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorOriginationResponse: AWSDecodableShape {
        /// The origination setting details.
        public let origination: Origination?

        public init(origination: Origination? = nil) {
            self.origination = origination
        }

        private enum CodingKeys: String, CodingKey {
            case origination = "Origination"
        }
    }

    public struct GetVoiceConnectorProxyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorProxyResponse: AWSDecodableShape {
        /// The proxy configuration details.
        public let proxy: Proxy?

        public init(proxy: Proxy? = nil) {
            self.proxy = proxy
        }

        private enum CodingKeys: String, CodingKey {
            case proxy = "Proxy"
        }
    }

    public struct GetVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorResponse: AWSDecodableShape {
        /// The Amazon Chime Voice Connector details.
        public let voiceConnector: VoiceConnector?

        public init(voiceConnector: VoiceConnector? = nil) {
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct GetVoiceConnectorStreamingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorStreamingConfigurationResponse: AWSDecodableShape {
        /// The streaming configuration details.
        public let streamingConfiguration: StreamingConfiguration?

        public init(streamingConfiguration: StreamingConfiguration? = nil) {
            self.streamingConfiguration = streamingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case streamingConfiguration = "StreamingConfiguration"
        }
    }

    public struct GetVoiceConnectorTerminationHealthRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorTerminationHealthResponse: AWSDecodableShape {
        /// The termination health details.
        public let terminationHealth: TerminationHealth?

        public init(terminationHealth: TerminationHealth? = nil) {
            self.terminationHealth = terminationHealth
        }

        private enum CodingKeys: String, CodingKey {
            case terminationHealth = "TerminationHealth"
        }
    }

    public struct GetVoiceConnectorTerminationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorTerminationResponse: AWSDecodableShape {
        /// The termination setting details.
        public let termination: Termination?

        public init(termination: Termination? = nil) {
            self.termination = termination
        }

        private enum CodingKeys: String, CodingKey {
            case termination = "Termination"
        }
    }

    public struct Identity: AWSDecodableShape {
        /// The ARN in an Identity.
        public let arn: String?
        /// The name in an Identity.
        public let name: String?

        public init(arn: String? = nil, name: String? = nil) {
            self.arn = arn
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case name = "Name"
        }
    }

    public struct Invite: AWSDecodableShape {
        /// The email address to which the invite is sent.
        public let emailAddress: String?
        /// The status of the invite email.
        public let emailStatus: EmailStatus?
        /// The invite ID.
        public let inviteId: String?
        /// The status of the invite.
        public let status: InviteStatus?

        public init(emailAddress: String? = nil, emailStatus: EmailStatus? = nil, inviteId: String? = nil, status: InviteStatus? = nil) {
            self.emailAddress = emailAddress
            self.emailStatus = emailStatus
            self.inviteId = inviteId
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case emailAddress = "EmailAddress"
            case emailStatus = "EmailStatus"
            case inviteId = "InviteId"
            case status = "Status"
        }
    }

    public struct InviteUsersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user email addresses to which to send the email invitation.
        public let userEmailList: [String]
        /// The user type.
        public let userType: UserType?

        public init(accountId: String, userEmailList: [String], userType: UserType? = nil) {
            self.accountId = accountId
            self.userEmailList = userEmailList
            self.userType = userType
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.userEmailList.forEach {
                try validate($0, name: "userEmailList[]", parent: name, pattern: "^.+@.+\\..+$")
            }
            try self.validate(self.userEmailList, name: "userEmailList", parent: name, max: 50)
        }

        private enum CodingKeys: String, CodingKey {
            case userEmailList = "UserEmailList"
            case userType = "UserType"
        }
    }

    public struct InviteUsersResponse: AWSDecodableShape {
        /// The email invitation details.
        public let invites: [Invite]?

        public init(invites: [Invite]? = nil) {
            self.invites = invites
        }

        private enum CodingKeys: String, CodingKey {
            case invites = "Invites"
        }
    }

    public struct ListAccountsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "name", location: .querystring("name")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "userEmail", location: .querystring("user-email"))
        ]

        /// The maximum number of results to return in a single call. Defaults to 100.
        public let maxResults: Int?
        /// Amazon Chime account name prefix with which to filter results.
        public let name: String?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// User email address with which to filter results.
        public let userEmail: String?

        public init(maxResults: Int? = nil, name: String? = nil, nextToken: String? = nil, userEmail: String? = nil) {
            self.maxResults = maxResults
            self.name = name
            self.nextToken = nextToken
            self.userEmail = userEmail
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 200)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, max: 100)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "\\S")
            try self.validate(self.userEmail, name: "userEmail", parent: name, pattern: "^.+@.+\\..+$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAccountsResponse: AWSDecodableShape {
        /// List of Amazon Chime accounts and account details.
        public let accounts: [Account]?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(accounts: [Account]? = nil, nextToken: String? = nil) {
            self.accounts = accounts
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case accounts = "Accounts"
            case nextToken = "NextToken"
        }
    }

    public struct ListAppInstanceAdminsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The maximum number of administrators that you want to return.
        public let maxResults: Int?
        /// The token returned from previous API requests until the number of administrators is reached.
        public let nextToken: String?

        public init(appInstanceArn: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.appInstanceArn = appInstanceArn
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAppInstanceAdminsResponse: AWSDecodableShape {
        /// The information for each administrator.
        public let appInstanceAdmins: [AppInstanceAdminSummary]?
        /// The ARN of the AppInstance.
        public let appInstanceArn: String?
        /// The token returned from previous API requests until the number of administrators is reached.
        public let nextToken: String?

        public init(appInstanceAdmins: [AppInstanceAdminSummary]? = nil, appInstanceArn: String? = nil, nextToken: String? = nil) {
            self.appInstanceAdmins = appInstanceAdmins
            self.appInstanceArn = appInstanceArn
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceAdmins = "AppInstanceAdmins"
            case appInstanceArn = "AppInstanceArn"
            case nextToken = "NextToken"
        }
    }

    public struct ListAppInstanceUsersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .querystring("app-instance-arn")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The maximum number of requests that you want returned.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested users are returned.
        public let nextToken: String?

        public init(appInstanceArn: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.appInstanceArn = appInstanceArn
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAppInstanceUsersResponse: AWSDecodableShape {
        /// The ARN of the AppInstance.
        public let appInstanceArn: String?
        /// The information for each requested AppInstanceUser.
        public let appInstanceUsers: [AppInstanceUserSummary]?
        /// The token passed by previous API calls until all requested users are returned.
        public let nextToken: String?

        public init(appInstanceArn: String? = nil, appInstanceUsers: [AppInstanceUserSummary]? = nil, nextToken: String? = nil) {
            self.appInstanceArn = appInstanceArn
            self.appInstanceUsers = appInstanceUsers
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
            case appInstanceUsers = "AppInstanceUsers"
            case nextToken = "NextToken"
        }
    }

    public struct ListAppInstancesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The maximum number of AppInstances that you want to return.
        public let maxResults: Int?
        /// The token passed by previous API requests until you reach the maximum number of AppInstances.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAppInstancesResponse: AWSDecodableShape {
        /// The information for each AppInstance.
        public let appInstances: [AppInstanceSummary]?
        /// The token passed by previous API requests until the maximum number of AppInstances is reached.
        public let nextToken: String?

        public init(appInstances: [AppInstanceSummary]? = nil, nextToken: String? = nil) {
            self.appInstances = appInstances
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case appInstances = "AppInstances"
            case nextToken = "NextToken"
        }
    }

    public struct ListAttendeeTagsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "attendeeId", location: .uri("AttendeeId")),
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(attendeeId: String, meetingId: String) {
            self.attendeeId = attendeeId
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.attendeeId, name: "attendeeId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAttendeeTagsResponse: AWSDecodableShape {
        /// A list of tag key-value pairs.
        public let tags: [Tag]?

        public init(tags: [Tag]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct ListAttendeesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, meetingId: String, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.meetingId = meetingId
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAttendeesResponse: AWSDecodableShape {
        /// The Amazon Chime SDK attendee information.
        public let attendees: [Attendee]?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(attendees: [Attendee]? = nil, nextToken: String? = nil) {
            self.attendees = attendees
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case attendees = "Attendees"
            case nextToken = "NextToken"
        }
    }

    public struct ListBotsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The maximum number of results to return in a single call. The default is 10.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(accountId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.accountId = accountId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListBotsResponse: AWSDecodableShape {
        /// List of bots and bot details.
        public let bots: [Bot]?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(bots: [Bot]? = nil, nextToken: String? = nil) {
            self.bots = bots
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case bots = "Bots"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelBansRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of bans that you want returned.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested bans are returned.
        public let nextToken: String?

        public init(channelArn: String, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelBansResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The information for each requested ban.
        public let channelBans: [ChannelBanSummary]?
        /// The token passed by previous API calls until all requested bans are returned.
        public let nextToken: String?

        public init(channelArn: String? = nil, channelBans: [ChannelBanSummary]? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.channelBans = channelBans
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case channelBans = "ChannelBans"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelMembershipsForAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .querystring("app-instance-user-arn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The ARN of the AppInstanceUsers
        public let appInstanceUserArn: String?
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of users that you want returned.
        public let maxResults: Int?
        /// The token returned from previous API requests until the number of channel memberships is reached.
        public let nextToken: String?

        public init(appInstanceUserArn: String? = nil, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelMembershipsForAppInstanceUserResponse: AWSDecodableShape {
        /// The token passed by previous API calls until all requested users are returned.
        public let channelMemberships: [ChannelMembershipForAppInstanceUserSummary]?
        /// The token passed by previous API calls until all requested users are returned.
        public let nextToken: String?

        public init(channelMemberships: [ChannelMembershipForAppInstanceUserSummary]? = nil, nextToken: String? = nil) {
            self.channelMemberships = channelMemberships
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channelMemberships = "ChannelMemberships"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelMembershipsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "type", location: .querystring("type"))
        ]

        /// The maximum number of channel memberships that you want returned.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of channel memberships that you want returned.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested channel memberships are returned.
        public let nextToken: String?
        /// The membership type of a user, DEFAULT or HIDDEN. Default members are always returned as part of ListChannelMemberships. Hidden members are only returned if the type filter in ListChannelMemberships equals HIDDEN. Otherwise hidden members are not returned.
        public let type: ChannelMembershipType?

        public init(channelArn: String, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, type: ChannelMembershipType? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelMembershipsResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The information for the requested channel memberships.
        public let channelMemberships: [ChannelMembershipSummary]?
        /// The token passed by previous API calls until all requested channel memberships are returned.
        public let nextToken: String?

        public init(channelArn: String? = nil, channelMemberships: [ChannelMembershipSummary]? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.channelMemberships = channelMemberships
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case channelMemberships = "ChannelMemberships"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelMessagesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "notAfter", location: .querystring("not-after")),
            AWSMemberEncoding(label: "notBefore", location: .querystring("not-before")),
            AWSMemberEncoding(label: "sortOrder", location: .querystring("sort-order"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of messages that you want returned.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested messages are returned.
        public let nextToken: String?
        /// The final or ending time stamp for your requested messages.
        public let notAfter: Date?
        /// The initial or starting time stamp for your requested messages.
        public let notBefore: Date?
        /// The order in which you want messages sorted. Default is Descending, based on time created.
        public let sortOrder: SortOrder?

        public init(channelArn: String, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, notAfter: Date? = nil, notBefore: Date? = nil, sortOrder: SortOrder? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.notAfter = notAfter
            self.notBefore = notBefore
            self.sortOrder = sortOrder
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelMessagesResponse: AWSDecodableShape {
        /// The ARN of the channel containing the requested messages.
        public let channelArn: String?
        /// The information about, and content of, each requested message.
        public let channelMessages: [ChannelMessageSummary]?
        /// The token passed by previous API calls until all requested messages are returned.
        public let nextToken: String?

        public init(channelArn: String? = nil, channelMessages: [ChannelMessageSummary]? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.channelMessages = channelMessages
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case channelMessages = "ChannelMessages"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelModeratorsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of moderators that you want returned.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested moderators are returned.
        public let nextToken: String?

        public init(channelArn: String, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelModeratorsResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The information about and names of each moderator.
        public let channelModerators: [ChannelModeratorSummary]?
        /// The token passed by previous API calls until all requested moderators are returned.
        public let nextToken: String?

        public init(channelArn: String? = nil, channelModerators: [ChannelModeratorSummary]? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.channelModerators = channelModerators
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case channelModerators = "ChannelModerators"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelsModeratedByAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .querystring("app-instance-user-arn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The ARN of the user in the moderated channel.
        public let appInstanceUserArn: String?
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of channels in the request.
        public let maxResults: Int?
        /// The token returned from previous API requests until the number of channels moderated by the user is reached.
        public let nextToken: String?

        public init(appInstanceUserArn: String? = nil, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelsModeratedByAppInstanceUserResponse: AWSDecodableShape {
        /// The moderated channels in the request.
        public let channels: [ChannelModeratedByAppInstanceUserSummary]?
        /// The token returned from previous API requests until the number of channels moderated by the user is reached.
        public let nextToken: String?

        public init(channels: [ChannelModeratedByAppInstanceUserSummary]? = nil, nextToken: String? = nil) {
            self.channels = channels
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channels = "Channels"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .querystring("app-instance-arn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "privacy", location: .querystring("privacy"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of channels that you want to return.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested channels are returned.
        public let nextToken: String?
        /// The privacy setting. PUBLIC retrieves all the public channels. PRIVATE retrieves private channels. Only an AppInstanceAdmin can retrieve private channels.
        public let privacy: ChannelPrivacy?

        public init(appInstanceArn: String, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, privacy: ChannelPrivacy? = nil) {
            self.appInstanceArn = appInstanceArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.privacy = privacy
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelsResponse: AWSDecodableShape {
        /// The information about each channel.
        public let channels: [ChannelSummary]?
        /// The token returned from previous API requests until the number of channels is reached.
        public let nextToken: String?

        public init(channels: [ChannelSummary]? = nil, nextToken: String? = nil) {
            self.channels = channels
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channels = "Channels"
            case nextToken = "NextToken"
        }
    }

    public struct ListMediaCapturePipelinesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The maximum number of results to return in a single call. Valid Range: 1 - 99.
        public let maxResults: Int?
        /// The token used to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListMediaCapturePipelinesResponse: AWSDecodableShape {
        /// The media capture pipeline objects in the list.
        public let mediaCapturePipelines: [MediaCapturePipeline]?
        /// The token used to retrieve the next page of results.
        public let nextToken: String?

        public init(mediaCapturePipelines: [MediaCapturePipeline]? = nil, nextToken: String? = nil) {
            self.mediaCapturePipelines = mediaCapturePipelines
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case mediaCapturePipelines = "MediaCapturePipelines"
            case nextToken = "NextToken"
        }
    }

    public struct ListMeetingTagsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(meetingId: String) {
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListMeetingTagsResponse: AWSDecodableShape {
        /// A list of tag key-value pairs.
        public let tags: [Tag]?

        public init(tags: [Tag]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct ListMeetingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListMeetingsResponse: AWSDecodableShape {
        /// The Amazon Chime SDK meeting information.
        public let meetings: [Meeting]?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(meetings: [Meeting]? = nil, nextToken: String? = nil) {
            self.meetings = meetings
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case meetings = "Meetings"
            case nextToken = "NextToken"
        }
    }

    public struct ListPhoneNumberOrdersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListPhoneNumberOrdersResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The phone number order details.
        public let phoneNumberOrders: [PhoneNumberOrder]?

        public init(nextToken: String? = nil, phoneNumberOrders: [PhoneNumberOrder]? = nil) {
            self.nextToken = nextToken
            self.phoneNumberOrders = phoneNumberOrders
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case phoneNumberOrders = "PhoneNumberOrders"
        }
    }

    public struct ListPhoneNumbersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "filterName", location: .querystring("filter-name")),
            AWSMemberEncoding(label: "filterValue", location: .querystring("filter-value")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "productType", location: .querystring("product-type")),
            AWSMemberEncoding(label: "status", location: .querystring("status"))
        ]

        /// The filter to use to limit the number of results.
        public let filterName: PhoneNumberAssociationName?
        /// The value to use for the filter.
        public let filterValue: String?
        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The phone number product type.
        public let productType: PhoneNumberProductType?
        /// The phone number status.
        public let status: PhoneNumberStatus?

        public init(filterName: PhoneNumberAssociationName? = nil, filterValue: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, productType: PhoneNumberProductType? = nil, status: PhoneNumberStatus? = nil) {
            self.filterName = filterName
            self.filterValue = filterValue
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.productType = productType
            self.status = status
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListPhoneNumbersResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The phone number details.
        public let phoneNumbers: [PhoneNumber]?

        public init(nextToken: String? = nil, phoneNumbers: [PhoneNumber]? = nil) {
            self.nextToken = nextToken
            self.phoneNumbers = phoneNumbers
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case phoneNumbers = "PhoneNumbers"
        }
    }

    public struct ListProxySessionsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "status", location: .querystring("status")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The proxy session status.
        public let status: ProxySessionStatus?
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(maxResults: Int? = nil, nextToken: String? = nil, status: ProxySessionStatus? = nil, voiceConnectorId: String) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.status = status
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 65535)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListProxySessionsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The proxy session details.
        public let proxySessions: [ProxySession]?

        public init(nextToken: String? = nil, proxySessions: [ProxySession]? = nil) {
            self.nextToken = nextToken
            self.proxySessions = proxySessions
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case proxySessions = "ProxySessions"
        }
    }

    public struct ListRoomMembershipsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "roomId", location: .uri("RoomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The room ID.
        public let roomId: String

        public init(accountId: String, maxResults: Int? = nil, nextToken: String? = nil, roomId: String) {
            self.accountId = accountId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListRoomMembershipsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The room membership details.
        public let roomMemberships: [RoomMembership]?

        public init(nextToken: String? = nil, roomMemberships: [RoomMembership]? = nil) {
            self.nextToken = nextToken
            self.roomMemberships = roomMemberships
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case roomMemberships = "RoomMemberships"
        }
    }

    public struct ListRoomsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "memberId", location: .querystring("member-id")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The member ID (user ID or bot ID).
        public let memberId: String?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(accountId: String, maxResults: Int? = nil, memberId: String? = nil, nextToken: String? = nil) {
            self.accountId = accountId
            self.maxResults = maxResults
            self.memberId = memberId
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListRoomsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The room details.
        public let rooms: [Room]?

        public init(nextToken: String? = nil, rooms: [Room]? = nil) {
            self.nextToken = nextToken
            self.rooms = rooms
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case rooms = "Rooms"
        }
    }

    public struct ListSipMediaApplicationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The maximum number of results to return in a single call. Defaults to 100.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 65535)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListSipMediaApplicationsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// List of SIP media applications and application details.
        public let sipMediaApplications: [SipMediaApplication]?

        public init(nextToken: String? = nil, sipMediaApplications: [SipMediaApplication]? = nil) {
            self.nextToken = nextToken
            self.sipMediaApplications = sipMediaApplications
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case sipMediaApplications = "SipMediaApplications"
        }
    }

    public struct ListSipRulesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .querystring("sip-media-application"))
        ]

        /// The maximum number of results to return in a single call. Defaults to 100.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The SIP media application ID.
        public let sipMediaApplicationId: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil, sipMediaApplicationId: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 65535)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListSipRulesResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// List of SIP rules and rule details.
        public let sipRules: [SipRule]?

        public init(nextToken: String? = nil, sipRules: [SipRule]? = nil) {
            self.nextToken = nextToken
            self.sipRules = sipRules
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case sipRules = "SipRules"
        }
    }

    public struct ListSupportedPhoneNumberCountriesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "productType", location: .querystring("product-type"))
        ]

        /// The phone number product type.
        public let productType: PhoneNumberProductType

        public init(productType: PhoneNumberProductType) {
            self.productType = productType
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListSupportedPhoneNumberCountriesResponse: AWSDecodableShape {
        /// The supported phone number countries.
        public let phoneNumberCountries: [PhoneNumberCountry]?

        public init(phoneNumberCountries: [PhoneNumberCountry]? = nil) {
            self.phoneNumberCountries = phoneNumberCountries
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberCountries = "PhoneNumberCountries"
        }
    }

    public struct ListTagsForResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceARN", location: .querystring("arn"))
        ]

        /// The resource ARN.
        public let resourceARN: String

        public init(resourceARN: String) {
            self.resourceARN = resourceARN
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, max: 1024)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, min: 1)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTagsForResourceResponse: AWSDecodableShape {
        /// A list of tag-key value pairs.
        public let tags: [Tag]?

        public init(tags: [Tag]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct ListUsersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "userEmail", location: .querystring("user-email")),
            AWSMemberEncoding(label: "userType", location: .querystring("user-type"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The maximum number of results to return in a single call. Defaults to 100.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// Optional. The user email address used to filter results. Maximum 1.
        public let userEmail: String?
        /// The user type.
        public let userType: UserType?

        public init(accountId: String, maxResults: Int? = nil, nextToken: String? = nil, userEmail: String? = nil, userType: UserType? = nil) {
            self.accountId = accountId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.userEmail = userEmail
            self.userType = userType
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 200)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.userEmail, name: "userEmail", parent: name, pattern: "^.+@.+\\..+$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListUsersResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// List of users and user details.
        public let users: [User]?

        public init(nextToken: String? = nil, users: [User]? = nil) {
            self.nextToken = nextToken
            self.users = users
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case users = "Users"
        }
    }

    public struct ListVoiceConnectorGroupsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListVoiceConnectorGroupsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The details of the Amazon Chime Voice Connector groups.
        public let voiceConnectorGroups: [VoiceConnectorGroup]?

        public init(nextToken: String? = nil, voiceConnectorGroups: [VoiceConnectorGroup]? = nil) {
            self.nextToken = nextToken
            self.voiceConnectorGroups = voiceConnectorGroups
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case voiceConnectorGroups = "VoiceConnectorGroups"
        }
    }

    public struct ListVoiceConnectorTerminationCredentialsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListVoiceConnectorTerminationCredentialsResponse: AWSDecodableShape {
        /// A list of user names.
        public let usernames: [String]?

        public init(usernames: [String]? = nil) {
            self.usernames = usernames
        }

        private enum CodingKeys: String, CodingKey {
            case usernames = "Usernames"
        }
    }

    public struct ListVoiceConnectorsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListVoiceConnectorsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The details of the Amazon Chime Voice Connectors.
        public let voiceConnectors: [VoiceConnector]?

        public init(nextToken: String? = nil, voiceConnectors: [VoiceConnector]? = nil) {
            self.nextToken = nextToken
            self.voiceConnectors = voiceConnectors
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case voiceConnectors = "VoiceConnectors"
        }
    }

    public struct LoggingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// When true, enables SIP message logs for sending to Amazon CloudWatch Logs.
        public let enableSIPLogs: Bool?

        public init(enableSIPLogs: Bool? = nil) {
            self.enableSIPLogs = enableSIPLogs
        }

        private enum CodingKeys: String, CodingKey {
            case enableSIPLogs = "EnableSIPLogs"
        }
    }

    public struct LogoutUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "userId", location: .uri("UserId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, userId: String) {
            self.accountId = accountId
            self.userId = userId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.userId, name: "userId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct LogoutUserResponse: AWSDecodableShape {
        public init() {}
    }

    public struct MediaCapturePipeline: AWSDecodableShape {
        /// The configuration for a specified media capture pipeline. SourceType must be ChimeSdkMeeting.
        public let chimeSdkMeetingConfiguration: ChimeSdkMeetingConfiguration?
        /// The time at which the capture pipeline was created, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The ID of a media capture pipeline.
        public let mediaPipelineId: String?
        /// ARN of the destination to which the media artifacts are saved.
        public let sinkArn: String?
        /// Destination type to which the media artifacts are saved. You must use an S3 Bucket.
        public let sinkType: MediaPipelineSinkType?
        /// ARN of the source from which the media artifacts will be saved.
        public let sourceArn: String?
        /// Source type from which media artifacts are saved. You must use ChimeMeeting.
        public let sourceType: MediaPipelineSourceType?
        /// The status of the media capture pipeline.
        public let status: MediaPipelineStatus?
        /// The time at which the capture pipeline was updated, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(chimeSdkMeetingConfiguration: ChimeSdkMeetingConfiguration? = nil, createdTimestamp: Date? = nil, mediaPipelineId: String? = nil, sinkArn: String? = nil, sinkType: MediaPipelineSinkType? = nil, sourceArn: String? = nil, sourceType: MediaPipelineSourceType? = nil, status: MediaPipelineStatus? = nil, updatedTimestamp: Date? = nil) {
            self.chimeSdkMeetingConfiguration = chimeSdkMeetingConfiguration
            self.createdTimestamp = createdTimestamp
            self.mediaPipelineId = mediaPipelineId
            self.sinkArn = sinkArn
            self.sinkType = sinkType
            self.sourceArn = sourceArn
            self.sourceType = sourceType
            self.status = status
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case chimeSdkMeetingConfiguration = "ChimeSdkMeetingConfiguration"
            case createdTimestamp = "CreatedTimestamp"
            case mediaPipelineId = "MediaPipelineId"
            case sinkArn = "SinkArn"
            case sinkType = "SinkType"
            case sourceArn = "SourceArn"
            case sourceType = "SourceType"
            case status = "Status"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct MediaPlacement: AWSDecodableShape {
        /// The audio fallback URL.
        public let audioFallbackUrl: String?
        /// The audio host URL.
        public let audioHostUrl: String?
        /// The event ingestion URL.
        public let eventIngestionUrl: String?
        /// The screen data URL.
        public let screenDataUrl: String?
        /// The screen sharing URL.
        public let screenSharingUrl: String?
        /// The screen viewing URL.
        public let screenViewingUrl: String?
        /// The signaling URL.
        public let signalingUrl: String?
        /// The turn control URL.
        public let turnControlUrl: String?

        public init(audioFallbackUrl: String? = nil, audioHostUrl: String? = nil, eventIngestionUrl: String? = nil, screenDataUrl: String? = nil, screenSharingUrl: String? = nil, screenViewingUrl: String? = nil, signalingUrl: String? = nil, turnControlUrl: String? = nil) {
            self.audioFallbackUrl = audioFallbackUrl
            self.audioHostUrl = audioHostUrl
            self.eventIngestionUrl = eventIngestionUrl
            self.screenDataUrl = screenDataUrl
            self.screenSharingUrl = screenSharingUrl
            self.screenViewingUrl = screenViewingUrl
            self.signalingUrl = signalingUrl
            self.turnControlUrl = turnControlUrl
        }

        private enum CodingKeys: String, CodingKey {
            case audioFallbackUrl = "AudioFallbackUrl"
            case audioHostUrl = "AudioHostUrl"
            case eventIngestionUrl = "EventIngestionUrl"
            case screenDataUrl = "ScreenDataUrl"
            case screenSharingUrl = "ScreenSharingUrl"
            case screenViewingUrl = "ScreenViewingUrl"
            case signalingUrl = "SignalingUrl"
            case turnControlUrl = "TurnControlUrl"
        }
    }

    public struct Meeting: AWSDecodableShape {
        /// The external meeting ID.
        public let externalMeetingId: String?
        /// The media placement for the meeting.
        public let mediaPlacement: MediaPlacement?
        /// The Region in which you create the meeting. Available values: af-south-1, ap-northeast-1,  ap-northeast-2, ap-south-1, ap-southeast-1, ap-southeast-2, ca-central-1,  eu-central-1, eu-north-1, eu-south-1, eu-west-1, eu-west-2, eu-west-3, sa-east-1, us-east-1, us-east-2, us-west-1, us-west-2.
        public let mediaRegion: String?
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String?

        public init(externalMeetingId: String? = nil, mediaPlacement: MediaPlacement? = nil, mediaRegion: String? = nil, meetingId: String? = nil) {
            self.externalMeetingId = externalMeetingId
            self.mediaPlacement = mediaPlacement
            self.mediaRegion = mediaRegion
            self.meetingId = meetingId
        }

        private enum CodingKeys: String, CodingKey {
            case externalMeetingId = "ExternalMeetingId"
            case mediaPlacement = "MediaPlacement"
            case mediaRegion = "MediaRegion"
            case meetingId = "MeetingId"
        }
    }

    public struct MeetingNotificationConfiguration: AWSEncodableShape {
        /// The SNS topic ARN.
        public let snsTopicArn: String?
        /// The SQS queue ARN.
        public let sqsQueueArn: String?

        public init(snsTopicArn: String? = nil, sqsQueueArn: String? = nil) {
            self.snsTopicArn = snsTopicArn
            self.sqsQueueArn = sqsQueueArn
        }

        public func validate(name: String) throws {
            try self.validate(self.snsTopicArn, name: "snsTopicArn", parent: name, max: 1024)
            try self.validate(self.snsTopicArn, name: "snsTopicArn", parent: name, min: 1)
            try self.validate(self.snsTopicArn, name: "snsTopicArn", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
            try self.validate(self.sqsQueueArn, name: "sqsQueueArn", parent: name, max: 1024)
            try self.validate(self.sqsQueueArn, name: "sqsQueueArn", parent: name, min: 1)
            try self.validate(self.sqsQueueArn, name: "sqsQueueArn", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case snsTopicArn = "SnsTopicArn"
            case sqsQueueArn = "SqsQueueArn"
        }
    }

    public struct Member: AWSDecodableShape {
        /// The Amazon Chime account ID.
        public let accountId: String?
        /// The member email address.
        public let email: String?
        /// The member name.
        public let fullName: String?
        /// The member ID (user ID or bot ID).
        public let memberId: String?
        /// The member type.
        public let memberType: MemberType?

        public init(accountId: String? = nil, email: String? = nil, fullName: String? = nil, memberId: String? = nil, memberType: MemberType? = nil) {
            self.accountId = accountId
            self.email = email
            self.fullName = fullName
            self.memberId = memberId
            self.memberType = memberType
        }

        private enum CodingKeys: String, CodingKey {
            case accountId = "AccountId"
            case email = "Email"
            case fullName = "FullName"
            case memberId = "MemberId"
            case memberType = "MemberType"
        }
    }

    public struct MemberError: AWSDecodableShape {
        /// The error code.
        public let errorCode: ErrorCode?
        /// The error message.
        public let errorMessage: String?
        /// The member ID.
        public let memberId: String?

        public init(errorCode: ErrorCode? = nil, errorMessage: String? = nil, memberId: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.memberId = memberId
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case memberId = "MemberId"
        }
    }

    public struct MembershipItem: AWSEncodableShape {
        /// The member ID.
        public let memberId: String?
        /// The member role.
        public let role: RoomMembershipRole?

        public init(memberId: String? = nil, role: RoomMembershipRole? = nil) {
            self.memberId = memberId
            self.role = role
        }

        public func validate(name: String) throws {
            try self.validate(self.memberId, name: "memberId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case memberId = "MemberId"
            case role = "Role"
        }
    }

    public struct MessagingSessionEndpoint: AWSDecodableShape {
        /// The endpoint to which you establish a websocket connection.
        public let url: String?

        public init(url: String? = nil) {
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case url = "Url"
        }
    }

    public struct OrderedPhoneNumber: AWSDecodableShape {
        /// The phone number, in E.164 format.
        public let e164PhoneNumber: String?
        /// The phone number status.
        public let status: OrderedPhoneNumberStatus?

        public init(e164PhoneNumber: String? = nil, status: OrderedPhoneNumberStatus? = nil) {
            self.e164PhoneNumber = e164PhoneNumber
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumber = "E164PhoneNumber"
            case status = "Status"
        }
    }

    public struct Origination: AWSEncodableShape & AWSDecodableShape {
        /// When origination settings are disabled, inbound calls are not enabled for your Amazon Chime Voice Connector. This parameter is not required, but you must specify this parameter or Routes.
        public let disabled: Bool?
        /// The call distribution properties defined for your SIP hosts. Valid range: Minimum value of 1. Maximum value of 20. This parameter is not required, but you must specify this parameter or Disabled.
        public let routes: [OriginationRoute]?

        public init(disabled: Bool? = nil, routes: [OriginationRoute]? = nil) {
            self.disabled = disabled
            self.routes = routes
        }

        public func validate(name: String) throws {
            try self.routes?.forEach {
                try $0.validate(name: "\(name).routes[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case disabled = "Disabled"
            case routes = "Routes"
        }
    }

    public struct OriginationRoute: AWSEncodableShape & AWSDecodableShape {
        /// The FQDN or IP address to contact for origination traffic.
        public let host: String?
        /// The designated origination route port. Defaults to 5060.
        public let port: Int?
        /// The priority associated with the host, with 1 being the highest priority. Higher priority hosts are attempted first.
        public let priority: Int?
        /// The protocol to use for the origination route. Encryption-enabled Amazon Chime Voice Connectors use TCP protocol by default.
        public let `protocol`: OriginationRouteProtocol?
        /// The weight associated with the host. If hosts are equal in priority, calls are redistributed among them based on their relative weight.
        public let weight: Int?

        public init(host: String? = nil, port: Int? = nil, priority: Int? = nil, protocol: OriginationRouteProtocol? = nil, weight: Int? = nil) {
            self.host = host
            self.port = port
            self.priority = priority
            self.`protocol` = `protocol`
            self.weight = weight
        }

        public func validate(name: String) throws {
            try self.validate(self.port, name: "port", parent: name, max: 65535)
            try self.validate(self.port, name: "port", parent: name, min: 0)
            try self.validate(self.priority, name: "priority", parent: name, max: 100)
            try self.validate(self.priority, name: "priority", parent: name, min: 1)
            try self.validate(self.weight, name: "weight", parent: name, max: 100)
            try self.validate(self.weight, name: "weight", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case host = "Host"
            case port = "Port"
            case priority = "Priority"
            case `protocol` = "Protocol"
            case weight = "Weight"
        }
    }

    public struct Participant: AWSDecodableShape {
        /// The participant's phone number.
        public let phoneNumber: String?
        /// The participant's proxy phone number.
        public let proxyPhoneNumber: String?

        public init(phoneNumber: String? = nil, proxyPhoneNumber: String? = nil) {
            self.phoneNumber = phoneNumber
            self.proxyPhoneNumber = proxyPhoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
            case proxyPhoneNumber = "ProxyPhoneNumber"
        }
    }

    public struct PhoneNumber: AWSDecodableShape {
        /// The phone number associations.
        public let associations: [PhoneNumberAssociation]?
        /// The outbound calling name associated with the phone number.
        public let callingName: String?
        /// The outbound calling name status.
        public let callingNameStatus: CallingNameStatus?
        /// The phone number capabilities.
        public let capabilities: PhoneNumberCapabilities?
        /// The phone number country. Format: ISO 3166-1 alpha-2.
        public let country: String?
        /// The phone number creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The deleted phone number timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var deletionTimestamp: Date?
        /// The phone number, in E.164 format.
        public let e164PhoneNumber: String?
        /// The phone number ID.
        public let phoneNumberId: String?
        /// The phone number product type.
        public let productType: PhoneNumberProductType?
        /// The phone number status.
        public let status: PhoneNumberStatus?
        /// The phone number type.
        public let type: PhoneNumberType?
        /// The updated phone number timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(associations: [PhoneNumberAssociation]? = nil, callingName: String? = nil, callingNameStatus: CallingNameStatus? = nil, capabilities: PhoneNumberCapabilities? = nil, country: String? = nil, createdTimestamp: Date? = nil, deletionTimestamp: Date? = nil, e164PhoneNumber: String? = nil, phoneNumberId: String? = nil, productType: PhoneNumberProductType? = nil, status: PhoneNumberStatus? = nil, type: PhoneNumberType? = nil, updatedTimestamp: Date? = nil) {
            self.associations = associations
            self.callingName = callingName
            self.callingNameStatus = callingNameStatus
            self.capabilities = capabilities
            self.country = country
            self.createdTimestamp = createdTimestamp
            self.deletionTimestamp = deletionTimestamp
            self.e164PhoneNumber = e164PhoneNumber
            self.phoneNumberId = phoneNumberId
            self.productType = productType
            self.status = status
            self.type = type
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case associations = "Associations"
            case callingName = "CallingName"
            case callingNameStatus = "CallingNameStatus"
            case capabilities = "Capabilities"
            case country = "Country"
            case createdTimestamp = "CreatedTimestamp"
            case deletionTimestamp = "DeletionTimestamp"
            case e164PhoneNumber = "E164PhoneNumber"
            case phoneNumberId = "PhoneNumberId"
            case productType = "ProductType"
            case status = "Status"
            case type = "Type"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct PhoneNumberAssociation: AWSDecodableShape {
        /// The timestamp of the phone number association, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var associatedTimestamp: Date?
        /// Defines the association with an Amazon Chime account ID, user ID, Amazon Chime Voice Connector ID, or Amazon Chime Voice Connector group ID.
        public let name: PhoneNumberAssociationName?
        /// Contains the ID for the entity specified in Name.
        public let value: String?

        public init(associatedTimestamp: Date? = nil, name: PhoneNumberAssociationName? = nil, value: String? = nil) {
            self.associatedTimestamp = associatedTimestamp
            self.name = name
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case associatedTimestamp = "AssociatedTimestamp"
            case name = "Name"
            case value = "Value"
        }
    }

    public struct PhoneNumberCapabilities: AWSDecodableShape {
        /// Allows or denies inbound calling for the specified phone number.
        public let inboundCall: Bool?
        /// Allows or denies inbound MMS messaging for the specified phone number.
        public let inboundMMS: Bool?
        /// Allows or denies inbound SMS messaging for the specified phone number.
        public let inboundSMS: Bool?
        /// Allows or denies outbound calling for the specified phone number.
        public let outboundCall: Bool?
        /// Allows or denies outbound MMS messaging for the specified phone number.
        public let outboundMMS: Bool?
        /// Allows or denies outbound SMS messaging for the specified phone number.
        public let outboundSMS: Bool?

        public init(inboundCall: Bool? = nil, inboundMMS: Bool? = nil, inboundSMS: Bool? = nil, outboundCall: Bool? = nil, outboundMMS: Bool? = nil, outboundSMS: Bool? = nil) {
            self.inboundCall = inboundCall
            self.inboundMMS = inboundMMS
            self.inboundSMS = inboundSMS
            self.outboundCall = outboundCall
            self.outboundMMS = outboundMMS
            self.outboundSMS = outboundSMS
        }

        private enum CodingKeys: String, CodingKey {
            case inboundCall = "InboundCall"
            case inboundMMS = "InboundMMS"
            case inboundSMS = "InboundSMS"
            case outboundCall = "OutboundCall"
            case outboundMMS = "OutboundMMS"
            case outboundSMS = "OutboundSMS"
        }
    }

    public struct PhoneNumberCountry: AWSDecodableShape {
        /// The phone number country code. Format: ISO 3166-1 alpha-2.
        public let countryCode: String?
        /// The supported phone number types.
        public let supportedPhoneNumberTypes: [PhoneNumberType]?

        public init(countryCode: String? = nil, supportedPhoneNumberTypes: [PhoneNumberType]? = nil) {
            self.countryCode = countryCode
            self.supportedPhoneNumberTypes = supportedPhoneNumberTypes
        }

        private enum CodingKeys: String, CodingKey {
            case countryCode = "CountryCode"
            case supportedPhoneNumberTypes = "SupportedPhoneNumberTypes"
        }
    }

    public struct PhoneNumberError: AWSDecodableShape {
        /// The error code.
        public let errorCode: ErrorCode?
        /// The error message.
        public let errorMessage: String?
        /// The phone number ID for which the action failed.
        public let phoneNumberId: String?

        public init(errorCode: ErrorCode? = nil, errorMessage: String? = nil, phoneNumberId: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.phoneNumberId = phoneNumberId
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case phoneNumberId = "PhoneNumberId"
        }
    }

    public struct PhoneNumberOrder: AWSDecodableShape {
        /// The phone number order creation time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The ordered phone number details, such as the phone number in E.164 format and the phone number status.
        public let orderedPhoneNumbers: [OrderedPhoneNumber]?
        /// The phone number order ID.
        public let phoneNumberOrderId: String?
        /// The phone number order product type.
        public let productType: PhoneNumberProductType?
        /// The status of the phone number order.
        public let status: PhoneNumberOrderStatus?
        /// The updated phone number order time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(createdTimestamp: Date? = nil, orderedPhoneNumbers: [OrderedPhoneNumber]? = nil, phoneNumberOrderId: String? = nil, productType: PhoneNumberProductType? = nil, status: PhoneNumberOrderStatus? = nil, updatedTimestamp: Date? = nil) {
            self.createdTimestamp = createdTimestamp
            self.orderedPhoneNumbers = orderedPhoneNumbers
            self.phoneNumberOrderId = phoneNumberOrderId
            self.productType = productType
            self.status = status
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case createdTimestamp = "CreatedTimestamp"
            case orderedPhoneNumbers = "OrderedPhoneNumbers"
            case phoneNumberOrderId = "PhoneNumberOrderId"
            case productType = "ProductType"
            case status = "Status"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct Proxy: AWSDecodableShape {
        /// The default number of minutes allowed for proxy sessions.
        public let defaultSessionExpiryMinutes: Int?
        /// When true, stops proxy sessions from being created on the specified Amazon Chime Voice Connector.
        public let disabled: Bool?
        /// The phone number to route calls to after a proxy session expires.
        public let fallBackPhoneNumber: String?
        /// The countries for proxy phone numbers to be selected from.
        public let phoneNumberCountries: [String]?

        public init(defaultSessionExpiryMinutes: Int? = nil, disabled: Bool? = nil, fallBackPhoneNumber: String? = nil, phoneNumberCountries: [String]? = nil) {
            self.defaultSessionExpiryMinutes = defaultSessionExpiryMinutes
            self.disabled = disabled
            self.fallBackPhoneNumber = fallBackPhoneNumber
            self.phoneNumberCountries = phoneNumberCountries
        }

        private enum CodingKeys: String, CodingKey {
            case defaultSessionExpiryMinutes = "DefaultSessionExpiryMinutes"
            case disabled = "Disabled"
            case fallBackPhoneNumber = "FallBackPhoneNumber"
            case phoneNumberCountries = "PhoneNumberCountries"
        }
    }

    public struct ProxySession: AWSDecodableShape {
        /// The proxy session capabilities.
        public let capabilities: [Capability]?
        /// The created time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The ended time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var endedTimestamp: Date?
        /// The number of minutes allowed for the proxy session.
        public let expiryMinutes: Int?
        /// The preference for matching the country or area code of the proxy phone number with that of the first participant.
        public let geoMatchLevel: GeoMatchLevel?
        /// The country and area code for the proxy phone number.
        public let geoMatchParams: GeoMatchParams?
        /// The name of the proxy session.
        public let name: String?
        /// The preference for proxy phone number reuse, or stickiness, between the same participants across sessions.
        public let numberSelectionBehavior: NumberSelectionBehavior?
        /// The proxy session participants.
        public let participants: [Participant]?
        /// The proxy session ID.
        public let proxySessionId: String?
        /// The status of the proxy session.
        public let status: ProxySessionStatus?
        /// The updated time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String?

        public init(capabilities: [Capability]? = nil, createdTimestamp: Date? = nil, endedTimestamp: Date? = nil, expiryMinutes: Int? = nil, geoMatchLevel: GeoMatchLevel? = nil, geoMatchParams: GeoMatchParams? = nil, name: String? = nil, numberSelectionBehavior: NumberSelectionBehavior? = nil, participants: [Participant]? = nil, proxySessionId: String? = nil, status: ProxySessionStatus? = nil, updatedTimestamp: Date? = nil, voiceConnectorId: String? = nil) {
            self.capabilities = capabilities
            self.createdTimestamp = createdTimestamp
            self.endedTimestamp = endedTimestamp
            self.expiryMinutes = expiryMinutes
            self.geoMatchLevel = geoMatchLevel
            self.geoMatchParams = geoMatchParams
            self.name = name
            self.numberSelectionBehavior = numberSelectionBehavior
            self.participants = participants
            self.proxySessionId = proxySessionId
            self.status = status
            self.updatedTimestamp = updatedTimestamp
            self.voiceConnectorId = voiceConnectorId
        }

        private enum CodingKeys: String, CodingKey {
            case capabilities = "Capabilities"
            case createdTimestamp = "CreatedTimestamp"
            case endedTimestamp = "EndedTimestamp"
            case expiryMinutes = "ExpiryMinutes"
            case geoMatchLevel = "GeoMatchLevel"
            case geoMatchParams = "GeoMatchParams"
            case name = "Name"
            case numberSelectionBehavior = "NumberSelectionBehavior"
            case participants = "Participants"
            case proxySessionId = "ProxySessionId"
            case status = "Status"
            case updatedTimestamp = "UpdatedTimestamp"
            case voiceConnectorId = "VoiceConnectorId"
        }
    }

    public struct PutAppInstanceRetentionSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The time in days to retain data. Data type: number.
        public let appInstanceRetentionSettings: AppInstanceRetentionSettings

        public init(appInstanceArn: String, appInstanceRetentionSettings: AppInstanceRetentionSettings) {
            self.appInstanceArn = appInstanceArn
            self.appInstanceRetentionSettings = appInstanceRetentionSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.appInstanceRetentionSettings.validate(name: "\(name).appInstanceRetentionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceRetentionSettings = "AppInstanceRetentionSettings"
        }
    }

    public struct PutAppInstanceRetentionSettingsResponse: AWSDecodableShape {
        /// The time in days to retain data. Data type: number.
        public let appInstanceRetentionSettings: AppInstanceRetentionSettings?
        /// The time at which the API deletes data.
        public let initiateDeletionTimestamp: Date?

        public init(appInstanceRetentionSettings: AppInstanceRetentionSettings? = nil, initiateDeletionTimestamp: Date? = nil) {
            self.appInstanceRetentionSettings = appInstanceRetentionSettings
            self.initiateDeletionTimestamp = initiateDeletionTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceRetentionSettings = "AppInstanceRetentionSettings"
            case initiateDeletionTimestamp = "InitiateDeletionTimestamp"
        }
    }

    public struct PutAppInstanceStreamingConfigurationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The streaming configurations set for an AppInstance.
        public let appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]

        public init(appInstanceArn: String, appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]) {
            self.appInstanceArn = appInstanceArn
            self.appInstanceStreamingConfigurations = appInstanceStreamingConfigurations
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.appInstanceStreamingConfigurations.forEach {
                try $0.validate(name: "\(name).appInstanceStreamingConfigurations[]")
            }
            try self.validate(self.appInstanceStreamingConfigurations, name: "appInstanceStreamingConfigurations", parent: name, max: 2)
            try self.validate(self.appInstanceStreamingConfigurations, name: "appInstanceStreamingConfigurations", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceStreamingConfigurations = "AppInstanceStreamingConfigurations"
        }
    }

    public struct PutAppInstanceStreamingConfigurationsResponse: AWSDecodableShape {
        /// The streaming configurations of an AppInstance.
        public let appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]?

        public init(appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]? = nil) {
            self.appInstanceStreamingConfigurations = appInstanceStreamingConfigurations
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceStreamingConfigurations = "AppInstanceStreamingConfigurations"
        }
    }

    public struct PutEventsConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "botId", location: .uri("BotId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String
        /// Lambda function ARN that allows the bot to receive outgoing events.
        public let lambdaFunctionArn: String?
        /// HTTPS endpoint that allows the bot to receive outgoing events.
        public let outboundEventsHTTPSEndpoint: String?

        public init(accountId: String, botId: String, lambdaFunctionArn: String? = nil, outboundEventsHTTPSEndpoint: String? = nil) {
            self.accountId = accountId
            self.botId = botId
            self.lambdaFunctionArn = lambdaFunctionArn
            self.outboundEventsHTTPSEndpoint = outboundEventsHTTPSEndpoint
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.botId, name: "botId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case lambdaFunctionArn = "LambdaFunctionArn"
            case outboundEventsHTTPSEndpoint = "OutboundEventsHTTPSEndpoint"
        }
    }

    public struct PutEventsConfigurationResponse: AWSDecodableShape {
        public let eventsConfiguration: EventsConfiguration?

        public init(eventsConfiguration: EventsConfiguration? = nil) {
            self.eventsConfiguration = eventsConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case eventsConfiguration = "EventsConfiguration"
        }
    }

    public struct PutRetentionSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The retention settings.
        public let retentionSettings: RetentionSettings

        public init(accountId: String, retentionSettings: RetentionSettings) {
            self.accountId = accountId
            self.retentionSettings = retentionSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.retentionSettings.validate(name: "\(name).retentionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case retentionSettings = "RetentionSettings"
        }
    }

    public struct PutRetentionSettingsResponse: AWSDecodableShape {
        /// The timestamp representing the time at which the specified items are permanently deleted, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var initiateDeletionTimestamp: Date?
        /// The retention settings.
        public let retentionSettings: RetentionSettings?

        public init(initiateDeletionTimestamp: Date? = nil, retentionSettings: RetentionSettings? = nil) {
            self.initiateDeletionTimestamp = initiateDeletionTimestamp
            self.retentionSettings = retentionSettings
        }

        private enum CodingKeys: String, CodingKey {
            case initiateDeletionTimestamp = "InitiateDeletionTimestamp"
            case retentionSettings = "RetentionSettings"
        }
    }

    public struct PutSipMediaApplicationLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        /// The SIP media application ID.
        public let sipMediaApplicationId: String
        /// The actual logging configuration.
        public let sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration?

        public init(sipMediaApplicationId: String, sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration? = nil) {
            self.sipMediaApplicationId = sipMediaApplicationId
            self.sipMediaApplicationLoggingConfiguration = sipMediaApplicationLoggingConfiguration
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationLoggingConfiguration = "SipMediaApplicationLoggingConfiguration"
        }
    }

    public struct PutSipMediaApplicationLoggingConfigurationResponse: AWSDecodableShape {
        public let sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration?

        public init(sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration? = nil) {
            self.sipMediaApplicationLoggingConfiguration = sipMediaApplicationLoggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationLoggingConfiguration = "SipMediaApplicationLoggingConfiguration"
        }
    }

    public struct PutVoiceConnectorEmergencyCallingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The emergency calling configuration details.
        public let emergencyCallingConfiguration: EmergencyCallingConfiguration
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(emergencyCallingConfiguration: EmergencyCallingConfiguration, voiceConnectorId: String) {
            self.emergencyCallingConfiguration = emergencyCallingConfiguration
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.emergencyCallingConfiguration.validate(name: "\(name).emergencyCallingConfiguration")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case emergencyCallingConfiguration = "EmergencyCallingConfiguration"
        }
    }

    public struct PutVoiceConnectorEmergencyCallingConfigurationResponse: AWSDecodableShape {
        /// The emergency calling configuration details.
        public let emergencyCallingConfiguration: EmergencyCallingConfiguration?

        public init(emergencyCallingConfiguration: EmergencyCallingConfiguration? = nil) {
            self.emergencyCallingConfiguration = emergencyCallingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case emergencyCallingConfiguration = "EmergencyCallingConfiguration"
        }
    }

    public struct PutVoiceConnectorLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The logging configuration details to add.
        public let loggingConfiguration: LoggingConfiguration
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(loggingConfiguration: LoggingConfiguration, voiceConnectorId: String) {
            self.loggingConfiguration = loggingConfiguration
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case loggingConfiguration = "LoggingConfiguration"
        }
    }

    public struct PutVoiceConnectorLoggingConfigurationResponse: AWSDecodableShape {
        /// The updated logging configuration details.
        public let loggingConfiguration: LoggingConfiguration?

        public init(loggingConfiguration: LoggingConfiguration? = nil) {
            self.loggingConfiguration = loggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case loggingConfiguration = "LoggingConfiguration"
        }
    }

    public struct PutVoiceConnectorOriginationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The origination setting details to add.
        public let origination: Origination
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(origination: Origination, voiceConnectorId: String) {
            self.origination = origination
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.origination.validate(name: "\(name).origination")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case origination = "Origination"
        }
    }

    public struct PutVoiceConnectorOriginationResponse: AWSDecodableShape {
        /// The updated origination setting details.
        public let origination: Origination?

        public init(origination: Origination? = nil) {
            self.origination = origination
        }

        private enum CodingKeys: String, CodingKey {
            case origination = "Origination"
        }
    }

    public struct PutVoiceConnectorProxyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The default number of minutes allowed for proxy sessions.
        public let defaultSessionExpiryMinutes: Int
        /// When true, stops proxy sessions from being created on the specified Amazon Chime Voice Connector.
        public let disabled: Bool?
        /// The phone number to route calls to after a proxy session expires.
        public let fallBackPhoneNumber: String?
        /// The countries for proxy phone numbers to be selected from.
        public let phoneNumberPoolCountries: [String]
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(defaultSessionExpiryMinutes: Int, disabled: Bool? = nil, fallBackPhoneNumber: String? = nil, phoneNumberPoolCountries: [String], voiceConnectorId: String) {
            self.defaultSessionExpiryMinutes = defaultSessionExpiryMinutes
            self.disabled = disabled
            self.fallBackPhoneNumber = fallBackPhoneNumber
            self.phoneNumberPoolCountries = phoneNumberPoolCountries
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.fallBackPhoneNumber, name: "fallBackPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            try self.phoneNumberPoolCountries.forEach {
                try validate($0, name: "phoneNumberPoolCountries[]", parent: name, pattern: "^$|^[A-Z]{2,2}$")
            }
            try self.validate(self.phoneNumberPoolCountries, name: "phoneNumberPoolCountries", parent: name, max: 100)
            try self.validate(self.phoneNumberPoolCountries, name: "phoneNumberPoolCountries", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case defaultSessionExpiryMinutes = "DefaultSessionExpiryMinutes"
            case disabled = "Disabled"
            case fallBackPhoneNumber = "FallBackPhoneNumber"
            case phoneNumberPoolCountries = "PhoneNumberPoolCountries"
        }
    }

    public struct PutVoiceConnectorProxyResponse: AWSDecodableShape {
        /// The proxy configuration details.
        public let proxy: Proxy?

        public init(proxy: Proxy? = nil) {
            self.proxy = proxy
        }

        private enum CodingKeys: String, CodingKey {
            case proxy = "Proxy"
        }
    }

    public struct PutVoiceConnectorStreamingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The streaming configuration details to add.
        public let streamingConfiguration: StreamingConfiguration
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(streamingConfiguration: StreamingConfiguration, voiceConnectorId: String) {
            self.streamingConfiguration = streamingConfiguration
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.streamingConfiguration.validate(name: "\(name).streamingConfiguration")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case streamingConfiguration = "StreamingConfiguration"
        }
    }

    public struct PutVoiceConnectorStreamingConfigurationResponse: AWSDecodableShape {
        /// The updated streaming configuration details.
        public let streamingConfiguration: StreamingConfiguration?

        public init(streamingConfiguration: StreamingConfiguration? = nil) {
            self.streamingConfiguration = streamingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case streamingConfiguration = "StreamingConfiguration"
        }
    }

    public struct PutVoiceConnectorTerminationCredentialsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The termination SIP credentials.
        public let credentials: [Credential]?
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(credentials: [Credential]? = nil, voiceConnectorId: String) {
            self.credentials = credentials
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case credentials = "Credentials"
        }
    }

    public struct PutVoiceConnectorTerminationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The termination setting details to add.
        public let termination: Termination
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(termination: Termination, voiceConnectorId: String) {
            self.termination = termination
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.termination.validate(name: "\(name).termination")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case termination = "Termination"
        }
    }

    public struct PutVoiceConnectorTerminationResponse: AWSDecodableShape {
        /// The updated termination setting details.
        public let termination: Termination?

        public init(termination: Termination? = nil) {
            self.termination = termination
        }

        private enum CodingKeys: String, CodingKey {
            case termination = "Termination"
        }
    }

    public struct RedactChannelMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "messageId", location: .uri("MessageId"))
        ]

        /// The ARN of the channel containing the messages that you want to redact.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ID of the message being redacted.
        public let messageId: String

        public init(channelArn: String, chimeBearer: String? = nil, messageId: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.messageId = messageId
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.messageId, name: "messageId", parent: name, max: 128)
            try self.validate(self.messageId, name: "messageId", parent: name, min: 1)
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RedactChannelMessageResponse: AWSDecodableShape {
        /// The ARN of the channel containing the messages that you want to redact.
        public let channelArn: String?
        /// The ID of the message being redacted.
        public let messageId: String?

        public init(channelArn: String? = nil, messageId: String? = nil) {
            self.channelArn = channelArn
            self.messageId = messageId
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case messageId = "MessageId"
        }
    }

    public struct RedactConversationMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "conversationId", location: .uri("ConversationId")),
            AWSMemberEncoding(label: "messageId", location: .uri("MessageId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The conversation ID.
        public let conversationId: String
        /// The message ID.
        public let messageId: String

        public init(accountId: String, conversationId: String, messageId: String) {
            self.accountId = accountId
            self.conversationId = conversationId
            self.messageId = messageId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.conversationId, name: "conversationId", parent: name, pattern: "\\S")
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RedactConversationMessageResponse: AWSDecodableShape {
        public init() {}
    }

    public struct RedactRoomMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "messageId", location: .uri("MessageId")),
            AWSMemberEncoding(label: "roomId", location: .uri("RoomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The message ID.
        public let messageId: String
        /// The room ID.
        public let roomId: String

        public init(accountId: String, messageId: String, roomId: String) {
            self.accountId = accountId
            self.messageId = messageId
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: "\\S")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RedactRoomMessageResponse: AWSDecodableShape {
        public init() {}
    }

    public struct RegenerateSecurityTokenRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "botId", location: .uri("BotId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String

        public init(accountId: String, botId: String) {
            self.accountId = accountId
            self.botId = botId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.botId, name: "botId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RegenerateSecurityTokenResponse: AWSDecodableShape {
        public let bot: Bot?

        public init(bot: Bot? = nil) {
            self.bot = bot
        }

        private enum CodingKeys: String, CodingKey {
            case bot = "Bot"
        }
    }

    public struct ResetPersonalPINRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "userId", location: .uri("UserId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, userId: String) {
            self.accountId = accountId
            self.userId = userId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.userId, name: "userId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ResetPersonalPINResponse: AWSDecodableShape {
        /// The user details and new personal meeting PIN.
        public let user: User?

        public init(user: User? = nil) {
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case user = "User"
        }
    }

    public struct RestorePhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri("PhoneNumberId"))
        ]

        /// The phone number.
        public let phoneNumberId: String

        public init(phoneNumberId: String) {
            self.phoneNumberId = phoneNumberId
        }

        public func validate(name: String) throws {
            try self.validate(self.phoneNumberId, name: "phoneNumberId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RestorePhoneNumberResponse: AWSDecodableShape {
        /// The phone number details.
        public let phoneNumber: PhoneNumber?

        public init(phoneNumber: PhoneNumber? = nil) {
            self.phoneNumber = phoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
        }
    }

    public struct RetentionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The chat conversation retention settings.
        public let conversationRetentionSettings: ConversationRetentionSettings?
        /// The chat room retention settings.
        public let roomRetentionSettings: RoomRetentionSettings?

        public init(conversationRetentionSettings: ConversationRetentionSettings? = nil, roomRetentionSettings: RoomRetentionSettings? = nil) {
            self.conversationRetentionSettings = conversationRetentionSettings
            self.roomRetentionSettings = roomRetentionSettings
        }

        public func validate(name: String) throws {
            try self.conversationRetentionSettings?.validate(name: "\(name).conversationRetentionSettings")
            try self.roomRetentionSettings?.validate(name: "\(name).roomRetentionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case conversationRetentionSettings = "ConversationRetentionSettings"
            case roomRetentionSettings = "RoomRetentionSettings"
        }
    }

    public struct Room: AWSDecodableShape {
        /// The Amazon Chime account ID.
        public let accountId: String?
        /// The identifier of the room creator.
        public let createdBy: String?
        /// The room creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The room name.
        public let name: String?
        /// The room ID.
        public let roomId: String?
        /// The room update timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(accountId: String? = nil, createdBy: String? = nil, createdTimestamp: Date? = nil, name: String? = nil, roomId: String? = nil, updatedTimestamp: Date? = nil) {
            self.accountId = accountId
            self.createdBy = createdBy
            self.createdTimestamp = createdTimestamp
            self.name = name
            self.roomId = roomId
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case accountId = "AccountId"
            case createdBy = "CreatedBy"
            case createdTimestamp = "CreatedTimestamp"
            case name = "Name"
            case roomId = "RoomId"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct RoomMembership: AWSDecodableShape {
        /// The identifier of the user that invited the room member.
        public let invitedBy: String?
        public let member: Member?
        /// The membership role.
        public let role: RoomMembershipRole?
        /// The room ID.
        public let roomId: String?
        /// The room membership update timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(invitedBy: String? = nil, member: Member? = nil, role: RoomMembershipRole? = nil, roomId: String? = nil, updatedTimestamp: Date? = nil) {
            self.invitedBy = invitedBy
            self.member = member
            self.role = role
            self.roomId = roomId
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case invitedBy = "InvitedBy"
            case member = "Member"
            case role = "Role"
            case roomId = "RoomId"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct RoomRetentionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The number of days for which to retain chat-room messages.
        public let retentionDays: Int?

        public init(retentionDays: Int? = nil) {
            self.retentionDays = retentionDays
        }

        public func validate(name: String) throws {
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, max: 5475)
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case retentionDays = "RetentionDays"
        }
    }

    public struct SearchAvailablePhoneNumbersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "areaCode", location: .querystring("area-code")),
            AWSMemberEncoding(label: "city", location: .querystring("city")),
            AWSMemberEncoding(label: "country", location: .querystring("country")),
            AWSMemberEncoding(label: "maxResults", location: .querystring("max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring("next-token")),
            AWSMemberEncoding(label: "phoneNumberType", location: .querystring("phone-number-type")),
            AWSMemberEncoding(label: "state", location: .querystring("state")),
            AWSMemberEncoding(label: "tollFreePrefix", location: .querystring("toll-free-prefix"))
        ]

        /// The area code used to filter results. Only applies to the US.
        public let areaCode: String?
        /// The city used to filter results. Only applies to the US.
        public let city: String?
        /// The country used to filter results. Defaults to the US Format: ISO 3166-1 alpha-2.
        public let country: String?
        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token used to retrieve the next page of results.
        public let nextToken: String?
        /// The phone number type used to filter results. Required for non-US numbers.
        public let phoneNumberType: PhoneNumberType?
        /// The state used to filter results. Required only if you provide City. Only applies to the US.
        public let state: String?
        /// The toll-free prefix that you use to filter results. Only applies to the US.
        public let tollFreePrefix: String?

        public init(areaCode: String? = nil, city: String? = nil, country: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, phoneNumberType: PhoneNumberType? = nil, state: String? = nil, tollFreePrefix: String? = nil) {
            self.areaCode = areaCode
            self.city = city
            self.country = country
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.phoneNumberType = phoneNumberType
            self.state = state
            self.tollFreePrefix = tollFreePrefix
        }

        public func validate(name: String) throws {
            try self.validate(self.country, name: "country", parent: name, pattern: "^[A-Z]{2}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.tollFreePrefix, name: "tollFreePrefix", parent: name, max: 3)
            try self.validate(self.tollFreePrefix, name: "tollFreePrefix", parent: name, min: 3)
            try self.validate(self.tollFreePrefix, name: "tollFreePrefix", parent: name, pattern: "^8(00|33|44|55|66|77|88)$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct SearchAvailablePhoneNumbersResponse: AWSDecodableShape {
        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]?
        /// The token used to retrieve the next page of search results.
        public let nextToken: String?

        public init(e164PhoneNumbers: [String]? = nil, nextToken: String? = nil) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
            case nextToken = "NextToken"
        }
    }

    public struct SelectedVideoStreams: AWSEncodableShape & AWSDecodableShape {
        /// The attendee IDs of the streams selected for a media capture pipeline.
        public let attendeeIds: [String]?
        /// The external user IDs of the streams selected for a media capture pipeline.
        public let externalUserIds: [String]?

        public init(attendeeIds: [String]? = nil, externalUserIds: [String]? = nil) {
            self.attendeeIds = attendeeIds
            self.externalUserIds = externalUserIds
        }

        public func validate(name: String) throws {
            try self.attendeeIds?.forEach {
                try validate($0, name: "attendeeIds[]", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            }
            try self.validate(self.attendeeIds, name: "attendeeIds", parent: name, min: 1)
            try self.externalUserIds?.forEach {
                try validate($0, name: "externalUserIds[]", parent: name, max: 64)
                try validate($0, name: "externalUserIds[]", parent: name, min: 2)
            }
            try self.validate(self.externalUserIds, name: "externalUserIds", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case attendeeIds = "AttendeeIds"
            case externalUserIds = "ExternalUserIds"
        }
    }

    public struct SendChannelMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The Idempotency token for each client request.
        public let clientRequestToken: String
        /// The content of the message.
        public let content: String
        /// The optional metadata for each message.
        public let metadata: String?
        /// Boolean that controls whether the message is persisted on the back end. Required.
        public let persistence: ChannelMessagePersistenceType
        /// The type of message, STANDARD or CONTROL.
        public let type: ChannelMessageType

        public init(channelArn: String, chimeBearer: String? = nil, clientRequestToken: String = SendChannelMessageRequest.idempotencyToken(), content: String, metadata: String? = nil, persistence: ChannelMessagePersistenceType, type: ChannelMessageType) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.clientRequestToken = clientRequestToken
            self.content = content
            self.metadata = metadata
            self.persistence = persistence
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
            try self.validate(self.content, name: "content", parent: name, min: 1)
            try self.validate(self.content, name: "content", parent: name, pattern: "^[\\s\\S]*$")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case content = "Content"
            case metadata = "Metadata"
            case persistence = "Persistence"
            case type = "Type"
        }
    }

    public struct SendChannelMessageResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The ID string assigned to each message.
        public let messageId: String?

        public init(channelArn: String? = nil, messageId: String? = nil) {
            self.channelArn = channelArn
            self.messageId = messageId
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case messageId = "MessageId"
        }
    }

    public struct SigninDelegateGroup: AWSEncodableShape & AWSDecodableShape {
        /// The group name.
        public let groupName: String?

        public init(groupName: String? = nil) {
            self.groupName = groupName
        }

        public func validate(name: String) throws {
            try self.validate(self.groupName, name: "groupName", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case groupName = "GroupName"
        }
    }

    public struct SipMediaApplication: AWSDecodableShape {
        /// The AWS Region in which the SIP media application is created.
        public let awsRegion: String?
        /// The SIP media application creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// List of endpoints for SIP media application. Currently, only one endpoint per SIP media application is permitted.
        public let endpoints: [SipMediaApplicationEndpoint]?
        /// The name of the SIP media application.
        public let name: String?
        /// The SIP media application ID.
        public let sipMediaApplicationId: String?
        /// The SIP media application updated timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(awsRegion: String? = nil, createdTimestamp: Date? = nil, endpoints: [SipMediaApplicationEndpoint]? = nil, name: String? = nil, sipMediaApplicationId: String? = nil, updatedTimestamp: Date? = nil) {
            self.awsRegion = awsRegion
            self.createdTimestamp = createdTimestamp
            self.endpoints = endpoints
            self.name = name
            self.sipMediaApplicationId = sipMediaApplicationId
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case createdTimestamp = "CreatedTimestamp"
            case endpoints = "Endpoints"
            case name = "Name"
            case sipMediaApplicationId = "SipMediaApplicationId"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct SipMediaApplicationCall: AWSDecodableShape {
        /// The transaction ID of a call.
        public let transactionId: String?

        public init(transactionId: String? = nil) {
            self.transactionId = transactionId
        }

        private enum CodingKeys: String, CodingKey {
            case transactionId = "TransactionId"
        }
    }

    public struct SipMediaApplicationEndpoint: AWSEncodableShape & AWSDecodableShape {
        /// Valid Amazon Resource Name (ARN) of the Lambda function. The function must be created in the same AWS Region as the SIP media application.
        public let lambdaArn: String?

        public init(lambdaArn: String? = nil) {
            self.lambdaArn = lambdaArn
        }

        public func validate(name: String) throws {
            try self.validate(self.lambdaArn, name: "lambdaArn", parent: name, max: 10000)
            try self.validate(self.lambdaArn, name: "lambdaArn", parent: name, pattern: "^arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?$")
        }

        private enum CodingKeys: String, CodingKey {
            case lambdaArn = "LambdaArn"
        }
    }

    public struct SipMediaApplicationLoggingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Enables application message logs for the SIP media application.
        public let enableSipMediaApplicationMessageLogs: Bool?

        public init(enableSipMediaApplicationMessageLogs: Bool? = nil) {
            self.enableSipMediaApplicationMessageLogs = enableSipMediaApplicationMessageLogs
        }

        private enum CodingKeys: String, CodingKey {
            case enableSipMediaApplicationMessageLogs = "EnableSipMediaApplicationMessageLogs"
        }
    }

    public struct SipRule: AWSDecodableShape {
        /// The time at which the SIP rule was created, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// Indicates whether the SIP rule is enabled or disabled. You must disable a rule before you can delete it.
        public let disabled: Bool?
        /// The name of the SIP rule.
        public let name: String?
        /// The SIP rule ID.
        public let sipRuleId: String?
        /// Target SIP media application and other details, such as priority and AWS Region, to be specified in the SIP rule. Only one SIP rule per AWS Region can be provided.
        public let targetApplications: [SipRuleTargetApplication]?
        /// The type of trigger assigned to the SIP rule in TriggerValue, currently RequestUriHostname or  ToPhoneNumber.
        public let triggerType: SipRuleTriggerType?
        /// If TriggerType is RequestUriHostname, then the value can be the outbound host name of the Amazon Chime Voice Connector. If TriggerType is ToPhoneNumber, then the value can be a customer-owned phone number in E164 format. SipRule is triggered when a SIP rule requests host name or ToPhoneNumber matches in the incoming SIP request.
        public let triggerValue: String?
        /// The time at which the SIP rule was last updated, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(createdTimestamp: Date? = nil, disabled: Bool? = nil, name: String? = nil, sipRuleId: String? = nil, targetApplications: [SipRuleTargetApplication]? = nil, triggerType: SipRuleTriggerType? = nil, triggerValue: String? = nil, updatedTimestamp: Date? = nil) {
            self.createdTimestamp = createdTimestamp
            self.disabled = disabled
            self.name = name
            self.sipRuleId = sipRuleId
            self.targetApplications = targetApplications
            self.triggerType = triggerType
            self.triggerValue = triggerValue
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case createdTimestamp = "CreatedTimestamp"
            case disabled = "Disabled"
            case name = "Name"
            case sipRuleId = "SipRuleId"
            case targetApplications = "TargetApplications"
            case triggerType = "TriggerType"
            case triggerValue = "TriggerValue"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct SipRuleTargetApplication: AWSEncodableShape & AWSDecodableShape {
        /// The AWS Region of the target application.
        public let awsRegion: String?
        /// Priority of the SIP media application in the target list.
        public let priority: Int?
        /// The SIP media application ID.
        public let sipMediaApplicationId: String?

        public init(awsRegion: String? = nil, priority: Int? = nil, sipMediaApplicationId: String? = nil) {
            self.awsRegion = awsRegion
            self.priority = priority
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.priority, name: "priority", parent: name, min: 1)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case priority = "Priority"
            case sipMediaApplicationId = "SipMediaApplicationId"
        }
    }

    public struct SourceConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The selected video streams to capture for a specified media capture pipeline. The number of video streams can't exceed 25.
        public let selectedVideoStreams: SelectedVideoStreams?

        public init(selectedVideoStreams: SelectedVideoStreams? = nil) {
            self.selectedVideoStreams = selectedVideoStreams
        }

        public func validate(name: String) throws {
            try self.selectedVideoStreams?.validate(name: "\(name).selectedVideoStreams")
        }

        private enum CodingKeys: String, CodingKey {
            case selectedVideoStreams = "SelectedVideoStreams"
        }
    }

    public struct StartMeetingTranscriptionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The unique ID of the meeting being transcribed.
        public let meetingId: String
        /// The configuration for the current transcription operation. Must contain EngineTranscribeSettings or EngineTranscribeMedicalSettings.
        public let transcriptionConfiguration: TranscriptionConfiguration

        public init(meetingId: String, transcriptionConfiguration: TranscriptionConfiguration) {
            self.meetingId = meetingId
            self.transcriptionConfiguration = transcriptionConfiguration
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.transcriptionConfiguration.validate(name: "\(name).transcriptionConfiguration")
        }

        private enum CodingKeys: String, CodingKey {
            case transcriptionConfiguration = "TranscriptionConfiguration"
        }
    }

    public struct StartMeetingTranscriptionResponse: AWSDecodableShape {
        public init() {}
    }

    public struct StopMeetingTranscriptionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The unique ID of the meeting for which you stop transcription.
        public let meetingId: String

        public init(meetingId: String) {
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StopMeetingTranscriptionResponse: AWSDecodableShape {
        public init() {}
    }

    public struct StreamingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The retention period, in hours, for the Amazon Kinesis data.
        public let dataRetentionInHours: Int
        /// When true, media streaming to Amazon Kinesis is turned off.
        public let disabled: Bool?
        /// The streaming notification targets.
        public let streamingNotificationTargets: [StreamingNotificationTarget]?

        public init(dataRetentionInHours: Int, disabled: Bool? = nil, streamingNotificationTargets: [StreamingNotificationTarget]? = nil) {
            self.dataRetentionInHours = dataRetentionInHours
            self.disabled = disabled
            self.streamingNotificationTargets = streamingNotificationTargets
        }

        public func validate(name: String) throws {
            try self.validate(self.dataRetentionInHours, name: "dataRetentionInHours", parent: name, min: 0)
            try self.validate(self.streamingNotificationTargets, name: "streamingNotificationTargets", parent: name, max: 3)
            try self.validate(self.streamingNotificationTargets, name: "streamingNotificationTargets", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case dataRetentionInHours = "DataRetentionInHours"
            case disabled = "Disabled"
            case streamingNotificationTargets = "StreamingNotificationTargets"
        }
    }

    public struct StreamingNotificationTarget: AWSEncodableShape & AWSDecodableShape {
        /// The streaming notification target.
        public let notificationTarget: NotificationTarget

        public init(notificationTarget: NotificationTarget) {
            self.notificationTarget = notificationTarget
        }

        private enum CodingKeys: String, CodingKey {
            case notificationTarget = "NotificationTarget"
        }
    }

    public struct Tag: AWSEncodableShape & AWSDecodableShape {
        /// The key of the tag.
        public let key: String
        /// The value of the tag.
        public let value: String

        public init(key: String, value: String) {
            self.key = key
            self.value = value
        }

        public func validate(name: String) throws {
            try self.validate(self.key, name: "key", parent: name, max: 128)
            try self.validate(self.key, name: "key", parent: name, min: 1)
            try self.validate(self.value, name: "value", parent: name, max: 256)
            try self.validate(self.value, name: "value", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case key = "Key"
            case value = "Value"
        }
    }

    public struct TagAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "attendeeId", location: .uri("AttendeeId")),
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The tag key-value pairs.
        public let tags: [Tag]

        public init(attendeeId: String, meetingId: String, tags: [Tag]) {
            self.attendeeId = attendeeId
            self.meetingId = meetingId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.attendeeId, name: "attendeeId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.tags.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 10)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct TagMeetingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The tag key-value pairs.
        public let tags: [Tag]

        public init(meetingId: String, tags: [Tag]) {
            self.meetingId = meetingId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.tags.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct TagResourceRequest: AWSEncodableShape {
        /// The resource ARN.
        public let resourceARN: String
        /// The tag key-value pairs.
        public let tags: [Tag]

        public init(resourceARN: String, tags: [Tag]) {
            self.resourceARN = resourceARN
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, max: 1024)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, min: 1)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
            try self.tags.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case resourceARN = "ResourceARN"
            case tags = "Tags"
        }
    }

    public struct TelephonySettings: AWSEncodableShape & AWSDecodableShape {
        /// Allows or denies inbound calling.
        public let inboundCalling: Bool
        /// Allows or denies outbound calling.
        public let outboundCalling: Bool
        /// Allows or denies SMS messaging.
        public let sms: Bool

        public init(inboundCalling: Bool, outboundCalling: Bool, sms: Bool) {
            self.inboundCalling = inboundCalling
            self.outboundCalling = outboundCalling
            self.sms = sms
        }

        private enum CodingKeys: String, CodingKey {
            case inboundCalling = "InboundCalling"
            case outboundCalling = "OutboundCalling"
            case sms = "SMS"
        }
    }

    public struct Termination: AWSEncodableShape & AWSDecodableShape {
        /// The countries to which calls are allowed, in ISO 3166-1 alpha-2 format. Required.
        public let callingRegions: [String]?
        /// The IP addresses allowed to make calls, in CIDR format. Required.
        public let cidrAllowedList: [String]?
        /// The limit on calls per second. Max value based on account service quota. Default value of 1.
        public let cpsLimit: Int?
        /// The default caller ID phone number.
        public let defaultPhoneNumber: String?
        /// When termination settings are disabled, outbound calls can not be made.
        public let disabled: Bool?

        public init(callingRegions: [String]? = nil, cidrAllowedList: [String]? = nil, cpsLimit: Int? = nil, defaultPhoneNumber: String? = nil, disabled: Bool? = nil) {
            self.callingRegions = callingRegions
            self.cidrAllowedList = cidrAllowedList
            self.cpsLimit = cpsLimit
            self.defaultPhoneNumber = defaultPhoneNumber
            self.disabled = disabled
        }

        public func validate(name: String) throws {
            try self.validate(self.cpsLimit, name: "cpsLimit", parent: name, min: 1)
            try self.validate(self.defaultPhoneNumber, name: "defaultPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case callingRegions = "CallingRegions"
            case cidrAllowedList = "CidrAllowedList"
            case cpsLimit = "CpsLimit"
            case defaultPhoneNumber = "DefaultPhoneNumber"
            case disabled = "Disabled"
        }
    }

    public struct TerminationHealth: AWSDecodableShape {
        /// The source IP address.
        public let source: String?
        /// The timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var timestamp: Date?

        public init(source: String? = nil, timestamp: Date? = nil) {
            self.source = source
            self.timestamp = timestamp
        }

        private enum CodingKeys: String, CodingKey {
            case source = "Source"
            case timestamp = "Timestamp"
        }
    }

    public struct TranscriptionConfiguration: AWSEncodableShape {
        /// The transcription configuration settings passed to Amazon Transcribe Medical.
        public let engineTranscribeMedicalSettings: EngineTranscribeMedicalSettings?
        /// The transcription configuration settings passed to Amazon Transcribe.
        public let engineTranscribeSettings: EngineTranscribeSettings?

        public init(engineTranscribeMedicalSettings: EngineTranscribeMedicalSettings? = nil, engineTranscribeSettings: EngineTranscribeSettings? = nil) {
            self.engineTranscribeMedicalSettings = engineTranscribeMedicalSettings
            self.engineTranscribeSettings = engineTranscribeSettings
        }

        public func validate(name: String) throws {
            try self.engineTranscribeSettings?.validate(name: "\(name).engineTranscribeSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case engineTranscribeMedicalSettings = "EngineTranscribeMedicalSettings"
            case engineTranscribeSettings = "EngineTranscribeSettings"
        }
    }

    public struct UntagAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "attendeeId", location: .uri("AttendeeId")),
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The tag keys.
        public let tagKeys: [String]

        public init(attendeeId: String, meetingId: String, tagKeys: [String]) {
            self.attendeeId = attendeeId
            self.meetingId = meetingId
            self.tagKeys = tagKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.attendeeId, name: "attendeeId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, max: 128)
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
            }
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, max: 10)
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case tagKeys = "TagKeys"
        }
    }

    public struct UntagMeetingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri("MeetingId"))
        ]

        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The tag keys.
        public let tagKeys: [String]

        public init(meetingId: String, tagKeys: [String]) {
            self.meetingId = meetingId
            self.tagKeys = tagKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "^[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}$")
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, max: 128)
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
            }
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, max: 50)
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case tagKeys = "TagKeys"
        }
    }

    public struct UntagResourceRequest: AWSEncodableShape {
        /// The resource ARN.
        public let resourceARN: String
        /// The tag keys.
        public let tagKeys: [String]

        public init(resourceARN: String, tagKeys: [String]) {
            self.resourceARN = resourceARN
            self.tagKeys = tagKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, max: 1024)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, min: 1)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, max: 128)
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
            }
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, max: 50)
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case resourceARN = "ResourceARN"
            case tagKeys = "TagKeys"
        }
    }

    public struct UpdateAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The default license applied when you add users to an Amazon Chime account.
        public let defaultLicense: License?
        /// The new name for the specified Amazon Chime account.
        public let name: String?

        public init(accountId: String, defaultLicense: License? = nil, name: String? = nil) {
            self.accountId = accountId
            self.defaultLicense = defaultLicense
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.name, name: "name", parent: name, max: 100)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case defaultLicense = "DefaultLicense"
            case name = "Name"
        }
    }

    public struct UpdateAccountResponse: AWSDecodableShape {
        /// The updated Amazon Chime account details.
        public let account: Account?

        public init(account: Account? = nil) {
            self.account = account
        }

        private enum CodingKeys: String, CodingKey {
            case account = "Account"
        }
    }

    public struct UpdateAccountSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The Amazon Chime account settings to update.
        public let accountSettings: AccountSettings

        public init(accountId: String, accountSettings: AccountSettings) {
            self.accountId = accountId
            self.accountSettings = accountSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case accountSettings = "AccountSettings"
        }
    }

    public struct UpdateAccountSettingsResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateAppInstanceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri("AppInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The metadata that you want to change.
        public let metadata: String?
        /// The name that you want to change.
        public let name: String

        public init(appInstanceArn: String, metadata: String? = nil, name: String) {
            self.appInstanceArn = appInstanceArn
            self.metadata = metadata
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]*$")
        }

        private enum CodingKeys: String, CodingKey {
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct UpdateAppInstanceResponse: AWSDecodableShape {
        /// The ARN of the AppInstance.
        public let appInstanceArn: String?

        public init(appInstanceArn: String? = nil) {
            self.appInstanceArn = appInstanceArn
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
        }
    }

    public struct UpdateAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .uri("AppInstanceUserArn"))
        ]

        /// The ARN of the AppInstanceUser.
        public let appInstanceUserArn: String
        /// The metadata of the AppInstanceUser.
        public let metadata: String?
        /// The name of the AppInstanceUser.
        public let name: String

        public init(appInstanceUserArn: String, metadata: String? = nil, name: String) {
            self.appInstanceUserArn = appInstanceUserArn
            self.metadata = metadata
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 100)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct UpdateAppInstanceUserResponse: AWSDecodableShape {
        /// The ARN of the AppInstanceUser.
        public let appInstanceUserArn: String?

        public init(appInstanceUserArn: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUserArn = "AppInstanceUserArn"
        }
    }

    public struct UpdateBotRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "botId", location: .uri("BotId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String
        /// When true, stops the specified bot from running in your account.
        public let disabled: Bool?

        public init(accountId: String, botId: String, disabled: Bool? = nil) {
            self.accountId = accountId
            self.botId = botId
            self.disabled = disabled
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.botId, name: "botId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case disabled = "Disabled"
        }
    }

    public struct UpdateBotResponse: AWSDecodableShape {
        /// The updated bot details.
        public let bot: Bot?

        public init(bot: Bot? = nil) {
            self.bot = bot
        }

        private enum CodingKeys: String, CodingKey {
            case bot = "Bot"
        }
    }

    public struct UpdateChannelMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer")),
            AWSMemberEncoding(label: "messageId", location: .uri("MessageId"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The content of the message being updated.
        public let content: String?
        /// The ID string of the message being updated.
        public let messageId: String
        /// The metadata of the message being updated.
        public let metadata: String?

        public init(channelArn: String, chimeBearer: String? = nil, content: String? = nil, messageId: String, metadata: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.content = content
            self.messageId = messageId
            self.metadata = metadata
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.content, name: "content", parent: name, max: 4096)
            try self.validate(self.content, name: "content", parent: name, pattern: "^[\\s\\S]*$")
            try self.validate(self.messageId, name: "messageId", parent: name, max: 128)
            try self.validate(self.messageId, name: "messageId", parent: name, min: 1)
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: "^[-_a-zA-Z0-9]*$")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
        }

        private enum CodingKeys: String, CodingKey {
            case content = "Content"
            case metadata = "Metadata"
        }
    }

    public struct UpdateChannelMessageResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The ID string of the message being updated.
        public let messageId: String?

        public init(channelArn: String? = nil, messageId: String? = nil) {
            self.channelArn = channelArn
            self.messageId = messageId
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case messageId = "MessageId"
        }
    }

    public struct UpdateChannelReadMarkerRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct UpdateChannelReadMarkerResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?

        public init(channelArn: String? = nil) {
            self.channelArn = channelArn
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
        }
    }

    public struct UpdateChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri("ChannelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header("x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The metadata for the update request.
        public let metadata: String?
        /// The mode of the update request.
        public let mode: ChannelMode
        /// The name of the channel.
        public let name: String

        public init(channelArn: String, chimeBearer: String? = nil, metadata: String? = nil, mode: ChannelMode, name: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.metadata = metadata
            self.mode = mode
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "^arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}$")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]*$")
        }

        private enum CodingKeys: String, CodingKey {
            case metadata = "Metadata"
            case mode = "Mode"
            case name = "Name"
        }
    }

    public struct UpdateChannelResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?

        public init(channelArn: String? = nil) {
            self.channelArn = channelArn
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
        }
    }

    public struct UpdateGlobalSettingsRequest: AWSEncodableShape {
        /// The Amazon Chime Business Calling settings.
        public let businessCalling: BusinessCallingSettings?
        /// The Amazon Chime Voice Connector settings.
        public let voiceConnector: VoiceConnectorSettings?

        public init(businessCalling: BusinessCallingSettings? = nil, voiceConnector: VoiceConnectorSettings? = nil) {
            self.businessCalling = businessCalling
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case businessCalling = "BusinessCalling"
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct UpdatePhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri("PhoneNumberId"))
        ]

        /// The outbound calling name associated with the phone number.
        public let callingName: String?
        /// The phone number ID.
        public let phoneNumberId: String
        /// The product type.
        public let productType: PhoneNumberProductType?

        public init(callingName: String? = nil, phoneNumberId: String, productType: PhoneNumberProductType? = nil) {
            self.callingName = callingName
            self.phoneNumberId = phoneNumberId
            self.productType = productType
        }

        public func validate(name: String) throws {
            try self.validate(self.callingName, name: "callingName", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{2,15}$")
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
            case productType = "ProductType"
        }
    }

    public struct UpdatePhoneNumberRequestItem: AWSEncodableShape {
        /// The outbound calling name to update.
        public let callingName: String?
        /// The phone number ID to update.
        public let phoneNumberId: String
        /// The product type to update.
        public let productType: PhoneNumberProductType?

        public init(callingName: String? = nil, phoneNumberId: String, productType: PhoneNumberProductType? = nil) {
            self.callingName = callingName
            self.phoneNumberId = phoneNumberId
            self.productType = productType
        }

        public func validate(name: String) throws {
            try self.validate(self.callingName, name: "callingName", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{2,15}$")
            try self.validate(self.phoneNumberId, name: "phoneNumberId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
            case phoneNumberId = "PhoneNumberId"
            case productType = "ProductType"
        }
    }

    public struct UpdatePhoneNumberResponse: AWSDecodableShape {
        /// The updated phone number details.
        public let phoneNumber: PhoneNumber?

        public init(phoneNumber: PhoneNumber? = nil) {
            self.phoneNumber = phoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
        }
    }

    public struct UpdatePhoneNumberSettingsRequest: AWSEncodableShape {
        /// The default outbound calling name for the account.
        public let callingName: String

        public init(callingName: String) {
            self.callingName = callingName
        }

        public func validate(name: String) throws {
            try self.validate(self.callingName, name: "callingName", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{2,15}$")
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
        }
    }

    public struct UpdateProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "proxySessionId", location: .uri("ProxySessionId")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The proxy session capabilities.
        public let capabilities: [Capability]
        /// The number of minutes allowed for the proxy session.
        public let expiryMinutes: Int?
        /// The proxy session ID.
        public let proxySessionId: String
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(capabilities: [Capability], expiryMinutes: Int? = nil, proxySessionId: String, voiceConnectorId: String) {
            self.capabilities = capabilities
            self.expiryMinutes = expiryMinutes
            self.proxySessionId = proxySessionId
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.expiryMinutes, name: "expiryMinutes", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, max: 128)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, pattern: "\\S")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case capabilities = "Capabilities"
            case expiryMinutes = "ExpiryMinutes"
        }
    }

    public struct UpdateProxySessionResponse: AWSDecodableShape {
        /// The proxy session details.
        public let proxySession: ProxySession?

        public init(proxySession: ProxySession? = nil) {
            self.proxySession = proxySession
        }

        private enum CodingKeys: String, CodingKey {
            case proxySession = "ProxySession"
        }
    }

    public struct UpdateRoomMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "memberId", location: .uri("MemberId")),
            AWSMemberEncoding(label: "roomId", location: .uri("RoomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The member ID.
        public let memberId: String
        /// The role of the member.
        public let role: RoomMembershipRole?
        /// The room ID.
        public let roomId: String

        public init(accountId: String, memberId: String, role: RoomMembershipRole? = nil, roomId: String) {
            self.accountId = accountId
            self.memberId = memberId
            self.role = role
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.memberId, name: "memberId", parent: name, pattern: "\\S")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case role = "Role"
        }
    }

    public struct UpdateRoomMembershipResponse: AWSDecodableShape {
        /// The room membership details.
        public let roomMembership: RoomMembership?

        public init(roomMembership: RoomMembership? = nil) {
            self.roomMembership = roomMembership
        }

        private enum CodingKeys: String, CodingKey {
            case roomMembership = "RoomMembership"
        }
    }

    public struct UpdateRoomRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "roomId", location: .uri("RoomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The room name.
        public let name: String?
        /// The room ID.
        public let roomId: String

        public init(accountId: String, name: String? = nil, roomId: String) {
            self.accountId = accountId
            self.name = name
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
        }
    }

    public struct UpdateRoomResponse: AWSDecodableShape {
        /// The room details.
        public let room: Room?

        public init(room: Room? = nil) {
            self.room = room
        }

        private enum CodingKeys: String, CodingKey {
            case room = "Room"
        }
    }

    public struct UpdateSipMediaApplicationCallRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId")),
            AWSMemberEncoding(label: "transactionId", location: .uri("TransactionId"))
        ]

        /// Arguments made available to the Lambda function as part of the CALL_UPDATE_REQUESTED event. Can contain 0-20 key-value pairs.
        public let arguments: [String: String]
        /// The ID of the SIP media application handling the call.
        public let sipMediaApplicationId: String
        /// The ID of the call transaction.
        public let transactionId: String

        public init(arguments: [String: String], sipMediaApplicationId: String, transactionId: String) {
            self.arguments = arguments
            self.sipMediaApplicationId = sipMediaApplicationId
            self.transactionId = transactionId
        }

        public func validate(name: String) throws {
            try self.validate(self.arguments, name: "arguments", parent: name, max: 20)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
            try self.validate(self.transactionId, name: "transactionId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case arguments = "Arguments"
        }
    }

    public struct UpdateSipMediaApplicationCallResponse: AWSDecodableShape {
        public let sipMediaApplicationCall: SipMediaApplicationCall?

        public init(sipMediaApplicationCall: SipMediaApplicationCall? = nil) {
            self.sipMediaApplicationCall = sipMediaApplicationCall
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationCall = "SipMediaApplicationCall"
        }
    }

    public struct UpdateSipMediaApplicationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri("SipMediaApplicationId"))
        ]

        /// The new set of endpoints for the specified SIP media application.
        public let endpoints: [SipMediaApplicationEndpoint]?
        /// The new name for the specified SIP media application.
        public let name: String?
        /// The SIP media application ID.
        public let sipMediaApplicationId: String

        public init(endpoints: [SipMediaApplicationEndpoint]? = nil, name: String? = nil, sipMediaApplicationId: String) {
            self.endpoints = endpoints
            self.name = name
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.endpoints?.forEach {
                try $0.validate(name: "\(name).endpoints[]")
            }
            try self.validate(self.endpoints, name: "endpoints", parent: name, max: 1)
            try self.validate(self.endpoints, name: "endpoints", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case endpoints = "Endpoints"
            case name = "Name"
        }
    }

    public struct UpdateSipMediaApplicationResponse: AWSDecodableShape {
        /// The updated SIP media application details.
        public let sipMediaApplication: SipMediaApplication?

        public init(sipMediaApplication: SipMediaApplication? = nil) {
            self.sipMediaApplication = sipMediaApplication
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplication = "SipMediaApplication"
        }
    }

    public struct UpdateSipRuleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipRuleId", location: .uri("SipRuleId"))
        ]

        /// The new value specified to indicate whether the rule is disabled.
        public let disabled: Bool?
        /// The new name for the specified SIP rule.
        public let name: String
        /// The SIP rule ID.
        public let sipRuleId: String
        /// The new value of the list of target applications.
        public let targetApplications: [SipRuleTargetApplication]?

        public init(disabled: Bool? = nil, name: String, sipRuleId: String, targetApplications: [SipRuleTargetApplication]? = nil) {
            self.disabled = disabled
            self.name = name
            self.sipRuleId = sipRuleId
            self.targetApplications = targetApplications
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.sipRuleId, name: "sipRuleId", parent: name, pattern: "\\S")
            try self.targetApplications?.forEach {
                try $0.validate(name: "\(name).targetApplications[]")
            }
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, max: 25)
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case disabled = "Disabled"
            case name = "Name"
            case targetApplications = "TargetApplications"
        }
    }

    public struct UpdateSipRuleResponse: AWSDecodableShape {
        /// Updated SIP rule details.
        public let sipRule: SipRule?

        public init(sipRule: SipRule? = nil) {
            self.sipRule = sipRule
        }

        private enum CodingKeys: String, CodingKey {
            case sipRule = "SipRule"
        }
    }

    public struct UpdateUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "userId", location: .uri("UserId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The Alexa for Business metadata.
        public let alexaForBusinessMetadata: AlexaForBusinessMetadata?
        /// The user license type to update. This must be a supported license type for the Amazon Chime account that the user belongs to.
        public let licenseType: License?
        /// The user ID.
        public let userId: String
        /// The user type.
        public let userType: UserType?

        public init(accountId: String, alexaForBusinessMetadata: AlexaForBusinessMetadata? = nil, licenseType: License? = nil, userId: String, userType: UserType? = nil) {
            self.accountId = accountId
            self.alexaForBusinessMetadata = alexaForBusinessMetadata
            self.licenseType = licenseType
            self.userId = userId
            self.userType = userType
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: "\\S")
            try self.validate(self.userId, name: "userId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case alexaForBusinessMetadata = "AlexaForBusinessMetadata"
            case licenseType = "LicenseType"
            case userType = "UserType"
        }
    }

    public struct UpdateUserRequestItem: AWSEncodableShape {
        /// The Alexa for Business metadata.
        public let alexaForBusinessMetadata: AlexaForBusinessMetadata?
        /// The user license type.
        public let licenseType: License?
        /// The user ID.
        public let userId: String
        /// The user type.
        public let userType: UserType?

        public init(alexaForBusinessMetadata: AlexaForBusinessMetadata? = nil, licenseType: License? = nil, userId: String, userType: UserType? = nil) {
            self.alexaForBusinessMetadata = alexaForBusinessMetadata
            self.licenseType = licenseType
            self.userId = userId
            self.userType = userType
        }

        public func validate(name: String) throws {
            try self.validate(self.userId, name: "userId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case alexaForBusinessMetadata = "AlexaForBusinessMetadata"
            case licenseType = "LicenseType"
            case userId = "UserId"
            case userType = "UserType"
        }
    }

    public struct UpdateUserResponse: AWSDecodableShape {
        /// The updated user details.
        public let user: User?

        public init(user: User? = nil) {
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case user = "User"
        }
    }

    public struct UpdateUserSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri("AccountId")),
            AWSMemberEncoding(label: "userId", location: .uri("UserId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String
        /// The user settings to update.
        public let userSettings: UserSettings

        public init(accountId: String, userId: String, userSettings: UserSettings) {
            self.accountId = accountId
            self.userId = userId
            self.userSettings = userSettings
        }

        private enum CodingKeys: String, CodingKey {
            case userSettings = "UserSettings"
        }
    }

    public struct UpdateVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri("VoiceConnectorGroupId"))
        ]

        /// The name of the Amazon Chime Voice Connector group.
        public let name: String
        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String
        /// The VoiceConnectorItems to associate with the group.
        public let voiceConnectorItems: [VoiceConnectorItem]

        public init(name: String, voiceConnectorGroupId: String, voiceConnectorItems: [VoiceConnectorItem]) {
            self.name = name
            self.voiceConnectorGroupId = voiceConnectorGroupId
            self.voiceConnectorItems = voiceConnectorItems
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: "\\S")
            try self.voiceConnectorItems.forEach {
                try $0.validate(name: "\(name).voiceConnectorItems[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case voiceConnectorItems = "VoiceConnectorItems"
        }
    }

    public struct UpdateVoiceConnectorGroupResponse: AWSDecodableShape {
        /// The updated Amazon Chime Voice Connector group details.
        public let voiceConnectorGroup: VoiceConnectorGroup?

        public init(voiceConnectorGroup: VoiceConnectorGroup? = nil) {
            self.voiceConnectorGroup = voiceConnectorGroup
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnectorGroup = "VoiceConnectorGroup"
        }
    }

    public struct UpdateVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri("VoiceConnectorId"))
        ]

        /// The name of the Amazon Chime Voice Connector.
        public let name: String
        /// When enabled, requires encryption for the Amazon Chime Voice Connector.
        public let requireEncryption: Bool
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(name: String, requireEncryption: Bool, voiceConnectorId: String) {
            self.name = name
            self.requireEncryption = requireEncryption
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case requireEncryption = "RequireEncryption"
        }
    }

    public struct UpdateVoiceConnectorResponse: AWSDecodableShape {
        /// The updated Amazon Chime Voice Connector details.
        public let voiceConnector: VoiceConnector?

        public init(voiceConnector: VoiceConnector? = nil) {
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct User: AWSDecodableShape {
        /// The Amazon Chime account ID.
        public let accountId: String?
        /// The Alexa for Business metadata.
        public let alexaForBusinessMetadata: AlexaForBusinessMetadata?
        /// The display name of the user.
        public let displayName: String?
        /// Date and time when the user is invited to the Amazon Chime account, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var invitedOn: Date?
        /// The license type for the user.
        public let licenseType: License?
        /// The user's personal meeting PIN.
        public let personalPIN: String?
        /// The primary email address of the user.
        public let primaryEmail: String?
        /// The primary phone number associated with the user.
        public let primaryProvisionedNumber: String?
        /// Date and time when the user is registered, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var registeredOn: Date?
        /// The user ID.
        public let userId: String
        /// The user invite status.
        public let userInvitationStatus: InviteStatus?
        /// The user registration status.
        public let userRegistrationStatus: RegistrationStatus?
        /// The user type.
        public let userType: UserType?

        public init(accountId: String? = nil, alexaForBusinessMetadata: AlexaForBusinessMetadata? = nil, displayName: String? = nil, invitedOn: Date? = nil, licenseType: License? = nil, personalPIN: String? = nil, primaryEmail: String? = nil, primaryProvisionedNumber: String? = nil, registeredOn: Date? = nil, userId: String, userInvitationStatus: InviteStatus? = nil, userRegistrationStatus: RegistrationStatus? = nil, userType: UserType? = nil) {
            self.accountId = accountId
            self.alexaForBusinessMetadata = alexaForBusinessMetadata
            self.displayName = displayName
            self.invitedOn = invitedOn
            self.licenseType = licenseType
            self.personalPIN = personalPIN
            self.primaryEmail = primaryEmail
            self.primaryProvisionedNumber = primaryProvisionedNumber
            self.registeredOn = registeredOn
            self.userId = userId
            self.userInvitationStatus = userInvitationStatus
            self.userRegistrationStatus = userRegistrationStatus
            self.userType = userType
        }

        private enum CodingKeys: String, CodingKey {
            case accountId = "AccountId"
            case alexaForBusinessMetadata = "AlexaForBusinessMetadata"
            case displayName = "DisplayName"
            case invitedOn = "InvitedOn"
            case licenseType = "LicenseType"
            case personalPIN = "PersonalPIN"
            case primaryEmail = "PrimaryEmail"
            case primaryProvisionedNumber = "PrimaryProvisionedNumber"
            case registeredOn = "RegisteredOn"
            case userId = "UserId"
            case userInvitationStatus = "UserInvitationStatus"
            case userRegistrationStatus = "UserRegistrationStatus"
            case userType = "UserType"
        }
    }

    public struct UserError: AWSDecodableShape {
        /// The error code.
        public let errorCode: ErrorCode?
        /// The error message.
        public let errorMessage: String?
        /// The user ID for which the action failed.
        public let userId: String?

        public init(errorCode: ErrorCode? = nil, errorMessage: String? = nil, userId: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.userId = userId
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case userId = "UserId"
        }
    }

    public struct UserSettings: AWSEncodableShape & AWSDecodableShape {
        /// The telephony settings associated with the user.
        public let telephony: TelephonySettings

        public init(telephony: TelephonySettings) {
            self.telephony = telephony
        }

        private enum CodingKeys: String, CodingKey {
            case telephony = "Telephony"
        }
    }

    public struct VideoArtifactsConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The MUX type of the video artifact configuration object.
        public let muxType: VideoMuxType?
        /// Indicates whether the video artifact is enabled or disabled.
        public let state: ArtifactsState

        public init(muxType: VideoMuxType? = nil, state: ArtifactsState) {
            self.muxType = muxType
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case muxType = "MuxType"
            case state = "State"
        }
    }

    public struct VoiceConnector: AWSDecodableShape {
        /// The AWS Region in which the Amazon Chime Voice Connector is created. Default:
        /// us-east-1.
        public let awsRegion: VoiceConnectorAwsRegion?
        /// The Amazon Chime Voice Connector creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The name of the Amazon Chime Voice Connector.
        public let name: String?
        /// The outbound host name for the Amazon Chime Voice Connector.
        public let outboundHostName: String?
        /// Designates whether encryption is required for the Amazon Chime Voice Connector.
        public let requireEncryption: Bool?
        /// The updated Amazon Chime Voice Connector timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?
        /// The ARN of the specified Amazon Chime Voice Connector.
        public let voiceConnectorArn: String?
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String?

        public init(awsRegion: VoiceConnectorAwsRegion? = nil, createdTimestamp: Date? = nil, name: String? = nil, outboundHostName: String? = nil, requireEncryption: Bool? = nil, updatedTimestamp: Date? = nil, voiceConnectorArn: String? = nil, voiceConnectorId: String? = nil) {
            self.awsRegion = awsRegion
            self.createdTimestamp = createdTimestamp
            self.name = name
            self.outboundHostName = outboundHostName
            self.requireEncryption = requireEncryption
            self.updatedTimestamp = updatedTimestamp
            self.voiceConnectorArn = voiceConnectorArn
            self.voiceConnectorId = voiceConnectorId
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case createdTimestamp = "CreatedTimestamp"
            case name = "Name"
            case outboundHostName = "OutboundHostName"
            case requireEncryption = "RequireEncryption"
            case updatedTimestamp = "UpdatedTimestamp"
            case voiceConnectorArn = "VoiceConnectorArn"
            case voiceConnectorId = "VoiceConnectorId"
        }
    }

    public struct VoiceConnectorGroup: AWSDecodableShape {
        /// The Amazon Chime Voice Connector group creation time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The name of the Amazon Chime Voice Connector group.
        public let name: String?
        /// The updated Amazon Chime Voice Connector group time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?
        /// The ARN of the specified Amazon Chime Voice Connector group.
        public let voiceConnectorGroupArn: String?
        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String?
        /// The Amazon Chime Voice Connectors to which to route inbound calls.
        public let voiceConnectorItems: [VoiceConnectorItem]?

        public init(createdTimestamp: Date? = nil, name: String? = nil, updatedTimestamp: Date? = nil, voiceConnectorGroupArn: String? = nil, voiceConnectorGroupId: String? = nil, voiceConnectorItems: [VoiceConnectorItem]? = nil) {
            self.createdTimestamp = createdTimestamp
            self.name = name
            self.updatedTimestamp = updatedTimestamp
            self.voiceConnectorGroupArn = voiceConnectorGroupArn
            self.voiceConnectorGroupId = voiceConnectorGroupId
            self.voiceConnectorItems = voiceConnectorItems
        }

        private enum CodingKeys: String, CodingKey {
            case createdTimestamp = "CreatedTimestamp"
            case name = "Name"
            case updatedTimestamp = "UpdatedTimestamp"
            case voiceConnectorGroupArn = "VoiceConnectorGroupArn"
            case voiceConnectorGroupId = "VoiceConnectorGroupId"
            case voiceConnectorItems = "VoiceConnectorItems"
        }
    }

    public struct VoiceConnectorItem: AWSEncodableShape & AWSDecodableShape {
        /// The priority associated with the Amazon Chime Voice Connector, with 1 being the highest priority. Higher priority Amazon Chime Voice Connectors are attempted first.
        public let priority: Int
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(priority: Int, voiceConnectorId: String) {
            self.priority = priority
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.priority, name: "priority", parent: name, max: 99)
            try self.validate(self.priority, name: "priority", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: "\\S")
        }

        private enum CodingKeys: String, CodingKey {
            case priority = "Priority"
            case voiceConnectorId = "VoiceConnectorId"
        }
    }

    public struct VoiceConnectorSettings: AWSEncodableShape & AWSDecodableShape {
        /// The Amazon S3 bucket designated for call detail record storage.
        public let cdrBucket: String?

        public init(cdrBucket: String? = nil) {
            self.cdrBucket = cdrBucket
        }

        private enum CodingKeys: String, CodingKey {
            case cdrBucket = "CdrBucket"
        }
    }
}
