git.gammaspectra.live/P2Pool/p2pool-observer@v0.0.0-20240403172525-d7dfbf7231c8/p2pool/types/version.go (about) 1 package types 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 ) 8 9 type SemanticVersion uint32 10 11 func (v SemanticVersion) Major() uint16 { 12 return uint16(v >> 16) 13 } 14 func (v SemanticVersion) Minor() uint16 { 15 return uint16(v & 0xFFFF) 16 } 17 18 func (v SemanticVersion) String() string { 19 if v == SemanticVersionNone { 20 return "unknown" 21 } 22 return fmt.Sprintf("v%d.%d", v.Major(), v.Minor()) 23 } 24 25 const SemanticVersionNone = 0 26 27 func SemanticVersionFromString(version string) SemanticVersion { 28 version = strings.TrimPrefix(strings.TrimSpace(version), "v") 29 parts := strings.Split(version, ".") 30 if len(parts) != 2 { 31 return SemanticVersionNone 32 } 33 34 major, err := strconv.ParseUint(parts[0], 10, 32) 35 if err != nil { 36 return SemanticVersionNone 37 } 38 39 minor, err := strconv.ParseUint(parts[1], 10, 32) 40 if err != nil { 41 return SemanticVersionNone 42 } 43 return SemanticVersion(uint32(major<<16) | uint32(minor)) 44 }