grpccmd

package module
v0.0.0-...-6ee6e52 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 5, 2017 License: MIT Imports: 11 Imported by: 0

README

grpccmd

grpccmd is a CLI generator for any gRPC service in Go. While the CLI is written in Go the CLI should be able to talk to any gRPC server in any language. The grpccmd is implemented as a plugin to protoc.

Install

To install the protoc plugin binary run:

go get -u github.com/nathanielc/grpccmd/cmd/protoc-gen-grpccmd

Example

To generate code for a CLI run this command.

protoc path/to/file.proto --grpccmd_out=.

It is recommended to place the above command as a Go generate comment in a main.go file.

Create a main.go file that references the generated code.

package main

import (
	"fmt"
	"os"

	"github.com/nathanielc/grpccmd"
	// Import grpccmd generated code
	_ "github.com/nathanielc/grpccmd/example/internal/pb"
)

//go:generate protoc -I ../internal/pb/ ../internal/pb/example.proto --grpccmd_out=../internal/pb/

func main() {
	grpccmd.SetCmdInfo(
		"example-rpc",
		"Make calls to the Example service",
		"example-rpc command has been autogenerated via the protoc plugin github.com/nathanielc/grpccmd",
	)
	if err := grpccmd.Execute(); err != nil {
		fmt.Println(err)
		os.Exit(-1)
	}
}

The above code is part of a working example in the ./example directory from this project.

To try it out run:

# Start the server
go run ./example/server/main.go
# Install the CLI
go install ./example/example-rpc
# Make a few calls to the server
example-rpc --addr localhost:50051 example getNumber
example-rpc --addr localhost:50051 example echo --input '{"str":"this is a string", "int": 42, "dbl": 6.9, "kv" : {"key":"value"}}'

Server Code

The grpccmd wraps the normal grpc protoc plugin so the generated code can be used by the server as well. Whether you do so is up to you as it is easy enough to generate the code twice, once for the server without grpccmd and once for the client with grpccmd. Generating the code twice allows the client and server to be decoupled since they do not have to import the same package.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Execute

func Execute() error

func RegisterServiceCmd

func RegisterServiceCmd(cmd *cobra.Command)

func RunE

func RunE(
	method,
	inT string,
	newClient func(*grpc.ClientConn) interface{},
) func(*cobra.Command, []string) error

func SetCmdInfo

func SetCmdInfo(name, short, long string)

Types

This section is empty.

Directories

Path Synopsis
cmd
example
internal/pb
Package pb is a generated protocol buffer package.
Package pb is a generated protocol buffer package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL