blob: 9a8d353a854023d1e76f802a80d062a3a586ed46 [file] [log] [blame]
package semver
import "errors"
var noneErr = errors.New("The 'None' constraint admits no versions.")
// Any is a constraint that is satisfied by any valid semantic version.
type any struct{}
// Any creates a constraint that will match any version.
func Any() Constraint {
return any{}
}
func (any) String() string {
return "*"
}
// Matches checks that a version satisfies the constraint. As all versions
// satisfy Any, this always returns nil.
func (any) Matches(v *Version) error {
return nil
}
// Intersect computes the intersection between two constraints.
//
// As Any is the set of all possible versions, any intersection with that
// infinite set will necessarily be the entirety of the second set. Thus, this
// simply returns the passed constraint.
func (any) Intersect(c Constraint) Constraint {
return c
}
// MatchesAny indicates whether there exists any version that can satisfy both
// this constraint, and the passed constraint. As all versions
// satisfy Any, this is always true - unless none is passed.
func (any) MatchesAny(c Constraint) bool {
if _, ok := c.(none); ok {
return false
}
return true
}
func (any) Union(c Constraint) Constraint {
return Any()
}
func (any) _private() {}
// None is an unsatisfiable constraint - it represents the empty set.
type none struct{}
// None creates a constraint that matches no versions (the empty set).
func None() Constraint {
return none{}
}
func (none) String() string {
return ""
}
// Matches checks that a version satisfies the constraint. As no version can
// satisfy None, this always fails (returns an error).
func (none) Matches(v *Version) error {
return noneErr
}
// Intersect computes the intersection between two constraints.
//
// None is the empty set of versions, and any intersection with the empty set is
// necessarily the empty set. Thus, this always returns None.
func (none) Intersect(Constraint) Constraint {
return None()
}
func (none) Union(c Constraint) Constraint {
return c
}
// MatchesAny indicates whether there exists any version that can satisfy the
// constraint. As no versions satisfy None, this is always false.
func (none) MatchesAny(c Constraint) bool {
return false
}
func (none) _private() {}
// IsNone indicates if a constraint will match no versions - that is, the
// constraint represents the empty set.
func IsNone(c Constraint) bool {
_, ok := c.(none)
return ok
}
// IsAny indicates if a constraint will match any and all versions.
func IsAny(c Constraint) bool {
_, ok := c.(any)
return ok
}