github.com/bilus/oya@v0.0.3-0.20190301162104-da4acbd394c6/pkg/semver/version.go (about) 1 package semver 2 3 import ( 4 "fmt" 5 "regexp" 6 7 "github.com/blang/semver" 8 "github.com/pkg/errors" 9 ) 10 11 type Version semver.Version 12 13 var versionRx = regexp.MustCompile("^v([\\d\\.]+)$") 14 15 // Parse parses version string in vX.Y.Z format and returns a validated Version or error. 16 func Parse(v string) (Version, error) { 17 if matches := versionRx.FindStringSubmatch(v); len(matches) == 2 { 18 ver, err := semver.Parse(matches[1]) 19 return Version(ver), err 20 } else { 21 return Version{}, errors.Errorf("Unrecognized version syntax: %v, expected: vX.Y.Z", v) 22 } 23 } 24 25 // MustParse is like Parse but panics if the version cannot be parsed. 26 func MustParse(v string) Version { 27 ver, err := Parse(v) 28 if err != nil { 29 panic(err) 30 } 31 return ver 32 } 33 34 // String returns display representation of the version in the vX.Y.Z format. 35 func (ver Version) String() string { 36 return fmt.Sprintf("v%v", semver.Version(ver)) 37 } 38 39 func (ver Version) LessThan(other Version) bool { 40 return semver.Version(ver).LT(semver.Version(other)) 41 }