@@ -11,18 +11,44 @@ extension OpenAPI {
1111 /// OpenAPI Spec "Discriminator Object"
1212 ///
1313 /// See [OpenAPI Discriminator Object](https://spec.openapis.org/oas/v3.2.0.html#discriminator-object).
14- public struct Discriminator : Equatable , Sendable {
14+ public struct Discriminator : HasConditionalWarnings , Sendable {
1515 public let propertyName : String
1616 public let mapping : OrderedDictionary < String , String > ?
17+ public let defaultMapping : String ?
18+
19+ public let conditionalWarnings : [ ( any Condition , OpenAPI . Warning ) ]
1720
1821 public init ( propertyName: String ,
19- mapping: OrderedDictionary < String , String > ? = nil ) {
22+ mapping: OrderedDictionary < String , String > ? = nil ,
23+ defaultMapping: String ? = nil ) {
2024 self . propertyName = propertyName
2125 self . mapping = mapping
26+ self . defaultMapping = defaultMapping
27+
28+ self . conditionalWarnings = [
29+ nonNilVersionWarning ( fieldName: " defaultMapping " , value: defaultMapping, minimumVersion: . v3_2_0)
30+ ] . compactMap { $0 }
2231 }
2332 }
2433}
2534
35+ extension OpenAPI . Discriminator : Equatable {
36+ public static func == ( lhs: Self , rhs: Self ) -> Bool {
37+ lhs. propertyName == rhs. propertyName
38+ && lhs. mapping == rhs. mapping
39+ && lhs. defaultMapping == rhs. defaultMapping
40+ }
41+ }
42+
43+ fileprivate func nonNilVersionWarning< Subject> ( fieldName: String , value: Subject ? , minimumVersion: OpenAPI . Document . Version ) -> ( any Condition , OpenAPI . Warning ) ? {
44+ value. map { _ in
45+ OpenAPI . Document. ConditionalWarnings. version (
46+ lessThan: minimumVersion,
47+ doesNotSupport: " The Discriminator \( fieldName) field "
48+ )
49+ }
50+ }
51+
2652// MARK: - Codable
2753
2854extension OpenAPI . Discriminator : Encodable {
@@ -31,6 +57,7 @@ extension OpenAPI.Discriminator: Encodable {
3157
3258 try container. encode ( propertyName, forKey: . propertyName)
3359 try container. encodeIfPresent ( mapping, forKey: . mapping)
60+ try container. encodeIfPresent ( defaultMapping, forKey: . defaultMapping)
3461 }
3562}
3663
@@ -40,13 +67,19 @@ extension OpenAPI.Discriminator: Decodable {
4067
4168 propertyName = try container. decode ( String . self, forKey: . propertyName)
4269 mapping = try container. decodeIfPresent ( OrderedDictionary < String , String > . self, forKey: . mapping)
70+ defaultMapping = try container. decodeIfPresent ( String . self, forKey: . defaultMapping)
71+
72+ conditionalWarnings = [
73+ nonNilVersionWarning ( fieldName: " defaultMapping " , value: defaultMapping, minimumVersion: . v3_2_0)
74+ ] . compactMap { $0 }
4375 }
4476}
4577
4678extension OpenAPI . Discriminator {
4779 private enum CodingKeys : String , CodingKey {
4880 case propertyName
4981 case mapping
82+ case defaultMapping
5083 }
5184}
5285
0 commit comments