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