github.com/rzurga/go-swagger@v0.28.1-0.20211109195225-5d1f453ffa3a/cmd/swagger/commands/diff/compatibility.go (about) 1 package diff 2 3 // CompatibilityPolicy decides which changes are breaking and which are not 4 type CompatibilityPolicy struct { 5 ForResponse map[SpecChangeCode]Compatibility 6 ForRequest map[SpecChangeCode]Compatibility 7 ForChange map[SpecChangeCode]Compatibility 8 } 9 10 var compatibility CompatibilityPolicy 11 12 func init() { 13 compatibility = CompatibilityPolicy{ 14 ForResponse: map[SpecChangeCode]Compatibility{ 15 AddedRequiredProperty: Breaking, 16 DeletedProperty: Breaking, 17 AddedProperty: NonBreaking, 18 DeletedResponse: Breaking, 19 AddedResponse: NonBreaking, 20 WidenedType: NonBreaking, 21 NarrowedType: NonBreaking, 22 ChangedType: Breaking, 23 ChangedToCompatibleType: NonBreaking, 24 AddedEnumValue: Breaking, 25 DeletedEnumValue: NonBreaking, 26 AddedResponseHeader: NonBreaking, 27 ChangedResponseHeader: Breaking, 28 DeletedResponseHeader: Breaking, 29 ChangedDescripton: NonBreaking, 30 AddedDescripton: NonBreaking, 31 DeletedDescripton: NonBreaking, 32 ChangedTag: NonBreaking, 33 AddedTag: NonBreaking, 34 DeletedTag: NonBreaking, 35 DeletedConstraint: Breaking, 36 AddedConstraint: NonBreaking, 37 }, 38 ForRequest: map[SpecChangeCode]Compatibility{ 39 AddedRequiredProperty: Breaking, 40 DeletedProperty: Breaking, 41 AddedProperty: Breaking, 42 AddedOptionalParam: NonBreaking, 43 AddedRequiredParam: Breaking, 44 DeletedOptionalParam: NonBreaking, 45 DeletedRequiredParam: NonBreaking, 46 WidenedType: NonBreaking, 47 NarrowedType: Breaking, 48 ChangedType: Breaking, 49 ChangedToCompatibleType: NonBreaking, 50 ChangedOptionalToRequired: Breaking, 51 ChangedRequiredToOptional: NonBreaking, 52 AddedEnumValue: NonBreaking, 53 DeletedEnumValue: Breaking, 54 ChangedDescripton: NonBreaking, 55 AddedDescripton: NonBreaking, 56 DeletedDescripton: NonBreaking, 57 ChangedTag: NonBreaking, 58 AddedTag: NonBreaking, 59 DeletedTag: NonBreaking, 60 DeletedConstraint: NonBreaking, 61 AddedConstraint: Breaking, 62 }, 63 ForChange: map[SpecChangeCode]Compatibility{ 64 NoChangeDetected: NonBreaking, 65 AddedEndpoint: NonBreaking, 66 DeletedEndpoint: Breaking, 67 DeletedDeprecatedEndpoint: NonBreaking, 68 AddedConsumesFormat: NonBreaking, 69 DeletedConsumesFormat: Breaking, 70 AddedProducesFormat: NonBreaking, 71 DeletedProducesFormat: Breaking, 72 AddedSchemes: NonBreaking, 73 DeletedSchemes: Breaking, 74 ChangedHostURL: Breaking, 75 ChangedBasePath: Breaking, 76 ChangedDescripton: NonBreaking, 77 AddedDescripton: NonBreaking, 78 DeletedDescripton: NonBreaking, 79 ChangedTag: NonBreaking, 80 AddedTag: NonBreaking, 81 DeletedTag: NonBreaking, 82 RefTargetChanged: Breaking, 83 RefTargetRenamed: NonBreaking, 84 AddedDefinition: NonBreaking, 85 DeletedDefinition: NonBreaking, 86 }, 87 } 88 } 89 90 func getCompatibilityForChange(diffCode SpecChangeCode, where DataDirection) Compatibility { 91 if compat, commonChange := compatibility.ForChange[diffCode]; commonChange { 92 return compat 93 } 94 if where == Request { 95 return compatibility.ForRequest[diffCode] 96 } 97 return compatibility.ForResponse[diffCode] 98 }