github.com/ffalor/go-swagger@v0.0.0-20231011000038-9f25265ac351/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 DeletedExtension: Warning, 38 AddedExtension: Warning, 39 }, 40 ForRequest: map[SpecChangeCode]Compatibility{ 41 AddedRequiredProperty: Breaking, 42 DeletedProperty: Breaking, 43 AddedProperty: Breaking, 44 AddedOptionalParam: NonBreaking, 45 AddedRequiredParam: Breaking, 46 DeletedOptionalParam: NonBreaking, 47 DeletedRequiredParam: NonBreaking, 48 WidenedType: NonBreaking, 49 NarrowedType: Breaking, 50 ChangedType: Breaking, 51 ChangedToCompatibleType: NonBreaking, 52 ChangedOptionalToRequired: Breaking, 53 ChangedRequiredToOptional: NonBreaking, 54 AddedEnumValue: NonBreaking, 55 DeletedEnumValue: Breaking, 56 ChangedDescripton: NonBreaking, 57 AddedDescripton: NonBreaking, 58 DeletedDescripton: NonBreaking, 59 ChangedTag: NonBreaking, 60 AddedTag: NonBreaking, 61 DeletedTag: NonBreaking, 62 DeletedConstraint: NonBreaking, 63 AddedConstraint: Breaking, 64 ChangedDefault: Warning, 65 AddedDefault: Warning, 66 DeletedDefault: Warning, 67 ChangedExample: NonBreaking, 68 AddedExample: NonBreaking, 69 DeletedExample: NonBreaking, 70 ChangedCollectionFormat: Breaking, 71 DeletedExtension: Warning, 72 AddedExtension: Warning, 73 }, 74 ForChange: map[SpecChangeCode]Compatibility{ 75 NoChangeDetected: NonBreaking, 76 AddedEndpoint: NonBreaking, 77 DeletedEndpoint: Breaking, 78 DeletedDeprecatedEndpoint: NonBreaking, 79 AddedConsumesFormat: NonBreaking, 80 DeletedConsumesFormat: Breaking, 81 AddedProducesFormat: NonBreaking, 82 DeletedProducesFormat: Breaking, 83 AddedSchemes: NonBreaking, 84 DeletedSchemes: Breaking, 85 ChangedHostURL: Breaking, 86 ChangedBasePath: Breaking, 87 ChangedDescripton: NonBreaking, 88 AddedDescripton: NonBreaking, 89 DeletedDescripton: NonBreaking, 90 ChangedTag: NonBreaking, 91 AddedTag: NonBreaking, 92 DeletedTag: NonBreaking, 93 RefTargetChanged: Breaking, 94 RefTargetRenamed: NonBreaking, 95 AddedDefinition: NonBreaking, 96 DeletedDefinition: NonBreaking, 97 DeletedExtension: Warning, 98 AddedExtension: Warning, 99 }, 100 } 101 } 102 103 func getCompatibilityForChange(diffCode SpecChangeCode, where DataDirection) Compatibility { 104 if compat, commonChange := compatibility.ForChange[diffCode]; commonChange { 105 return compat 106 } 107 if where == Request { 108 return compatibility.ForRequest[diffCode] 109 } 110 return compatibility.ForResponse[diffCode] 111 }