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  }