54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package diff
|
|
|
|
import "cosmossdk.io/schema"
|
|
|
|
// EnumTypeDiff represents the difference between two enum types.
|
|
type EnumTypeDiff struct {
|
|
// Name is the name of the enum type.
|
|
Name string
|
|
|
|
// AddedValues is a list of values that were added.
|
|
AddedValues []string
|
|
|
|
// RemovedValues is a list of values that were removed.
|
|
RemovedValues []string
|
|
}
|
|
|
|
func compareEnumType(oldEnum, newEnum schema.EnumType) EnumTypeDiff {
|
|
diff := EnumTypeDiff{
|
|
Name: oldEnum.TypeName(),
|
|
}
|
|
|
|
newValues := make(map[string]struct{})
|
|
for _, v := range newEnum.Values {
|
|
newValues[v] = struct{}{}
|
|
}
|
|
|
|
oldValues := make(map[string]struct{})
|
|
for _, v := range oldEnum.Values {
|
|
oldValues[v] = struct{}{}
|
|
if _, ok := newValues[v]; !ok {
|
|
diff.RemovedValues = append(diff.RemovedValues, v)
|
|
}
|
|
}
|
|
|
|
for _, v := range newEnum.Values {
|
|
if _, ok := oldValues[v]; !ok {
|
|
diff.AddedValues = append(diff.AddedValues, v)
|
|
}
|
|
}
|
|
|
|
return diff
|
|
}
|
|
|
|
// Empty returns true if the enum type diff has no changes.
|
|
func (e EnumTypeDiff) Empty() bool {
|
|
return len(e.AddedValues) == 0 && len(e.RemovedValues) == 0
|
|
}
|
|
|
|
// HasCompatibleChanges returns true if the diff contains only compatible changes.
|
|
// The only supported compatible change is adding values.
|
|
func (e EnumTypeDiff) HasCompatibleChanges() bool {
|
|
return len(e.RemovedValues) == 0
|
|
}
|