// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlobsGetHeadersData : BlobsGetHeadersProtocol {
    public var lastModified: String?
    public var metadata: [String:String]?
    public var contentLength: Int32?
    public var contentType: String?
    public var contentRange: String?
    public var eTag: String?
    public var contentMD5: String?
    public var contentEncoding: String?
    public var cacheControl: String?
    public var contentDisposition: String?
    public var blobSequenceNumber: String?
    public var blobType: BlobType?
    public var copyCompletionTime: Date?
    public var copyStatusDescription: String?
    public var copyId: String?
    public var copyProgress: String?
    public var copySource: String?
    public var copyStatus: CopyStatusType?
    public var leaseDuration: LeaseDurationType?
    public var leaseState: LeaseStateType?
    public var leaseStatus: LeaseStatusType?
    public var requestId: String?
    public var version: String?
    public var acceptRanges: String?
    public var date: Date?
    public var blobCommittedBlockCount: String?
    public var isServerEncrypted: Bool?
    public var blobContentMD5: String?

    enum CodingKeys: String, CodingKey {
        case lastModified = "Last-Modified"
        case metadata = "x-ms-meta"
        case contentLength = "Content-Length"
        case contentType = "Content-Type"
        case contentRange = "Content-Range"
        case eTag = "ETag"
        case contentMD5 = "Content-MD5"
        case contentEncoding = "Content-Encoding"
        case cacheControl = "Cache-Control"
        case contentDisposition = "Content-Disposition"
        case blobSequenceNumber = "x-ms-blob-sequence-number"
        case blobType = "x-ms-blob-type"
        case copyCompletionTime = "x-ms-copy-completion-time"
        case copyStatusDescription = "x-ms-copy-status-description"
        case copyId = "x-ms-copy-id"
        case copyProgress = "x-ms-copy-progress"
        case copySource = "x-ms-copy-source"
        case copyStatus = "x-ms-copy-status"
        case leaseDuration = "x-ms-lease-duration"
        case leaseState = "x-ms-lease-state"
        case leaseStatus = "x-ms-lease-status"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case acceptRanges = "Accept-Ranges"
        case date = "Date"
        case blobCommittedBlockCount = "x-ms-blob-committed-block-count"
        case isServerEncrypted = "x-ms-server-encrypted"
        case blobContentMD5 = "x-ms-blob-content-md5"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.metadata) {
        metadata = try container.decode([String:String]?.self, forKey: .metadata)
    }
    if container.contains(.contentLength) {
        contentLength = try container.decode(Int32.self, forKey: .contentLength)
    }
    if container.contains(.contentType) {
        contentType = try container.decode(String.self, forKey: .contentType)
    }
    if container.contains(.contentRange) {
        contentRange = try container.decode(String.self, forKey: .contentRange)
    }
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.contentMD5) {
        contentMD5 = try container.decode(String.self, forKey: .contentMD5)
    }
    if container.contains(.contentEncoding) {
        contentEncoding = try container.decode(String.self, forKey: .contentEncoding)
    }
    if container.contains(.cacheControl) {
        cacheControl = try container.decode(String.self, forKey: .cacheControl)
    }
    if container.contains(.contentDisposition) {
        contentDisposition = try container.decode(String.self, forKey: .contentDisposition)
    }
    if container.contains(.blobSequenceNumber) {
        blobSequenceNumber = try container.decode(String.self, forKey: .blobSequenceNumber)
    }
    if container.contains(.blobType) {
        blobType = try container.decode(BlobType?.self, forKey: .blobType)
    }
    if container.contains(.copyCompletionTime) {
        copyCompletionTime = try container.decode(Date.self, forKey: .copyCompletionTime)
    }
    if container.contains(.copyStatusDescription) {
        copyStatusDescription = try container.decode(String.self, forKey: .copyStatusDescription)
    }
    if container.contains(.copyId) {
        copyId = try container.decode(String.self, forKey: .copyId)
    }
    if container.contains(.copyProgress) {
        copyProgress = try container.decode(String.self, forKey: .copyProgress)
    }
    if container.contains(.copySource) {
        copySource = try container.decode(String.self, forKey: .copySource)
    }
    if container.contains(.copyStatus) {
        copyStatus = try container.decode(CopyStatusType?.self, forKey: .copyStatus)
    }
    if container.contains(.leaseDuration) {
        leaseDuration = try container.decode(LeaseDurationType?.self, forKey: .leaseDuration)
    }
    if container.contains(.leaseState) {
        leaseState = try container.decode(LeaseStateType?.self, forKey: .leaseState)
    }
    if container.contains(.leaseStatus) {
        leaseStatus = try container.decode(LeaseStatusType?.self, forKey: .leaseStatus)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.acceptRanges) {
        acceptRanges = try container.decode(String.self, forKey: .acceptRanges)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
    if container.contains(.blobCommittedBlockCount) {
        blobCommittedBlockCount = try container.decode(String.self, forKey: .blobCommittedBlockCount)
    }
    if container.contains(.isServerEncrypted) {
        isServerEncrypted = try container.decode(Bool.self, forKey: .isServerEncrypted)
    }
    if container.contains(.blobContentMD5) {
        blobContentMD5 = try container.decode(String.self, forKey: .blobContentMD5)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.metadata != nil {try container.encode(metadata, forKey: .metadata)}
    if self.contentLength != nil {try container.encode(contentLength, forKey: .contentLength)}
    if self.contentType != nil {try container.encode(contentType, forKey: .contentType)}
    if self.contentRange != nil {try container.encode(contentRange, forKey: .contentRange)}
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.contentMD5 != nil {try container.encode(contentMD5, forKey: .contentMD5)}
    if self.contentEncoding != nil {try container.encode(contentEncoding, forKey: .contentEncoding)}
    if self.cacheControl != nil {try container.encode(cacheControl, forKey: .cacheControl)}
    if self.contentDisposition != nil {try container.encode(contentDisposition, forKey: .contentDisposition)}
    if self.blobSequenceNumber != nil {try container.encode(blobSequenceNumber, forKey: .blobSequenceNumber)}
    if self.blobType != nil {try container.encode(blobType, forKey: .blobType)}
    if self.copyCompletionTime != nil {try container.encode(copyCompletionTime, forKey: .copyCompletionTime)}
    if self.copyStatusDescription != nil {try container.encode(copyStatusDescription, forKey: .copyStatusDescription)}
    if self.copyId != nil {try container.encode(copyId, forKey: .copyId)}
    if self.copyProgress != nil {try container.encode(copyProgress, forKey: .copyProgress)}
    if self.copySource != nil {try container.encode(copySource, forKey: .copySource)}
    if self.copyStatus != nil {try container.encode(copyStatus, forKey: .copyStatus)}
    if self.leaseDuration != nil {try container.encode(leaseDuration, forKey: .leaseDuration)}
    if self.leaseState != nil {try container.encode(leaseState, forKey: .leaseState)}
    if self.leaseStatus != nil {try container.encode(leaseStatus, forKey: .leaseStatus)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.acceptRanges != nil {try container.encode(acceptRanges, forKey: .acceptRanges)}
    if self.date != nil {try container.encode(date, forKey: .date)}
    if self.blobCommittedBlockCount != nil {try container.encode(blobCommittedBlockCount, forKey: .blobCommittedBlockCount)}
    if self.isServerEncrypted != nil {try container.encode(isServerEncrypted, forKey: .isServerEncrypted)}
    if self.blobContentMD5 != nil {try container.encode(blobContentMD5, forKey: .blobContentMD5)}
  }
}

extension DataFactory {
  public static func createBlobsGetHeadersProtocol() -> BlobsGetHeadersProtocol {
    return BlobsGetHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlobsGetMetadataHeadersData : BlobsGetMetadataHeadersProtocol {
    public var metadata: [String:String]?
    public var lastModified: String?
    public var eTag: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case metadata = "x-ms-meta"
        case lastModified = "Last-Modified"
        case eTag = "ETag"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.metadata) {
        metadata = try container.decode([String:String]?.self, forKey: .metadata)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.metadata != nil {try container.encode(metadata, forKey: .metadata)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createBlobsGetMetadataHeadersProtocol() -> BlobsGetMetadataHeadersProtocol {
    return BlobsGetMetadataHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlobsGetPropertiesHeadersData : BlobsGetPropertiesHeadersProtocol {
    public var lastModified: String?
    public var metadata: [String:String]?
    public var blobType: BlobType?
    public var copyCompletionTime: Date?
    public var copyStatusDescription: String?
    public var copyId: String?
    public var copyProgress: String?
    public var copySource: String?
    public var copyStatus: CopyStatusType?
    public var isIncrementalCopy: Bool?
    public var leaseDuration: LeaseDurationType?
    public var leaseState: LeaseStateType?
    public var leaseStatus: LeaseStatusType?
    public var contentLength: Int32?
    public var contentType: String?
    public var eTag: String?
    public var contentMD5: String?
    public var contentEncoding: String?
    public var contentDisposition: String?
    public var cacheControl: String?
    public var blobSequenceNumber: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?
    public var acceptRanges: String?
    public var blobCommittedBlockCount: String?
    public var isServerEncrypted: Bool?

    enum CodingKeys: String, CodingKey {
        case lastModified = "Last-Modified"
        case metadata = "x-ms-meta"
        case blobType = "x-ms-blob-type"
        case copyCompletionTime = "x-ms-copy-completion-time"
        case copyStatusDescription = "x-ms-copy-status-description"
        case copyId = "x-ms-copy-id"
        case copyProgress = "x-ms-copy-progress"
        case copySource = "x-ms-copy-source"
        case copyStatus = "x-ms-copy-status"
        case isIncrementalCopy = "x-ms-incremental-copy"
        case leaseDuration = "x-ms-lease-duration"
        case leaseState = "x-ms-lease-state"
        case leaseStatus = "x-ms-lease-status"
        case contentLength = "Content-Length"
        case contentType = "Content-Type"
        case eTag = "ETag"
        case contentMD5 = "Content-MD5"
        case contentEncoding = "Content-Encoding"
        case contentDisposition = "Content-Disposition"
        case cacheControl = "Cache-Control"
        case blobSequenceNumber = "x-ms-blob-sequence-number"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
        case acceptRanges = "Accept-Ranges"
        case blobCommittedBlockCount = "x-ms-blob-committed-block-count"
        case isServerEncrypted = "x-ms-server-encrypted"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.metadata) {
        metadata = try container.decode([String:String]?.self, forKey: .metadata)
    }
    if container.contains(.blobType) {
        blobType = try container.decode(BlobType?.self, forKey: .blobType)
    }
    if container.contains(.copyCompletionTime) {
        copyCompletionTime = try container.decode(Date.self, forKey: .copyCompletionTime)
    }
    if container.contains(.copyStatusDescription) {
        copyStatusDescription = try container.decode(String.self, forKey: .copyStatusDescription)
    }
    if container.contains(.copyId) {
        copyId = try container.decode(String.self, forKey: .copyId)
    }
    if container.contains(.copyProgress) {
        copyProgress = try container.decode(String.self, forKey: .copyProgress)
    }
    if container.contains(.copySource) {
        copySource = try container.decode(String.self, forKey: .copySource)
    }
    if container.contains(.copyStatus) {
        copyStatus = try container.decode(CopyStatusType?.self, forKey: .copyStatus)
    }
    if container.contains(.isIncrementalCopy) {
        isIncrementalCopy = try container.decode(Bool.self, forKey: .isIncrementalCopy)
    }
    if container.contains(.leaseDuration) {
        leaseDuration = try container.decode(LeaseDurationType?.self, forKey: .leaseDuration)
    }
    if container.contains(.leaseState) {
        leaseState = try container.decode(LeaseStateType?.self, forKey: .leaseState)
    }
    if container.contains(.leaseStatus) {
        leaseStatus = try container.decode(LeaseStatusType?.self, forKey: .leaseStatus)
    }
    if container.contains(.contentLength) {
        contentLength = try container.decode(Int32.self, forKey: .contentLength)
    }
    if container.contains(.contentType) {
        contentType = try container.decode(String.self, forKey: .contentType)
    }
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.contentMD5) {
        contentMD5 = try container.decode(String.self, forKey: .contentMD5)
    }
    if container.contains(.contentEncoding) {
        contentEncoding = try container.decode(String.self, forKey: .contentEncoding)
    }
    if container.contains(.contentDisposition) {
        contentDisposition = try container.decode(String.self, forKey: .contentDisposition)
    }
    if container.contains(.cacheControl) {
        cacheControl = try container.decode(String.self, forKey: .cacheControl)
    }
    if container.contains(.blobSequenceNumber) {
        blobSequenceNumber = try container.decode(String.self, forKey: .blobSequenceNumber)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
    if container.contains(.acceptRanges) {
        acceptRanges = try container.decode(String.self, forKey: .acceptRanges)
    }
    if container.contains(.blobCommittedBlockCount) {
        blobCommittedBlockCount = try container.decode(String.self, forKey: .blobCommittedBlockCount)
    }
    if container.contains(.isServerEncrypted) {
        isServerEncrypted = try container.decode(Bool.self, forKey: .isServerEncrypted)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.metadata != nil {try container.encode(metadata, forKey: .metadata)}
    if self.blobType != nil {try container.encode(blobType, forKey: .blobType)}
    if self.copyCompletionTime != nil {try container.encode(copyCompletionTime, forKey: .copyCompletionTime)}
    if self.copyStatusDescription != nil {try container.encode(copyStatusDescription, forKey: .copyStatusDescription)}
    if self.copyId != nil {try container.encode(copyId, forKey: .copyId)}
    if self.copyProgress != nil {try container.encode(copyProgress, forKey: .copyProgress)}
    if self.copySource != nil {try container.encode(copySource, forKey: .copySource)}
    if self.copyStatus != nil {try container.encode(copyStatus, forKey: .copyStatus)}
    if self.isIncrementalCopy != nil {try container.encode(isIncrementalCopy, forKey: .isIncrementalCopy)}
    if self.leaseDuration != nil {try container.encode(leaseDuration, forKey: .leaseDuration)}
    if self.leaseState != nil {try container.encode(leaseState, forKey: .leaseState)}
    if self.leaseStatus != nil {try container.encode(leaseStatus, forKey: .leaseStatus)}
    if self.contentLength != nil {try container.encode(contentLength, forKey: .contentLength)}
    if self.contentType != nil {try container.encode(contentType, forKey: .contentType)}
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.contentMD5 != nil {try container.encode(contentMD5, forKey: .contentMD5)}
    if self.contentEncoding != nil {try container.encode(contentEncoding, forKey: .contentEncoding)}
    if self.contentDisposition != nil {try container.encode(contentDisposition, forKey: .contentDisposition)}
    if self.cacheControl != nil {try container.encode(cacheControl, forKey: .cacheControl)}
    if self.blobSequenceNumber != nil {try container.encode(blobSequenceNumber, forKey: .blobSequenceNumber)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
    if self.acceptRanges != nil {try container.encode(acceptRanges, forKey: .acceptRanges)}
    if self.blobCommittedBlockCount != nil {try container.encode(blobCommittedBlockCount, forKey: .blobCommittedBlockCount)}
    if self.isServerEncrypted != nil {try container.encode(isServerEncrypted, forKey: .isServerEncrypted)}
  }
}

extension DataFactory {
  public static func createBlobsGetPropertiesHeadersProtocol() -> BlobsGetPropertiesHeadersProtocol {
    return BlobsGetPropertiesHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlobsLeaseHeadersData : BlobsLeaseHeadersProtocol {
    public var eTag: String?
    public var lastModified: String?
    public var leaseId: String?
    public var leaseTime: Int32?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case leaseId = "x-ms-lease-id"
        case leaseTime = "x-ms-lease-time"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.leaseId) {
        leaseId = try container.decode(String.self, forKey: .leaseId)
    }
    if container.contains(.leaseTime) {
        leaseTime = try container.decode(Int32.self, forKey: .leaseTime)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.leaseId != nil {try container.encode(leaseId, forKey: .leaseId)}
    if self.leaseTime != nil {try container.encode(leaseTime, forKey: .leaseTime)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createBlobsLeaseHeadersProtocol() -> BlobsLeaseHeadersProtocol {
    return BlobsLeaseHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlobsPutHeadersData : BlobsPutHeadersProtocol {
    public var eTag: String?
    public var lastModified: String?
    public var contentMD5: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?
    public var isServerEncrypted: Bool?

    enum CodingKeys: String, CodingKey {
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case contentMD5 = "Content-MD5"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
        case isServerEncrypted = "x-ms-request-server-encrypted"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.contentMD5) {
        contentMD5 = try container.decode(String.self, forKey: .contentMD5)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
    if container.contains(.isServerEncrypted) {
        isServerEncrypted = try container.decode(Bool.self, forKey: .isServerEncrypted)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.contentMD5 != nil {try container.encode(contentMD5, forKey: .contentMD5)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
    if self.isServerEncrypted != nil {try container.encode(isServerEncrypted, forKey: .isServerEncrypted)}
  }
}

extension DataFactory {
  public static func createBlobsPutHeadersProtocol() -> BlobsPutHeadersProtocol {
    return BlobsPutHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlobsSetMetadataHeadersData : BlobsSetMetadataHeadersProtocol {
    public var eTag: String?
    public var lastModified: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?
    public var isServerEncrypted: Bool?

    enum CodingKeys: String, CodingKey {
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
        case isServerEncrypted = "x-ms-request-server-encrypted"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
    if container.contains(.isServerEncrypted) {
        isServerEncrypted = try container.decode(Bool.self, forKey: .isServerEncrypted)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
    if self.isServerEncrypted != nil {try container.encode(isServerEncrypted, forKey: .isServerEncrypted)}
  }
}

extension DataFactory {
  public static func createBlobsSetMetadataHeadersProtocol() -> BlobsSetMetadataHeadersProtocol {
    return BlobsSetMetadataHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlobsSetPropertiesHeadersData : BlobsSetPropertiesHeadersProtocol {
    public var eTag: String?
    public var lastModified: String?
    public var blobSequenceNumber: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case blobSequenceNumber = "x-ms-blob-sequence-number"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.blobSequenceNumber) {
        blobSequenceNumber = try container.decode(String.self, forKey: .blobSequenceNumber)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.blobSequenceNumber != nil {try container.encode(blobSequenceNumber, forKey: .blobSequenceNumber)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createBlobsSetPropertiesHeadersProtocol() -> BlobsSetPropertiesHeadersProtocol {
    return BlobsSetPropertiesHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlobsTakeSnapshotHeadersData : BlobsTakeSnapshotHeadersProtocol {
    public var snapshot: String?
    public var eTag: String?
    public var lastModified: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case snapshot = "x-ms-snapshot"
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.snapshot) {
        snapshot = try container.decode(String.self, forKey: .snapshot)
    }
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.snapshot != nil {try container.encode(snapshot, forKey: .snapshot)}
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createBlobsTakeSnapshotHeadersProtocol() -> BlobsTakeSnapshotHeadersProtocol {
    return BlobsTakeSnapshotHeadersData()
  }
}


// BlobType enumerates the values for blob type.

public enum BlobType: String, Codable
{
// AppendBlob specifies the append blob state for blob type.
    case AppendBlob = "AppendBlob"
// BlockBlob specifies the block blob state for blob type.
    case BlockBlob = "BlockBlob"
// PageBlob specifies the page blob state for blob type.
    case PageBlob = "PageBlob"
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlockBlobsGetBlockListHeadersData : BlockBlobsGetBlockListHeadersProtocol {
    public var lastModified: String?
    public var eTag: String?
    public var contentType: String?
    public var blobContentLength: Int32?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case lastModified = "Last-Modified"
        case eTag = "ETag"
        case contentType = "Content-Type"
        case blobContentLength = "x-ms-blob-content-length"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.contentType) {
        contentType = try container.decode(String.self, forKey: .contentType)
    }
    if container.contains(.blobContentLength) {
        blobContentLength = try container.decode(Int32.self, forKey: .blobContentLength)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.contentType != nil {try container.encode(contentType, forKey: .contentType)}
    if self.blobContentLength != nil {try container.encode(blobContentLength, forKey: .blobContentLength)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createBlockBlobsGetBlockListHeadersProtocol() -> BlockBlobsGetBlockListHeadersProtocol {
    return BlockBlobsGetBlockListHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlockBlobsPutBlockHeadersData : BlockBlobsPutBlockHeadersProtocol {
    public var contentMD5: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?
    public var isServerEncrypted: Bool?

    enum CodingKeys: String, CodingKey {
        case contentMD5 = "Content-MD5"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
        case isServerEncrypted = "x-ms-request-server-encrypted"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.contentMD5) {
        contentMD5 = try container.decode(String.self, forKey: .contentMD5)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
    if container.contains(.isServerEncrypted) {
        isServerEncrypted = try container.decode(Bool.self, forKey: .isServerEncrypted)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.contentMD5 != nil {try container.encode(contentMD5, forKey: .contentMD5)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
    if self.isServerEncrypted != nil {try container.encode(isServerEncrypted, forKey: .isServerEncrypted)}
  }
}

extension DataFactory {
  public static func createBlockBlobsPutBlockHeadersProtocol() -> BlockBlobsPutBlockHeadersProtocol {
    return BlockBlobsPutBlockHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlockBlobsPutBlockListHeadersData : BlockBlobsPutBlockListHeadersProtocol {
    public var eTag: String?
    public var lastModified: String?
    public var contentMD5: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?
    public var isServerEncrypted: Bool?

    enum CodingKeys: String, CodingKey {
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case contentMD5 = "Content-MD5"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
        case isServerEncrypted = "x-ms-request-server-encrypted"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.contentMD5) {
        contentMD5 = try container.decode(String.self, forKey: .contentMD5)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
    if container.contains(.isServerEncrypted) {
        isServerEncrypted = try container.decode(Bool.self, forKey: .isServerEncrypted)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.contentMD5 != nil {try container.encode(contentMD5, forKey: .contentMD5)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
    if self.isServerEncrypted != nil {try container.encode(isServerEncrypted, forKey: .isServerEncrypted)}
  }
}

extension DataFactory {
  public static func createBlockBlobsPutBlockListHeadersProtocol() -> BlockBlobsPutBlockListHeadersProtocol {
    return BlockBlobsPutBlockListHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlockData : BlockProtocol {
    public var name: String?
    public var size: Int32?

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

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.name) {
        name = try container.decode(String.self, forKey: .name)
    }
    if container.contains(.size) {
        size = try container.decode(Int32.self, forKey: .size)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.name != nil {try container.encode(name, forKey: .name)}
    if self.size != nil {try container.encode(size, forKey: .size)}
  }
}

extension DataFactory {
  public static func createBlockProtocol() -> BlockProtocol {
    return BlockData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct BlockListData : BlockListProtocol {
    public var committedBlocks: [BlockProtocol?]?
    public var uncommittedBlocks: [BlockProtocol?]?

    enum CodingKeys: String, CodingKey {
        case committedBlocks = "CommittedBlocks"
        case uncommittedBlocks = "UncommittedBlocks"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.committedBlocks) {
        committedBlocks = try container.decode([BlockData?]?.self, forKey: .committedBlocks)
    }
    if container.contains(.uncommittedBlocks) {
        uncommittedBlocks = try container.decode([BlockData?]?.self, forKey: .uncommittedBlocks)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.committedBlocks != nil {try container.encode(committedBlocks as! [BlockData?]?, forKey: .committedBlocks)}
    if self.uncommittedBlocks != nil {try container.encode(uncommittedBlocks as! [BlockData?]?, forKey: .uncommittedBlocks)}
  }
}

extension DataFactory {
  public static func createBlockListProtocol() -> BlockListProtocol {
    return BlockListData()
  }
}


// BlockListType enumerates the values for block list type.

public enum BlockListType: String, Codable
{
// All specifies the all state for block list type.
    case All = "all"
// Committed specifies the committed state for block list type.
    case Committed = "committed"
// Uncommitted specifies the uncommitted state for block list type.
    case Uncommitted = "uncommitted"
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerCreateHeadersData : ContainerCreateHeadersProtocol {
    public var eTag: String?
    public var lastModified: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createContainerCreateHeadersProtocol() -> ContainerCreateHeadersProtocol {
    return ContainerCreateHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerData : ContainerProtocol {
    public var name: String?
    public var properties: ContainerPropertiesProtocol?
    public var metadata: [String:String]?

    enum CodingKeys: String, CodingKey {
        case name = "Name"
        case properties = "Properties"
        case metadata = "Metadata"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.name) {
        name = try container.decode(String?.self, forKey: .name)
    }
    if container.contains(.properties) {
        properties = try container.decode(ContainerPropertiesData?.self, forKey: .properties)
    }
    if container.contains(.metadata) {
        metadata = try container.decode([String:String]?.self, forKey: .metadata)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.name != nil {try container.encode(name, forKey: .name)}
    if self.properties != nil {try container.encode(properties as! ContainerPropertiesData?, forKey: .properties)}
    if self.metadata != nil {try container.encode(metadata, forKey: .metadata)}
  }
}

extension DataFactory {
  public static func createContainerProtocol() -> ContainerProtocol {
    return ContainerData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerDeleteHeadersData : ContainerDeleteHeadersProtocol {
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createContainerDeleteHeadersProtocol() -> ContainerDeleteHeadersProtocol {
    return ContainerDeleteHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerEnumerationResultsData : ContainerEnumerationResultsProtocol {
    public var serviceEndpoint: String?
    public var prefix: String?
    public var marker: String?
    public var maxResults: Int32?
    public var containers: [ContainerProtocol?]?
    public var nextMarker: String?

    enum CodingKeys: String, CodingKey {
        case serviceEndpoint = "ServiceEndpoint"
        case prefix = "Prefix"
        case marker = "Marker"
        case maxResults = "MaxResults"
        case containers = "Containers"
        case nextMarker = "NextMarker"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.serviceEndpoint) {
        serviceEndpoint = try container.decode(String?.self, forKey: .serviceEndpoint)
    }
    if container.contains(.prefix) {
        prefix = try container.decode(String?.self, forKey: .prefix)
    }
    if container.contains(.marker) {
        marker = try container.decode(String?.self, forKey: .marker)
    }
    if container.contains(.maxResults) {
        maxResults = try container.decode(Int32?.self, forKey: .maxResults)
    }
    if container.contains(.containers) {
        containers = try container.decode([ContainerData?]?.self, forKey: .containers)
    }
    if container.contains(.nextMarker) {
        nextMarker = try container.decode(String?.self, forKey: .nextMarker)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.serviceEndpoint != nil {try container.encode(serviceEndpoint, forKey: .serviceEndpoint)}
    if self.prefix != nil {try container.encode(prefix, forKey: .prefix)}
    if self.marker != nil {try container.encode(marker, forKey: .marker)}
    if self.maxResults != nil {try container.encode(maxResults, forKey: .maxResults)}
    if self.containers != nil {try container.encode(containers as! [ContainerData?]?, forKey: .containers)}
    if self.nextMarker != nil {try container.encode(nextMarker, forKey: .nextMarker)}
  }
}

extension DataFactory {
  public static func createContainerEnumerationResultsProtocol() -> ContainerEnumerationResultsProtocol {
    return ContainerEnumerationResultsData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerGetAclHeadersData : ContainerGetAclHeadersProtocol {
    public var blobPublicAccess: PublicAccessType?
    public var eTag: String?
    public var lastModified: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case blobPublicAccess = "x-ms-blob-public-access"
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.blobPublicAccess) {
        blobPublicAccess = try container.decode(PublicAccessType?.self, forKey: .blobPublicAccess)
    }
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.blobPublicAccess != nil {try container.encode(blobPublicAccess, forKey: .blobPublicAccess)}
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createContainerGetAclHeadersProtocol() -> ContainerGetAclHeadersProtocol {
    return ContainerGetAclHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerGetMetadataHeadersData : ContainerGetMetadataHeadersProtocol {
    public var metadata: [String:String]?
    public var eTag: String?
    public var lastModified: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case metadata = "x-ms-meta"
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.metadata) {
        metadata = try container.decode([String:String]?.self, forKey: .metadata)
    }
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.metadata != nil {try container.encode(metadata, forKey: .metadata)}
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createContainerGetMetadataHeadersProtocol() -> ContainerGetMetadataHeadersProtocol {
    return ContainerGetMetadataHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerGetPropertiesHeadersData : ContainerGetPropertiesHeadersProtocol {
    public var metadata: [String:String]?
    public var eTag: String?
    public var lastModified: String?
    public var leaseDuration: LeaseDurationType?
    public var leaseState: LeaseStateType?
    public var leaseStatus: LeaseStatusType?
    public var requestId: String?
    public var version: String?
    public var date: Date?
    public var blobPublicAccess: PublicAccessType?

    enum CodingKeys: String, CodingKey {
        case metadata = "x-ms-meta"
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case leaseDuration = "x-ms-lease-duration"
        case leaseState = "x-ms-lease-state"
        case leaseStatus = "x-ms-lease-status"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
        case blobPublicAccess = "x-ms-blob-public-access"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.metadata) {
        metadata = try container.decode([String:String]?.self, forKey: .metadata)
    }
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.leaseDuration) {
        leaseDuration = try container.decode(LeaseDurationType?.self, forKey: .leaseDuration)
    }
    if container.contains(.leaseState) {
        leaseState = try container.decode(LeaseStateType?.self, forKey: .leaseState)
    }
    if container.contains(.leaseStatus) {
        leaseStatus = try container.decode(LeaseStatusType?.self, forKey: .leaseStatus)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
    if container.contains(.blobPublicAccess) {
        blobPublicAccess = try container.decode(PublicAccessType?.self, forKey: .blobPublicAccess)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.metadata != nil {try container.encode(metadata, forKey: .metadata)}
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.leaseDuration != nil {try container.encode(leaseDuration, forKey: .leaseDuration)}
    if self.leaseState != nil {try container.encode(leaseState, forKey: .leaseState)}
    if self.leaseStatus != nil {try container.encode(leaseStatus, forKey: .leaseStatus)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
    if self.blobPublicAccess != nil {try container.encode(blobPublicAccess, forKey: .blobPublicAccess)}
  }
}

extension DataFactory {
  public static func createContainerGetPropertiesHeadersProtocol() -> ContainerGetPropertiesHeadersProtocol {
    return ContainerGetPropertiesHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerLeaseHeadersData : ContainerLeaseHeadersProtocol {
    public var eTag: String?
    public var lastModified: String?
    public var leaseId: String?
    public var leaseTime: Int32?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case leaseId = "x-ms-lease-id"
        case leaseTime = "x-ms-lease-time"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.leaseId) {
        leaseId = try container.decode(String.self, forKey: .leaseId)
    }
    if container.contains(.leaseTime) {
        leaseTime = try container.decode(Int32.self, forKey: .leaseTime)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.leaseId != nil {try container.encode(leaseId, forKey: .leaseId)}
    if self.leaseTime != nil {try container.encode(leaseTime, forKey: .leaseTime)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createContainerLeaseHeadersProtocol() -> ContainerLeaseHeadersProtocol {
    return ContainerLeaseHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerListBlobsHeadersData : ContainerListBlobsHeadersProtocol {
    public var contentType: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case contentType = "Content-Type"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.contentType) {
        contentType = try container.decode(String.self, forKey: .contentType)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.contentType != nil {try container.encode(contentType, forKey: .contentType)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createContainerListBlobsHeadersProtocol() -> ContainerListBlobsHeadersProtocol {
    return ContainerListBlobsHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerPropertiesData : ContainerPropertiesProtocol {
    public var lastModified: Date?
    public var etag: String?
    public var leaseStatus: LeaseStatusType?
    public var leaseState: LeaseStateType?
    public var leaseDuration: LeaseDurationType?
    public var publicAccess: PublicAccessType?

    enum CodingKeys: String, CodingKey {
        case lastModified = "Last-Modified"
        case etag = "Etag"
        case leaseStatus = "LeaseStatus"
        case leaseState = "LeaseState"
        case leaseDuration = "LeaseDuration"
        case publicAccess = "PublicAccess"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.lastModified) {
        lastModified = try container.decode(Date?.self, forKey: .lastModified)
    }
    if container.contains(.etag) {
        etag = try container.decode(String?.self, forKey: .etag)
    }
    if container.contains(.leaseStatus) {
        leaseStatus = try container.decode(LeaseStatusType?.self, forKey: .leaseStatus)
    }
    if container.contains(.leaseState) {
        leaseState = try container.decode(LeaseStateType?.self, forKey: .leaseState)
    }
    if container.contains(.leaseDuration) {
        leaseDuration = try container.decode(LeaseDurationType?.self, forKey: .leaseDuration)
    }
    if container.contains(.publicAccess) {
        publicAccess = try container.decode(PublicAccessType?.self, forKey: .publicAccess)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.etag != nil {try container.encode(etag, forKey: .etag)}
    if self.leaseStatus != nil {try container.encode(leaseStatus, forKey: .leaseStatus)}
    if self.leaseState != nil {try container.encode(leaseState, forKey: .leaseState)}
    if self.leaseDuration != nil {try container.encode(leaseDuration, forKey: .leaseDuration)}
    if self.publicAccess != nil {try container.encode(publicAccess, forKey: .publicAccess)}
  }
}

extension DataFactory {
  public static func createContainerPropertiesProtocol() -> ContainerPropertiesProtocol {
    return ContainerPropertiesData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerSetAclHeadersData : ContainerSetAclHeadersProtocol {
    public var eTag: String?
    public var lastModified: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createContainerSetAclHeadersProtocol() -> ContainerSetAclHeadersProtocol {
    return ContainerSetAclHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ContainerSetMetadataHeadersData : ContainerSetMetadataHeadersProtocol {
    public var eTag: String?
    public var lastModified: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createContainerSetMetadataHeadersProtocol() -> ContainerSetMetadataHeadersProtocol {
    return ContainerSetMetadataHeadersData()
  }
}


// CopyStatusType enumerates the values for copy status type.

public enum CopyStatusType: String, Codable
{
// Aborted specifies the aborted state for copy status type.
    case Aborted = "aborted"
// Failed specifies the failed state for copy status type.
    case Failed = "failed"
// Pending specifies the pending state for copy status type.
    case Pending = "pending"
// Success specifies the success state for copy status type.
    case Success = "success"
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct CorsRuleData : CorsRuleProtocol {
    public var allowedOrigins: String
    public var allowedMethods: String
    public var allowedHeaders: String
    public var exposedHeaders: String
    public var maxAgeInSeconds: Int32

    enum CodingKeys: String, CodingKey {
        case allowedOrigins = "AllowedOrigins"
        case allowedMethods = "AllowedMethods"
        case allowedHeaders = "AllowedHeaders"
        case exposedHeaders = "ExposedHeaders"
        case maxAgeInSeconds = "MaxAgeInSeconds"
    }

  public init(allowedOrigins: String, allowedMethods: String, allowedHeaders: String, exposedHeaders: String, maxAgeInSeconds: Int32)  {
    self.allowedOrigins = allowedOrigins
    self.allowedMethods = allowedMethods
    self.allowedHeaders = allowedHeaders
    self.exposedHeaders = exposedHeaders
    self.maxAgeInSeconds = maxAgeInSeconds
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    allowedOrigins = try container.decode(String.self, forKey: .allowedOrigins)
    allowedMethods = try container.decode(String.self, forKey: .allowedMethods)
    allowedHeaders = try container.decode(String.self, forKey: .allowedHeaders)
    exposedHeaders = try container.decode(String.self, forKey: .exposedHeaders)
    maxAgeInSeconds = try container.decode(Int32.self, forKey: .maxAgeInSeconds)
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    try container.encode(allowedOrigins, forKey: .allowedOrigins)
    try container.encode(allowedMethods, forKey: .allowedMethods)
    try container.encode(allowedHeaders, forKey: .allowedHeaders)
    try container.encode(exposedHeaders, forKey: .exposedHeaders)
    try container.encode(maxAgeInSeconds, forKey: .maxAgeInSeconds)
  }
}

extension DataFactory {
  public static func createCorsRuleProtocol(allowedOrigins: String, allowedMethods: String, allowedHeaders: String, exposedHeaders: String, maxAgeInSeconds: Int32) -> CorsRuleProtocol {
    return CorsRuleData(allowedOrigins: allowedOrigins, allowedMethods: allowedMethods, allowedHeaders: allowedHeaders, exposedHeaders: exposedHeaders, maxAgeInSeconds: maxAgeInSeconds)
  }
}


// DeleteSnapshotsOption enumerates the values for delete snapshots option.

public enum DeleteSnapshotsOption: String, Codable
{
// Include specifies the include state for delete snapshots option.
    case Include = "include"
// Only specifies the only state for delete snapshots option.
    case Only = "only"
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ErrorData : ErrorProtocol {
    public var code: String
    public var message: String
    public var exceptionDetails: ErrorExceptionDetailsProtocol?

    enum CodingKeys: String, CodingKey {
        case code = "Code"
        case message = "Message"
        case exceptionDetails = "ExceptionDetails"
    }

  public init(code: String, message: String)  {
    self.code = code
    self.message = message
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    code = try container.decode(String.self, forKey: .code)
    message = try container.decode(String.self, forKey: .message)
    if container.contains(.exceptionDetails) {
        exceptionDetails = try container.decode(ErrorExceptionDetailsData?.self, forKey: .exceptionDetails)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    try container.encode(code, forKey: .code)
    try container.encode(message, forKey: .message)
    if self.exceptionDetails != nil {try container.encode(exceptionDetails as! ErrorExceptionDetailsData?, forKey: .exceptionDetails)}
  }
}

extension DataFactory {
  public static func createErrorProtocol(code: String, message: String) -> ErrorProtocol {
    return ErrorData(code: code, message: message)
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ErrorExceptionDetailsData : ErrorExceptionDetailsProtocol {
    public var exceptionMessage: String?
    public var stackTrace: String?

    enum CodingKeys: String, CodingKey {
        case exceptionMessage = "ExceptionMessage"
        case stackTrace = "StackTrace"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.exceptionMessage) {
        exceptionMessage = try container.decode(String.self, forKey: .exceptionMessage)
    }
    if container.contains(.stackTrace) {
        stackTrace = try container.decode(String.self, forKey: .stackTrace)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.exceptionMessage != nil {try container.encode(exceptionMessage, forKey: .exceptionMessage)}
    if self.stackTrace != nil {try container.encode(stackTrace, forKey: .stackTrace)}
  }
}

extension DataFactory {
  public static func createErrorExceptionDetailsProtocol() -> ErrorExceptionDetailsProtocol {
    return ErrorExceptionDetailsData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct GeoReplicationData : GeoReplicationProtocol {
    public var status: GeoReplicationStatus?
    public var lastSyncTime: Date?

    enum CodingKeys: String, CodingKey {
        case status = "Status"
        case lastSyncTime = "LastSyncTime"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.status) {
        status = try container.decode(GeoReplicationStatus?.self, forKey: .status)
    }
    if container.contains(.lastSyncTime) {
        lastSyncTime = try container.decode(Date.self, forKey: .lastSyncTime)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.status != nil {try container.encode(status, forKey: .status)}
    if self.lastSyncTime != nil {try container.encode(lastSyncTime, forKey: .lastSyncTime)}
  }
}

extension DataFactory {
  public static func createGeoReplicationProtocol() -> GeoReplicationProtocol {
    return GeoReplicationData()
  }
}


// GeoReplicationStatus enumerates the values for geo replication status.

public enum GeoReplicationStatus: String, Codable
{
// Bootstrap specifies the bootstrap state for geo replication status.
    case Bootstrap = "bootstrap"
// Live specifies the live state for geo replication status.
    case Live = "live"
// Unavailable specifies the unavailable state for geo replication status.
    case Unavailable = "unavailable"
}


// LeaseAction enumerates the values for lease action.

public enum LeaseAction: String, Codable
{
// Acquire specifies the acquire state for lease action.
    case Acquire = "acquire"
// Break specifies the break state for lease action.
    case Break = "break"
// Change specifies the change state for lease action.
    case Change = "change"
// Release specifies the release state for lease action.
    case Release = "release"
// Renew specifies the renew state for lease action.
    case Renew = "renew"
}


// LeaseAction1 enumerates the values for lease action 1.

public enum LeaseAction1: String, Codable
{
// LeaseAction1Acquire specifies the lease action 1 acquire state for lease action 1.
    case LeaseAction1Acquire = "acquire"
// LeaseAction1Break specifies the lease action 1 break state for lease action 1.
    case LeaseAction1Break = "break"
// LeaseAction1Change specifies the lease action 1 change state for lease action 1.
    case LeaseAction1Change = "change"
// LeaseAction1Release specifies the lease action 1 release state for lease action 1.
    case LeaseAction1Release = "release"
// LeaseAction1Renew specifies the lease action 1 renew state for lease action 1.
    case LeaseAction1Renew = "renew"
}


// LeaseDurationType enumerates the values for lease duration type.

public enum LeaseDurationType: String, Codable
{
// Fixed specifies the fixed state for lease duration type.
    case Fixed = "fixed"
// Infinite specifies the infinite state for lease duration type.
    case Infinite = "infinite"
}


// LeaseStateType enumerates the values for lease state type.

public enum LeaseStateType: String, Codable
{
// Available specifies the available state for lease state type.
    case Available = "available"
// Breaking specifies the breaking state for lease state type.
    case Breaking = "breaking"
// Broken specifies the broken state for lease state type.
    case Broken = "broken"
// Expired specifies the expired state for lease state type.
    case Expired = "expired"
// Leased specifies the leased state for lease state type.
    case Leased = "leased"
}


// LeaseStatusType enumerates the values for lease status type.

public enum LeaseStatusType: String, Codable
{
// Locked specifies the locked state for lease status type.
    case Locked = "locked"
// Unlocked specifies the unlocked state for lease status type.
    case Unlocked = "unlocked"
}


// ListBlobsInclude enumerates the values for list blobs include.

public enum ListBlobsInclude: String, Codable
{
// Metadata specifies the metadata state for list blobs include.
    case Metadata = "metadata"
}


// ListContainersInclude enumerates the values for list containers include.

public enum ListContainersInclude: String, Codable
{
// ListContainersIncludeMetadata specifies the list containers include metadata state for list containers include.
    case ListContainersIncludeMetadata = "metadata"
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct LoggingData : LoggingProtocol {
    public var version: String
    public var delete: Bool
    public var read: Bool
    public var write: Bool
    public var retentionPolicy: RetentionPolicyProtocol

    enum CodingKeys: String, CodingKey {
        case version = "Version"
        case delete = "Delete"
        case read = "Read"
        case write = "Write"
        case retentionPolicy = "RetentionPolicy"
    }

  public init(version: String, delete: Bool, read: Bool, write: Bool, retentionPolicy: RetentionPolicyProtocol)  {
    self.version = version
    self.delete = delete
    self.read = read
    self.write = write
    self.retentionPolicy = retentionPolicy
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    version = try container.decode(String.self, forKey: .version)
    delete = try container.decode(Bool.self, forKey: .delete)
    read = try container.decode(Bool.self, forKey: .read)
    write = try container.decode(Bool.self, forKey: .write)
    retentionPolicy = try container.decode(RetentionPolicyData.self, forKey: .retentionPolicy)
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    try container.encode(version, forKey: .version)
    try container.encode(delete, forKey: .delete)
    try container.encode(read, forKey: .read)
    try container.encode(write, forKey: .write)
    try container.encode(retentionPolicy as! RetentionPolicyData, forKey: .retentionPolicy)
  }
}

extension DataFactory {
  public static func createLoggingProtocol(version: String, delete: Bool, read: Bool, write: Bool, retentionPolicy: RetentionPolicyProtocol) -> LoggingProtocol {
    return LoggingData(version: version, delete: delete, read: read, write: write, retentionPolicy: retentionPolicy)
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct MetricsData : MetricsProtocol {
    public var version: String?
    public var enabled: Bool?
    public var includeAPIs: Bool?
    public var retentionPolicy: RetentionPolicyProtocol?

    enum CodingKeys: String, CodingKey {
        case version = "Version"
        case enabled = "Enabled"
        case includeAPIs = "IncludeAPIs"
        case retentionPolicy = "RetentionPolicy"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.enabled) {
        enabled = try container.decode(Bool.self, forKey: .enabled)
    }
    if container.contains(.includeAPIs) {
        includeAPIs = try container.decode(Bool.self, forKey: .includeAPIs)
    }
    if container.contains(.retentionPolicy) {
        retentionPolicy = try container.decode(RetentionPolicyData?.self, forKey: .retentionPolicy)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.enabled != nil {try container.encode(enabled, forKey: .enabled)}
    if self.includeAPIs != nil {try container.encode(includeAPIs, forKey: .includeAPIs)}
    if self.retentionPolicy != nil {try container.encode(retentionPolicy as! RetentionPolicyData?, forKey: .retentionPolicy)}
  }
}

extension DataFactory {
  public static func createMetricsProtocol() -> MetricsProtocol {
    return MetricsData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct PageBlobsGetPageRangesHeadersData : PageBlobsGetPageRangesHeadersProtocol {
    public var lastModified: String?
    public var eTag: String?
    public var blobContentLength: Int32?
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case lastModified = "Last-Modified"
        case eTag = "ETag"
        case blobContentLength = "x-ms-blob-content-length"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.blobContentLength) {
        blobContentLength = try container.decode(Int32.self, forKey: .blobContentLength)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.blobContentLength != nil {try container.encode(blobContentLength, forKey: .blobContentLength)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createPageBlobsGetPageRangesHeadersProtocol() -> PageBlobsGetPageRangesHeadersProtocol {
    return PageBlobsGetPageRangesHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct PageBlobsIncrementalCopyHeadersData : PageBlobsIncrementalCopyHeadersProtocol {
    public var eTag: String?
    public var lastModified: String?
    public var requestId: String?
    public var version: String?
    public var date: Date?
    public var copyId: String?
    public var copyStatus: CopyStatusType?

    enum CodingKeys: String, CodingKey {
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
        case copyId = "x-ms-copy-id"
        case copyStatus = "x-ms-copy-status"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
    if container.contains(.copyId) {
        copyId = try container.decode(String.self, forKey: .copyId)
    }
    if container.contains(.copyStatus) {
        copyStatus = try container.decode(CopyStatusType?.self, forKey: .copyStatus)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
    if self.copyId != nil {try container.encode(copyId, forKey: .copyId)}
    if self.copyStatus != nil {try container.encode(copyStatus, forKey: .copyStatus)}
  }
}

extension DataFactory {
  public static func createPageBlobsIncrementalCopyHeadersProtocol() -> PageBlobsIncrementalCopyHeadersProtocol {
    return PageBlobsIncrementalCopyHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct PageBlobsPutPageHeadersData : PageBlobsPutPageHeadersProtocol {
    public var eTag: String?
    public var lastModified: String?
    public var contentMD5: String?
    public var blobContentLength: Int32?
    public var requestId: String?
    public var version: String?
    public var date: Date?
    public var isServerEncrypted: Bool?

    enum CodingKeys: String, CodingKey {
        case eTag = "ETag"
        case lastModified = "Last-Modified"
        case contentMD5 = "Content-MD5"
        case blobContentLength = "x-ms-blob-content-length"
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
        case isServerEncrypted = "x-ms-request-server-encrypted"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.eTag) {
        eTag = try container.decode(String.self, forKey: .eTag)
    }
    if container.contains(.lastModified) {
        lastModified = try container.decode(String.self, forKey: .lastModified)
    }
    if container.contains(.contentMD5) {
        contentMD5 = try container.decode(String.self, forKey: .contentMD5)
    }
    if container.contains(.blobContentLength) {
        blobContentLength = try container.decode(Int32.self, forKey: .blobContentLength)
    }
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
    if container.contains(.isServerEncrypted) {
        isServerEncrypted = try container.decode(Bool.self, forKey: .isServerEncrypted)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.eTag != nil {try container.encode(eTag, forKey: .eTag)}
    if self.lastModified != nil {try container.encode(lastModified, forKey: .lastModified)}
    if self.contentMD5 != nil {try container.encode(contentMD5, forKey: .contentMD5)}
    if self.blobContentLength != nil {try container.encode(blobContentLength, forKey: .blobContentLength)}
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
    if self.isServerEncrypted != nil {try container.encode(isServerEncrypted, forKey: .isServerEncrypted)}
  }
}

extension DataFactory {
  public static func createPageBlobsPutPageHeadersProtocol() -> PageBlobsPutPageHeadersProtocol {
    return PageBlobsPutPageHeadersData()
  }
}


// PageWrite enumerates the values for page write.

public enum PageWrite: String, Codable
{
// Clear specifies the clear state for page write.
    case Clear = "clear"
// Update specifies the update state for page write.
    case Update = "update"
}


// PublicAccessType enumerates the values for public access type.

public enum PublicAccessType: String, Codable
{
// PublicAccessTypeBlob specifies the public access type blob state for public access type.
    case PublicAccessTypeBlob = "blob"
// PublicAccessTypeContainer specifies the public access type container state for public access type.
    case PublicAccessTypeContainer = "container"
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct RetentionPolicyData : RetentionPolicyProtocol {
    public var enabled: Bool
    public var days: Int32?

    enum CodingKeys: String, CodingKey {
        case enabled = "Enabled"
        case days = "Days"
    }

  public init(enabled: Bool)  {
    self.enabled = enabled
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    enabled = try container.decode(Bool.self, forKey: .enabled)
    if container.contains(.days) {
        days = try container.decode(Int32.self, forKey: .days)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    try container.encode(enabled, forKey: .enabled)
    if self.days != nil {try container.encode(days, forKey: .days)}
  }
}

extension DataFactory {
  public static func createRetentionPolicyProtocol(enabled: Bool) -> RetentionPolicyProtocol {
    return RetentionPolicyData(enabled: enabled)
  }
}


// SequenceNumberAction enumerates the values for sequence number action.

public enum SequenceNumberAction: String, Codable
{
// SequenceNumberActionIncrement specifies the sequence number action increment state for sequence number action.
    case SequenceNumberActionIncrement = "increment"
// SequenceNumberActionMax specifies the sequence number action max state for sequence number action.
    case SequenceNumberActionMax = "max"
// SequenceNumberActionUpdate specifies the sequence number action update state for sequence number action.
    case SequenceNumberActionUpdate = "update"
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ServiceGetPropertiesHeadersData : ServiceGetPropertiesHeadersProtocol {
    public var requestId: String?
    public var version: String?

    enum CodingKeys: String, CodingKey {
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
  }
}

extension DataFactory {
  public static func createServiceGetPropertiesHeadersProtocol() -> ServiceGetPropertiesHeadersProtocol {
    return ServiceGetPropertiesHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ServiceGetStatsHeadersData : ServiceGetStatsHeadersProtocol {
    public var requestId: String?
    public var version: String?
    public var date: Date?

    enum CodingKeys: String, CodingKey {
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
        case date = "Date"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
    if container.contains(.date) {
        date = try container.decode(Date.self, forKey: .date)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
    if self.date != nil {try container.encode(date, forKey: .date)}
  }
}

extension DataFactory {
  public static func createServiceGetStatsHeadersProtocol() -> ServiceGetStatsHeadersProtocol {
    return ServiceGetStatsHeadersData()
  }
}


// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
import Foundation
internal struct ServiceListContainersHeadersData : ServiceListContainersHeadersProtocol {
    public var requestId: String?
    public var version: String?

    enum CodingKeys: String, CodingKey {
        case requestId = "x-ms-request-id"
        case version = "x-ms-version"
    }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    if container.contains(.requestId) {
        requestId = try container.decode(String.self, forKey: .requestId)
    }
    if container.contains(.version) {
        version = try container.decode(String.self, forKey: .version)
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.requestId != nil {try container.encode(requestId, forKey: .requestId)}
    if self.version != nil {try container.encode(version, forKey: .version)}
  }
}

extension DataFactory {
  public static func createServiceListContainersHeadersProtocol() -> ServiceListContainersHeadersProtocol {
    return ServiceListContainersHeadersData()
  }
}