decred.org/dcrwallet/v3@v3.1.0/internal/rpchelp/genrpcserverhelp.go (about) 1 // Copyright (c) 2015 The btcsuite developers 2 // Copyright (c) 2015 The Decred developers 3 // Use of this source code is governed by an ISC 4 // license that can be found in the LICENSE file. 5 6 //go:build generate 7 8 package main 9 10 import ( 11 "fmt" 12 "log" 13 "os" 14 "strings" 15 16 "decred.org/dcrwallet/v3/internal/rpchelp" 17 "decred.org/dcrwallet/v3/rpc/jsonrpc/types" 18 "github.com/decred/dcrd/dcrjson/v4" 19 ) 20 21 func init() { 22 log.SetFlags(log.Lshortfile | log.LstdFlags) 23 } 24 25 var outputFile = func() *os.File { 26 fi, err := os.Create("rpcserverhelp.go") 27 if err != nil { 28 log.Fatal(err) 29 } 30 return fi 31 }() 32 33 func writefln(format string, args ...interface{}) { 34 _, err := fmt.Fprintf(outputFile, format, args...) 35 if err != nil { 36 log.Fatal(err) 37 } 38 _, err = outputFile.Write([]byte{'\n'}) 39 if err != nil { 40 log.Fatal(err) 41 } 42 } 43 44 func writeLocaleHelp(locale, goLocale string, descs map[string]string) { 45 funcName := "helpDescs" + goLocale 46 writefln("func %s() map[string]string {", funcName) 47 writefln("return map[string]string{") 48 for i := range rpchelp.Methods { 49 m := &rpchelp.Methods[i] 50 helpText, err := dcrjson.GenerateHelp(types.Method(m.Method), descs, m.ResultTypes...) 51 if err != nil { 52 log.Fatal(err) 53 } 54 writefln("%q: %q,", m.Method, helpText) 55 } 56 writefln("}") 57 writefln("}") 58 } 59 60 func writeLocales() { 61 writefln("var localeHelpDescs = map[string]func() map[string]string{") 62 for _, h := range rpchelp.HelpDescs { 63 writefln("%q: helpDescs%s,", h.Locale, h.GoLocale) 64 } 65 writefln("}") 66 } 67 68 func writeUsage() { 69 usageStrs := make([]string, len(rpchelp.Methods)) 70 var err error 71 for i := range rpchelp.Methods { 72 usageStrs[i], err = dcrjson.MethodUsageText(types.Method(rpchelp.Methods[i].Method)) 73 if err != nil { 74 log.Fatal(err) 75 } 76 } 77 usages := strings.Join(usageStrs, "\n") 78 writefln("var requestUsages = %q", usages) 79 } 80 81 func main() { 82 defer outputFile.Close() 83 84 packageName := "main" 85 if len(os.Args) > 1 { 86 packageName = os.Args[1] 87 } 88 89 writefln("// AUTOGENERATED by internal/rpchelp/genrpcserverhelp.go; do not edit.") 90 writefln("") 91 writefln("package %s", packageName) 92 writefln("") 93 for _, h := range rpchelp.HelpDescs { 94 writeLocaleHelp(h.Locale, h.GoLocale, h.Descs) 95 writefln("") 96 } 97 writeLocales() 98 writefln("") 99 writeUsage() 100 }