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  }