From 6730ea3896e612a2ee483a1aeec631d1d78c07ca Mon Sep 17 00:00:00 2001 From: Kabir Oberai Date: Sun, 25 May 2025 19:09:17 +0530 Subject: [PATCH] Make ALL response enums extensible (#92) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Another bugfix for #64. Fifth… time's the charm? --- Sources/DeveloperAPI/Generated/Types.swift | 590 ++++++++++++++++-- Sources/DeveloperAPI/patch.js | 32 +- .../DeveloperServicesCapability.swift | 6 +- .../OpenAPI/OpenAPIExtensibleEnum.swift | 6 + ...veloperServicesFetchProfileOperation.swift | 2 +- 5 files changed, 567 insertions(+), 69 deletions(-) diff --git a/Sources/DeveloperAPI/Generated/Types.swift b/Sources/DeveloperAPI/Generated/Types.swift index f23522a..15748dd 100644 --- a/Sources/DeveloperAPI/Generated/Types.swift +++ b/Sources/DeveloperAPI/Generated/Types.swift @@ -477,9 +477,56 @@ public enum Components { /// - Remark: Generated from `#/components/schemas/App/attributes/subscriptionStatusUrlVersionForSandbox`. public var subscriptionStatusUrlVersionForSandbox: Components.Schemas.SubscriptionStatusUrlVersion? /// - Remark: Generated from `#/components/schemas/App/attributes/contentRightsDeclaration`. - @frozen public enum ContentRightsDeclarationPayload: String, Codable, Hashable, Sendable, CaseIterable { - case doesNotUseThirdPartyContent = "DOES_NOT_USE_THIRD_PARTY_CONTENT" - case usesThirdPartyContent = "USES_THIRD_PARTY_CONTENT" + public struct ContentRightsDeclarationPayload: Codable, Hashable, Sendable { + /// - Remark: Generated from `#/components/schemas/App/attributes/contentRightsDeclaration/value1`. + @frozen public enum Value1Payload: String, Codable, Hashable, Sendable, CaseIterable { + case doesNotUseThirdPartyContent = "DOES_NOT_USE_THIRD_PARTY_CONTENT" + case usesThirdPartyContent = "USES_THIRD_PARTY_CONTENT" + } + /// - Remark: Generated from `#/components/schemas/App/attributes/contentRightsDeclaration/value1`. + public var value1: Components.Schemas.App.AttributesPayload.ContentRightsDeclarationPayload.Value1Payload? + /// - Remark: Generated from `#/components/schemas/App/attributes/contentRightsDeclaration/value2`. + public var value2: Swift.String? + /// Creates a new `ContentRightsDeclarationPayload`. + /// + /// - Parameters: + /// - value1: + /// - value2: + public init( + value1: Components.Schemas.App.AttributesPayload.ContentRightsDeclarationPayload.Value1Payload? = nil, + value2: Swift.String? = nil + ) { + self.value1 = value1 + self.value2 = value2 + } + public init(from decoder: any Decoder) throws { + var errors: [any Error] = [] + do { + self.value1 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + do { + self.value2 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + try Swift.DecodingError.verifyAtLeastOneSchemaIsNotNil( + [ + self.value1, + self.value2 + ], + type: Self.self, + codingPath: decoder.codingPath, + errors: errors + ) + } + public func encode(to encoder: any Encoder) throws { + try encoder.encodeFirstNonNilValueToSingleValueContainer([ + self.value1, + self.value2 + ]) + } } /// - Remark: Generated from `#/components/schemas/App/attributes/contentRightsDeclaration`. public var contentRightsDeclaration: Components.Schemas.App.AttributesPayload.ContentRightsDeclarationPayload? @@ -3522,9 +3569,56 @@ public enum Components { /// - Remark: Generated from `#/components/schemas/Device/attributes/deviceClass`. public var deviceClass: Components.Schemas.Device.AttributesPayload.DeviceClassPayload? /// - Remark: Generated from `#/components/schemas/Device/attributes/status`. - @frozen public enum StatusPayload: String, Codable, Hashable, Sendable, CaseIterable { - case enabled = "ENABLED" - case disabled = "DISABLED" + public struct StatusPayload: Codable, Hashable, Sendable { + /// - Remark: Generated from `#/components/schemas/Device/attributes/status/value1`. + @frozen public enum Value1Payload: String, Codable, Hashable, Sendable, CaseIterable { + case enabled = "ENABLED" + case disabled = "DISABLED" + } + /// - Remark: Generated from `#/components/schemas/Device/attributes/status/value1`. + public var value1: Components.Schemas.Device.AttributesPayload.StatusPayload.Value1Payload? + /// - Remark: Generated from `#/components/schemas/Device/attributes/status/value2`. + public var value2: Swift.String? + /// Creates a new `StatusPayload`. + /// + /// - Parameters: + /// - value1: + /// - value2: + public init( + value1: Components.Schemas.Device.AttributesPayload.StatusPayload.Value1Payload? = nil, + value2: Swift.String? = nil + ) { + self.value1 = value1 + self.value2 = value2 + } + public init(from decoder: any Decoder) throws { + var errors: [any Error] = [] + do { + self.value1 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + do { + self.value2 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + try Swift.DecodingError.verifyAtLeastOneSchemaIsNotNil( + [ + self.value1, + self.value2 + ], + type: Self.self, + codingPath: decoder.codingPath, + errors: errors + ) + } + public func encode(to encoder: any Encoder) throws { + try encoder.encodeFirstNonNilValueToSingleValueContainer([ + self.value1, + self.value2 + ]) + } } /// - Remark: Generated from `#/components/schemas/Device/attributes/status`. public var status: Components.Schemas.Device.AttributesPayload.StatusPayload? @@ -3738,9 +3832,56 @@ public enum Components { /// - Remark: Generated from `#/components/schemas/DeviceUpdateRequest/data/attributes/name`. public var name: Swift.String? /// - Remark: Generated from `#/components/schemas/DeviceUpdateRequest/data/attributes/status`. - @frozen public enum StatusPayload: String, Codable, Hashable, Sendable, CaseIterable { - case enabled = "ENABLED" - case disabled = "DISABLED" + public struct StatusPayload: Codable, Hashable, Sendable { + /// - Remark: Generated from `#/components/schemas/DeviceUpdateRequest/data/attributes/status/value1`. + @frozen public enum Value1Payload: String, Codable, Hashable, Sendable, CaseIterable { + case enabled = "ENABLED" + case disabled = "DISABLED" + } + /// - Remark: Generated from `#/components/schemas/DeviceUpdateRequest/data/attributes/status/value1`. + public var value1: Components.Schemas.DeviceUpdateRequest.DataPayload.AttributesPayload.StatusPayload.Value1Payload? + /// - Remark: Generated from `#/components/schemas/DeviceUpdateRequest/data/attributes/status/value2`. + public var value2: Swift.String? + /// Creates a new `StatusPayload`. + /// + /// - Parameters: + /// - value1: + /// - value2: + public init( + value1: Components.Schemas.DeviceUpdateRequest.DataPayload.AttributesPayload.StatusPayload.Value1Payload? = nil, + value2: Swift.String? = nil + ) { + self.value1 = value1 + self.value2 = value2 + } + public init(from decoder: any Decoder) throws { + var errors: [any Error] = [] + do { + self.value1 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + do { + self.value2 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + try Swift.DecodingError.verifyAtLeastOneSchemaIsNotNil( + [ + self.value1, + self.value2 + ], + type: Self.self, + codingPath: decoder.codingPath, + errors: errors + ) + } + public func encode(to encoder: any Encoder) throws { + try encoder.encodeFirstNonNilValueToSingleValueContainer([ + self.value1, + self.value2 + ]) + } } /// - Remark: Generated from `#/components/schemas/DeviceUpdateRequest/data/attributes/status`. public var status: Components.Schemas.DeviceUpdateRequest.DataPayload.AttributesPayload.StatusPayload? @@ -3814,28 +3955,122 @@ public enum Components { /// - Remark: Generated from `#/components/schemas/Profile/attributes/platform`. public var platform: Components.Schemas.BundleIdPlatform? /// - Remark: Generated from `#/components/schemas/Profile/attributes/profileType`. - @frozen public enum ProfileTypePayload: String, Codable, Hashable, Sendable, CaseIterable { - case iosAppDevelopment = "IOS_APP_DEVELOPMENT" - case iosAppStore = "IOS_APP_STORE" - case iosAppAdhoc = "IOS_APP_ADHOC" - case iosAppInhouse = "IOS_APP_INHOUSE" - case macAppDevelopment = "MAC_APP_DEVELOPMENT" - case macAppStore = "MAC_APP_STORE" - case macAppDirect = "MAC_APP_DIRECT" - case tvosAppDevelopment = "TVOS_APP_DEVELOPMENT" - case tvosAppStore = "TVOS_APP_STORE" - case tvosAppAdhoc = "TVOS_APP_ADHOC" - case tvosAppInhouse = "TVOS_APP_INHOUSE" - case macCatalystAppDevelopment = "MAC_CATALYST_APP_DEVELOPMENT" - case macCatalystAppStore = "MAC_CATALYST_APP_STORE" - case macCatalystAppDirect = "MAC_CATALYST_APP_DIRECT" + public struct ProfileTypePayload: Codable, Hashable, Sendable { + /// - Remark: Generated from `#/components/schemas/Profile/attributes/profileType/value1`. + @frozen public enum Value1Payload: String, Codable, Hashable, Sendable, CaseIterable { + case iosAppDevelopment = "IOS_APP_DEVELOPMENT" + case iosAppStore = "IOS_APP_STORE" + case iosAppAdhoc = "IOS_APP_ADHOC" + case iosAppInhouse = "IOS_APP_INHOUSE" + case macAppDevelopment = "MAC_APP_DEVELOPMENT" + case macAppStore = "MAC_APP_STORE" + case macAppDirect = "MAC_APP_DIRECT" + case tvosAppDevelopment = "TVOS_APP_DEVELOPMENT" + case tvosAppStore = "TVOS_APP_STORE" + case tvosAppAdhoc = "TVOS_APP_ADHOC" + case tvosAppInhouse = "TVOS_APP_INHOUSE" + case macCatalystAppDevelopment = "MAC_CATALYST_APP_DEVELOPMENT" + case macCatalystAppStore = "MAC_CATALYST_APP_STORE" + case macCatalystAppDirect = "MAC_CATALYST_APP_DIRECT" + } + /// - Remark: Generated from `#/components/schemas/Profile/attributes/profileType/value1`. + public var value1: Components.Schemas.Profile.AttributesPayload.ProfileTypePayload.Value1Payload? + /// - Remark: Generated from `#/components/schemas/Profile/attributes/profileType/value2`. + public var value2: Swift.String? + /// Creates a new `ProfileTypePayload`. + /// + /// - Parameters: + /// - value1: + /// - value2: + public init( + value1: Components.Schemas.Profile.AttributesPayload.ProfileTypePayload.Value1Payload? = nil, + value2: Swift.String? = nil + ) { + self.value1 = value1 + self.value2 = value2 + } + public init(from decoder: any Decoder) throws { + var errors: [any Error] = [] + do { + self.value1 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + do { + self.value2 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + try Swift.DecodingError.verifyAtLeastOneSchemaIsNotNil( + [ + self.value1, + self.value2 + ], + type: Self.self, + codingPath: decoder.codingPath, + errors: errors + ) + } + public func encode(to encoder: any Encoder) throws { + try encoder.encodeFirstNonNilValueToSingleValueContainer([ + self.value1, + self.value2 + ]) + } } /// - Remark: Generated from `#/components/schemas/Profile/attributes/profileType`. public var profileType: Components.Schemas.Profile.AttributesPayload.ProfileTypePayload? /// - Remark: Generated from `#/components/schemas/Profile/attributes/profileState`. - @frozen public enum ProfileStatePayload: String, Codable, Hashable, Sendable, CaseIterable { - case active = "ACTIVE" - case invalid = "INVALID" + public struct ProfileStatePayload: Codable, Hashable, Sendable { + /// - Remark: Generated from `#/components/schemas/Profile/attributes/profileState/value1`. + @frozen public enum Value1Payload: String, Codable, Hashable, Sendable, CaseIterable { + case active = "ACTIVE" + case invalid = "INVALID" + } + /// - Remark: Generated from `#/components/schemas/Profile/attributes/profileState/value1`. + public var value1: Components.Schemas.Profile.AttributesPayload.ProfileStatePayload.Value1Payload? + /// - Remark: Generated from `#/components/schemas/Profile/attributes/profileState/value2`. + public var value2: Swift.String? + /// Creates a new `ProfileStatePayload`. + /// + /// - Parameters: + /// - value1: + /// - value2: + public init( + value1: Components.Schemas.Profile.AttributesPayload.ProfileStatePayload.Value1Payload? = nil, + value2: Swift.String? = nil + ) { + self.value1 = value1 + self.value2 = value2 + } + public init(from decoder: any Decoder) throws { + var errors: [any Error] = [] + do { + self.value1 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + do { + self.value2 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + try Swift.DecodingError.verifyAtLeastOneSchemaIsNotNil( + [ + self.value1, + self.value2 + ], + type: Self.self, + codingPath: decoder.codingPath, + errors: errors + ) + } + public func encode(to encoder: any Encoder) throws { + try encoder.encodeFirstNonNilValueToSingleValueContainer([ + self.value1, + self.value2 + ]) + } } /// - Remark: Generated from `#/components/schemas/Profile/attributes/profileState`. public var profileState: Components.Schemas.Profile.AttributesPayload.ProfileStatePayload? @@ -4291,21 +4526,68 @@ public enum Components { /// - Remark: Generated from `#/components/schemas/ProfileCreateRequest/data/attributes/name`. public var name: Swift.String /// - Remark: Generated from `#/components/schemas/ProfileCreateRequest/data/attributes/profileType`. - @frozen public enum ProfileTypePayload: String, Codable, Hashable, Sendable, CaseIterable { - case iosAppDevelopment = "IOS_APP_DEVELOPMENT" - case iosAppStore = "IOS_APP_STORE" - case iosAppAdhoc = "IOS_APP_ADHOC" - case iosAppInhouse = "IOS_APP_INHOUSE" - case macAppDevelopment = "MAC_APP_DEVELOPMENT" - case macAppStore = "MAC_APP_STORE" - case macAppDirect = "MAC_APP_DIRECT" - case tvosAppDevelopment = "TVOS_APP_DEVELOPMENT" - case tvosAppStore = "TVOS_APP_STORE" - case tvosAppAdhoc = "TVOS_APP_ADHOC" - case tvosAppInhouse = "TVOS_APP_INHOUSE" - case macCatalystAppDevelopment = "MAC_CATALYST_APP_DEVELOPMENT" - case macCatalystAppStore = "MAC_CATALYST_APP_STORE" - case macCatalystAppDirect = "MAC_CATALYST_APP_DIRECT" + public struct ProfileTypePayload: Codable, Hashable, Sendable { + /// - Remark: Generated from `#/components/schemas/ProfileCreateRequest/data/attributes/profileType/value1`. + @frozen public enum Value1Payload: String, Codable, Hashable, Sendable, CaseIterable { + case iosAppDevelopment = "IOS_APP_DEVELOPMENT" + case iosAppStore = "IOS_APP_STORE" + case iosAppAdhoc = "IOS_APP_ADHOC" + case iosAppInhouse = "IOS_APP_INHOUSE" + case macAppDevelopment = "MAC_APP_DEVELOPMENT" + case macAppStore = "MAC_APP_STORE" + case macAppDirect = "MAC_APP_DIRECT" + case tvosAppDevelopment = "TVOS_APP_DEVELOPMENT" + case tvosAppStore = "TVOS_APP_STORE" + case tvosAppAdhoc = "TVOS_APP_ADHOC" + case tvosAppInhouse = "TVOS_APP_INHOUSE" + case macCatalystAppDevelopment = "MAC_CATALYST_APP_DEVELOPMENT" + case macCatalystAppStore = "MAC_CATALYST_APP_STORE" + case macCatalystAppDirect = "MAC_CATALYST_APP_DIRECT" + } + /// - Remark: Generated from `#/components/schemas/ProfileCreateRequest/data/attributes/profileType/value1`. + public var value1: Components.Schemas.ProfileCreateRequest.DataPayload.AttributesPayload.ProfileTypePayload.Value1Payload? + /// - Remark: Generated from `#/components/schemas/ProfileCreateRequest/data/attributes/profileType/value2`. + public var value2: Swift.String? + /// Creates a new `ProfileTypePayload`. + /// + /// - Parameters: + /// - value1: + /// - value2: + public init( + value1: Components.Schemas.ProfileCreateRequest.DataPayload.AttributesPayload.ProfileTypePayload.Value1Payload? = nil, + value2: Swift.String? = nil + ) { + self.value1 = value1 + self.value2 = value2 + } + public init(from decoder: any Decoder) throws { + var errors: [any Error] = [] + do { + self.value1 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + do { + self.value2 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + try Swift.DecodingError.verifyAtLeastOneSchemaIsNotNil( + [ + self.value1, + self.value2 + ], + type: Self.self, + codingPath: decoder.codingPath, + errors: errors + ) + } + public func encode(to encoder: any Encoder) throws { + try encoder.encodeFirstNonNilValueToSingleValueContainer([ + self.value1, + self.value2 + ]) + } } /// - Remark: Generated from `#/components/schemas/ProfileCreateRequest/data/attributes/profileType`. public var profileType: Components.Schemas.ProfileCreateRequest.DataPayload.AttributesPayload.ProfileTypePayload @@ -5116,13 +5398,60 @@ public enum Components { /// - Remark: Generated from `#/components/schemas/CapabilityOption`. public struct CapabilityOption: Codable, Hashable, Sendable { /// - Remark: Generated from `#/components/schemas/CapabilityOption/key`. - @frozen public enum KeyPayload: String, Codable, Hashable, Sendable, CaseIterable { - case xcode5 = "XCODE_5" - case xcode6 = "XCODE_6" - case completeProtection = "COMPLETE_PROTECTION" - case protectedUnlessOpen = "PROTECTED_UNLESS_OPEN" - case protectedUntilFirstUserAuth = "PROTECTED_UNTIL_FIRST_USER_AUTH" - case primaryAppConsent = "PRIMARY_APP_CONSENT" + public struct KeyPayload: Codable, Hashable, Sendable { + /// - Remark: Generated from `#/components/schemas/CapabilityOption/key/value1`. + @frozen public enum Value1Payload: String, Codable, Hashable, Sendable, CaseIterable { + case xcode5 = "XCODE_5" + case xcode6 = "XCODE_6" + case completeProtection = "COMPLETE_PROTECTION" + case protectedUnlessOpen = "PROTECTED_UNLESS_OPEN" + case protectedUntilFirstUserAuth = "PROTECTED_UNTIL_FIRST_USER_AUTH" + case primaryAppConsent = "PRIMARY_APP_CONSENT" + } + /// - Remark: Generated from `#/components/schemas/CapabilityOption/key/value1`. + public var value1: Components.Schemas.CapabilityOption.KeyPayload.Value1Payload? + /// - Remark: Generated from `#/components/schemas/CapabilityOption/key/value2`. + public var value2: Swift.String? + /// Creates a new `KeyPayload`. + /// + /// - Parameters: + /// - value1: + /// - value2: + public init( + value1: Components.Schemas.CapabilityOption.KeyPayload.Value1Payload? = nil, + value2: Swift.String? = nil + ) { + self.value1 = value1 + self.value2 = value2 + } + public init(from decoder: any Decoder) throws { + var errors: [any Error] = [] + do { + self.value1 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + do { + self.value2 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + try Swift.DecodingError.verifyAtLeastOneSchemaIsNotNil( + [ + self.value1, + self.value2 + ], + type: Self.self, + codingPath: decoder.codingPath, + errors: errors + ) + } + public func encode(to encoder: any Encoder) throws { + try encoder.encodeFirstNonNilValueToSingleValueContainer([ + self.value1, + self.value2 + ]) + } } /// - Remark: Generated from `#/components/schemas/CapabilityOption/key`. public var key: Components.Schemas.CapabilityOption.KeyPayload? @@ -5172,10 +5501,57 @@ public enum Components { /// - Remark: Generated from `#/components/schemas/CapabilitySetting`. public struct CapabilitySetting: Codable, Hashable, Sendable { /// - Remark: Generated from `#/components/schemas/CapabilitySetting/key`. - @frozen public enum KeyPayload: String, Codable, Hashable, Sendable, CaseIterable { - case icloudVersion = "ICLOUD_VERSION" - case dataProtectionPermissionLevel = "DATA_PROTECTION_PERMISSION_LEVEL" - case appleIdAuthAppConsent = "APPLE_ID_AUTH_APP_CONSENT" + public struct KeyPayload: Codable, Hashable, Sendable { + /// - Remark: Generated from `#/components/schemas/CapabilitySetting/key/value1`. + @frozen public enum Value1Payload: String, Codable, Hashable, Sendable, CaseIterable { + case icloudVersion = "ICLOUD_VERSION" + case dataProtectionPermissionLevel = "DATA_PROTECTION_PERMISSION_LEVEL" + case appleIdAuthAppConsent = "APPLE_ID_AUTH_APP_CONSENT" + } + /// - Remark: Generated from `#/components/schemas/CapabilitySetting/key/value1`. + public var value1: Components.Schemas.CapabilitySetting.KeyPayload.Value1Payload? + /// - Remark: Generated from `#/components/schemas/CapabilitySetting/key/value2`. + public var value2: Swift.String? + /// Creates a new `KeyPayload`. + /// + /// - Parameters: + /// - value1: + /// - value2: + public init( + value1: Components.Schemas.CapabilitySetting.KeyPayload.Value1Payload? = nil, + value2: Swift.String? = nil + ) { + self.value1 = value1 + self.value2 = value2 + } + public init(from decoder: any Decoder) throws { + var errors: [any Error] = [] + do { + self.value1 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + do { + self.value2 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + try Swift.DecodingError.verifyAtLeastOneSchemaIsNotNil( + [ + self.value1, + self.value2 + ], + type: Self.self, + codingPath: decoder.codingPath, + errors: errors + ) + } + public func encode(to encoder: any Encoder) throws { + try encoder.encodeFirstNonNilValueToSingleValueContainer([ + self.value1, + self.value2 + ]) + } } /// - Remark: Generated from `#/components/schemas/CapabilitySetting/key`. public var key: Components.Schemas.CapabilitySetting.KeyPayload? @@ -5188,10 +5564,57 @@ public enum Components { /// - Remark: Generated from `#/components/schemas/CapabilitySetting/visible`. public var visible: Swift.Bool? /// - Remark: Generated from `#/components/schemas/CapabilitySetting/allowedInstances`. - @frozen public enum AllowedInstancesPayload: String, Codable, Hashable, Sendable, CaseIterable { - case entry = "ENTRY" - case single = "SINGLE" - case multiple = "MULTIPLE" + public struct AllowedInstancesPayload: Codable, Hashable, Sendable { + /// - Remark: Generated from `#/components/schemas/CapabilitySetting/allowedInstances/value1`. + @frozen public enum Value1Payload: String, Codable, Hashable, Sendable, CaseIterable { + case entry = "ENTRY" + case single = "SINGLE" + case multiple = "MULTIPLE" + } + /// - Remark: Generated from `#/components/schemas/CapabilitySetting/allowedInstances/value1`. + public var value1: Components.Schemas.CapabilitySetting.AllowedInstancesPayload.Value1Payload? + /// - Remark: Generated from `#/components/schemas/CapabilitySetting/allowedInstances/value2`. + public var value2: Swift.String? + /// Creates a new `AllowedInstancesPayload`. + /// + /// - Parameters: + /// - value1: + /// - value2: + public init( + value1: Components.Schemas.CapabilitySetting.AllowedInstancesPayload.Value1Payload? = nil, + value2: Swift.String? = nil + ) { + self.value1 = value1 + self.value2 = value2 + } + public init(from decoder: any Decoder) throws { + var errors: [any Error] = [] + do { + self.value1 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + do { + self.value2 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + try Swift.DecodingError.verifyAtLeastOneSchemaIsNotNil( + [ + self.value1, + self.value2 + ], + type: Self.self, + codingPath: decoder.codingPath, + errors: errors + ) + } + public func encode(to encoder: any Encoder) throws { + try encoder.encodeFirstNonNilValueToSingleValueContainer([ + self.value1, + self.value2 + ]) + } } /// - Remark: Generated from `#/components/schemas/CapabilitySetting/allowedInstances`. public var allowedInstances: Components.Schemas.CapabilitySetting.AllowedInstancesPayload? @@ -5387,9 +5810,56 @@ public enum Components { } } /// - Remark: Generated from `#/components/schemas/SubscriptionStatusUrlVersion`. - @frozen public enum SubscriptionStatusUrlVersion: String, Codable, Hashable, Sendable, CaseIterable { - case v1 = "V1" - case v2 = "V2" + public struct SubscriptionStatusUrlVersion: Codable, Hashable, Sendable { + /// - Remark: Generated from `#/components/schemas/SubscriptionStatusUrlVersion/value1`. + @frozen public enum Value1Payload: String, Codable, Hashable, Sendable, CaseIterable { + case v1 = "V1" + case v2 = "V2" + } + /// - Remark: Generated from `#/components/schemas/SubscriptionStatusUrlVersion/value1`. + public var value1: Components.Schemas.SubscriptionStatusUrlVersion.Value1Payload? + /// - Remark: Generated from `#/components/schemas/SubscriptionStatusUrlVersion/value2`. + public var value2: Swift.String? + /// Creates a new `SubscriptionStatusUrlVersion`. + /// + /// - Parameters: + /// - value1: + /// - value2: + public init( + value1: Components.Schemas.SubscriptionStatusUrlVersion.Value1Payload? = nil, + value2: Swift.String? = nil + ) { + self.value1 = value1 + self.value2 = value2 + } + public init(from decoder: any Decoder) throws { + var errors: [any Error] = [] + do { + self.value1 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + do { + self.value2 = try decoder.decodeFromSingleValueContainer() + } catch { + errors.append(error) + } + try Swift.DecodingError.verifyAtLeastOneSchemaIsNotNil( + [ + self.value1, + self.value2 + ], + type: Self.self, + codingPath: decoder.codingPath, + errors: errors + ) + } + public func encode(to encoder: any Encoder) throws { + try encoder.encodeFirstNonNilValueToSingleValueContainer([ + self.value1, + self.value2 + ]) + } } } /// Types generated from the `#/components/parameters` section of the OpenAPI document. diff --git a/Sources/DeveloperAPI/patch.js b/Sources/DeveloperAPI/patch.js index 8c6aed0..ef0dd40 100644 --- a/Sources/DeveloperAPI/patch.js +++ b/Sources/DeveloperAPI/patch.js @@ -39,6 +39,29 @@ function makeOpen(enumSchema) { }); } +function openAll(schema, path = []) { + if (Array.isArray(schema)) { + schema.forEach((s, i) => openAll(s, [...path, i])) + } else if (typeof schema === 'object' && schema !== null) { + const keys = new Set(Object.keys(schema)) + if (keys.size === 2 + && keys.has('type') + && keys.has('enum') + && schema.type === 'string' + && Array.isArray(schema.enum)) { + // several polymorphic schemas have a field literally named 'type', that always has a single case. + // skip that instance, but make all other enums open. + if (!(path[path.length - 1] === 'type' && schema.enum.length === 1)) { + makeOpen(schema); + } + } else { + for (const key in schema) { + openAll(schema[key], [...path, key]); + } + } + } +} + function patch(schema) { const schemas = schema.components.schemas; @@ -71,12 +94,11 @@ function patch(schema) { schemas.App.properties.relationships.properties.inAppPurchases.deprecated = false; // openapi-generator expects response enums to be exhaustive. Apple's ASC OpenAPI spec - // misses some cases that they do, actually, return. + // misses some cases that they do, actually, return. So we make all bona fide enums in + // schema.components.schemas open. We don't do this on the schema.paths side because + // most (all?) of the enums in there are on the request side rather than the response. // https://swiftpackageindex.com/apple/swift-openapi-generator/1.7.2/documentation/swift-openapi-generator/useful-openapi-patterns#Open-enums-and-oneOfs - makeOpen(schemas.BundleIdPlatform); - makeOpen(schemas.CapabilityType); - makeOpen(schemas.CertificateType); - makeOpen(schemas.Device.properties.attributes.properties.deviceClass); + openAll(schemas); return schema; } diff --git a/Sources/XKit/DeveloperServices/App IDs/Entitlements/DeveloperServicesCapability.swift b/Sources/XKit/DeveloperServices/App IDs/Entitlements/DeveloperServicesCapability.swift index 0cc57f3..6f5e208 100644 --- a/Sources/XKit/DeveloperServices/App IDs/Entitlements/DeveloperServicesCapability.swift +++ b/Sources/XKit/DeveloperServices/App IDs/Entitlements/DeveloperServicesCapability.swift @@ -39,7 +39,7 @@ extension Entitlement { extension DataProtectionEntitlement: EntitlementWithCapability { var capability: DeveloperServicesCapability { - let option: Components.Schemas.CapabilityOption.KeyPayload = switch self { + let option: Components.Schemas.CapabilityOption.KeyPayload.Value1Payload = switch self { case .complete: .completeProtection case .unlessOpen: .protectedUnlessOpen case .untilFirstAuth: .protectedUntilFirstUserAuth @@ -49,8 +49,8 @@ extension DataProtectionEntitlement: EntitlementWithCapability { isFree: true, settings: [ .init( - key: .dataProtectionPermissionLevel, - options: [.init(key: option)] + key: .init(.dataProtectionPermissionLevel), + options: [.init(key: .init(option))] ) ] ) diff --git a/Sources/XKit/DeveloperServices/OpenAPI/OpenAPIExtensibleEnum.swift b/Sources/XKit/DeveloperServices/OpenAPI/OpenAPIExtensibleEnum.swift index 7a6f586..6811732 100644 --- a/Sources/XKit/DeveloperServices/OpenAPI/OpenAPIExtensibleEnum.swift +++ b/Sources/XKit/DeveloperServices/OpenAPI/OpenAPIExtensibleEnum.swift @@ -20,6 +20,12 @@ extension OpenAPIExtensibleEnum { } extension Components.Schemas.BundleIdPlatform: OpenAPIExtensibleEnum {} +extension Components.Schemas.CapabilityOption.KeyPayload: OpenAPIExtensibleEnum {} +extension Components.Schemas.CapabilitySetting.KeyPayload: OpenAPIExtensibleEnum {} extension Components.Schemas.CapabilityType: OpenAPIExtensibleEnum {} extension Components.Schemas.CertificateType: OpenAPIExtensibleEnum {} extension Components.Schemas.Device.AttributesPayload.DeviceClassPayload: OpenAPIExtensibleEnum {} +extension Components.Schemas.Device.AttributesPayload.StatusPayload: OpenAPIExtensibleEnum {} +extension Components.Schemas.Profile.AttributesPayload.ProfileStatePayload: OpenAPIExtensibleEnum {} +extension Components.Schemas.Profile.AttributesPayload.ProfileTypePayload: OpenAPIExtensibleEnum {} +extension Components.Schemas.ProfileCreateRequest.DataPayload.AttributesPayload.ProfileTypePayload: OpenAPIExtensibleEnum {} diff --git a/Sources/XKit/DeveloperServices/Profiles/DeveloperServicesFetchProfileOperation.swift b/Sources/XKit/DeveloperServices/Profiles/DeveloperServicesFetchProfileOperation.swift index daafb22..23ea7a6 100644 --- a/Sources/XKit/DeveloperServices/Profiles/DeveloperServicesFetchProfileOperation.swift +++ b/Sources/XKit/DeveloperServices/Profiles/DeveloperServicesFetchProfileOperation.swift @@ -80,7 +80,7 @@ public struct DeveloperServicesFetchProfileOperation: DeveloperServicesOperation _type: .profiles, attributes: .init( name: "XTL profile \(bundleID.id)", - profileType: .iosAppDevelopment + profileType: .init(.iosAppDevelopment) ), relationships: .init( bundleId: .init(