pkg/mathutils/utils.go
package mathutils
// NormalizeBounds is a public function that normalizes the given bounds and exclusivity flags.
func NormalizeBounds(
minimum, maximum *float64, exclusiveMinimum, exclusiveMaximum *any,
) (*float64, *float64, bool, bool) {
var minBound, maxBound *float64
var minExclusive, maxExclusive bool
if exclusiveMinimum != nil {
switch v := (*exclusiveMinimum).(type) {
case bool:
minExclusive = v
minBound = minimum
case float64:
if minimum == nil || v > *minimum {
minBound = &v
minExclusive = true
} else {
minBound = minimum
minExclusive = false
}
}
} else {
minBound = minimum
minExclusive = false
}
if minimum != nil && minBound == nil {
minBound = minimum
minExclusive = false
}
if exclusiveMaximum != nil {
switch v := (*exclusiveMaximum).(type) {
case bool:
maxExclusive = v
maxBound = maximum
case float64:
if maximum == nil || v < *maximum {
maxBound = &v
maxExclusive = true
} else {
maxBound = maximum
maxExclusive = false
}
}
} else {
maxBound = maximum
maxExclusive = false
}
if maximum != nil && maxBound == nil {
maxBound = maximum
maxExclusive = false
}
return minBound, maxBound, minExclusive, maxExclusive
}