-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathregistryextractor.go
More file actions
84 lines (68 loc) · 2.22 KB
/
registryextractor.go
File metadata and controls
84 lines (68 loc) · 2.22 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
package main
import (
"encoding/json"
"fmt"
"os"
"strings"
)
type Entry struct {
ProtocolID int32 `json:"protocol_id"`
}
type registry struct {
Default string `json:"default"`
Entries map[string]Entry `json:"entries"`
ProtocolID int32 `json:"protocol_id"`
}
func main() {
fmt.Print("Please input a path for the registry.json: ")
var path string
fmt.Scan(&path)
f, e := os.ReadFile(path)
if e != nil {
panic(e)
}
var d map[string]registry
if e := json.Unmarshal(f, &d); e != nil {
panic(e)
}
fmt.Printf("Found %d registries\n", len(d))
os.Mkdir("registry", 0755)
os.WriteFile("registry/registry.go", []byte(rf), 0755)
for k, r := range d {
n := name(k)
fmt.Printf("registry %s ... ", n)
os.WriteFile(fmt.Sprintf("registry/%s.go", n), []byte(gen(n, r)), 0755)
fmt.Println("done")
}
}
func name(n string) string {
n = strings.ReplaceAll(n, "/", "_")
sp := strings.Split(n, ":")
return strings.Join(sp[1:], ":")
}
func gen(n string, r registry) string {
var str strings.Builder
name := ttl(n)
str.WriteString("package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\n")
str.WriteString(fmt.Sprintf("var %s = Registry{\n\tDefault: \"%s\",\n\tEntries: map[string]int32{\n", name, r.Default))
for entryName, entry := range r.Entries {
str.WriteString(fmt.Sprintf("\t\t\"%s\": %d,\n", entryName, entry.ProtocolID))
}
str.WriteString("\t},\n}")
return str.String()
}
func ttl(n string) string {
sp := strings.Split(n, "_")
var str strings.Builder
for _, s := range sp {
if len(s) == 0 {
continue
}
str.WriteString(strings.ToUpper(string(s[0])))
if len(s) > 1 {
str.WriteString(strings.ToLower(s[1:]))
}
}
return str.String()
}
var rf = "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\n\ntype Registry struct {\n\tDefault string\n\tEntries map[string]int32\n}\n\nfunc (r Registry) Get(n string) (int32, bool) {\n\ti, ok := r.Entries[n]\n\tif !ok {\n\t\tif r.Default != \"\" {\n\t\t\ti, ok = r.Entries[r.Default]\n\t\t}\n\t}\n\treturn i, ok\n}\n\nfunc (r Registry) Find(id int32) (string, bool) {\n\tfor n, e := range r.Entries {\n\t\tif e == id {\n\t\t\treturn n, true\n\t\t}\n\t}\n\treturn \"\", false\n}"