terraform/vendor/github.com/apparentlymart/go-versions/versions/set_bound.go

99 lines
1.9 KiB
Go

package versions
import (
"fmt"
)
type setBound struct {
v Version
op setBoundOp
}
func (s setBound) Has(v Version) bool {
switch s.op {
case setBoundGT:
return v.GreaterThan(s.v)
case setBoundGTE:
return v.GreaterThan(s.v) || v.Same(s.v)
case setBoundLT:
return v.LessThan(s.v)
case setBoundLTE:
return v.LessThan(s.v) || v.Same(s.v)
default:
// Should never happen because the above is exhaustive
panic("invalid setBound operator")
}
}
func (s setBound) AllRequested() Set {
// Inequalities request nothing.
return None
}
func (s setBound) GoString() string {
switch s.op {
case setBoundGT:
return fmt.Sprintf("versions.NewerThan(%#v)", s.v)
case setBoundGTE:
return fmt.Sprintf("versions.AtLeast(%#v)", s.v)
case setBoundLT:
return fmt.Sprintf("versions.OlderThan(%#v)", s.v)
case setBoundLTE:
return fmt.Sprintf("versions.AtMost(%#v)", s.v)
default:
// Should never happen because the above is exhaustive
return fmt.Sprintf("versions.Set{versions.setBound{v:%#v,op:%#v}}", s.v, s.op)
}
}
// NewerThan returns a set containing all versions greater than the given
// version, non-inclusive.
func NewerThan(v Version) Set {
return Set{
setI: setBound{
v: v,
op: setBoundGT,
},
}
}
// OlderThan returns a set containing all versions lower than the given
// version, non-inclusive.
func OlderThan(v Version) Set {
return Set{
setI: setBound{
v: v,
op: setBoundLT,
},
}
}
// AtLeast returns a set containing all versions greater than or equal to
// the given version.
func AtLeast(v Version) Set {
return Set{
setI: setBound{
v: v,
op: setBoundGTE,
},
}
}
// AtMost returns a set containing all versions less than or equal to the given
// version, non-inclusive.
func AtMost(v Version) Set {
return Set{
setI: setBound{
v: v,
op: setBoundLTE,
},
}
}
type setBoundOp rune
const setBoundGT = '>'
const setBoundGTE = '≥'
const setBoundLT = '<'
const setBoundLTE = '≤'