-
Notifications
You must be signed in to change notification settings - Fork 962
/
fork.go
60 lines (51 loc) · 1.33 KB
/
fork.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
package version
import "github.com/pkg/errors"
const (
Phase0 = iota
Altair
Bellatrix
Capella
Deneb
)
var versionToString = map[int]string{
Phase0: "phase0",
Altair: "altair",
Bellatrix: "bellatrix",
Capella: "capella",
Deneb: "deneb",
}
// stringToVersion and allVersions are populated in init()
var stringToVersion = map[string]int{}
var allVersions []int
// ErrUnrecognizedVersionName means a string does not match the list of canonical version names.
var ErrUnrecognizedVersionName = errors.New("version name doesn't map to a known value in the enum")
// FromString translates a canonical version name to the version number.
func FromString(name string) (int, error) {
v, ok := stringToVersion[name]
if !ok {
return 0, errors.Wrap(ErrUnrecognizedVersionName, name)
}
return v, nil
}
// String returns the canonical string form of a version.
// Unrecognized versions won't generate an error and are represented by the string "unknown version".
func String(version int) string {
name, ok := versionToString[version]
if !ok {
return "unknown version"
}
return name
}
// All returns a list of all known fork versions.
func All() []int {
return allVersions
}
func init() {
allVersions = make([]int, len(versionToString))
i := 0
for v, s := range versionToString {
allVersions[i] = v
stringToVersion[s] = v
i++
}
}