cosmos-sdk/schema/diff/enum_diff.go
2024-08-23 15:02:54 +00:00

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
}