-
Notifications
You must be signed in to change notification settings - Fork 0
/
version.go
72 lines (61 loc) · 1.36 KB
/
version.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package common_type
import "fmt"
type IVersion interface {
Major() int
Minor() int
Revision() int
VersionString() string
Relationship(IVersion) VersionTime
}
type Version struct {
major int
minor int
revision int
}
func NewVersion(major, minor, revision int) IVersion {
return &Version{
major: major,
minor: minor,
revision: revision,
}
}
func (v *Version) Major() int {
return v.major
}
func (v *Version) Minor() int {
return v.minor
}
func (v *Version) Revision() int {
return v.revision
}
func (v *Version) VersionString() string {
return fmt.Sprintf("%d.%d.%d", v.major, v.minor, v.revision)
}
func (v *Version) Relationship(t IVersion) VersionTime {
if v.major > t.Major() || (v.major == t.Major() && v.minor > t.Minor()) ||
(v.major == t.Major() && v.minor == t.Minor() && v.revision > t.Revision()) {
return Later
} else if v.major == t.Major() && v.minor == t.Minor() && v.revision == t.Revision() {
return Same
} else {
return Earlier
}
}
func (v *Version) GetVersion() IVersion {
var ret IVersion
ret = v
return ret
}
func ParseVersionString(vs string) (*Version, error) {
var major, minor, revision int
_, err := fmt.Sscanf(vs, "%d.%d.%d", &major, &minor, &revision)
if err != nil {
return &Version{}, err
}
version := &Version{
major: major,
minor: minor,
revision: revision,
}
return version, nil
}