main.go raw
1 package main
2
3 import (
4 "fmt"
5 "github.com/p9c/p9/pkg/rpchelp"
6 "os"
7 "strings"
8
9 "github.com/p9c/p9/pkg/btcjson"
10 )
11
12 var outputFile = func() *os.File {
13 fi, e := os.Create("../rpcserverhelp.go")
14 if e != nil {
15 F.Ln(e)
16 }
17 return fi
18 }()
19
20 func writefln(format string, args ...interface{}) {
21 _, e := fmt.Fprintf(outputFile, format, args...)
22 if e != nil {
23 F.Ln(e)
24 }
25 _, e = outputFile.Write([]byte{'\n'})
26 if e != nil {
27 F.Ln(e)
28 }
29 }
30 func writeLocaleHelp(locale, goLocale string, descs map[string]string) {
31 funcName := "helpDescs" + goLocale
32 writefln("func %s() map[string]string {", funcName)
33 writefln("return map[string]string{")
34 for i := range rpchelp.Methods {
35 m := &rpchelp.Methods[i]
36 helpText, e := btcjson.GenerateHelp(m.Method, descs, m.ResultTypes...)
37 if e != nil {
38 F.Ln(e)
39 }
40 writefln("%q: %q,", m.Method, helpText)
41 }
42 writefln("}")
43 writefln("}")
44 }
45 func writeLocales() {
46 writefln("var localeHelpDescs = map[string]func() map[string]string{")
47 for _, h := range rpchelp.HelpDescs {
48 writefln("%q: helpDescs%s,", h.Locale, h.GoLocale)
49 }
50 writefln("}")
51 }
52 func writeUsage() {
53 usageStrs := make([]string, len(rpchelp.Methods))
54 var e error
55 for i := range rpchelp.Methods {
56 usageStrs[i], e = btcjson.MethodUsageText(rpchelp.Methods[i].Method)
57 if e != nil {
58 F.Ln(e)
59 }
60 }
61 usages := strings.Join(usageStrs, "\n")
62 writefln("var requestUsages = %q", usages)
63 }
64 func main() {
65 defer func() {
66 if e := outputFile.Close(); E.Chk(e) {
67 }
68 }()
69 packageName := "main"
70 if len(os.Args) > 1 {
71 packageName = os.Args[1]
72 }
73 writefln("// AUTOGENERATED by internal/rpchelp/genrpcserverhelp.go; do not edit.")
74 writefln("")
75 writefln("package %s", packageName)
76 writefln("")
77 for _, h := range rpchelp.HelpDescs {
78 writeLocaleHelp(h.Locale, h.GoLocale, h.Descs)
79 writefln("")
80 }
81 writeLocales()
82 writefln("")
83 writeUsage()
84 }
85