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  }