#!/bin/bash # The script uses the following env var: # LND_DIR - the place where it can find LND of the pinned version, to use its # lnrpc/ subdir for .proto imports. set -e # generate compiles the *.pb.go stubs from the *.proto files. function generate() { proto_paths=(-I/usr/local/include -I. -I.. -I"$LND_DIR") # Generate the gRPC bindings for all proto files. for file in ./*.proto do protoc "${proto_paths[@]}" \ --go_out . --go_opt paths=source_relative \ --go-grpc_out . --go-grpc_opt paths=source_relative \ "${file}" done # Generate the REST reverse proxy for the client only. protoc "${proto_paths[@]}" \ --grpc-gateway_out . \ --grpc-gateway_opt logtostderr=true \ --grpc-gateway_opt paths=source_relative \ --grpc-gateway_opt grpc_api_configuration=client.yaml \ client.proto # Finally, generate the swagger file which describes the REST API in detail. protoc "${proto_paths[@]}" \ --openapiv2_out . \ --openapiv2_opt logtostderr=true \ --openapiv2_opt grpc_api_configuration=client.yaml \ --openapiv2_opt json_names_for_fields=false \ client.proto # Generate the JSON/WASM client stubs. falafel=$(which falafel) pkg="looprpc" opts="package_name=$pkg,js_stubs=1" protoc "${proto_paths[@]}" \ --plugin=protoc-gen-custom=$falafel\ --custom_out=. \ --custom_opt="$opts" \ client.proto } # format formats the *.proto files with the clang-format utility. function format() { find . -name "*.proto" -print0 | xargs -0 clang-format --style=file -i } # Compile and format the looprpc package. # Check if we're already in the looprpc directory. if [[ $(basename "$PWD") == "looprpc" ]]; then format generate else pushd looprpc format generate popd fi