// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/noppoMan/aws-sdk-swift/blob/master/Sources/CodeGenerator/main.swift. DO NOT EDIT.

import Foundation
import AWSSDKSwiftCore

extension Clouddirectory {

    public struct LinkAttributeAction: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttributeUpdateValue", required: false, type: .structure), 
            AWSShapeMember(label: "AttributeActionType", required: false, type: .enum)
        ]
        /// The value that you want to update to.
        public let attributeUpdateValue: TypedAttributeValue?
        /// A type that can be either UPDATE_OR_CREATE or DELETE.
        public let attributeActionType: UpdateActionType?

        public init(attributeUpdateValue: TypedAttributeValue? = nil, attributeActionType: UpdateActionType? = nil) {
            self.attributeUpdateValue = attributeUpdateValue
            self.attributeActionType = attributeActionType
        }

        private enum CodingKeys: String, CodingKey {
            case attributeUpdateValue = "AttributeUpdateValue"
            case attributeActionType = "AttributeActionType"
        }
    }

    public struct FacetAttribute: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttributeReference", required: false, type: .structure), 
            AWSShapeMember(label: "AttributeDefinition", required: false, type: .structure), 
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "RequiredBehavior", required: false, type: .enum)
        ]
        /// An attribute reference that is associated with the attribute. See Attribute References for more information.
        public let attributeReference: FacetAttributeReference?
        /// A facet attribute consists of either a definition or a reference. This structure contains the attribute definition. See Attribute References for more information.
        public let attributeDefinition: FacetAttributeDefinition?
        /// The name of the facet attribute.
        public let name: String
        /// The required behavior of the FacetAttribute.
        public let requiredBehavior: RequiredAttributeBehavior?

        public init(attributeReference: FacetAttributeReference? = nil, attributeDefinition: FacetAttributeDefinition? = nil, name: String, requiredBehavior: RequiredAttributeBehavior? = nil) {
            self.attributeReference = attributeReference
            self.attributeDefinition = attributeDefinition
            self.name = name
            self.requiredBehavior = requiredBehavior
        }

        private enum CodingKeys: String, CodingKey {
            case attributeReference = "AttributeReference"
            case attributeDefinition = "AttributeDefinition"
            case name = "Name"
            case requiredBehavior = "RequiredBehavior"
        }
    }

    public struct BatchDetachPolicyResponse: AWSShape {

    }

    public struct TagResourceRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ResourceArn", required: true, type: .string), 
            AWSShapeMember(label: "Tags", required: true, type: .list)
        ]
        /// The Amazon Resource Name (ARN) of the resource. Tagging is only supported for directories.
        public let resourceArn: String
        /// A list of tag key-value pairs.
        public let tags: [Tag]

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

        private enum CodingKeys: String, CodingKey {
            case resourceArn = "ResourceArn"
            case tags = "Tags"
        }
    }

    public struct BatchListIncomingTypedLinksResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "LinkSpecifiers", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// Returns one or more typed link specifiers as output.
        public let linkSpecifiers: [TypedLinkSpecifier]?
        /// The pagination token.
        public let nextToken: String?

        public init(linkSpecifiers: [TypedLinkSpecifier]? = nil, nextToken: String? = nil) {
            self.linkSpecifiers = linkSpecifiers
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case linkSpecifiers = "LinkSpecifiers"
            case nextToken = "NextToken"
        }
    }

    public struct UpdateSchemaResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaArn", required: false, type: .string)
        ]
        /// The ARN that is associated with the updated schema. For more information, see arns.
        public let schemaArn: String?

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

        private enum CodingKeys: String, CodingKey {
            case schemaArn = "SchemaArn"
        }
    }

    public struct Rule: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Type", required: false, type: .enum), 
            AWSShapeMember(label: "Parameters", required: false, type: .map)
        ]
        /// The type of attribute validation rule.
        public let `type`: RuleType?
        /// The minimum and maximum parameters that are associated with the rule.
        public let parameters: [String: String]?

        public init(type: RuleType? = nil, parameters: [String: String]? = nil) {
            self.`type` = `type`
            self.parameters = parameters
        }

        private enum CodingKeys: String, CodingKey {
            case `type` = "Type"
            case parameters = "Parameters"
        }
    }

    public struct GetDirectoryRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The ARN of the directory.
        public let directoryArn: String

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

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct ListObjectChildrenResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Children", required: false, type: .map)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// Children structure, which is a map with key as the LinkName and ObjectIdentifier as the value.
        public let children: [String: String]?

        public init(nextToken: String? = nil, children: [String: String]? = nil) {
            self.nextToken = nextToken
            self.children = children
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case children = "Children"
        }
    }

    public struct BatchAttachPolicyResponse: AWSShape {

    }

    public struct UpgradeAppliedSchemaResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "UpgradedSchemaArn", required: false, type: .string), 
            AWSShapeMember(label: "DirectoryArn", required: false, type: .string)
        ]
        /// The ARN of the upgraded schema that is returned as part of the response.
        public let upgradedSchemaArn: String?
        /// The ARN of the directory that is returned as part of the response.
        public let directoryArn: String?

        public init(upgradedSchemaArn: String? = nil, directoryArn: String? = nil) {
            self.upgradedSchemaArn = upgradedSchemaArn
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case upgradedSchemaArn = "UpgradedSchemaArn"
            case directoryArn = "DirectoryArn"
        }
    }

    public struct AddFacetToObjectResponse: AWSShape {

    }

    public enum BatchReadExceptionType: String, CustomStringConvertible, Codable {
        case validationexception = "ValidationException"
        case invalidarnexception = "InvalidArnException"
        case resourcenotfoundexception = "ResourceNotFoundException"
        case invalidnexttokenexception = "InvalidNextTokenException"
        case accessdeniedexception = "AccessDeniedException"
        case notnodeexception = "NotNodeException"
        case facetvalidationexception = "FacetValidationException"
        case cannotlistparentofrootexception = "CannotListParentOfRootException"
        case notindexexception = "NotIndexException"
        case notpolicyexception = "NotPolicyException"
        case directorynotenabledexception = "DirectoryNotEnabledException"
        case limitexceededexception = "LimitExceededException"
        case internalserviceexception = "InternalServiceException"
        public var description: String { return self.rawValue }
    }

    public struct TypedAttributeValueRange: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "EndValue", required: false, type: .structure), 
            AWSShapeMember(label: "EndMode", required: true, type: .enum), 
            AWSShapeMember(label: "StartValue", required: false, type: .structure), 
            AWSShapeMember(label: "StartMode", required: true, type: .enum)
        ]
        /// The attribute value to terminate the range at.
        public let endValue: TypedAttributeValue?
        /// The inclusive or exclusive range end.
        public let endMode: RangeMode
        /// The value to start the range at.
        public let startValue: TypedAttributeValue?
        /// The inclusive or exclusive range start.
        public let startMode: RangeMode

        public init(endValue: TypedAttributeValue? = nil, endMode: RangeMode, startValue: TypedAttributeValue? = nil, startMode: RangeMode) {
            self.endValue = endValue
            self.endMode = endMode
            self.startValue = startValue
            self.startMode = startMode
        }

        private enum CodingKeys: String, CodingKey {
            case endValue = "EndValue"
            case endMode = "EndMode"
            case startValue = "StartValue"
            case startMode = "StartMode"
        }
    }

    public enum RangeMode: String, CustomStringConvertible, Codable {
        case first = "FIRST"
        case last = "LAST"
        case lastBeforeMissingValues = "LAST_BEFORE_MISSING_VALUES"
        case inclusive = "INCLUSIVE"
        case exclusive = "EXCLUSIVE"
        public var description: String { return self.rawValue }
    }

    public struct GetSchemaAsJsonResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Document", required: false, type: .string), 
            AWSShapeMember(label: "Name", required: false, type: .string)
        ]
        /// The JSON representation of the schema document.
        public let document: String?
        /// The name of the retrieved schema.
        public let name: String?

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

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

    public struct AddFacetToObjectRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "SchemaFacet", required: true, type: .structure), 
            AWSShapeMember(label: "ObjectAttributeList", required: false, type: .list), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
        public let directoryArn: String
        /// Identifiers for the facet that you are adding to the object. See SchemaFacet for details.
        public let schemaFacet: SchemaFacet
        /// Attributes on the facet that you are adding to the object.
        public let objectAttributeList: [AttributeKeyAndValue]?
        /// A reference to the object you are adding the specified facet to.
        public let objectReference: ObjectReference

        public init(directoryArn: String, schemaFacet: SchemaFacet, objectAttributeList: [AttributeKeyAndValue]? = nil, objectReference: ObjectReference) {
            self.directoryArn = directoryArn
            self.schemaFacet = schemaFacet
            self.objectAttributeList = objectAttributeList
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "x-amz-data-partition"
            case schemaFacet = "SchemaFacet"
            case objectAttributeList = "ObjectAttributeList"
            case objectReference = "ObjectReference"
        }
    }

    public struct BatchListAttachedIndices: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TargetReference", required: true, type: .structure), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// A reference to the object that has indices attached.
        public let targetReference: ObjectReference
        /// The pagination token.
        public let nextToken: String?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(targetReference: ObjectReference, nextToken: String? = nil, maxResults: Int32? = nil) {
            self.targetReference = targetReference
            self.nextToken = nextToken
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case targetReference = "TargetReference"
            case nextToken = "NextToken"
            case maxResults = "MaxResults"
        }
    }

    public struct BatchListPolicyAttachmentsResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ObjectIdentifiers", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// A list of ObjectIdentifiers to which the policy is attached.
        public let objectIdentifiers: [String]?

        public init(nextToken: String? = nil, objectIdentifiers: [String]? = nil) {
            self.nextToken = nextToken
            self.objectIdentifiers = objectIdentifiers
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case objectIdentifiers = "ObjectIdentifiers"
        }
    }

    public struct BatchDetachFromIndexResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DetachedObjectIdentifier", required: false, type: .string)
        ]
        /// The ObjectIdentifier of the object that was detached from the index.
        public let detachedObjectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case detachedObjectIdentifier = "DetachedObjectIdentifier"
        }
    }

    public enum ObjectType: String, CustomStringConvertible, Codable {
        case node = "NODE"
        case leafNode = "LEAF_NODE"
        case policy = "POLICY"
        case index = "INDEX"
        public var description: String { return self.rawValue }
    }

    public struct ListDevelopmentSchemaArnsRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(nextToken: String? = nil, maxResults: Int32? = nil) {
            self.nextToken = nextToken
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case maxResults = "MaxResults"
        }
    }

    public struct Directory: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "CreationDateTime", required: false, type: .timestamp), 
            AWSShapeMember(label: "DirectoryArn", required: false, type: .string), 
            AWSShapeMember(label: "Name", required: false, type: .string), 
            AWSShapeMember(label: "State", required: false, type: .enum)
        ]
        /// The date and time when the directory was created.
        public let creationDateTime: TimeStamp?
        /// The Amazon Resource Name (ARN) that is associated with the directory. For more information, see arns.
        public let directoryArn: String?
        /// The name of the directory.
        public let name: String?
        /// The state of the directory. Can be either Enabled, Disabled, or Deleted.
        public let state: DirectoryState?

        public init(creationDateTime: TimeStamp? = nil, directoryArn: String? = nil, name: String? = nil, state: DirectoryState? = nil) {
            self.creationDateTime = creationDateTime
            self.directoryArn = directoryArn
            self.name = name
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case creationDateTime = "CreationDateTime"
            case directoryArn = "DirectoryArn"
            case name = "Name"
            case state = "State"
        }
    }

    public struct GetTypedLinkFacetInformationResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IdentityAttributeOrder", required: false, type: .list)
        ]
        /// The order of identity attributes for the facet, from most significant to least significant. The ability to filter typed links considers the order that the attributes are defined on the typed link facet. When providing ranges to typed link selection, any inexact ranges must be specified at the end. Any attributes that do not have a range specified are presumed to match the entire range. Filters are interpreted in the order of the attributes on the typed link facet, not the order in which they are supplied to any API calls. For more information about identity attributes, see Typed link.
        public let identityAttributeOrder: [String]?

        public init(identityAttributeOrder: [String]? = nil) {
            self.identityAttributeOrder = identityAttributeOrder
        }

        private enum CodingKeys: String, CodingKey {
            case identityAttributeOrder = "IdentityAttributeOrder"
        }
    }

    public struct LookupPolicyResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "PolicyToPathList", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// Provides list of path to policies. Policies contain PolicyId, ObjectIdentifier, and PolicyType. For more information, see Policies.
        public let policyToPathList: [PolicyToPath]?
        /// The pagination token.
        public let nextToken: String?

        public init(policyToPathList: [PolicyToPath]? = nil, nextToken: String? = nil) {
            self.policyToPathList = policyToPathList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case policyToPathList = "PolicyToPathList"
            case nextToken = "NextToken"
        }
    }

    public struct BatchUpdateLinkAttributes: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttributeUpdates", required: true, type: .list), 
            AWSShapeMember(label: "TypedLinkSpecifier", required: true, type: .structure)
        ]
        /// The attributes update structure.
        public let attributeUpdates: [LinkAttributeUpdate]
        /// Allows a typed link specifier to be accepted as input.
        public let typedLinkSpecifier: TypedLinkSpecifier

        public init(attributeUpdates: [LinkAttributeUpdate], typedLinkSpecifier: TypedLinkSpecifier) {
            self.attributeUpdates = attributeUpdates
            self.typedLinkSpecifier = typedLinkSpecifier
        }

        private enum CodingKeys: String, CodingKey {
            case attributeUpdates = "AttributeUpdates"
            case typedLinkSpecifier = "TypedLinkSpecifier"
        }
    }

    public struct BatchRemoveFacetFromObjectResponse: AWSShape {

    }

    public struct CreateSchemaResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaArn", required: false, type: .string)
        ]
        /// The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
        public let schemaArn: String?

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

        private enum CodingKeys: String, CodingKey {
            case schemaArn = "SchemaArn"
        }
    }

    public struct RemoveFacetFromObjectRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaFacet", required: true, type: .structure), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The facet to remove. See SchemaFacet for details.
        public let schemaFacet: SchemaFacet
        /// A reference to the object to remove the facet from.
        public let objectReference: ObjectReference
        /// The ARN of the directory in which the object resides.
        public let directoryArn: String

        public init(schemaFacet: SchemaFacet, objectReference: ObjectReference, directoryArn: String) {
            self.schemaFacet = schemaFacet
            self.objectReference = objectReference
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case schemaFacet = "SchemaFacet"
            case objectReference = "ObjectReference"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct ObjectAttributeRange: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Range", required: false, type: .structure), 
            AWSShapeMember(label: "AttributeKey", required: false, type: .structure)
        ]
        /// The range of attribute values being selected.
        public let range: TypedAttributeValueRange?
        /// The key of the attribute that the attribute range covers.
        public let attributeKey: AttributeKey?

        public init(range: TypedAttributeValueRange? = nil, attributeKey: AttributeKey? = nil) {
            self.range = range
            self.attributeKey = attributeKey
        }

        private enum CodingKeys: String, CodingKey {
            case range = "Range"
            case attributeKey = "AttributeKey"
        }
    }

    public struct Tag: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Value", required: false, type: .string), 
            AWSShapeMember(label: "Key", required: false, type: .string)
        ]
        /// The value that is associated with the tag.
        public let value: String?
        /// The key that is associated with the tag.
        public let key: String?

        public init(value: String? = nil, key: String? = nil) {
            self.value = value
            self.key = key
        }

        private enum CodingKeys: String, CodingKey {
            case value = "Value"
            case key = "Key"
        }
    }

    public struct BatchWriteOperationResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AddFacetToObject", required: false, type: .structure), 
            AWSShapeMember(label: "DetachObject", required: false, type: .structure), 
            AWSShapeMember(label: "AttachTypedLink", required: false, type: .structure), 
            AWSShapeMember(label: "AttachObject", required: false, type: .structure), 
            AWSShapeMember(label: "DetachTypedLink", required: false, type: .structure), 
            AWSShapeMember(label: "UpdateLinkAttributes", required: false, type: .structure), 
            AWSShapeMember(label: "CreateIndex", required: false, type: .structure), 
            AWSShapeMember(label: "DeleteObject", required: false, type: .structure), 
            AWSShapeMember(label: "RemoveFacetFromObject", required: false, type: .structure), 
            AWSShapeMember(label: "UpdateObjectAttributes", required: false, type: .structure), 
            AWSShapeMember(label: "DetachFromIndex", required: false, type: .structure), 
            AWSShapeMember(label: "DetachPolicy", required: false, type: .structure), 
            AWSShapeMember(label: "AttachPolicy", required: false, type: .structure), 
            AWSShapeMember(label: "CreateObject", required: false, type: .structure), 
            AWSShapeMember(label: "AttachToIndex", required: false, type: .structure)
        ]
        /// The result of an add facet to object batch operation.
        public let addFacetToObject: BatchAddFacetToObjectResponse?
        /// Detaches an object from a Directory.
        public let detachObject: BatchDetachObjectResponse?
        /// Attaches a typed link to a specified source and target object. For more information, see Typed link.
        public let attachTypedLink: BatchAttachTypedLinkResponse?
        /// Attaches an object to a Directory.
        public let attachObject: BatchAttachObjectResponse?
        /// Detaches a typed link from a specified source and target object. For more information, see Typed link.
        public let detachTypedLink: BatchDetachTypedLinkResponse?
        /// Represents the output of a BatchWrite response operation.
        public let updateLinkAttributes: BatchUpdateLinkAttributesResponse?
        /// Creates an index object. See Indexing for more information.
        public let createIndex: BatchCreateIndexResponse?
        /// Deletes an object in a Directory.
        public let deleteObject: BatchDeleteObjectResponse?
        /// The result of a batch remove facet from object operation.
        public let removeFacetFromObject: BatchRemoveFacetFromObjectResponse?
        /// Updates a given object’s attributes.
        public let updateObjectAttributes: BatchUpdateObjectAttributesResponse?
        /// Detaches the specified object from the specified index.
        public let detachFromIndex: BatchDetachFromIndexResponse?
        /// Detaches a policy from a Directory.
        public let detachPolicy: BatchDetachPolicyResponse?
        /// Attaches a policy object to a regular object. An object can have a limited number of attached policies.
        public let attachPolicy: BatchAttachPolicyResponse?
        /// Creates an object in a Directory.
        public let createObject: BatchCreateObjectResponse?
        /// Attaches the specified object to the specified index.
        public let attachToIndex: BatchAttachToIndexResponse?

        public init(addFacetToObject: BatchAddFacetToObjectResponse? = nil, detachObject: BatchDetachObjectResponse? = nil, attachTypedLink: BatchAttachTypedLinkResponse? = nil, attachObject: BatchAttachObjectResponse? = nil, detachTypedLink: BatchDetachTypedLinkResponse? = nil, updateLinkAttributes: BatchUpdateLinkAttributesResponse? = nil, createIndex: BatchCreateIndexResponse? = nil, deleteObject: BatchDeleteObjectResponse? = nil, removeFacetFromObject: BatchRemoveFacetFromObjectResponse? = nil, updateObjectAttributes: BatchUpdateObjectAttributesResponse? = nil, detachFromIndex: BatchDetachFromIndexResponse? = nil, detachPolicy: BatchDetachPolicyResponse? = nil, attachPolicy: BatchAttachPolicyResponse? = nil, createObject: BatchCreateObjectResponse? = nil, attachToIndex: BatchAttachToIndexResponse? = nil) {
            self.addFacetToObject = addFacetToObject
            self.detachObject = detachObject
            self.attachTypedLink = attachTypedLink
            self.attachObject = attachObject
            self.detachTypedLink = detachTypedLink
            self.updateLinkAttributes = updateLinkAttributes
            self.createIndex = createIndex
            self.deleteObject = deleteObject
            self.removeFacetFromObject = removeFacetFromObject
            self.updateObjectAttributes = updateObjectAttributes
            self.detachFromIndex = detachFromIndex
            self.detachPolicy = detachPolicy
            self.attachPolicy = attachPolicy
            self.createObject = createObject
            self.attachToIndex = attachToIndex
        }

        private enum CodingKeys: String, CodingKey {
            case addFacetToObject = "AddFacetToObject"
            case detachObject = "DetachObject"
            case attachTypedLink = "AttachTypedLink"
            case attachObject = "AttachObject"
            case detachTypedLink = "DetachTypedLink"
            case updateLinkAttributes = "UpdateLinkAttributes"
            case createIndex = "CreateIndex"
            case deleteObject = "DeleteObject"
            case removeFacetFromObject = "RemoveFacetFromObject"
            case updateObjectAttributes = "UpdateObjectAttributes"
            case detachFromIndex = "DetachFromIndex"
            case detachPolicy = "DetachPolicy"
            case attachPolicy = "AttachPolicy"
            case createObject = "CreateObject"
            case attachToIndex = "AttachToIndex"
        }
    }

    public enum RuleType: String, CustomStringConvertible, Codable {
        case binaryLength = "BINARY_LENGTH"
        case numberComparison = "NUMBER_COMPARISON"
        case stringFromSet = "STRING_FROM_SET"
        case stringLength = "STRING_LENGTH"
        public var description: String { return self.rawValue }
    }

    public struct ListOutgoingTypedLinksRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "ConsistencyLevel", required: false, type: .enum), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "FilterAttributeRanges", required: false, type: .list), 
            AWSShapeMember(label: "FilterTypedLink", required: false, type: .structure)
        ]
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?
        /// The Amazon Resource Name (ARN) of the directory where you want to list the typed links.
        public let directoryArn: String
        /// The consistency level to execute the request at.
        public let consistencyLevel: ConsistencyLevel?
        /// A reference that identifies the object whose attributes will be listed.
        public let objectReference: ObjectReference
        /// The pagination token.
        public let nextToken: String?
        /// Provides range filters for multiple attributes. When providing ranges to typed link selection, any inexact ranges must be specified at the end. Any attributes that do not have a range specified are presumed to match the entire range.
        public let filterAttributeRanges: [TypedLinkAttributeRange]?
        /// Filters are interpreted in the order of the attributes defined on the typed link facet, not the order they are supplied to any API calls.
        public let filterTypedLink: TypedLinkSchemaAndFacetName?

        public init(maxResults: Int32? = nil, directoryArn: String, consistencyLevel: ConsistencyLevel? = nil, objectReference: ObjectReference, nextToken: String? = nil, filterAttributeRanges: [TypedLinkAttributeRange]? = nil, filterTypedLink: TypedLinkSchemaAndFacetName? = nil) {
            self.maxResults = maxResults
            self.directoryArn = directoryArn
            self.consistencyLevel = consistencyLevel
            self.objectReference = objectReference
            self.nextToken = nextToken
            self.filterAttributeRanges = filterAttributeRanges
            self.filterTypedLink = filterTypedLink
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case directoryArn = "x-amz-data-partition"
            case consistencyLevel = "ConsistencyLevel"
            case objectReference = "ObjectReference"
            case nextToken = "NextToken"
            case filterAttributeRanges = "FilterAttributeRanges"
            case filterTypedLink = "FilterTypedLink"
        }
    }

    public struct ApplySchemaRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "PublishedSchemaArn", required: true, type: .string), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// Published schema Amazon Resource Name (ARN) that needs to be copied. For more information, see arns.
        public let publishedSchemaArn: String
        /// The Amazon Resource Name (ARN) that is associated with the Directory into which the schema is copied. For more information, see arns.
        public let directoryArn: String

        public init(publishedSchemaArn: String, directoryArn: String) {
            self.publishedSchemaArn = publishedSchemaArn
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case publishedSchemaArn = "PublishedSchemaArn"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public enum FacetStyle: String, CustomStringConvertible, Codable {
        case `static` = "STATIC"
        case dynamic = "DYNAMIC"
        public var description: String { return self.rawValue }
    }

    public struct BatchListObjectParentPaths: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The reference that identifies the object whose attributes will be listed.
        public let objectReference: ObjectReference
        /// The pagination token.
        public let nextToken: String?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(objectReference: ObjectReference, nextToken: String? = nil, maxResults: Int32? = nil) {
            self.objectReference = objectReference
            self.nextToken = nextToken
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case objectReference = "ObjectReference"
            case nextToken = "NextToken"
            case maxResults = "MaxResults"
        }
    }

    public struct ListIndexRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IndexReference", required: true, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "ConsistencyLevel", location: .header(locationName: "x-amz-consistency-level"), required: false, type: .enum), 
            AWSShapeMember(label: "RangesOnIndexedValues", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The reference to the index to list.
        public let indexReference: ObjectReference
        /// The ARN of the directory that the index exists in.
        public let directoryArn: String
        /// The consistency level to execute the request at.
        public let consistencyLevel: ConsistencyLevel?
        /// Specifies the ranges of indexed values that you want to query.
        public let rangesOnIndexedValues: [ObjectAttributeRange]?
        /// The pagination token.
        public let nextToken: String?
        /// The maximum number of objects in a single page to retrieve from the index during a request. For more information, see AWS Directory Service Limits.
        public let maxResults: Int32?

        public init(indexReference: ObjectReference, directoryArn: String, consistencyLevel: ConsistencyLevel? = nil, rangesOnIndexedValues: [ObjectAttributeRange]? = nil, nextToken: String? = nil, maxResults: Int32? = nil) {
            self.indexReference = indexReference
            self.directoryArn = directoryArn
            self.consistencyLevel = consistencyLevel
            self.rangesOnIndexedValues = rangesOnIndexedValues
            self.nextToken = nextToken
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case indexReference = "IndexReference"
            case directoryArn = "x-amz-data-partition"
            case consistencyLevel = "x-amz-consistency-level"
            case rangesOnIndexedValues = "RangesOnIndexedValues"
            case nextToken = "NextToken"
            case maxResults = "MaxResults"
        }
    }

    public struct ListTypedLinkFacetAttributesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The unique name of the typed link facet.
        public let name: String
        /// The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
        public let schemaArn: String
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(nextToken: String? = nil, name: String, schemaArn: String, maxResults: Int32? = nil) {
            self.nextToken = nextToken
            self.name = name
            self.schemaArn = schemaArn
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case name = "Name"
            case schemaArn = "x-amz-data-partition"
            case maxResults = "MaxResults"
        }
    }

    public struct TypedLinkFacetAttributeUpdate: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Action", required: true, type: .enum), 
            AWSShapeMember(label: "Attribute", required: true, type: .structure)
        ]
        /// The action to perform when updating the attribute.
        public let action: UpdateActionType
        /// The attribute to update.
        public let attribute: TypedLinkAttributeDefinition

        public init(action: UpdateActionType, attribute: TypedLinkAttributeDefinition) {
            self.action = action
            self.attribute = attribute
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case attribute = "Attribute"
        }
    }

    public struct AttachToIndexRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TargetReference", required: true, type: .structure), 
            AWSShapeMember(label: "IndexReference", required: true, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// A reference to the object that you are attaching to the index.
        public let targetReference: ObjectReference
        /// A reference to the index that you are attaching the object to.
        public let indexReference: ObjectReference
        /// The Amazon Resource Name (ARN) of the directory where the object and index exist.
        public let directoryArn: String

        public init(targetReference: ObjectReference, indexReference: ObjectReference, directoryArn: String) {
            self.targetReference = targetReference
            self.indexReference = indexReference
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case targetReference = "TargetReference"
            case indexReference = "IndexReference"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct BatchListIndex: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IndexReference", required: true, type: .structure), 
            AWSShapeMember(label: "RangesOnIndexedValues", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The reference to the index to list.
        public let indexReference: ObjectReference
        /// Specifies the ranges of indexed values that you want to query.
        public let rangesOnIndexedValues: [ObjectAttributeRange]?
        /// The pagination token.
        public let nextToken: String?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(indexReference: ObjectReference, rangesOnIndexedValues: [ObjectAttributeRange]? = nil, nextToken: String? = nil, maxResults: Int32? = nil) {
            self.indexReference = indexReference
            self.rangesOnIndexedValues = rangesOnIndexedValues
            self.nextToken = nextToken
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case indexReference = "IndexReference"
            case rangesOnIndexedValues = "RangesOnIndexedValues"
            case nextToken = "NextToken"
            case maxResults = "MaxResults"
        }
    }

    public struct DeleteTypedLinkFacetRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The unique name of the typed link facet.
        public let name: String
        /// The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
        public let schemaArn: String

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

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct ListTypedLinkFacetAttributesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Attributes", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// An ordered set of attributes associate with the typed link.
        public let attributes: [TypedLinkAttributeDefinition]?

        public init(nextToken: String? = nil, attributes: [TypedLinkAttributeDefinition]? = nil) {
            self.nextToken = nextToken
            self.attributes = attributes
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case attributes = "Attributes"
        }
    }

    public struct BatchCreateIndex: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "OrderedIndexedAttributeList", required: true, type: .list), 
            AWSShapeMember(label: "IsUnique", required: true, type: .boolean), 
            AWSShapeMember(label: "ParentReference", required: false, type: .structure), 
            AWSShapeMember(label: "BatchReferenceName", required: false, type: .string), 
            AWSShapeMember(label: "LinkName", required: false, type: .string)
        ]
        /// Specifies the attributes that should be indexed on. Currently only a single attribute is supported.
        public let orderedIndexedAttributeList: [AttributeKey]
        /// Indicates whether the attribute that is being indexed has unique values or not.
        public let isUnique: Bool
        /// A reference to the parent object that contains the index object.
        public let parentReference: ObjectReference?
        /// The batch reference name. See Batches for more information.
        public let batchReferenceName: String?
        /// The name of the link between the parent object and the index object.
        public let linkName: String?

        public init(orderedIndexedAttributeList: [AttributeKey], isUnique: Bool, parentReference: ObjectReference? = nil, batchReferenceName: String? = nil, linkName: String? = nil) {
            self.orderedIndexedAttributeList = orderedIndexedAttributeList
            self.isUnique = isUnique
            self.parentReference = parentReference
            self.batchReferenceName = batchReferenceName
            self.linkName = linkName
        }

        private enum CodingKeys: String, CodingKey {
            case orderedIndexedAttributeList = "OrderedIndexedAttributeList"
            case isUnique = "IsUnique"
            case parentReference = "ParentReference"
            case batchReferenceName = "BatchReferenceName"
            case linkName = "LinkName"
        }
    }

    public struct DeleteDirectoryRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The ARN of the directory to delete.
        public let directoryArn: String

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

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct BatchListObjectAttributesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Attributes", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The attributes map that is associated with the object. AttributeArn is the key; attribute value is the value.
        public let attributes: [AttributeKeyAndValue]?

        public init(nextToken: String? = nil, attributes: [AttributeKeyAndValue]? = nil) {
            self.nextToken = nextToken
            self.attributes = attributes
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case attributes = "Attributes"
        }
    }

    public struct BatchListOutgoingTypedLinks: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "FilterTypedLink", required: false, type: .structure), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "FilterAttributeRanges", required: false, type: .list), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// Filters are interpreted in the order of the attributes defined on the typed link facet, not the order they are supplied to any API calls.
        public let filterTypedLink: TypedLinkSchemaAndFacetName?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?
        /// The pagination token.
        public let nextToken: String?
        /// Provides range filters for multiple attributes. When providing ranges to typed link selection, any inexact ranges must be specified at the end. Any attributes that do not have a range specified are presumed to match the entire range.
        public let filterAttributeRanges: [TypedLinkAttributeRange]?
        /// The reference that identifies the object whose attributes will be listed.
        public let objectReference: ObjectReference

        public init(filterTypedLink: TypedLinkSchemaAndFacetName? = nil, maxResults: Int32? = nil, nextToken: String? = nil, filterAttributeRanges: [TypedLinkAttributeRange]? = nil, objectReference: ObjectReference) {
            self.filterTypedLink = filterTypedLink
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.filterAttributeRanges = filterAttributeRanges
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case filterTypedLink = "FilterTypedLink"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case filterAttributeRanges = "FilterAttributeRanges"
            case objectReference = "ObjectReference"
        }
    }

    public struct DetachTypedLinkRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "TypedLinkSpecifier", required: true, type: .structure)
        ]
        /// The Amazon Resource Name (ARN) of the directory where you want to detach the typed link.
        public let directoryArn: String
        /// Used to accept a typed link specifier as input.
        public let typedLinkSpecifier: TypedLinkSpecifier

        public init(directoryArn: String, typedLinkSpecifier: TypedLinkSpecifier) {
            self.directoryArn = directoryArn
            self.typedLinkSpecifier = typedLinkSpecifier
        }

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "x-amz-data-partition"
            case typedLinkSpecifier = "TypedLinkSpecifier"
        }
    }

    public struct DeleteFacetResponse: AWSShape {

    }

    public struct BatchWriteResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Responses", required: false, type: .list)
        ]
        /// A list of all the responses for each batch write.
        public let responses: [BatchWriteOperationResponse]?

        public init(responses: [BatchWriteOperationResponse]? = nil) {
            self.responses = responses
        }

        private enum CodingKeys: String, CodingKey {
            case responses = "Responses"
        }
    }

    public struct DeleteDirectoryResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", required: true, type: .string)
        ]
        /// The ARN of the deleted directory.
        public let directoryArn: String

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

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "DirectoryArn"
        }
    }

    public struct AttachObjectRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ParentReference", required: true, type: .structure), 
            AWSShapeMember(label: "ChildReference", required: true, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "LinkName", required: true, type: .string)
        ]
        /// The parent object reference.
        public let parentReference: ObjectReference
        /// The child object reference to be attached to the object.
        public let childReference: ObjectReference
        /// Amazon Resource Name (ARN) that is associated with the Directory where both objects reside. For more information, see arns.
        public let directoryArn: String
        /// The link name with which the child object is attached to the parent.
        public let linkName: String

        public init(parentReference: ObjectReference, childReference: ObjectReference, directoryArn: String, linkName: String) {
            self.parentReference = parentReference
            self.childReference = childReference
            self.directoryArn = directoryArn
            self.linkName = linkName
        }

        private enum CodingKeys: String, CodingKey {
            case parentReference = "ParentReference"
            case childReference = "ChildReference"
            case directoryArn = "x-amz-data-partition"
            case linkName = "LinkName"
        }
    }

    public struct GetObjectInformationRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ConsistencyLevel", location: .header(locationName: "x-amz-consistency-level"), required: false, type: .enum), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The consistency level at which to retrieve the object information.
        public let consistencyLevel: ConsistencyLevel?
        /// A reference to the object.
        public let objectReference: ObjectReference
        /// The ARN of the directory being retrieved.
        public let directoryArn: String

        public init(consistencyLevel: ConsistencyLevel? = nil, objectReference: ObjectReference, directoryArn: String) {
            self.consistencyLevel = consistencyLevel
            self.objectReference = objectReference
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case consistencyLevel = "x-amz-consistency-level"
            case objectReference = "ObjectReference"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct DeleteObjectResponse: AWSShape {

    }

    public struct BatchAttachToIndexResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttachedObjectIdentifier", required: false, type: .string)
        ]
        /// The ObjectIdentifier of the object that was attached to the index.
        public let attachedObjectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case attachedObjectIdentifier = "AttachedObjectIdentifier"
        }
    }

    public struct GetLinkAttributesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Attributes", required: false, type: .list)
        ]
        /// The attributes that are associated with the typed link.
        public let attributes: [AttributeKeyAndValue]?

        public init(attributes: [AttributeKeyAndValue]? = nil) {
            self.attributes = attributes
        }

        private enum CodingKeys: String, CodingKey {
            case attributes = "Attributes"
        }
    }

    public struct TypedLinkAttributeDefinition: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IsImmutable", required: false, type: .boolean), 
            AWSShapeMember(label: "Rules", required: false, type: .map), 
            AWSShapeMember(label: "Type", required: true, type: .enum), 
            AWSShapeMember(label: "RequiredBehavior", required: true, type: .enum), 
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "DefaultValue", required: false, type: .structure)
        ]
        /// Whether the attribute is mutable or not.
        public let isImmutable: Bool?
        /// Validation rules that are attached to the attribute definition.
        public let rules: [String: Rule]?
        /// The type of the attribute.
        public let `type`: FacetAttributeType
        /// The required behavior of the TypedLinkAttributeDefinition.
        public let requiredBehavior: RequiredAttributeBehavior
        /// The unique name of the typed link attribute.
        public let name: String
        /// The default value of the attribute (if configured).
        public let defaultValue: TypedAttributeValue?

        public init(isImmutable: Bool? = nil, rules: [String: Rule]? = nil, type: FacetAttributeType, requiredBehavior: RequiredAttributeBehavior, name: String, defaultValue: TypedAttributeValue? = nil) {
            self.isImmutable = isImmutable
            self.rules = rules
            self.`type` = `type`
            self.requiredBehavior = requiredBehavior
            self.name = name
            self.defaultValue = defaultValue
        }

        private enum CodingKeys: String, CodingKey {
            case isImmutable = "IsImmutable"
            case rules = "Rules"
            case `type` = "Type"
            case requiredBehavior = "RequiredBehavior"
            case name = "Name"
            case defaultValue = "DefaultValue"
        }
    }

    public struct ListAttachedIndicesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "TargetReference", required: true, type: .structure), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ConsistencyLevel", location: .header(locationName: "x-amz-consistency-level"), required: false, type: .enum), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The ARN of the directory.
        public let directoryArn: String
        /// A reference to the object that has indices attached.
        public let targetReference: ObjectReference
        /// The pagination token.
        public let nextToken: String?
        /// The consistency level to use for this operation.
        public let consistencyLevel: ConsistencyLevel?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(directoryArn: String, targetReference: ObjectReference, nextToken: String? = nil, consistencyLevel: ConsistencyLevel? = nil, maxResults: Int32? = nil) {
            self.directoryArn = directoryArn
            self.targetReference = targetReference
            self.nextToken = nextToken
            self.consistencyLevel = consistencyLevel
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "x-amz-data-partition"
            case targetReference = "TargetReference"
            case nextToken = "NextToken"
            case consistencyLevel = "x-amz-consistency-level"
            case maxResults = "MaxResults"
        }
    }

    public struct DeleteTypedLinkFacetResponse: AWSShape {

    }

    public struct UpgradePublishedSchemaResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "UpgradedSchemaArn", required: false, type: .string)
        ]
        /// The ARN of the upgraded schema that is returned as part of the response.
        public let upgradedSchemaArn: String?

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

        private enum CodingKeys: String, CodingKey {
            case upgradedSchemaArn = "UpgradedSchemaArn"
        }
    }

    public struct BatchListIncomingTypedLinks: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "FilterTypedLink", required: false, type: .structure), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "FilterAttributeRanges", required: false, type: .list), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// Filters are interpreted in the order of the attributes on the typed link facet, not the order in which they are supplied to any API calls.
        public let filterTypedLink: TypedLinkSchemaAndFacetName?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?
        /// The pagination token.
        public let nextToken: String?
        /// Provides range filters for multiple attributes. When providing ranges to typed link selection, any inexact ranges must be specified at the end. Any attributes that do not have a range specified are presumed to match the entire range.
        public let filterAttributeRanges: [TypedLinkAttributeRange]?
        /// The reference that identifies the object whose attributes will be listed.
        public let objectReference: ObjectReference

        public init(filterTypedLink: TypedLinkSchemaAndFacetName? = nil, maxResults: Int32? = nil, nextToken: String? = nil, filterAttributeRanges: [TypedLinkAttributeRange]? = nil, objectReference: ObjectReference) {
            self.filterTypedLink = filterTypedLink
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.filterAttributeRanges = filterAttributeRanges
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case filterTypedLink = "FilterTypedLink"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case filterAttributeRanges = "FilterAttributeRanges"
            case objectReference = "ObjectReference"
        }
    }

    public struct CreateIndexResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectIdentifier", required: false, type: .string)
        ]
        /// The ObjectIdentifier of the index created by this operation.
        public let objectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case objectIdentifier = "ObjectIdentifier"
        }
    }

    public struct TypedLinkAttributeRange: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Range", required: true, type: .structure), 
            AWSShapeMember(label: "AttributeName", required: false, type: .string)
        ]
        /// The range of attribute values that are being selected.
        public let range: TypedAttributeValueRange
        /// The unique name of the typed link attribute.
        public let attributeName: String?

        public init(range: TypedAttributeValueRange, attributeName: String? = nil) {
            self.range = range
            self.attributeName = attributeName
        }

        private enum CodingKeys: String, CodingKey {
            case range = "Range"
            case attributeName = "AttributeName"
        }
    }

    public struct PolicyAttachment: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "PolicyType", required: false, type: .string), 
            AWSShapeMember(label: "ObjectIdentifier", required: false, type: .string), 
            AWSShapeMember(label: "PolicyId", required: false, type: .string)
        ]
        /// The type of policy that can be associated with PolicyAttachment.
        public let policyType: String?
        /// The ObjectIdentifier that is associated with PolicyAttachment.
        public let objectIdentifier: String?
        /// The ID of PolicyAttachment.
        public let policyId: String?

        public init(policyType: String? = nil, objectIdentifier: String? = nil, policyId: String? = nil) {
            self.policyType = policyType
            self.objectIdentifier = objectIdentifier
            self.policyId = policyId
        }

        private enum CodingKeys: String, CodingKey {
            case policyType = "PolicyType"
            case objectIdentifier = "ObjectIdentifier"
            case policyId = "PolicyId"
        }
    }

    public struct ListAppliedSchemaArnsResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaArns", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// The ARNs of schemas that are applied to the directory.
        public let schemaArns: [String]?
        /// The pagination token.
        public let nextToken: String?

        public init(schemaArns: [String]? = nil, nextToken: String? = nil) {
            self.schemaArns = schemaArns
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case schemaArns = "SchemaArns"
            case nextToken = "NextToken"
        }
    }

    public struct EnableDirectoryResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", required: true, type: .string)
        ]
        /// The ARN of the enabled directory.
        public let directoryArn: String

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

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "DirectoryArn"
        }
    }

    public struct ListTagsForResourceRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ResourceArn", required: true, type: .string), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The Amazon Resource Name (ARN) of the resource. Tagging is only supported for directories.
        public let resourceArn: String
        /// The pagination token. This is for future use. Currently pagination is not supported for tagging.
        public let nextToken: String?
        /// The MaxResults parameter sets the maximum number of results returned in a single page. This is for future use and is not supported currently.
        public let maxResults: Int32?

        public init(resourceArn: String, nextToken: String? = nil, maxResults: Int32? = nil) {
            self.resourceArn = resourceArn
            self.nextToken = nextToken
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case resourceArn = "ResourceArn"
            case nextToken = "NextToken"
            case maxResults = "MaxResults"
        }
    }

    public struct ListTagsForResourceResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Tags", required: false, type: .list)
        ]
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?
        /// A list of tag key value pairs that are associated with the response.
        public let tags: [Tag]?

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

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case tags = "Tags"
        }
    }

    public struct ListPolicyAttachmentsResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ObjectIdentifiers", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// A list of ObjectIdentifiers to which the policy is attached.
        public let objectIdentifiers: [String]?

        public init(nextToken: String? = nil, objectIdentifiers: [String]? = nil) {
            self.nextToken = nextToken
            self.objectIdentifiers = objectIdentifiers
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case objectIdentifiers = "ObjectIdentifiers"
        }
    }

    public struct ListObjectParentsRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "ConsistencyLevel", location: .header(locationName: "x-amz-consistency-level"), required: false, type: .enum), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// The maximum number of items to be retrieved in a single call. This is an approximate number.
        public let maxResults: Int32?
        /// The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
        public let directoryArn: String
        /// Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
        public let consistencyLevel: ConsistencyLevel?
        /// The pagination token.
        public let nextToken: String?
        /// The reference that identifies the object for which parent objects are being listed.
        public let objectReference: ObjectReference

        public init(maxResults: Int32? = nil, directoryArn: String, consistencyLevel: ConsistencyLevel? = nil, nextToken: String? = nil, objectReference: ObjectReference) {
            self.maxResults = maxResults
            self.directoryArn = directoryArn
            self.consistencyLevel = consistencyLevel
            self.nextToken = nextToken
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case directoryArn = "x-amz-data-partition"
            case consistencyLevel = "x-amz-consistency-level"
            case nextToken = "NextToken"
            case objectReference = "ObjectReference"
        }
    }

    public struct BatchListIndexResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IndexAttachments", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// The objects and indexed values attached to the index.
        public let indexAttachments: [IndexAttachment]?
        /// The pagination token.
        public let nextToken: String?

        public init(indexAttachments: [IndexAttachment]? = nil, nextToken: String? = nil) {
            self.indexAttachments = indexAttachments
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case indexAttachments = "IndexAttachments"
            case nextToken = "NextToken"
        }
    }

    public struct PutSchemaFromJsonRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Document", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The replacement JSON schema.
        public let document: String
        /// The ARN of the schema to update.
        public let schemaArn: String

        public init(document: String, schemaArn: String) {
            self.document = document
            self.schemaArn = schemaArn
        }

        private enum CodingKeys: String, CodingKey {
            case document = "Document"
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct ListAppliedSchemaArnsRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", required: true, type: .string), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "SchemaArn", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The ARN of the directory you are listing.
        public let directoryArn: String
        /// The pagination token.
        public let nextToken: String?
        /// The response for ListAppliedSchemaArns when this parameter is used will list all minor version ARNs for a major version.
        public let schemaArn: String?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(directoryArn: String, nextToken: String? = nil, schemaArn: String? = nil, maxResults: Int32? = nil) {
            self.directoryArn = directoryArn
            self.nextToken = nextToken
            self.schemaArn = schemaArn
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "DirectoryArn"
            case nextToken = "NextToken"
            case schemaArn = "SchemaArn"
            case maxResults = "MaxResults"
        }
    }

    public struct ObjectAttributeAction: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectAttributeActionType", required: false, type: .enum), 
            AWSShapeMember(label: "ObjectAttributeUpdateValue", required: false, type: .structure)
        ]
        /// A type that can be either Update or Delete.
        public let objectAttributeActionType: UpdateActionType?
        /// The value that you want to update to.
        public let objectAttributeUpdateValue: TypedAttributeValue?

        public init(objectAttributeActionType: UpdateActionType? = nil, objectAttributeUpdateValue: TypedAttributeValue? = nil) {
            self.objectAttributeActionType = objectAttributeActionType
            self.objectAttributeUpdateValue = objectAttributeUpdateValue
        }

        private enum CodingKeys: String, CodingKey {
            case objectAttributeActionType = "ObjectAttributeActionType"
            case objectAttributeUpdateValue = "ObjectAttributeUpdateValue"
        }
    }

    public struct BatchGetObjectInformation: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// A reference to the object.
        public let objectReference: ObjectReference

        public init(objectReference: ObjectReference) {
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case objectReference = "ObjectReference"
        }
    }

    public struct DetachObjectRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "LinkName", required: true, type: .string), 
            AWSShapeMember(label: "ParentReference", required: true, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The link name associated with the object that needs to be detached.
        public let linkName: String
        /// The parent reference from which the object with the specified link name is detached.
        public let parentReference: ObjectReference
        /// The Amazon Resource Name (ARN) that is associated with the Directory where objects reside. For more information, see arns.
        public let directoryArn: String

        public init(linkName: String, parentReference: ObjectReference, directoryArn: String) {
            self.linkName = linkName
            self.parentReference = parentReference
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case linkName = "LinkName"
            case parentReference = "ParentReference"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct AttachTypedLinkResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TypedLinkSpecifier", required: false, type: .structure)
        ]
        /// Returns a typed link specifier as output.
        public let typedLinkSpecifier: TypedLinkSpecifier?

        public init(typedLinkSpecifier: TypedLinkSpecifier? = nil) {
            self.typedLinkSpecifier = typedLinkSpecifier
        }

        private enum CodingKeys: String, CodingKey {
            case typedLinkSpecifier = "TypedLinkSpecifier"
        }
    }

    public struct DetachPolicyRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "PolicyReference", required: true, type: .structure), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// Reference that identifies the policy object.
        public let policyReference: ObjectReference
        /// Reference that identifies the object whose policy object will be detached.
        public let objectReference: ObjectReference
        /// The Amazon Resource Name (ARN) that is associated with the Directory where both objects reside. For more information, see arns.
        public let directoryArn: String

        public init(policyReference: ObjectReference, objectReference: ObjectReference, directoryArn: String) {
            self.policyReference = policyReference
            self.objectReference = objectReference
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case policyReference = "PolicyReference"
            case objectReference = "ObjectReference"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct ListOutgoingTypedLinksResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "TypedLinkSpecifiers", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// Returns a typed link specifier as output.
        public let typedLinkSpecifiers: [TypedLinkSpecifier]?

        public init(nextToken: String? = nil, typedLinkSpecifiers: [TypedLinkSpecifier]? = nil) {
            self.nextToken = nextToken
            self.typedLinkSpecifiers = typedLinkSpecifiers
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case typedLinkSpecifiers = "TypedLinkSpecifiers"
        }
    }

    public struct BatchGetObjectInformationResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaFacets", required: false, type: .list), 
            AWSShapeMember(label: "ObjectIdentifier", required: false, type: .string)
        ]
        /// The facets attached to the specified object.
        public let schemaFacets: [SchemaFacet]?
        /// The ObjectIdentifier of the specified object.
        public let objectIdentifier: String?

        public init(schemaFacets: [SchemaFacet]? = nil, objectIdentifier: String? = nil) {
            self.schemaFacets = schemaFacets
            self.objectIdentifier = objectIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case schemaFacets = "SchemaFacets"
            case objectIdentifier = "ObjectIdentifier"
        }
    }

    public struct TypedLinkSpecifier: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TargetObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "IdentityAttributeValues", required: true, type: .list), 
            AWSShapeMember(label: "TypedLinkFacet", required: true, type: .structure), 
            AWSShapeMember(label: "SourceObjectReference", required: true, type: .structure)
        ]
        /// Identifies the target object that the typed link will attach to.
        public let targetObjectReference: ObjectReference
        /// Identifies the attribute value to update.
        public let identityAttributeValues: [AttributeNameAndValue]
        /// Identifies the typed link facet that is associated with the typed link.
        public let typedLinkFacet: TypedLinkSchemaAndFacetName
        /// Identifies the source object that the typed link will attach to.
        public let sourceObjectReference: ObjectReference

        public init(targetObjectReference: ObjectReference, identityAttributeValues: [AttributeNameAndValue], typedLinkFacet: TypedLinkSchemaAndFacetName, sourceObjectReference: ObjectReference) {
            self.targetObjectReference = targetObjectReference
            self.identityAttributeValues = identityAttributeValues
            self.typedLinkFacet = typedLinkFacet
            self.sourceObjectReference = sourceObjectReference
        }

        private enum CodingKeys: String, CodingKey {
            case targetObjectReference = "TargetObjectReference"
            case identityAttributeValues = "IdentityAttributeValues"
            case typedLinkFacet = "TypedLinkFacet"
            case sourceObjectReference = "SourceObjectReference"
        }
    }

    public struct BatchListOutgoingTypedLinksResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "TypedLinkSpecifiers", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// Returns a typed link specifier as output.
        public let typedLinkSpecifiers: [TypedLinkSpecifier]?

        public init(nextToken: String? = nil, typedLinkSpecifiers: [TypedLinkSpecifier]? = nil) {
            self.nextToken = nextToken
            self.typedLinkSpecifiers = typedLinkSpecifiers
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case typedLinkSpecifiers = "TypedLinkSpecifiers"
        }
    }

    public struct SchemaFacet: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaArn", required: false, type: .string), 
            AWSShapeMember(label: "FacetName", required: false, type: .string)
        ]
        /// The ARN of the schema that contains the facet with no minor component. See arns and In-Place Schema Upgrade for a description of when to provide minor versions.
        public let schemaArn: String?
        /// The name of the facet.
        public let facetName: String?

        public init(schemaArn: String? = nil, facetName: String? = nil) {
            self.schemaArn = schemaArn
            self.facetName = facetName
        }

        private enum CodingKeys: String, CodingKey {
            case schemaArn = "SchemaArn"
            case facetName = "FacetName"
        }
    }

    public struct PublishSchemaRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MinorVersion", required: false, type: .string), 
            AWSShapeMember(label: "DevelopmentSchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "Name", required: false, type: .string), 
            AWSShapeMember(label: "Version", required: true, type: .string)
        ]
        /// The minor version under which the schema will be published. This parameter is recommended. Schemas have both a major and minor version associated with them.
        public let minorVersion: String?
        /// The Amazon Resource Name (ARN) that is associated with the development schema. For more information, see arns.
        public let developmentSchemaArn: String
        /// The new name under which the schema will be published. If this is not provided, the development schema is considered.
        public let name: String?
        /// The major version under which the schema will be published. Schemas have both a major and minor version associated with them.
        public let version: String

        public init(minorVersion: String? = nil, developmentSchemaArn: String, name: String? = nil, version: String) {
            self.minorVersion = minorVersion
            self.developmentSchemaArn = developmentSchemaArn
            self.name = name
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case minorVersion = "MinorVersion"
            case developmentSchemaArn = "x-amz-data-partition"
            case name = "Name"
            case version = "Version"
        }
    }

    public struct GetDirectoryResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Directory", required: true, type: .structure)
        ]
        /// Metadata about the directory.
        public let directory: Directory

        public init(directory: Directory) {
            self.directory = directory
        }

        private enum CodingKeys: String, CodingKey {
            case directory = "Directory"
        }
    }

    public struct BatchReadResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Responses", required: false, type: .list)
        ]
        /// A list of all the responses for each batch read.
        public let responses: [BatchReadOperationResponse]?

        public init(responses: [BatchReadOperationResponse]? = nil) {
            self.responses = responses
        }

        private enum CodingKeys: String, CodingKey {
            case responses = "Responses"
        }
    }

    public struct BatchDetachObjectResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "detachedObjectIdentifier", required: false, type: .string)
        ]
        /// The ObjectIdentifier of the detached object.
        public let detachedObjectIdentifier: String?

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

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

    public struct FacetAttributeReference: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TargetAttributeName", required: true, type: .string), 
            AWSShapeMember(label: "TargetFacetName", required: true, type: .string)
        ]
        /// The target attribute name that is associated with the facet reference. See Attribute References for more information.
        public let targetAttributeName: String
        /// The target facet name that is associated with the facet reference. See Attribute References for more information.
        public let targetFacetName: String

        public init(targetAttributeName: String, targetFacetName: String) {
            self.targetAttributeName = targetAttributeName
            self.targetFacetName = targetFacetName
        }

        private enum CodingKeys: String, CodingKey {
            case targetAttributeName = "TargetAttributeName"
            case targetFacetName = "TargetFacetName"
        }
    }

    public struct BatchDeleteObject: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// The reference that identifies the object.
        public let objectReference: ObjectReference

        public init(objectReference: ObjectReference) {
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case objectReference = "ObjectReference"
        }
    }

    public struct BatchLookupPolicy: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// Reference that identifies the object whose policies will be looked up.
        public let objectReference: ObjectReference
        /// The pagination token.
        public let nextToken: String?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(objectReference: ObjectReference, nextToken: String? = nil, maxResults: Int32? = nil) {
            self.objectReference = objectReference
            self.nextToken = nextToken
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case objectReference = "ObjectReference"
            case nextToken = "NextToken"
            case maxResults = "MaxResults"
        }
    }

    public struct GetAppliedSchemaVersionRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaArn", required: true, type: .string)
        ]
        /// The ARN of the applied schema.
        public let schemaArn: String

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

        private enum CodingKeys: String, CodingKey {
            case schemaArn = "SchemaArn"
        }
    }

    public struct CreateObjectRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaFacets", required: true, type: .list), 
            AWSShapeMember(label: "ParentReference", required: false, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "ObjectAttributeList", required: false, type: .list), 
            AWSShapeMember(label: "LinkName", required: false, type: .string)
        ]
        /// A list of schema facets to be associated with the object. Do not provide minor version components. See SchemaFacet for details.
        public let schemaFacets: [SchemaFacet]
        /// If specified, the parent reference to which this object will be attached.
        public let parentReference: ObjectReference?
        /// The Amazon Resource Name (ARN) that is associated with the Directory in which the object will be created. For more information, see arns.
        public let directoryArn: String
        /// The attribute map whose attribute ARN contains the key and attribute value as the map value.
        public let objectAttributeList: [AttributeKeyAndValue]?
        /// The name of link that is used to attach this object to a parent.
        public let linkName: String?

        public init(schemaFacets: [SchemaFacet], parentReference: ObjectReference? = nil, directoryArn: String, objectAttributeList: [AttributeKeyAndValue]? = nil, linkName: String? = nil) {
            self.schemaFacets = schemaFacets
            self.parentReference = parentReference
            self.directoryArn = directoryArn
            self.objectAttributeList = objectAttributeList
            self.linkName = linkName
        }

        private enum CodingKeys: String, CodingKey {
            case schemaFacets = "SchemaFacets"
            case parentReference = "ParentReference"
            case directoryArn = "x-amz-data-partition"
            case objectAttributeList = "ObjectAttributeList"
            case linkName = "LinkName"
        }
    }

    public struct BatchAttachTypedLink: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TargetObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "Attributes", required: true, type: .list), 
            AWSShapeMember(label: "TypedLinkFacet", required: true, type: .structure), 
            AWSShapeMember(label: "SourceObjectReference", required: true, type: .structure)
        ]
        /// Identifies the target object that the typed link will attach to.
        public let targetObjectReference: ObjectReference
        /// A set of attributes that are associated with the typed link.
        public let attributes: [AttributeNameAndValue]
        /// Identifies the typed link facet that is associated with the typed link.
        public let typedLinkFacet: TypedLinkSchemaAndFacetName
        /// Identifies the source object that the typed link will attach to.
        public let sourceObjectReference: ObjectReference

        public init(targetObjectReference: ObjectReference, attributes: [AttributeNameAndValue], typedLinkFacet: TypedLinkSchemaAndFacetName, sourceObjectReference: ObjectReference) {
            self.targetObjectReference = targetObjectReference
            self.attributes = attributes
            self.typedLinkFacet = typedLinkFacet
            self.sourceObjectReference = sourceObjectReference
        }

        private enum CodingKeys: String, CodingKey {
            case targetObjectReference = "TargetObjectReference"
            case attributes = "Attributes"
            case typedLinkFacet = "TypedLinkFacet"
            case sourceObjectReference = "SourceObjectReference"
        }
    }

    public struct ApplySchemaResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AppliedSchemaArn", required: false, type: .string), 
            AWSShapeMember(label: "DirectoryArn", required: false, type: .string)
        ]
        /// The applied schema ARN that is associated with the copied schema in the Directory. You can use this ARN to describe the schema information applied on this directory. For more information, see arns.
        public let appliedSchemaArn: String?
        /// The ARN that is associated with the Directory. For more information, see arns.
        public let directoryArn: String?

        public init(appliedSchemaArn: String? = nil, directoryArn: String? = nil) {
            self.appliedSchemaArn = appliedSchemaArn
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case appliedSchemaArn = "AppliedSchemaArn"
            case directoryArn = "DirectoryArn"
        }
    }

    public struct TypedLinkSchemaAndFacetName: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TypedLinkName", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", required: true, type: .string)
        ]
        /// The unique name of the typed link facet.
        public let typedLinkName: String
        /// The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
        public let schemaArn: String

        public init(typedLinkName: String, schemaArn: String) {
            self.typedLinkName = typedLinkName
            self.schemaArn = schemaArn
        }

        private enum CodingKeys: String, CodingKey {
            case typedLinkName = "TypedLinkName"
            case schemaArn = "SchemaArn"
        }
    }

    public struct CreateFacetResponse: AWSShape {

    }

    public struct ListManagedSchemaArnsRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "SchemaArn", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The response for ListManagedSchemaArns. When this parameter is used, all minor version ARNs for a major version are listed.
        public let schemaArn: String?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(nextToken: String? = nil, schemaArn: String? = nil, maxResults: Int32? = nil) {
            self.nextToken = nextToken
            self.schemaArn = schemaArn
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case schemaArn = "SchemaArn"
            case maxResults = "MaxResults"
        }
    }

    public struct LookupPolicyRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// The maximum number of items to be retrieved in a single call. This is an approximate number.
        public let maxResults: Int32?
        /// The Amazon Resource Name (ARN) that is associated with the Directory. For more information, see arns.
        public let directoryArn: String
        /// The token to request the next page of results.
        public let nextToken: String?
        /// Reference that identifies the object whose policies will be looked up.
        public let objectReference: ObjectReference

        public init(maxResults: Int32? = nil, directoryArn: String, nextToken: String? = nil, objectReference: ObjectReference) {
            self.maxResults = maxResults
            self.directoryArn = directoryArn
            self.nextToken = nextToken
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case directoryArn = "x-amz-data-partition"
            case nextToken = "NextToken"
            case objectReference = "ObjectReference"
        }
    }

    public struct GetAppliedSchemaVersionResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AppliedSchemaArn", required: false, type: .string)
        ]
        /// Current applied schema ARN, including the minor version in use if one was provided.
        public let appliedSchemaArn: String?

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

        private enum CodingKeys: String, CodingKey {
            case appliedSchemaArn = "AppliedSchemaArn"
        }
    }

    public struct BatchAttachPolicy: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "PolicyReference", required: true, type: .structure)
        ]
        /// The reference that identifies the object to which the policy will be attached.
        public let objectReference: ObjectReference
        /// The reference that is associated with the policy object.
        public let policyReference: ObjectReference

        public init(objectReference: ObjectReference, policyReference: ObjectReference) {
            self.objectReference = objectReference
            self.policyReference = policyReference
        }

        private enum CodingKeys: String, CodingKey {
            case objectReference = "ObjectReference"
            case policyReference = "PolicyReference"
        }
    }

    public struct BatchReadOperationResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ExceptionResponse", required: false, type: .structure), 
            AWSShapeMember(label: "SuccessfulResponse", required: false, type: .structure)
        ]
        /// Identifies which operation in a batch has failed.
        public let exceptionResponse: BatchReadException?
        /// Identifies which operation in a batch has succeeded.
        public let successfulResponse: BatchReadSuccessfulResponse?

        public init(exceptionResponse: BatchReadException? = nil, successfulResponse: BatchReadSuccessfulResponse? = nil) {
            self.exceptionResponse = exceptionResponse
            self.successfulResponse = successfulResponse
        }

        private enum CodingKeys: String, CodingKey {
            case exceptionResponse = "ExceptionResponse"
            case successfulResponse = "SuccessfulResponse"
        }
    }

    public struct ListAttachedIndicesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IndexAttachments", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// The indices attached to the specified object.
        public let indexAttachments: [IndexAttachment]?
        /// The pagination token.
        public let nextToken: String?

        public init(indexAttachments: [IndexAttachment]? = nil, nextToken: String? = nil) {
            self.indexAttachments = indexAttachments
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case indexAttachments = "IndexAttachments"
            case nextToken = "NextToken"
        }
    }

    public struct UpdateTypedLinkFacetResponse: AWSShape {

    }

    public enum BatchWriteExceptionType: String, CustomStringConvertible, Codable {
        case internalserviceexception = "InternalServiceException"
        case validationexception = "ValidationException"
        case invalidarnexception = "InvalidArnException"
        case linknamealreadyinuseexception = "LinkNameAlreadyInUseException"
        case stillcontainslinksexception = "StillContainsLinksException"
        case facetvalidationexception = "FacetValidationException"
        case objectnotdetachedexception = "ObjectNotDetachedException"
        case resourcenotfoundexception = "ResourceNotFoundException"
        case accessdeniedexception = "AccessDeniedException"
        case invalidattachmentexception = "InvalidAttachmentException"
        case notindexexception = "NotIndexException"
        case notnodeexception = "NotNodeException"
        case indexedattributemissingexception = "IndexedAttributeMissingException"
        case objectalreadydetachedexception = "ObjectAlreadyDetachedException"
        case notpolicyexception = "NotPolicyException"
        case directorynotenabledexception = "DirectoryNotEnabledException"
        case limitexceededexception = "LimitExceededException"
        case unsupportedindextypeexception = "UnsupportedIndexTypeException"
        public var description: String { return self.rawValue }
    }

    public struct BatchAddFacetToObject: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaFacet", required: true, type: .structure), 
            AWSShapeMember(label: "ObjectAttributeList", required: true, type: .list), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// Represents the facet being added to the object.
        public let schemaFacet: SchemaFacet
        /// The attributes to set on the object.
        public let objectAttributeList: [AttributeKeyAndValue]
        /// A reference to the object being mutated.
        public let objectReference: ObjectReference

        public init(schemaFacet: SchemaFacet, objectAttributeList: [AttributeKeyAndValue], objectReference: ObjectReference) {
            self.schemaFacet = schemaFacet
            self.objectAttributeList = objectAttributeList
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case schemaFacet = "SchemaFacet"
            case objectAttributeList = "ObjectAttributeList"
            case objectReference = "ObjectReference"
        }
    }

    public struct ListObjectAttributesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Attributes", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// Attributes map that is associated with the object. AttributeArn is the key, and attribute value is the value.
        public let attributes: [AttributeKeyAndValue]?

        public init(nextToken: String? = nil, attributes: [AttributeKeyAndValue]? = nil) {
            self.nextToken = nextToken
            self.attributes = attributes
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case attributes = "Attributes"
        }
    }

    public enum ConsistencyLevel: String, CustomStringConvertible, Codable {
        case serializable = "SERIALIZABLE"
        case eventual = "EVENTUAL"
        public var description: String { return self.rawValue }
    }

    public struct BatchUpdateObjectAttributes: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttributeUpdates", required: true, type: .list), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// Attributes update structure.
        public let attributeUpdates: [ObjectAttributeUpdate]
        /// Reference that identifies the object.
        public let objectReference: ObjectReference

        public init(attributeUpdates: [ObjectAttributeUpdate], objectReference: ObjectReference) {
            self.attributeUpdates = attributeUpdates
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case attributeUpdates = "AttributeUpdates"
            case objectReference = "ObjectReference"
        }
    }

    public struct CreateFacetRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectType", required: false, type: .enum), 
            AWSShapeMember(label: "FacetStyle", required: false, type: .enum), 
            AWSShapeMember(label: "Attributes", required: false, type: .list), 
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// Specifies whether a given object created from this facet is of type node, leaf node, policy or index.   Node: Can have multiple children but one parent.     Leaf node: Cannot have children but can have multiple parents.     Policy: Allows you to store a policy document and policy type. For more information, see Policies.     Index: Can be created with the Index API.  
        public let objectType: ObjectType?
        /// There are two different styles that you can define on any given facet, Static and Dynamic. For static facets, all attributes must be defined in the schema. For dynamic facets, attributes can be defined during data plane operations.
        public let facetStyle: FacetStyle?
        /// The attributes that are associated with the Facet.
        public let attributes: [FacetAttribute]?
        /// The name of the Facet, which is unique for a given schema.
        public let name: String
        /// The schema ARN in which the new Facet will be created. For more information, see arns.
        public let schemaArn: String

        public init(objectType: ObjectType? = nil, facetStyle: FacetStyle? = nil, attributes: [FacetAttribute]? = nil, name: String, schemaArn: String) {
            self.objectType = objectType
            self.facetStyle = facetStyle
            self.attributes = attributes
            self.name = name
            self.schemaArn = schemaArn
        }

        private enum CodingKeys: String, CodingKey {
            case objectType = "ObjectType"
            case facetStyle = "FacetStyle"
            case attributes = "Attributes"
            case name = "Name"
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct RemoveFacetFromObjectResponse: AWSShape {

    }

    public struct ListFacetNamesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "FacetNames", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The names of facets that exist within the schema.
        public let facetNames: [String]?

        public init(nextToken: String? = nil, facetNames: [String]? = nil) {
            self.nextToken = nextToken
            self.facetNames = facetNames
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case facetNames = "FacetNames"
        }
    }

    public struct BatchGetLinkAttributesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Attributes", required: false, type: .list)
        ]
        /// The attributes that are associated with the typed link.
        public let attributes: [AttributeKeyAndValue]?

        public init(attributes: [AttributeKeyAndValue]? = nil) {
            self.attributes = attributes
        }

        private enum CodingKeys: String, CodingKey {
            case attributes = "Attributes"
        }
    }

    public struct CreateDirectoryResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", required: true, type: .string), 
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "ObjectIdentifier", required: true, type: .string), 
            AWSShapeMember(label: "AppliedSchemaArn", required: true, type: .string)
        ]
        /// The ARN that is associated with the Directory. For more information, see arns.
        public let directoryArn: String
        /// The name of the Directory.
        public let name: String
        /// The root object node of the created directory.
        public let objectIdentifier: String
        /// The ARN of the published schema in the Directory. Once a published schema is copied into the directory, it has its own ARN, which is referred to applied schema ARN. For more information, see arns.
        public let appliedSchemaArn: String

        public init(directoryArn: String, name: String, objectIdentifier: String, appliedSchemaArn: String) {
            self.directoryArn = directoryArn
            self.name = name
            self.objectIdentifier = objectIdentifier
            self.appliedSchemaArn = appliedSchemaArn
        }

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "DirectoryArn"
            case name = "Name"
            case objectIdentifier = "ObjectIdentifier"
            case appliedSchemaArn = "AppliedSchemaArn"
        }
    }

    public struct AttachPolicyResponse: AWSShape {

    }

    public struct CreateTypedLinkFacetResponse: AWSShape {

    }

    public struct BatchCreateObject: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ParentReference", required: false, type: .structure), 
            AWSShapeMember(label: "SchemaFacet", required: true, type: .list), 
            AWSShapeMember(label: "BatchReferenceName", required: false, type: .string), 
            AWSShapeMember(label: "ObjectAttributeList", required: true, type: .list), 
            AWSShapeMember(label: "LinkName", required: false, type: .string)
        ]
        /// If specified, the parent reference to which this object will be attached.
        public let parentReference: ObjectReference?
        /// A list of FacetArns that will be associated with the object. For more information, see arns.
        public let schemaFacet: [SchemaFacet]
        /// The batch reference name. See Batches for more information.
        public let batchReferenceName: String?
        /// An attribute map, which contains an attribute ARN as the key and attribute value as the map value.
        public let objectAttributeList: [AttributeKeyAndValue]
        /// The name of the link.
        public let linkName: String?

        public init(parentReference: ObjectReference? = nil, schemaFacet: [SchemaFacet], batchReferenceName: String? = nil, objectAttributeList: [AttributeKeyAndValue], linkName: String? = nil) {
            self.parentReference = parentReference
            self.schemaFacet = schemaFacet
            self.batchReferenceName = batchReferenceName
            self.objectAttributeList = objectAttributeList
            self.linkName = linkName
        }

        private enum CodingKeys: String, CodingKey {
            case parentReference = "ParentReference"
            case schemaFacet = "SchemaFacet"
            case batchReferenceName = "BatchReferenceName"
            case objectAttributeList = "ObjectAttributeList"
            case linkName = "LinkName"
        }
    }

    public struct BatchAttachToIndex: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TargetReference", required: true, type: .structure), 
            AWSShapeMember(label: "IndexReference", required: true, type: .structure)
        ]
        /// A reference to the object that you are attaching to the index.
        public let targetReference: ObjectReference
        /// A reference to the index that you are attaching the object to.
        public let indexReference: ObjectReference

        public init(targetReference: ObjectReference, indexReference: ObjectReference) {
            self.targetReference = targetReference
            self.indexReference = indexReference
        }

        private enum CodingKeys: String, CodingKey {
            case targetReference = "TargetReference"
            case indexReference = "IndexReference"
        }
    }

    public struct LinkAttributeUpdate: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttributeKey", required: false, type: .structure), 
            AWSShapeMember(label: "AttributeAction", required: false, type: .structure)
        ]
        /// The key of the attribute being updated.
        public let attributeKey: AttributeKey?
        /// The action to perform as part of the attribute update.
        public let attributeAction: LinkAttributeAction?

        public init(attributeKey: AttributeKey? = nil, attributeAction: LinkAttributeAction? = nil) {
            self.attributeKey = attributeKey
            self.attributeAction = attributeAction
        }

        private enum CodingKeys: String, CodingKey {
            case attributeKey = "AttributeKey"
            case attributeAction = "AttributeAction"
        }
    }

    public struct UntagResourceRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ResourceArn", required: true, type: .string), 
            AWSShapeMember(label: "TagKeys", required: true, type: .list)
        ]
        /// The Amazon Resource Name (ARN) of the resource. Tagging is only supported for directories.
        public let resourceArn: String
        /// Keys of the tag that need to be removed from the resource.
        public let tagKeys: [String]

        public init(resourceArn: String, tagKeys: [String]) {
            self.resourceArn = resourceArn
            self.tagKeys = tagKeys
        }

        private enum CodingKeys: String, CodingKey {
            case resourceArn = "ResourceArn"
            case tagKeys = "TagKeys"
        }
    }

    public struct ListDirectoriesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Directories", required: true, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// Lists all directories that are associated with your account in pagination fashion.
        public let directories: [Directory]
        /// The pagination token.
        public let nextToken: String?

        public init(directories: [Directory], nextToken: String? = nil) {
            self.directories = directories
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case directories = "Directories"
            case nextToken = "NextToken"
        }
    }

    public struct AttachTypedLinkRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TargetObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "Attributes", required: true, type: .list), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "TypedLinkFacet", required: true, type: .structure), 
            AWSShapeMember(label: "SourceObjectReference", required: true, type: .structure)
        ]
        /// Identifies the target object that the typed link will attach to.
        public let targetObjectReference: ObjectReference
        /// A set of attributes that are associated with the typed link.
        public let attributes: [AttributeNameAndValue]
        /// The Amazon Resource Name (ARN) of the directory where you want to attach the typed link.
        public let directoryArn: String
        /// Identifies the typed link facet that is associated with the typed link.
        public let typedLinkFacet: TypedLinkSchemaAndFacetName
        /// Identifies the source object that the typed link will attach to.
        public let sourceObjectReference: ObjectReference

        public init(targetObjectReference: ObjectReference, attributes: [AttributeNameAndValue], directoryArn: String, typedLinkFacet: TypedLinkSchemaAndFacetName, sourceObjectReference: ObjectReference) {
            self.targetObjectReference = targetObjectReference
            self.attributes = attributes
            self.directoryArn = directoryArn
            self.typedLinkFacet = typedLinkFacet
            self.sourceObjectReference = sourceObjectReference
        }

        private enum CodingKeys: String, CodingKey {
            case targetObjectReference = "TargetObjectReference"
            case attributes = "Attributes"
            case directoryArn = "x-amz-data-partition"
            case typedLinkFacet = "TypedLinkFacet"
            case sourceObjectReference = "SourceObjectReference"
        }
    }

    public struct BatchGetObjectAttributes: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaFacet", required: true, type: .structure), 
            AWSShapeMember(label: "AttributeNames", required: true, type: .list), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// Identifier for the facet whose attributes will be retrieved. See SchemaFacet for details.
        public let schemaFacet: SchemaFacet
        /// List of attribute names whose values will be retrieved.
        public let attributeNames: [String]
        /// Reference that identifies the object whose attributes will be retrieved.
        public let objectReference: ObjectReference

        public init(schemaFacet: SchemaFacet, attributeNames: [String], objectReference: ObjectReference) {
            self.schemaFacet = schemaFacet
            self.attributeNames = attributeNames
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case schemaFacet = "SchemaFacet"
            case attributeNames = "AttributeNames"
            case objectReference = "ObjectReference"
        }
    }

    public struct BatchListObjectChildrenResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Children", required: false, type: .map)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The children structure, which is a map with the key as the LinkName and ObjectIdentifier as the value.
        public let children: [String: String]?

        public init(nextToken: String? = nil, children: [String: String]? = nil) {
            self.nextToken = nextToken
            self.children = children
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case children = "Children"
        }
    }

    public struct ListObjectPoliciesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "ConsistencyLevel", location: .header(locationName: "x-amz-consistency-level"), required: false, type: .enum), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// The maximum number of items to be retrieved in a single call. This is an approximate number.
        public let maxResults: Int32?
        /// The Amazon Resource Name (ARN) that is associated with the Directory where objects reside. For more information, see arns.
        public let directoryArn: String
        /// Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
        public let consistencyLevel: ConsistencyLevel?
        /// The pagination token.
        public let nextToken: String?
        /// Reference that identifies the object for which policies will be listed.
        public let objectReference: ObjectReference

        public init(maxResults: Int32? = nil, directoryArn: String, consistencyLevel: ConsistencyLevel? = nil, nextToken: String? = nil, objectReference: ObjectReference) {
            self.maxResults = maxResults
            self.directoryArn = directoryArn
            self.consistencyLevel = consistencyLevel
            self.nextToken = nextToken
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case directoryArn = "x-amz-data-partition"
            case consistencyLevel = "x-amz-consistency-level"
            case nextToken = "NextToken"
            case objectReference = "ObjectReference"
        }
    }

    public struct GetLinkAttributesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TypedLinkSpecifier", required: true, type: .structure), 
            AWSShapeMember(label: "ConsistencyLevel", required: false, type: .enum), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "AttributeNames", required: true, type: .list)
        ]
        /// Allows a typed link specifier to be accepted as input.
        public let typedLinkSpecifier: TypedLinkSpecifier
        /// The consistency level at which to retrieve the attributes on a typed link.
        public let consistencyLevel: ConsistencyLevel?
        /// The Amazon Resource Name (ARN) that is associated with the Directory where the typed link resides. For more information, see arns or Typed link.
        public let directoryArn: String
        /// A list of attribute names whose values will be retrieved.
        public let attributeNames: [String]

        public init(typedLinkSpecifier: TypedLinkSpecifier, consistencyLevel: ConsistencyLevel? = nil, directoryArn: String, attributeNames: [String]) {
            self.typedLinkSpecifier = typedLinkSpecifier
            self.consistencyLevel = consistencyLevel
            self.directoryArn = directoryArn
            self.attributeNames = attributeNames
        }

        private enum CodingKeys: String, CodingKey {
            case typedLinkSpecifier = "TypedLinkSpecifier"
            case consistencyLevel = "ConsistencyLevel"
            case directoryArn = "x-amz-data-partition"
            case attributeNames = "AttributeNames"
        }
    }

    public struct DisableDirectoryRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The ARN of the directory to disable.
        public let directoryArn: String

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

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct UpgradeAppliedSchemaRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "PublishedSchemaArn", required: true, type: .string), 
            AWSShapeMember(label: "DryRun", required: false, type: .boolean), 
            AWSShapeMember(label: "DirectoryArn", required: true, type: .string)
        ]
        /// The revision of the published schema to upgrade the directory to.
        public let publishedSchemaArn: String
        /// Used for testing whether the major version schemas are backward compatible or not. If schema compatibility fails, an exception would be thrown else the call would succeed but no changes will be saved. This parameter is optional.
        public let dryRun: Bool?
        /// The ARN for the directory to which the upgraded schema will be applied.
        public let directoryArn: String

        public init(publishedSchemaArn: String, dryRun: Bool? = nil, directoryArn: String) {
            self.publishedSchemaArn = publishedSchemaArn
            self.dryRun = dryRun
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case publishedSchemaArn = "PublishedSchemaArn"
            case dryRun = "DryRun"
            case directoryArn = "DirectoryArn"
        }
    }

    public struct DetachFromIndexResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DetachedObjectIdentifier", required: false, type: .string)
        ]
        /// The ObjectIdentifier of the object that was detached from the index.
        public let detachedObjectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case detachedObjectIdentifier = "DetachedObjectIdentifier"
        }
    }

    public struct BatchAddFacetToObjectResponse: AWSShape {

    }

    public struct BatchListObjectAttributes: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "FacetFilter", required: false, type: .structure), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// The maximum number of items to be retrieved in a single call. This is an approximate number.
        public let maxResults: Int32?
        /// Used to filter the list of object attributes that are associated with a certain facet.
        public let facetFilter: SchemaFacet?
        /// The pagination token.
        public let nextToken: String?
        /// Reference of the object whose attributes need to be listed.
        public let objectReference: ObjectReference

        public init(maxResults: Int32? = nil, facetFilter: SchemaFacet? = nil, nextToken: String? = nil, objectReference: ObjectReference) {
            self.maxResults = maxResults
            self.facetFilter = facetFilter
            self.nextToken = nextToken
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case facetFilter = "FacetFilter"
            case nextToken = "NextToken"
            case objectReference = "ObjectReference"
        }
    }

    public struct AttachObjectResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttachedObjectIdentifier", required: false, type: .string)
        ]
        /// The attached ObjectIdentifier, which is the child ObjectIdentifier.
        public let attachedObjectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case attachedObjectIdentifier = "AttachedObjectIdentifier"
        }
    }

    public struct UpdateLinkAttributesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "AttributeUpdates", required: true, type: .list), 
            AWSShapeMember(label: "TypedLinkSpecifier", required: true, type: .structure)
        ]
        /// The Amazon Resource Name (ARN) that is associated with the Directory where the updated typed link resides. For more information, see arns or Typed link.
        public let directoryArn: String
        /// The attributes update structure.
        public let attributeUpdates: [LinkAttributeUpdate]
        /// Allows a typed link specifier to be accepted as input.
        public let typedLinkSpecifier: TypedLinkSpecifier

        public init(directoryArn: String, attributeUpdates: [LinkAttributeUpdate], typedLinkSpecifier: TypedLinkSpecifier) {
            self.directoryArn = directoryArn
            self.attributeUpdates = attributeUpdates
            self.typedLinkSpecifier = typedLinkSpecifier
        }

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "x-amz-data-partition"
            case attributeUpdates = "AttributeUpdates"
            case typedLinkSpecifier = "TypedLinkSpecifier"
        }
    }

    public struct ListObjectParentPathsRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// The maximum number of items to be retrieved in a single call. This is an approximate number.
        public let maxResults: Int32?
        /// The ARN of the directory to which the parent path applies.
        public let directoryArn: String
        /// The pagination token.
        public let nextToken: String?
        /// The reference that identifies the object whose parent paths are listed.
        public let objectReference: ObjectReference

        public init(maxResults: Int32? = nil, directoryArn: String, nextToken: String? = nil, objectReference: ObjectReference) {
            self.maxResults = maxResults
            self.directoryArn = directoryArn
            self.nextToken = nextToken
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case directoryArn = "x-amz-data-partition"
            case nextToken = "NextToken"
            case objectReference = "ObjectReference"
        }
    }

    public struct CreateDirectoryRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The name of the Directory. Should be unique per account, per region.
        public let name: String
        /// The Amazon Resource Name (ARN) of the published schema that will be copied into the data Directory. For more information, see arns.
        public let schemaArn: String

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

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct GetSchemaAsJsonRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The ARN of the schema to retrieve.
        public let schemaArn: String

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

        private enum CodingKeys: String, CodingKey {
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct UpdateFacetRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectType", required: false, type: .enum), 
            AWSShapeMember(label: "AttributeUpdates", required: false, type: .list), 
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The object type that is associated with the facet. See CreateFacetRequest$ObjectType for more details.
        public let objectType: ObjectType?
        /// List of attributes that need to be updated in a given schema Facet. Each attribute is followed by AttributeAction, which specifies the type of update operation to perform. 
        public let attributeUpdates: [FacetAttributeUpdate]?
        /// The name of the facet.
        public let name: String
        /// The Amazon Resource Name (ARN) that is associated with the Facet. For more information, see arns.
        public let schemaArn: String

        public init(objectType: ObjectType? = nil, attributeUpdates: [FacetAttributeUpdate]? = nil, name: String, schemaArn: String) {
            self.objectType = objectType
            self.attributeUpdates = attributeUpdates
            self.name = name
            self.schemaArn = schemaArn
        }

        private enum CodingKeys: String, CodingKey {
            case objectType = "ObjectType"
            case attributeUpdates = "AttributeUpdates"
            case name = "Name"
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct ListTypedLinkFacetNamesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
        public let schemaArn: String
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(nextToken: String? = nil, schemaArn: String, maxResults: Int32? = nil) {
            self.nextToken = nextToken
            self.schemaArn = schemaArn
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case schemaArn = "x-amz-data-partition"
            case maxResults = "MaxResults"
        }
    }

    public struct BatchDetachPolicy: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "PolicyReference", required: true, type: .structure)
        ]
        /// Reference that identifies the object whose policy object will be detached.
        public let objectReference: ObjectReference
        /// Reference that identifies the policy object.
        public let policyReference: ObjectReference

        public init(objectReference: ObjectReference, policyReference: ObjectReference) {
            self.objectReference = objectReference
            self.policyReference = policyReference
        }

        private enum CodingKeys: String, CodingKey {
            case objectReference = "ObjectReference"
            case policyReference = "PolicyReference"
        }
    }

    public struct DisableDirectoryResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", required: true, type: .string)
        ]
        /// The ARN of the directory that has been disabled.
        public let directoryArn: String

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

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "DirectoryArn"
        }
    }

    public struct AttachPolicyRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "PolicyReference", required: true, type: .structure), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The reference that is associated with the policy object.
        public let policyReference: ObjectReference
        /// The reference that identifies the object to which the policy will be attached.
        public let objectReference: ObjectReference
        /// The Amazon Resource Name (ARN) that is associated with the Directory where both objects reside. For more information, see arns.
        public let directoryArn: String

        public init(policyReference: ObjectReference, objectReference: ObjectReference, directoryArn: String) {
            self.policyReference = policyReference
            self.objectReference = objectReference
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case policyReference = "PolicyReference"
            case objectReference = "ObjectReference"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public enum DirectoryState: String, CustomStringConvertible, Codable {
        case enabled = "ENABLED"
        case disabled = "DISABLED"
        case deleted = "DELETED"
        public var description: String { return self.rawValue }
    }

    public struct ListDevelopmentSchemaArnsResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaArns", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// The ARNs of retrieved development schemas.
        public let schemaArns: [String]?
        /// The pagination token.
        public let nextToken: String?

        public init(schemaArns: [String]? = nil, nextToken: String? = nil) {
            self.schemaArns = schemaArns
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case schemaArns = "SchemaArns"
            case nextToken = "NextToken"
        }
    }

    public struct BatchWriteRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Operations", required: true, type: .list), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// A list of operations that are part of the batch.
        public let operations: [BatchWriteOperation]
        /// The Amazon Resource Name (ARN) that is associated with the Directory. For more information, see arns.
        public let directoryArn: String

        public init(operations: [BatchWriteOperation], directoryArn: String) {
            self.operations = operations
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case operations = "Operations"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct ListTypedLinkFacetNamesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "FacetNames", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The names of typed link facets that exist within the schema.
        public let facetNames: [String]?

        public init(nextToken: String? = nil, facetNames: [String]? = nil) {
            self.nextToken = nextToken
            self.facetNames = facetNames
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case facetNames = "FacetNames"
        }
    }

    public struct UpdateLinkAttributesResponse: AWSShape {

    }

    public enum UpdateActionType: String, CustomStringConvertible, Codable {
        case createOrUpdate = "CREATE_OR_UPDATE"
        case delete = "DELETE"
        public var description: String { return self.rawValue }
    }

    public struct BatchCreateObjectResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectIdentifier", required: false, type: .string)
        ]
        /// The ID that is associated with the object.
        public let objectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case objectIdentifier = "ObjectIdentifier"
        }
    }

    public struct UpgradePublishedSchemaRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "PublishedSchemaArn", required: true, type: .string), 
            AWSShapeMember(label: "MinorVersion", required: true, type: .string), 
            AWSShapeMember(label: "DevelopmentSchemaArn", required: true, type: .string), 
            AWSShapeMember(label: "DryRun", required: false, type: .boolean)
        ]
        /// The ARN of the published schema to be upgraded.
        public let publishedSchemaArn: String
        /// Identifies the minor version of the published schema that will be created. This parameter is NOT optional.
        public let minorVersion: String
        /// The ARN of the development schema with the changes used for the upgrade.
        public let developmentSchemaArn: String
        /// Used for testing whether the Development schema provided is backwards compatible, or not, with the publish schema provided by the user to be upgraded. If schema compatibility fails, an exception would be thrown else the call would succeed. This parameter is optional and defaults to false.
        public let dryRun: Bool?

        public init(publishedSchemaArn: String, minorVersion: String, developmentSchemaArn: String, dryRun: Bool? = nil) {
            self.publishedSchemaArn = publishedSchemaArn
            self.minorVersion = minorVersion
            self.developmentSchemaArn = developmentSchemaArn
            self.dryRun = dryRun
        }

        private enum CodingKeys: String, CodingKey {
            case publishedSchemaArn = "PublishedSchemaArn"
            case minorVersion = "MinorVersion"
            case developmentSchemaArn = "DevelopmentSchemaArn"
            case dryRun = "DryRun"
        }
    }

    public struct BatchListPolicyAttachments: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "PolicyReference", required: true, type: .structure)
        ]
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?
        /// The pagination token.
        public let nextToken: String?
        /// The reference that identifies the policy object.
        public let policyReference: ObjectReference

        public init(maxResults: Int32? = nil, nextToken: String? = nil, policyReference: ObjectReference) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.policyReference = policyReference
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case policyReference = "PolicyReference"
        }
    }

    public struct BatchUpdateObjectAttributesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectIdentifier", required: false, type: .string)
        ]
        /// ID that is associated with the object.
        public let objectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case objectIdentifier = "ObjectIdentifier"
        }
    }

    public struct BatchReadRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ConsistencyLevel", location: .header(locationName: "x-amz-consistency-level"), required: false, type: .enum), 
            AWSShapeMember(label: "Operations", required: true, type: .list), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
        public let consistencyLevel: ConsistencyLevel?
        /// A list of operations that are part of the batch.
        public let operations: [BatchReadOperation]
        /// The Amazon Resource Name (ARN) that is associated with the Directory. For more information, see arns.
        public let directoryArn: String

        public init(consistencyLevel: ConsistencyLevel? = nil, operations: [BatchReadOperation], directoryArn: String) {
            self.consistencyLevel = consistencyLevel
            self.operations = operations
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case consistencyLevel = "x-amz-consistency-level"
            case operations = "Operations"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct ListPublishedSchemaArnsResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaArns", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// The ARNs of published schemas.
        public let schemaArns: [String]?
        /// The pagination token.
        public let nextToken: String?

        public init(schemaArns: [String]? = nil, nextToken: String? = nil) {
            self.schemaArns = schemaArns
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case schemaArns = "SchemaArns"
            case nextToken = "NextToken"
        }
    }

    public struct GetObjectAttributesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "SchemaFacet", required: true, type: .structure), 
            AWSShapeMember(label: "ConsistencyLevel", location: .header(locationName: "x-amz-consistency-level"), required: false, type: .enum), 
            AWSShapeMember(label: "AttributeNames", required: true, type: .list), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// The Amazon Resource Name (ARN) that is associated with the Directory where the object resides.
        public let directoryArn: String
        /// Identifier for the facet whose attributes will be retrieved. See SchemaFacet for details.
        public let schemaFacet: SchemaFacet
        /// The consistency level at which to retrieve the attributes on an object.
        public let consistencyLevel: ConsistencyLevel?
        /// List of attribute names whose values will be retrieved.
        public let attributeNames: [String]
        /// Reference that identifies the object whose attributes will be retrieved.
        public let objectReference: ObjectReference

        public init(directoryArn: String, schemaFacet: SchemaFacet, consistencyLevel: ConsistencyLevel? = nil, attributeNames: [String], objectReference: ObjectReference) {
            self.directoryArn = directoryArn
            self.schemaFacet = schemaFacet
            self.consistencyLevel = consistencyLevel
            self.attributeNames = attributeNames
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "x-amz-data-partition"
            case schemaFacet = "SchemaFacet"
            case consistencyLevel = "x-amz-consistency-level"
            case attributeNames = "AttributeNames"
            case objectReference = "ObjectReference"
        }
    }

    public struct BatchReadSuccessfulResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ListIndex", required: false, type: .structure), 
            AWSShapeMember(label: "GetObjectInformation", required: false, type: .structure), 
            AWSShapeMember(label: "ListObjectChildren", required: false, type: .structure), 
            AWSShapeMember(label: "ListObjectParentPaths", required: false, type: .structure), 
            AWSShapeMember(label: "ListAttachedIndices", required: false, type: .structure), 
            AWSShapeMember(label: "ListObjectPolicies", required: false, type: .structure), 
            AWSShapeMember(label: "ListObjectAttributes", required: false, type: .structure), 
            AWSShapeMember(label: "ListIncomingTypedLinks", required: false, type: .structure), 
            AWSShapeMember(label: "GetLinkAttributes", required: false, type: .structure), 
            AWSShapeMember(label: "ListOutgoingTypedLinks", required: false, type: .structure), 
            AWSShapeMember(label: "ListPolicyAttachments", required: false, type: .structure), 
            AWSShapeMember(label: "GetObjectAttributes", required: false, type: .structure), 
            AWSShapeMember(label: "LookupPolicy", required: false, type: .structure)
        ]
        /// Lists objects attached to the specified index.
        public let listIndex: BatchListIndexResponse?
        /// Retrieves metadata about an object.
        public let getObjectInformation: BatchGetObjectInformationResponse?
        /// Returns a paginated list of child objects that are associated with a given object.
        public let listObjectChildren: BatchListObjectChildrenResponse?
        /// Retrieves all available parent paths for any object type such as node, leaf node, policy node, and index node objects. For more information about objects, see Directory Structure.
        public let listObjectParentPaths: BatchListObjectParentPathsResponse?
        /// Lists indices attached to an object.
        public let listAttachedIndices: BatchListAttachedIndicesResponse?
        /// Returns policies attached to an object in pagination fashion.
        public let listObjectPolicies: BatchListObjectPoliciesResponse?
        /// Lists all attributes that are associated with an object.
        public let listObjectAttributes: BatchListObjectAttributesResponse?
        /// Returns a paginated list of all the incoming TypedLinkSpecifier information for an object. It also supports filtering by typed link facet and identity attributes. For more information, see Typed link.
        public let listIncomingTypedLinks: BatchListIncomingTypedLinksResponse?
        /// The list of attributes to retrieve from the typed link.
        public let getLinkAttributes: BatchGetLinkAttributesResponse?
        /// Returns a paginated list of all the outgoing TypedLinkSpecifier information for an object. It also supports filtering by typed link facet and identity attributes. For more information, see Typed link.
        public let listOutgoingTypedLinks: BatchListOutgoingTypedLinksResponse?
        /// Returns all of the ObjectIdentifiers to which a given policy is attached.
        public let listPolicyAttachments: BatchListPolicyAttachmentsResponse?
        /// Retrieves attributes within a facet that are associated with an object.
        public let getObjectAttributes: BatchGetObjectAttributesResponse?
        /// Lists all policies from the root of the Directory to the object specified. If there are no policies present, an empty list is returned. If policies are present, and if some objects don't have the policies attached, it returns the ObjectIdentifier for such objects. If policies are present, it returns ObjectIdentifier, policyId, and policyType. Paths that don't lead to the root from the target object are ignored. For more information, see Policies.
        public let lookupPolicy: BatchLookupPolicyResponse?

        public init(listIndex: BatchListIndexResponse? = nil, getObjectInformation: BatchGetObjectInformationResponse? = nil, listObjectChildren: BatchListObjectChildrenResponse? = nil, listObjectParentPaths: BatchListObjectParentPathsResponse? = nil, listAttachedIndices: BatchListAttachedIndicesResponse? = nil, listObjectPolicies: BatchListObjectPoliciesResponse? = nil, listObjectAttributes: BatchListObjectAttributesResponse? = nil, listIncomingTypedLinks: BatchListIncomingTypedLinksResponse? = nil, getLinkAttributes: BatchGetLinkAttributesResponse? = nil, listOutgoingTypedLinks: BatchListOutgoingTypedLinksResponse? = nil, listPolicyAttachments: BatchListPolicyAttachmentsResponse? = nil, getObjectAttributes: BatchGetObjectAttributesResponse? = nil, lookupPolicy: BatchLookupPolicyResponse? = nil) {
            self.listIndex = listIndex
            self.getObjectInformation = getObjectInformation
            self.listObjectChildren = listObjectChildren
            self.listObjectParentPaths = listObjectParentPaths
            self.listAttachedIndices = listAttachedIndices
            self.listObjectPolicies = listObjectPolicies
            self.listObjectAttributes = listObjectAttributes
            self.listIncomingTypedLinks = listIncomingTypedLinks
            self.getLinkAttributes = getLinkAttributes
            self.listOutgoingTypedLinks = listOutgoingTypedLinks
            self.listPolicyAttachments = listPolicyAttachments
            self.getObjectAttributes = getObjectAttributes
            self.lookupPolicy = lookupPolicy
        }

        private enum CodingKeys: String, CodingKey {
            case listIndex = "ListIndex"
            case getObjectInformation = "GetObjectInformation"
            case listObjectChildren = "ListObjectChildren"
            case listObjectParentPaths = "ListObjectParentPaths"
            case listAttachedIndices = "ListAttachedIndices"
            case listObjectPolicies = "ListObjectPolicies"
            case listObjectAttributes = "ListObjectAttributes"
            case listIncomingTypedLinks = "ListIncomingTypedLinks"
            case getLinkAttributes = "GetLinkAttributes"
            case listOutgoingTypedLinks = "ListOutgoingTypedLinks"
            case listPolicyAttachments = "ListPolicyAttachments"
            case getObjectAttributes = "GetObjectAttributes"
            case lookupPolicy = "LookupPolicy"
        }
    }

    public struct TypedAttributeValue: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "StringValue", required: false, type: .string), 
            AWSShapeMember(label: "BinaryValue", required: false, type: .blob), 
            AWSShapeMember(label: "BooleanValue", required: false, type: .boolean), 
            AWSShapeMember(label: "DatetimeValue", required: false, type: .timestamp), 
            AWSShapeMember(label: "NumberValue", required: false, type: .string)
        ]
        /// A string data value.
        public let stringValue: String?
        /// A binary data value.
        public let binaryValue: Data?
        /// A Boolean data value.
        public let booleanValue: Bool?
        /// A date and time value.
        public let datetimeValue: TimeStamp?
        /// A number data value.
        public let numberValue: String?

        public init(stringValue: String? = nil, binaryValue: Data? = nil, booleanValue: Bool? = nil, datetimeValue: TimeStamp? = nil, numberValue: String? = nil) {
            self.stringValue = stringValue
            self.binaryValue = binaryValue
            self.booleanValue = booleanValue
            self.datetimeValue = datetimeValue
            self.numberValue = numberValue
        }

        private enum CodingKeys: String, CodingKey {
            case stringValue = "StringValue"
            case binaryValue = "BinaryValue"
            case booleanValue = "BooleanValue"
            case datetimeValue = "DatetimeValue"
            case numberValue = "NumberValue"
        }
    }

    public struct ListObjectParentPathsResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "PathToObjectIdentifiersList", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// Returns the path to the ObjectIdentifiers that are associated with the directory.
        public let pathToObjectIdentifiersList: [PathToObjectIdentifiers]?

        public init(nextToken: String? = nil, pathToObjectIdentifiersList: [PathToObjectIdentifiers]? = nil) {
            self.nextToken = nextToken
            self.pathToObjectIdentifiersList = pathToObjectIdentifiersList
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case pathToObjectIdentifiersList = "PathToObjectIdentifiersList"
        }
    }

    public struct AttributeKey: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", required: true, type: .string), 
            AWSShapeMember(label: "FacetName", required: true, type: .string)
        ]
        /// The name of the attribute.
        public let name: String
        /// The Amazon Resource Name (ARN) of the schema that contains the facet and attribute.
        public let schemaArn: String
        /// The name of the facet that the attribute exists within.
        public let facetName: String

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

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case schemaArn = "SchemaArn"
            case facetName = "FacetName"
        }
    }

    public struct PathToObjectIdentifiers: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectIdentifiers", required: false, type: .list), 
            AWSShapeMember(label: "Path", required: false, type: .string)
        ]
        /// Lists ObjectIdentifiers starting from directory root to the object in the request.
        public let objectIdentifiers: [String]?
        /// The path that is used to identify the object starting from directory root.
        public let path: String?

        public init(objectIdentifiers: [String]? = nil, path: String? = nil) {
            self.objectIdentifiers = objectIdentifiers
            self.path = path
        }

        private enum CodingKeys: String, CodingKey {
            case objectIdentifiers = "ObjectIdentifiers"
            case path = "Path"
        }
    }

    public struct AttributeNameAndValue: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttributeName", required: true, type: .string), 
            AWSShapeMember(label: "Value", required: true, type: .structure)
        ]
        /// The attribute name of the typed link.
        public let attributeName: String
        /// The value for the typed link.
        public let value: TypedAttributeValue

        public init(attributeName: String, value: TypedAttributeValue) {
            self.attributeName = attributeName
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case attributeName = "AttributeName"
            case value = "Value"
        }
    }

    public struct BatchDetachObject: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BatchReferenceName", required: false, type: .string), 
            AWSShapeMember(label: "ParentReference", required: true, type: .structure), 
            AWSShapeMember(label: "LinkName", required: true, type: .string)
        ]
        /// The batch reference name. See Batches for more information.
        public let batchReferenceName: String?
        /// Parent reference from which the object with the specified link name is detached.
        public let parentReference: ObjectReference
        /// The name of the link.
        public let linkName: String

        public init(batchReferenceName: String? = nil, parentReference: ObjectReference, linkName: String) {
            self.batchReferenceName = batchReferenceName
            self.parentReference = parentReference
            self.linkName = linkName
        }

        private enum CodingKeys: String, CodingKey {
            case batchReferenceName = "BatchReferenceName"
            case parentReference = "ParentReference"
            case linkName = "LinkName"
        }
    }

    public struct GetFacetRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The name of the facet to retrieve.
        public let name: String
        /// The Amazon Resource Name (ARN) that is associated with the Facet. For more information, see arns.
        public let schemaArn: String

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

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct UpdateSchemaRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The name of the schema.
        public let name: String
        /// The Amazon Resource Name (ARN) of the development schema. For more information, see arns.
        public let schemaArn: String

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

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct IndexAttachment: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IndexedAttributes", required: false, type: .list), 
            AWSShapeMember(label: "ObjectIdentifier", required: false, type: .string)
        ]
        /// The indexed attribute values.
        public let indexedAttributes: [AttributeKeyAndValue]?
        /// In response to ListIndex, the ObjectIdentifier of the object attached to the index. In response to ListAttachedIndices, the ObjectIdentifier of the index attached to the object. This field will always contain the ObjectIdentifier of the object on the opposite side of the attachment specified in the query.
        public let objectIdentifier: String?

        public init(indexedAttributes: [AttributeKeyAndValue]? = nil, objectIdentifier: String? = nil) {
            self.indexedAttributes = indexedAttributes
            self.objectIdentifier = objectIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case indexedAttributes = "IndexedAttributes"
            case objectIdentifier = "ObjectIdentifier"
        }
    }

    public struct ObjectAttributeUpdate: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectAttributeKey", required: false, type: .structure), 
            AWSShapeMember(label: "ObjectAttributeAction", required: false, type: .structure)
        ]
        /// The key of the attribute being updated.
        public let objectAttributeKey: AttributeKey?
        /// The action to perform as part of the attribute update.
        public let objectAttributeAction: ObjectAttributeAction?

        public init(objectAttributeKey: AttributeKey? = nil, objectAttributeAction: ObjectAttributeAction? = nil) {
            self.objectAttributeKey = objectAttributeKey
            self.objectAttributeAction = objectAttributeAction
        }

        private enum CodingKeys: String, CodingKey {
            case objectAttributeKey = "ObjectAttributeKey"
            case objectAttributeAction = "ObjectAttributeAction"
        }
    }

    public struct CreateIndexRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "OrderedIndexedAttributeList", required: true, type: .list), 
            AWSShapeMember(label: "IsUnique", required: true, type: .boolean), 
            AWSShapeMember(label: "ParentReference", required: false, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "LinkName", required: false, type: .string)
        ]
        /// Specifies the attributes that should be indexed on. Currently only a single attribute is supported.
        public let orderedIndexedAttributeList: [AttributeKey]
        /// Indicates whether the attribute that is being indexed has unique values or not.
        public let isUnique: Bool
        /// A reference to the parent object that contains the index object.
        public let parentReference: ObjectReference?
        /// The ARN of the directory where the index should be created.
        public let directoryArn: String
        /// The name of the link between the parent object and the index object.
        public let linkName: String?

        public init(orderedIndexedAttributeList: [AttributeKey], isUnique: Bool, parentReference: ObjectReference? = nil, directoryArn: String, linkName: String? = nil) {
            self.orderedIndexedAttributeList = orderedIndexedAttributeList
            self.isUnique = isUnique
            self.parentReference = parentReference
            self.directoryArn = directoryArn
            self.linkName = linkName
        }

        private enum CodingKeys: String, CodingKey {
            case orderedIndexedAttributeList = "OrderedIndexedAttributeList"
            case isUnique = "IsUnique"
            case parentReference = "ParentReference"
            case directoryArn = "x-amz-data-partition"
            case linkName = "LinkName"
        }
    }

    public struct Facet: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectType", required: false, type: .enum), 
            AWSShapeMember(label: "FacetStyle", required: false, type: .enum), 
            AWSShapeMember(label: "Name", required: false, type: .string)
        ]
        /// The object type that is associated with the facet. See CreateFacetRequest$ObjectType for more details.
        public let objectType: ObjectType?
        /// There are two different styles that you can define on any given facet, Static and Dynamic. For static facets, all attributes must be defined in the schema. For dynamic facets, attributes can be defined during data plane operations.
        public let facetStyle: FacetStyle?
        /// The name of the Facet.
        public let name: String?

        public init(objectType: ObjectType? = nil, facetStyle: FacetStyle? = nil, name: String? = nil) {
            self.objectType = objectType
            self.facetStyle = facetStyle
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case objectType = "ObjectType"
            case facetStyle = "FacetStyle"
            case name = "Name"
        }
    }

    public struct BatchListAttachedIndicesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IndexAttachments", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// The indices attached to the specified object.
        public let indexAttachments: [IndexAttachment]?
        /// The pagination token.
        public let nextToken: String?

        public init(indexAttachments: [IndexAttachment]? = nil, nextToken: String? = nil) {
            self.indexAttachments = indexAttachments
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case indexAttachments = "IndexAttachments"
            case nextToken = "NextToken"
        }
    }

    public enum FacetAttributeType: String, CustomStringConvertible, Codable {
        case string = "STRING"
        case binary = "BINARY"
        case boolean = "BOOLEAN"
        case number = "NUMBER"
        case datetime = "DATETIME"
        case variant = "VARIANT"
        public var description: String { return self.rawValue }
    }

    public struct ListDirectoriesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "state", required: false, type: .enum), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The state of the directories in the list. Can be either Enabled, Disabled, or Deleted.
        public let state: DirectoryState?
        /// The pagination token.
        public let nextToken: String?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(state: DirectoryState? = nil, nextToken: String? = nil, maxResults: Int32? = nil) {
            self.state = state
            self.nextToken = nextToken
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case state = "state"
            case nextToken = "NextToken"
            case maxResults = "MaxResults"
        }
    }

    public struct FacetAttributeDefinition: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IsImmutable", required: false, type: .boolean), 
            AWSShapeMember(label: "Rules", required: false, type: .map), 
            AWSShapeMember(label: "Type", required: true, type: .enum), 
            AWSShapeMember(label: "DefaultValue", required: false, type: .structure)
        ]
        /// Whether the attribute is mutable or not.
        public let isImmutable: Bool?
        /// Validation rules attached to the attribute definition.
        public let rules: [String: Rule]?
        /// The type of the attribute.
        public let `type`: FacetAttributeType
        /// The default value of the attribute (if configured).
        public let defaultValue: TypedAttributeValue?

        public init(isImmutable: Bool? = nil, rules: [String: Rule]? = nil, type: FacetAttributeType, defaultValue: TypedAttributeValue? = nil) {
            self.isImmutable = isImmutable
            self.rules = rules
            self.`type` = `type`
            self.defaultValue = defaultValue
        }

        private enum CodingKeys: String, CodingKey {
            case isImmutable = "IsImmutable"
            case rules = "Rules"
            case `type` = "Type"
            case defaultValue = "DefaultValue"
        }
    }

    public struct DetachPolicyResponse: AWSShape {

    }

    public struct BatchUpdateLinkAttributesResponse: AWSShape {

    }

    public struct ListObjectAttributesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "FacetFilter", required: false, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "ConsistencyLevel", location: .header(locationName: "x-amz-consistency-level"), required: false, type: .enum), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// The maximum number of items to be retrieved in a single call. This is an approximate number.
        public let maxResults: Int32?
        /// Used to filter the list of object attributes that are associated with a certain facet.
        public let facetFilter: SchemaFacet?
        /// The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
        public let directoryArn: String
        /// Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
        public let consistencyLevel: ConsistencyLevel?
        /// The pagination token.
        public let nextToken: String?
        /// The reference that identifies the object whose attributes will be listed.
        public let objectReference: ObjectReference

        public init(maxResults: Int32? = nil, facetFilter: SchemaFacet? = nil, directoryArn: String, consistencyLevel: ConsistencyLevel? = nil, nextToken: String? = nil, objectReference: ObjectReference) {
            self.maxResults = maxResults
            self.facetFilter = facetFilter
            self.directoryArn = directoryArn
            self.consistencyLevel = consistencyLevel
            self.nextToken = nextToken
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case facetFilter = "FacetFilter"
            case directoryArn = "x-amz-data-partition"
            case consistencyLevel = "x-amz-consistency-level"
            case nextToken = "NextToken"
            case objectReference = "ObjectReference"
        }
    }

    public struct PublishSchemaResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "PublishedSchemaArn", required: false, type: .string)
        ]
        /// The ARN that is associated with the published schema. For more information, see arns.
        public let publishedSchemaArn: String?

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

        private enum CodingKeys: String, CodingKey {
            case publishedSchemaArn = "PublishedSchemaArn"
        }
    }

    public struct CreateTypedLinkFacetRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Facet", required: true, type: .structure), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        ///  Facet structure that is associated with the typed link facet.
        public let facet: TypedLinkFacet
        /// The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
        public let schemaArn: String

        public init(facet: TypedLinkFacet, schemaArn: String) {
            self.facet = facet
            self.schemaArn = schemaArn
        }

        private enum CodingKeys: String, CodingKey {
            case facet = "Facet"
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct CreateObjectResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectIdentifier", required: false, type: .string)
        ]
        /// The identifier that is associated with the object.
        public let objectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case objectIdentifier = "ObjectIdentifier"
        }
    }

    public struct ListIncomingTypedLinksResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "LinkSpecifiers", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// Returns one or more typed link specifiers as output.
        public let linkSpecifiers: [TypedLinkSpecifier]?
        /// The pagination token.
        public let nextToken: String?

        public init(linkSpecifiers: [TypedLinkSpecifier]? = nil, nextToken: String? = nil) {
            self.linkSpecifiers = linkSpecifiers
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case linkSpecifiers = "LinkSpecifiers"
            case nextToken = "NextToken"
        }
    }

    public struct DeleteSchemaRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The Amazon Resource Name (ARN) of the development schema. For more information, see arns.
        public let schemaArn: String

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

        private enum CodingKeys: String, CodingKey {
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct GetObjectInformationResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaFacets", required: false, type: .list), 
            AWSShapeMember(label: "ObjectIdentifier", required: false, type: .string)
        ]
        /// The facets attached to the specified object. Although the response does not include minor version information, the most recently applied minor version of each Facet is in effect. See GetAppliedSchemaVersion for details.
        public let schemaFacets: [SchemaFacet]?
        /// The ObjectIdentifier of the specified object.
        public let objectIdentifier: String?

        public init(schemaFacets: [SchemaFacet]? = nil, objectIdentifier: String? = nil) {
            self.schemaFacets = schemaFacets
            self.objectIdentifier = objectIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case schemaFacets = "SchemaFacets"
            case objectIdentifier = "ObjectIdentifier"
        }
    }

    public struct BatchDetachTypedLink: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TypedLinkSpecifier", required: true, type: .structure)
        ]
        /// Used to accept a typed link specifier as input.
        public let typedLinkSpecifier: TypedLinkSpecifier

        public init(typedLinkSpecifier: TypedLinkSpecifier) {
            self.typedLinkSpecifier = typedLinkSpecifier
        }

        private enum CodingKeys: String, CodingKey {
            case typedLinkSpecifier = "TypedLinkSpecifier"
        }
    }

    public struct BatchDetachFromIndex: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TargetReference", required: true, type: .structure), 
            AWSShapeMember(label: "IndexReference", required: true, type: .structure)
        ]
        /// A reference to the object being detached from the index.
        public let targetReference: ObjectReference
        /// A reference to the index object.
        public let indexReference: ObjectReference

        public init(targetReference: ObjectReference, indexReference: ObjectReference) {
            self.targetReference = targetReference
            self.indexReference = indexReference
        }

        private enum CodingKeys: String, CodingKey {
            case targetReference = "TargetReference"
            case indexReference = "IndexReference"
        }
    }

    public struct ListIncomingTypedLinksRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "ConsistencyLevel", required: false, type: .enum), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "FilterAttributeRanges", required: false, type: .list), 
            AWSShapeMember(label: "FilterTypedLink", required: false, type: .structure)
        ]
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?
        /// The Amazon Resource Name (ARN) of the directory where you want to list the typed links.
        public let directoryArn: String
        /// The consistency level to execute the request at.
        public let consistencyLevel: ConsistencyLevel?
        /// Reference that identifies the object whose attributes will be listed.
        public let objectReference: ObjectReference
        /// The pagination token.
        public let nextToken: String?
        /// Provides range filters for multiple attributes. When providing ranges to typed link selection, any inexact ranges must be specified at the end. Any attributes that do not have a range specified are presumed to match the entire range.
        public let filterAttributeRanges: [TypedLinkAttributeRange]?
        /// Filters are interpreted in the order of the attributes on the typed link facet, not the order in which they are supplied to any API calls.
        public let filterTypedLink: TypedLinkSchemaAndFacetName?

        public init(maxResults: Int32? = nil, directoryArn: String, consistencyLevel: ConsistencyLevel? = nil, objectReference: ObjectReference, nextToken: String? = nil, filterAttributeRanges: [TypedLinkAttributeRange]? = nil, filterTypedLink: TypedLinkSchemaAndFacetName? = nil) {
            self.maxResults = maxResults
            self.directoryArn = directoryArn
            self.consistencyLevel = consistencyLevel
            self.objectReference = objectReference
            self.nextToken = nextToken
            self.filterAttributeRanges = filterAttributeRanges
            self.filterTypedLink = filterTypedLink
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case directoryArn = "x-amz-data-partition"
            case consistencyLevel = "ConsistencyLevel"
            case objectReference = "ObjectReference"
            case nextToken = "NextToken"
            case filterAttributeRanges = "FilterAttributeRanges"
            case filterTypedLink = "FilterTypedLink"
        }
    }

    public struct TagResourceResponse: AWSShape {

    }

    public struct BatchAttachTypedLinkResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TypedLinkSpecifier", required: false, type: .structure)
        ]
        /// Returns a typed link specifier as output.
        public let typedLinkSpecifier: TypedLinkSpecifier?

        public init(typedLinkSpecifier: TypedLinkSpecifier? = nil) {
            self.typedLinkSpecifier = typedLinkSpecifier
        }

        private enum CodingKeys: String, CodingKey {
            case typedLinkSpecifier = "TypedLinkSpecifier"
        }
    }

    public struct ListIndexResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IndexAttachments", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// The objects and indexed values attached to the index.
        public let indexAttachments: [IndexAttachment]?
        /// The pagination token.
        public let nextToken: String?

        public init(indexAttachments: [IndexAttachment]? = nil, nextToken: String? = nil) {
            self.indexAttachments = indexAttachments
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case indexAttachments = "IndexAttachments"
            case nextToken = "NextToken"
        }
    }

    public struct BatchGetLinkAttributes: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttributeNames", required: true, type: .list), 
            AWSShapeMember(label: "TypedLinkSpecifier", required: true, type: .structure)
        ]
        /// A list of attribute names whose values will be retrieved.
        public let attributeNames: [String]
        /// Allows a typed link specifier to be accepted as input.
        public let typedLinkSpecifier: TypedLinkSpecifier

        public init(attributeNames: [String], typedLinkSpecifier: TypedLinkSpecifier) {
            self.attributeNames = attributeNames
            self.typedLinkSpecifier = typedLinkSpecifier
        }

        private enum CodingKeys: String, CodingKey {
            case attributeNames = "AttributeNames"
            case typedLinkSpecifier = "TypedLinkSpecifier"
        }
    }

    public struct BatchLookupPolicyResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "PolicyToPathList", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// Provides list of path to policies. Policies contain PolicyId, ObjectIdentifier, and PolicyType. For more information, see Policies.
        public let policyToPathList: [PolicyToPath]?
        /// The pagination token.
        public let nextToken: String?

        public init(policyToPathList: [PolicyToPath]? = nil, nextToken: String? = nil) {
            self.policyToPathList = policyToPathList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case policyToPathList = "PolicyToPathList"
            case nextToken = "NextToken"
        }
    }

    public struct UpdateObjectAttributesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "AttributeUpdates", required: true, type: .list), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The reference that identifies the object.
        public let objectReference: ObjectReference
        /// The attributes update structure.
        public let attributeUpdates: [ObjectAttributeUpdate]
        /// The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
        public let directoryArn: String

        public init(objectReference: ObjectReference, attributeUpdates: [ObjectAttributeUpdate], directoryArn: String) {
            self.objectReference = objectReference
            self.attributeUpdates = attributeUpdates
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case objectReference = "ObjectReference"
            case attributeUpdates = "AttributeUpdates"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct BatchWriteOperation: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AddFacetToObject", required: false, type: .structure), 
            AWSShapeMember(label: "DetachObject", required: false, type: .structure), 
            AWSShapeMember(label: "AttachTypedLink", required: false, type: .structure), 
            AWSShapeMember(label: "AttachObject", required: false, type: .structure), 
            AWSShapeMember(label: "DetachTypedLink", required: false, type: .structure), 
            AWSShapeMember(label: "UpdateLinkAttributes", required: false, type: .structure), 
            AWSShapeMember(label: "CreateIndex", required: false, type: .structure), 
            AWSShapeMember(label: "DeleteObject", required: false, type: .structure), 
            AWSShapeMember(label: "RemoveFacetFromObject", required: false, type: .structure), 
            AWSShapeMember(label: "UpdateObjectAttributes", required: false, type: .structure), 
            AWSShapeMember(label: "DetachFromIndex", required: false, type: .structure), 
            AWSShapeMember(label: "DetachPolicy", required: false, type: .structure), 
            AWSShapeMember(label: "AttachPolicy", required: false, type: .structure), 
            AWSShapeMember(label: "CreateObject", required: false, type: .structure), 
            AWSShapeMember(label: "AttachToIndex", required: false, type: .structure)
        ]
        /// A batch operation that adds a facet to an object.
        public let addFacetToObject: BatchAddFacetToObject?
        /// Detaches an object from a Directory.
        public let detachObject: BatchDetachObject?
        /// Attaches a typed link to a specified source and target object. For more information, see Typed link.
        public let attachTypedLink: BatchAttachTypedLink?
        /// Attaches an object to a Directory.
        public let attachObject: BatchAttachObject?
        /// Detaches a typed link from a specified source and target object. For more information, see Typed link.
        public let detachTypedLink: BatchDetachTypedLink?
        /// Updates a given object's attributes.
        public let updateLinkAttributes: BatchUpdateLinkAttributes?
        /// Creates an index object. See Indexing for more information.
        public let createIndex: BatchCreateIndex?
        /// Deletes an object in a Directory.
        public let deleteObject: BatchDeleteObject?
        /// A batch operation that removes a facet from an object.
        public let removeFacetFromObject: BatchRemoveFacetFromObject?
        /// Updates a given object's attributes.
        public let updateObjectAttributes: BatchUpdateObjectAttributes?
        /// Detaches the specified object from the specified index.
        public let detachFromIndex: BatchDetachFromIndex?
        /// Detaches a policy from a Directory.
        public let detachPolicy: BatchDetachPolicy?
        /// Attaches a policy object to a regular object. An object can have a limited number of attached policies.
        public let attachPolicy: BatchAttachPolicy?
        /// Creates an object.
        public let createObject: BatchCreateObject?
        /// Attaches the specified object to the specified index.
        public let attachToIndex: BatchAttachToIndex?

        public init(addFacetToObject: BatchAddFacetToObject? = nil, detachObject: BatchDetachObject? = nil, attachTypedLink: BatchAttachTypedLink? = nil, attachObject: BatchAttachObject? = nil, detachTypedLink: BatchDetachTypedLink? = nil, updateLinkAttributes: BatchUpdateLinkAttributes? = nil, createIndex: BatchCreateIndex? = nil, deleteObject: BatchDeleteObject? = nil, removeFacetFromObject: BatchRemoveFacetFromObject? = nil, updateObjectAttributes: BatchUpdateObjectAttributes? = nil, detachFromIndex: BatchDetachFromIndex? = nil, detachPolicy: BatchDetachPolicy? = nil, attachPolicy: BatchAttachPolicy? = nil, createObject: BatchCreateObject? = nil, attachToIndex: BatchAttachToIndex? = nil) {
            self.addFacetToObject = addFacetToObject
            self.detachObject = detachObject
            self.attachTypedLink = attachTypedLink
            self.attachObject = attachObject
            self.detachTypedLink = detachTypedLink
            self.updateLinkAttributes = updateLinkAttributes
            self.createIndex = createIndex
            self.deleteObject = deleteObject
            self.removeFacetFromObject = removeFacetFromObject
            self.updateObjectAttributes = updateObjectAttributes
            self.detachFromIndex = detachFromIndex
            self.detachPolicy = detachPolicy
            self.attachPolicy = attachPolicy
            self.createObject = createObject
            self.attachToIndex = attachToIndex
        }

        private enum CodingKeys: String, CodingKey {
            case addFacetToObject = "AddFacetToObject"
            case detachObject = "DetachObject"
            case attachTypedLink = "AttachTypedLink"
            case attachObject = "AttachObject"
            case detachTypedLink = "DetachTypedLink"
            case updateLinkAttributes = "UpdateLinkAttributes"
            case createIndex = "CreateIndex"
            case deleteObject = "DeleteObject"
            case removeFacetFromObject = "RemoveFacetFromObject"
            case updateObjectAttributes = "UpdateObjectAttributes"
            case detachFromIndex = "DetachFromIndex"
            case detachPolicy = "DetachPolicy"
            case attachPolicy = "AttachPolicy"
            case createObject = "CreateObject"
            case attachToIndex = "AttachToIndex"
        }
    }

    public struct DeleteSchemaResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaArn", required: false, type: .string)
        ]
        /// The input ARN that is returned as part of the response. For more information, see arns.
        public let schemaArn: String?

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

        private enum CodingKeys: String, CodingKey {
            case schemaArn = "SchemaArn"
        }
    }

    public struct ListObjectChildrenRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "ConsistencyLevel", location: .header(locationName: "x-amz-consistency-level"), required: false, type: .enum), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// The maximum number of items to be retrieved in a single call. This is an approximate number.
        public let maxResults: Int32?
        /// The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
        public let directoryArn: String
        /// Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
        public let consistencyLevel: ConsistencyLevel?
        /// The pagination token.
        public let nextToken: String?
        /// The reference that identifies the object for which child objects are being listed.
        public let objectReference: ObjectReference

        public init(maxResults: Int32? = nil, directoryArn: String, consistencyLevel: ConsistencyLevel? = nil, nextToken: String? = nil, objectReference: ObjectReference) {
            self.maxResults = maxResults
            self.directoryArn = directoryArn
            self.consistencyLevel = consistencyLevel
            self.nextToken = nextToken
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case directoryArn = "x-amz-data-partition"
            case consistencyLevel = "x-amz-consistency-level"
            case nextToken = "NextToken"
            case objectReference = "ObjectReference"
        }
    }

    public struct ListPublishedSchemaArnsRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "SchemaArn", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The response for ListPublishedSchemaArns when this parameter is used will list all minor version ARNs for a major version.
        public let schemaArn: String?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(nextToken: String? = nil, schemaArn: String? = nil, maxResults: Int32? = nil) {
            self.nextToken = nextToken
            self.schemaArn = schemaArn
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case schemaArn = "SchemaArn"
            case maxResults = "MaxResults"
        }
    }

    public struct GetTypedLinkFacetInformationRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The unique name of the typed link facet.
        public let name: String
        /// The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
        public let schemaArn: String

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

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct ListManagedSchemaArnsResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaArns", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// The ARNs for all AWS managed schemas.
        public let schemaArns: [String]?
        /// The pagination token.
        public let nextToken: String?

        public init(schemaArns: [String]? = nil, nextToken: String? = nil) {
            self.schemaArns = schemaArns
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case schemaArns = "SchemaArns"
            case nextToken = "NextToken"
        }
    }

    public struct CreateSchemaRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Name", required: true, type: .string)
        ]
        /// The name that is associated with the schema. This is unique to each account and in each region.
        public let name: String

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

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

    public struct GetFacetResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Facet", required: false, type: .structure)
        ]
        /// The Facet structure that is associated with the facet.
        public let facet: Facet?

        public init(facet: Facet? = nil) {
            self.facet = facet
        }

        private enum CodingKeys: String, CodingKey {
            case facet = "Facet"
        }
    }

    public struct PutSchemaFromJsonResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Arn", required: false, type: .string)
        ]
        /// The ARN of the schema to update.
        public let arn: String?

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

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
        }
    }

    public struct ListObjectPoliciesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttachedPolicyIds", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// A list of policy ObjectIdentifiers, that are attached to the object.
        public let attachedPolicyIds: [String]?
        /// The pagination token.
        public let nextToken: String?

        public init(attachedPolicyIds: [String]? = nil, nextToken: String? = nil) {
            self.attachedPolicyIds = attachedPolicyIds
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case attachedPolicyIds = "AttachedPolicyIds"
            case nextToken = "NextToken"
        }
    }

    public struct BatchAttachObject: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ChildReference", required: true, type: .structure), 
            AWSShapeMember(label: "ParentReference", required: true, type: .structure), 
            AWSShapeMember(label: "LinkName", required: true, type: .string)
        ]
        /// The child object reference that is to be attached to the object.
        public let childReference: ObjectReference
        /// The parent object reference.
        public let parentReference: ObjectReference
        /// The name of the link.
        public let linkName: String

        public init(childReference: ObjectReference, parentReference: ObjectReference, linkName: String) {
            self.childReference = childReference
            self.parentReference = parentReference
            self.linkName = linkName
        }

        private enum CodingKeys: String, CodingKey {
            case childReference = "ChildReference"
            case parentReference = "ParentReference"
            case linkName = "LinkName"
        }
    }

    public struct DetachObjectResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DetachedObjectIdentifier", required: false, type: .string)
        ]
        /// The ObjectIdentifier that was detached from the object.
        public let detachedObjectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case detachedObjectIdentifier = "DetachedObjectIdentifier"
        }
    }

    public struct AttributeKeyAndValue: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Value", required: true, type: .structure), 
            AWSShapeMember(label: "Key", required: true, type: .structure)
        ]
        /// The value of the attribute.
        public let value: TypedAttributeValue
        /// The key of the attribute.
        public let key: AttributeKey

        public init(value: TypedAttributeValue, key: AttributeKey) {
            self.value = value
            self.key = key
        }

        private enum CodingKeys: String, CodingKey {
            case value = "Value"
            case key = "Key"
        }
    }

    public struct EnableDirectoryRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The ARN of the directory to enable.
        public let directoryArn: String

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

        private enum CodingKeys: String, CodingKey {
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct BatchListObjectPolicies: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The reference that identifies the object whose attributes will be listed.
        public let objectReference: ObjectReference
        /// The pagination token.
        public let nextToken: String?
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(objectReference: ObjectReference, nextToken: String? = nil, maxResults: Int32? = nil) {
            self.objectReference = objectReference
            self.nextToken = nextToken
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case objectReference = "ObjectReference"
            case nextToken = "NextToken"
            case maxResults = "MaxResults"
        }
    }

    public struct ListFacetAttributesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Attributes", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The attributes attached to the facet.
        public let attributes: [FacetAttribute]?

        public init(nextToken: String? = nil, attributes: [FacetAttribute]? = nil) {
            self.nextToken = nextToken
            self.attributes = attributes
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case attributes = "Attributes"
        }
    }

    public struct BatchReadOperation: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ListIndex", required: false, type: .structure), 
            AWSShapeMember(label: "GetObjectInformation", required: false, type: .structure), 
            AWSShapeMember(label: "ListObjectChildren", required: false, type: .structure), 
            AWSShapeMember(label: "ListObjectParentPaths", required: false, type: .structure), 
            AWSShapeMember(label: "ListAttachedIndices", required: false, type: .structure), 
            AWSShapeMember(label: "ListObjectPolicies", required: false, type: .structure), 
            AWSShapeMember(label: "ListObjectAttributes", required: false, type: .structure), 
            AWSShapeMember(label: "ListIncomingTypedLinks", required: false, type: .structure), 
            AWSShapeMember(label: "GetLinkAttributes", required: false, type: .structure), 
            AWSShapeMember(label: "ListOutgoingTypedLinks", required: false, type: .structure), 
            AWSShapeMember(label: "ListPolicyAttachments", required: false, type: .structure), 
            AWSShapeMember(label: "GetObjectAttributes", required: false, type: .structure), 
            AWSShapeMember(label: "LookupPolicy", required: false, type: .structure)
        ]
        /// Lists objects attached to the specified index.
        public let listIndex: BatchListIndex?
        /// Retrieves metadata about an object.
        public let getObjectInformation: BatchGetObjectInformation?
        /// Returns a paginated list of child objects that are associated with a given object.
        public let listObjectChildren: BatchListObjectChildren?
        /// Retrieves all available parent paths for any object type such as node, leaf node, policy node, and index node objects. For more information about objects, see Directory Structure.
        public let listObjectParentPaths: BatchListObjectParentPaths?
        /// Lists indices attached to an object.
        public let listAttachedIndices: BatchListAttachedIndices?
        /// Returns policies attached to an object in pagination fashion.
        public let listObjectPolicies: BatchListObjectPolicies?
        /// Lists all attributes that are associated with an object.
        public let listObjectAttributes: BatchListObjectAttributes?
        /// Returns a paginated list of all the incoming TypedLinkSpecifier information for an object. It also supports filtering by typed link facet and identity attributes. For more information, see Typed link.
        public let listIncomingTypedLinks: BatchListIncomingTypedLinks?
        /// Retrieves attributes that are associated with a typed link.
        public let getLinkAttributes: BatchGetLinkAttributes?
        /// Returns a paginated list of all the outgoing TypedLinkSpecifier information for an object. It also supports filtering by typed link facet and identity attributes. For more information, see Typed link.
        public let listOutgoingTypedLinks: BatchListOutgoingTypedLinks?
        /// Returns all of the ObjectIdentifiers to which a given policy is attached.
        public let listPolicyAttachments: BatchListPolicyAttachments?
        /// Retrieves attributes within a facet that are associated with an object.
        public let getObjectAttributes: BatchGetObjectAttributes?
        /// Lists all policies from the root of the Directory to the object specified. If there are no policies present, an empty list is returned. If policies are present, and if some objects don't have the policies attached, it returns the ObjectIdentifier for such objects. If policies are present, it returns ObjectIdentifier, policyId, and policyType. Paths that don't lead to the root from the target object are ignored. For more information, see Policies.
        public let lookupPolicy: BatchLookupPolicy?

        public init(listIndex: BatchListIndex? = nil, getObjectInformation: BatchGetObjectInformation? = nil, listObjectChildren: BatchListObjectChildren? = nil, listObjectParentPaths: BatchListObjectParentPaths? = nil, listAttachedIndices: BatchListAttachedIndices? = nil, listObjectPolicies: BatchListObjectPolicies? = nil, listObjectAttributes: BatchListObjectAttributes? = nil, listIncomingTypedLinks: BatchListIncomingTypedLinks? = nil, getLinkAttributes: BatchGetLinkAttributes? = nil, listOutgoingTypedLinks: BatchListOutgoingTypedLinks? = nil, listPolicyAttachments: BatchListPolicyAttachments? = nil, getObjectAttributes: BatchGetObjectAttributes? = nil, lookupPolicy: BatchLookupPolicy? = nil) {
            self.listIndex = listIndex
            self.getObjectInformation = getObjectInformation
            self.listObjectChildren = listObjectChildren
            self.listObjectParentPaths = listObjectParentPaths
            self.listAttachedIndices = listAttachedIndices
            self.listObjectPolicies = listObjectPolicies
            self.listObjectAttributes = listObjectAttributes
            self.listIncomingTypedLinks = listIncomingTypedLinks
            self.getLinkAttributes = getLinkAttributes
            self.listOutgoingTypedLinks = listOutgoingTypedLinks
            self.listPolicyAttachments = listPolicyAttachments
            self.getObjectAttributes = getObjectAttributes
            self.lookupPolicy = lookupPolicy
        }

        private enum CodingKeys: String, CodingKey {
            case listIndex = "ListIndex"
            case getObjectInformation = "GetObjectInformation"
            case listObjectChildren = "ListObjectChildren"
            case listObjectParentPaths = "ListObjectParentPaths"
            case listAttachedIndices = "ListAttachedIndices"
            case listObjectPolicies = "ListObjectPolicies"
            case listObjectAttributes = "ListObjectAttributes"
            case listIncomingTypedLinks = "ListIncomingTypedLinks"
            case getLinkAttributes = "GetLinkAttributes"
            case listOutgoingTypedLinks = "ListOutgoingTypedLinks"
            case listPolicyAttachments = "ListPolicyAttachments"
            case getObjectAttributes = "GetObjectAttributes"
            case lookupPolicy = "LookupPolicy"
        }
    }

    public struct ListFacetAttributesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The name of the facet whose attributes will be retrieved.
        public let name: String
        /// The ARN of the schema where the facet resides.
        public let schemaArn: String
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(nextToken: String? = nil, name: String, schemaArn: String, maxResults: Int32? = nil) {
            self.nextToken = nextToken
            self.name = name
            self.schemaArn = schemaArn
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case name = "Name"
            case schemaArn = "x-amz-data-partition"
            case maxResults = "MaxResults"
        }
    }

    public struct BatchCreateIndexResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectIdentifier", required: false, type: .string)
        ]
        /// The ObjectIdentifier of the index created by this operation.
        public let objectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case objectIdentifier = "ObjectIdentifier"
        }
    }

    public struct BatchGetObjectAttributesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Attributes", required: false, type: .list)
        ]
        /// The attribute values that are associated with an object.
        public let attributes: [AttributeKeyAndValue]?

        public init(attributes: [AttributeKeyAndValue]? = nil) {
            self.attributes = attributes
        }

        private enum CodingKeys: String, CodingKey {
            case attributes = "Attributes"
        }
    }

    public struct BatchReadException: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Type", required: false, type: .enum), 
            AWSShapeMember(label: "Message", required: false, type: .string)
        ]
        /// A type of exception, such as InvalidArnException.
        public let `type`: BatchReadExceptionType?
        /// An exception message that is associated with the failure.
        public let message: String?

        public init(type: BatchReadExceptionType? = nil, message: String? = nil) {
            self.`type` = `type`
            self.message = message
        }

        private enum CodingKeys: String, CodingKey {
            case `type` = "Type"
            case message = "Message"
        }
    }

    public enum RequiredAttributeBehavior: String, CustomStringConvertible, Codable {
        case requiredAlways = "REQUIRED_ALWAYS"
        case notRequired = "NOT_REQUIRED"
        public var description: String { return self.rawValue }
    }

    public struct DeleteObjectRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// A reference that identifies the object.
        public let objectReference: ObjectReference
        /// The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
        public let directoryArn: String

        public init(objectReference: ObjectReference, directoryArn: String) {
            self.objectReference = objectReference
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case objectReference = "ObjectReference"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct BatchListObjectChildren: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// Reference of the object for which child objects are being listed.
        public let objectReference: ObjectReference
        /// The pagination token.
        public let nextToken: String?
        /// Maximum number of items to be retrieved in a single call. This is an approximate number.
        public let maxResults: Int32?

        public init(objectReference: ObjectReference, nextToken: String? = nil, maxResults: Int32? = nil) {
            self.objectReference = objectReference
            self.nextToken = nextToken
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case objectReference = "ObjectReference"
            case nextToken = "NextToken"
            case maxResults = "MaxResults"
        }
    }

    public struct UntagResourceResponse: AWSShape {

    }

    public struct PolicyToPath: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Policies", required: false, type: .list), 
            AWSShapeMember(label: "Path", required: false, type: .string)
        ]
        /// List of policy objects.
        public let policies: [PolicyAttachment]?
        /// The path that is referenced from the root.
        public let path: String?

        public init(policies: [PolicyAttachment]? = nil, path: String? = nil) {
            self.policies = policies
            self.path = path
        }

        private enum CodingKeys: String, CodingKey {
            case policies = "Policies"
            case path = "Path"
        }
    }

    public struct GetObjectAttributesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Attributes", required: false, type: .list)
        ]
        /// The attributes that are associated with the object.
        public let attributes: [AttributeKeyAndValue]?

        public init(attributes: [AttributeKeyAndValue]? = nil) {
            self.attributes = attributes
        }

        private enum CodingKeys: String, CodingKey {
            case attributes = "Attributes"
        }
    }

    public struct ObjectReference: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Selector", required: false, type: .string)
        ]
        /// A path selector supports easy selection of an object by the parent/child links leading to it from the directory root. Use the link names from each parent/child link to construct the path. Path selectors start with a slash (/) and link names are separated by slashes. For more information about paths, see Accessing Objects. You can identify an object in one of the following ways:    $ObjectIdentifier - An object identifier is an opaque string provided by Amazon Cloud Directory. When creating objects, the system will provide you with the identifier of the created object. An object’s identifier is immutable and no two objects will ever share the same object identifier    /some/path - Identifies the object based on path    #SomeBatchReference - Identifies the object in a batch call  
        public let selector: String?

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

        private enum CodingKeys: String, CodingKey {
            case selector = "Selector"
        }
    }

    public struct BatchListObjectParentPathsResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "PathToObjectIdentifiersList", required: false, type: .list)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// Returns the path to the ObjectIdentifiers that are associated with the directory.
        public let pathToObjectIdentifiersList: [PathToObjectIdentifiers]?

        public init(nextToken: String? = nil, pathToObjectIdentifiersList: [PathToObjectIdentifiers]? = nil) {
            self.nextToken = nextToken
            self.pathToObjectIdentifiersList = pathToObjectIdentifiersList
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case pathToObjectIdentifiersList = "PathToObjectIdentifiersList"
        }
    }

    public struct UpdateTypedLinkFacetRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttributeUpdates", required: true, type: .list), 
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "IdentityAttributeOrder", required: true, type: .list)
        ]
        /// Attributes update structure.
        public let attributeUpdates: [TypedLinkFacetAttributeUpdate]
        /// The unique name of the typed link facet.
        public let name: String
        /// The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
        public let schemaArn: String
        /// The order of identity attributes for the facet, from most significant to least significant. The ability to filter typed links considers the order that the attributes are defined on the typed link facet. When providing ranges to a typed link selection, any inexact ranges must be specified at the end. Any attributes that do not have a range specified are presumed to match the entire range. Filters are interpreted in the order of the attributes on the typed link facet, not the order in which they are supplied to any API calls. For more information about identity attributes, see Typed link.
        public let identityAttributeOrder: [String]

        public init(attributeUpdates: [TypedLinkFacetAttributeUpdate], name: String, schemaArn: String, identityAttributeOrder: [String]) {
            self.attributeUpdates = attributeUpdates
            self.name = name
            self.schemaArn = schemaArn
            self.identityAttributeOrder = identityAttributeOrder
        }

        private enum CodingKeys: String, CodingKey {
            case attributeUpdates = "AttributeUpdates"
            case name = "Name"
            case schemaArn = "x-amz-data-partition"
            case identityAttributeOrder = "IdentityAttributeOrder"
        }
    }

    public struct UpdateFacetResponse: AWSShape {

    }

    public struct AttachToIndexResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttachedObjectIdentifier", required: false, type: .string)
        ]
        /// The ObjectIdentifier of the object that was attached to the index.
        public let attachedObjectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case attachedObjectIdentifier = "AttachedObjectIdentifier"
        }
    }

    public struct DetachFromIndexRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "TargetReference", required: true, type: .structure), 
            AWSShapeMember(label: "IndexReference", required: true, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// A reference to the object being detached from the index.
        public let targetReference: ObjectReference
        /// A reference to the index object.
        public let indexReference: ObjectReference
        /// The Amazon Resource Name (ARN) of the directory the index and object exist in.
        public let directoryArn: String

        public init(targetReference: ObjectReference, indexReference: ObjectReference, directoryArn: String) {
            self.targetReference = targetReference
            self.indexReference = indexReference
            self.directoryArn = directoryArn
        }

        private enum CodingKeys: String, CodingKey {
            case targetReference = "TargetReference"
            case indexReference = "IndexReference"
            case directoryArn = "x-amz-data-partition"
        }
    }

    public struct BatchListObjectPoliciesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AttachedPolicyIds", required: false, type: .list), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]
        /// A list of policy ObjectIdentifiers, that are attached to the object.
        public let attachedPolicyIds: [String]?
        /// The pagination token.
        public let nextToken: String?

        public init(attachedPolicyIds: [String]? = nil, nextToken: String? = nil) {
            self.attachedPolicyIds = attachedPolicyIds
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case attachedPolicyIds = "AttachedPolicyIds"
            case nextToken = "NextToken"
        }
    }

    public struct BatchRemoveFacetFromObject: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SchemaFacet", required: true, type: .structure), 
            AWSShapeMember(label: "ObjectReference", required: true, type: .structure)
        ]
        /// The facet to remove from the object.
        public let schemaFacet: SchemaFacet
        /// A reference to the object whose facet will be removed.
        public let objectReference: ObjectReference

        public init(schemaFacet: SchemaFacet, objectReference: ObjectReference) {
            self.schemaFacet = schemaFacet
            self.objectReference = objectReference
        }

        private enum CodingKeys: String, CodingKey {
            case schemaFacet = "SchemaFacet"
            case objectReference = "ObjectReference"
        }
    }

    public struct TypedLinkFacet: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "Attributes", required: true, type: .list), 
            AWSShapeMember(label: "IdentityAttributeOrder", required: true, type: .list)
        ]
        /// The unique name of the typed link facet.
        public let name: String
        /// A set of key-value pairs associated with the typed link. Typed link attributes are used when you have data values that are related to the link itself, and not to one of the two objects being linked. Identity attributes also serve to distinguish the link from others of the same type between the same objects.
        public let attributes: [TypedLinkAttributeDefinition]
        /// The set of attributes that distinguish links made from this facet from each other, in the order of significance. Listing typed links can filter on the values of these attributes. See ListOutgoingTypedLinks and ListIncomingTypedLinks for details.
        public let identityAttributeOrder: [String]

        public init(name: String, attributes: [TypedLinkAttributeDefinition], identityAttributeOrder: [String]) {
            self.name = name
            self.attributes = attributes
            self.identityAttributeOrder = identityAttributeOrder
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case attributes = "Attributes"
            case identityAttributeOrder = "IdentityAttributeOrder"
        }
    }

    public struct ListFacetNamesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The Amazon Resource Name (ARN) to retrieve facet names from.
        public let schemaArn: String
        /// The maximum number of results to retrieve.
        public let maxResults: Int32?

        public init(nextToken: String? = nil, schemaArn: String, maxResults: Int32? = nil) {
            self.nextToken = nextToken
            self.schemaArn = schemaArn
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case schemaArn = "x-amz-data-partition"
            case maxResults = "MaxResults"
        }
    }

    public struct BatchAttachObjectResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "attachedObjectIdentifier", required: false, type: .string)
        ]
        /// The ObjectIdentifier of the object that has been attached.
        public let attachedObjectIdentifier: String?

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

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

    public struct FacetAttributeUpdate: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Action", required: false, type: .enum), 
            AWSShapeMember(label: "Attribute", required: false, type: .structure)
        ]
        /// The action to perform when updating the attribute.
        public let action: UpdateActionType?
        /// The attribute to update.
        public let attribute: FacetAttribute?

        public init(action: UpdateActionType? = nil, attribute: FacetAttribute? = nil) {
            self.action = action
            self.attribute = attribute
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case attribute = "Attribute"
        }
    }

    public struct BatchDetachTypedLinkResponse: AWSShape {

    }

    public struct UpdateObjectAttributesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ObjectIdentifier", required: false, type: .string)
        ]
        /// The ObjectIdentifier of the updated object.
        public let objectIdentifier: String?

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

        private enum CodingKeys: String, CodingKey {
            case objectIdentifier = "ObjectIdentifier"
        }
    }

    public struct BatchDeleteObjectResponse: AWSShape {

    }

    public struct ListPolicyAttachmentsRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "PolicyReference", required: true, type: .structure), 
            AWSShapeMember(label: "DirectoryArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ConsistencyLevel", location: .header(locationName: "x-amz-consistency-level"), required: false, type: .enum), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer)
        ]
        /// The reference that identifies the policy object.
        public let policyReference: ObjectReference
        /// The Amazon Resource Name (ARN) that is associated with the Directory where objects reside. For more information, see arns.
        public let directoryArn: String
        /// The pagination token.
        public let nextToken: String?
        /// Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
        public let consistencyLevel: ConsistencyLevel?
        /// The maximum number of items to be retrieved in a single call. This is an approximate number.
        public let maxResults: Int32?

        public init(policyReference: ObjectReference, directoryArn: String, nextToken: String? = nil, consistencyLevel: ConsistencyLevel? = nil, maxResults: Int32? = nil) {
            self.policyReference = policyReference
            self.directoryArn = directoryArn
            self.nextToken = nextToken
            self.consistencyLevel = consistencyLevel
            self.maxResults = maxResults
        }

        private enum CodingKeys: String, CodingKey {
            case policyReference = "PolicyReference"
            case directoryArn = "x-amz-data-partition"
            case nextToken = "NextToken"
            case consistencyLevel = "x-amz-consistency-level"
            case maxResults = "MaxResults"
        }
    }

    public struct DeleteFacetRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Name", required: true, type: .string), 
            AWSShapeMember(label: "SchemaArn", location: .header(locationName: "x-amz-data-partition"), required: true, type: .string)
        ]
        /// The name of the facet to delete.
        public let name: String
        /// The Amazon Resource Name (ARN) that is associated with the Facet. For more information, see arns.
        public let schemaArn: String

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

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case schemaArn = "x-amz-data-partition"
        }
    }

    public struct ListObjectParentsResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Parents", required: false, type: .map)
        ]
        /// The pagination token.
        public let nextToken: String?
        /// The parent structure, which is a map with key as the ObjectIdentifier and LinkName as the value.
        public let parents: [String: String]?

        public init(nextToken: String? = nil, parents: [String: String]? = nil) {
            self.nextToken = nextToken
            self.parents = parents
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case parents = "Parents"
        }
    }

}