46 lines
787 B
Go
46 lines
787 B
Go
|
package compat
|
||
|
|
||
|
type v struct {
|
||
|
major uint16
|
||
|
minor uint8
|
||
|
patch uint8
|
||
|
}
|
||
|
|
||
|
// Returns <0 if "a < b"
|
||
|
// Returns 0 if "a == b"
|
||
|
// Returns >0 if "a > b"
|
||
|
func compareVersions(a v, b []int) int {
|
||
|
diff := int(a.major)
|
||
|
if len(b) > 0 {
|
||
|
diff -= b[0]
|
||
|
}
|
||
|
if diff == 0 {
|
||
|
diff = int(a.minor)
|
||
|
if len(b) > 1 {
|
||
|
diff -= b[1]
|
||
|
}
|
||
|
}
|
||
|
if diff == 0 {
|
||
|
diff = int(a.patch)
|
||
|
if len(b) > 2 {
|
||
|
diff -= b[2]
|
||
|
}
|
||
|
}
|
||
|
return diff
|
||
|
}
|
||
|
|
||
|
// The start is inclusive and the end is exclusive
|
||
|
type versionRange struct {
|
||
|
start v
|
||
|
end v // Use 0.0.0 for "no end"
|
||
|
}
|
||
|
|
||
|
func isVersionSupported(ranges []versionRange, version []int) bool {
|
||
|
for _, r := range ranges {
|
||
|
if compareVersions(r.start, version) <= 0 && (r.end == (v{}) || compareVersions(r.end, version) > 0) {
|
||
|
return true
|
||
|
}
|
||
|
}
|
||
|
return false
|
||
|
}
|