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  }