78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"compress/gzip"
|
|
"encoding/json"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/filecoin-project/lotus/api/apistruct"
|
|
docgen_openrpc "github.com/filecoin-project/lotus/api/docgen-openrpc"
|
|
)
|
|
|
|
/*
|
|
main defines a small program that writes an OpenRPC document describing
|
|
a Lotus API to stdout.
|
|
|
|
If the first argument is "miner", the document will describe the StorageMiner API.
|
|
If not (no, or any other args), the document will describe the Full API.
|
|
|
|
Use:
|
|
|
|
go run ./api/openrpc/cmd ["api/api_full.go"|"api/api_storage.go"|"api/api_worker.go"] ["FullNode"|"StorageMiner"|"Worker"]
|
|
|
|
With gzip compression: a '-gzip' flag is made available as an optional third argument. Note that position matters.
|
|
|
|
go run ./api/openrpc/cmd ["api/api_full.go"|"api/api_storage.go"|"api/api_worker.go"] ["FullNode"|"StorageMiner"|"Worker"] -gzip
|
|
|
|
*/
|
|
|
|
func main() {
|
|
doc := docgen_openrpc.NewLotusOpenRPCDocument()
|
|
|
|
switch os.Args[2] {
|
|
case "FullNode":
|
|
doc.RegisterReceiverName("Filecoin", &apistruct.FullNodeStruct{})
|
|
case "StorageMiner":
|
|
doc.RegisterReceiverName("Filecoin", &apistruct.StorageMinerStruct{})
|
|
case "Worker":
|
|
doc.RegisterReceiverName("Filecoin", &apistruct.WorkerStruct{})
|
|
}
|
|
|
|
out, err := doc.Discover()
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
|
|
var jsonOut []byte
|
|
var writer io.WriteCloser
|
|
|
|
// Use os.Args to handle a somewhat hacky flag for the gzip option.
|
|
// Could use flags package to handle this more cleanly, but that requires changes elsewhere
|
|
// the scope of which just isn't warranted by this one use case which will usually be run
|
|
// programmatically anyways.
|
|
if len(os.Args) > 5 && os.Args[5] == "-gzip" {
|
|
jsonOut, err = json.Marshal(out)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
writer = gzip.NewWriter(os.Stdout)
|
|
} else {
|
|
jsonOut, err = json.MarshalIndent(out, "", " ")
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
writer = os.Stdout
|
|
}
|
|
|
|
_, err = writer.Write(jsonOut)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
err = writer.Close()
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
}
|