initial commit
This commit is contained in:
.gitignoreMakefile
cmd
connector
example
glide.lockglide.yamlglide_test.goserver
doc.gohandlers.gohandlers_test.gooauth2.gooauth2_test.gorotation.gorotation_test.goserver.goserver_test.gotemplates.gotemplates_test.go
storage
doc.go
kubernetes
memory
storage.gostoragetest
vendor
github.com
ericchiang
oidc
LICENSEREADME.mddoc.go
examples
internal
jwks.gojwks_test.gononce.gooidc.gooidc_test.gooidcproxy
testdata
golang
protobuf
.gitignoreAUTHORSCONTRIBUTORSLICENSEMake.protobufMakefileREADME.md
jsonpb
proto
Makefileall_test.goany_test.goclone.goclone_test.godecode.goencode.goequal.goequal_test.goextensions.goextensions_test.golib.gomessage_set.gomessage_set_test.gopointer_reflect.gopointer_unsafe.goproperties.go
proto3_proto
proto3_test.gosize2_test.gosize_test.gotestdata
text.gotext_parser.gotext_parser_test.gotext_test.goprotoc-gen-go
ptypes
gorilla
context
mux
gtank
cryptopasta
inconshreveable
mitchellh
pquerna
cachecontrol
spf13
cobra
.gitignore.mailmap.travis.ymlLICENSE.txtREADME.mdbash_completions.gobash_completions.mdbash_completions_test.gocobra.go
cobra
cobra_test.gocommand.gocommand_notwin.gocommand_test.gocommand_win.godoc
pflag
.travis.ymlLICENSEREADME.mdbool.gobool_test.gocount.gocount_test.goduration.goexample_test.goexport_test.goflag.goflag_test.gofloat32.gofloat64.gogolangflag.gogolangflag_test.goint.goint32.goint64.goint8.goint_slice.goint_slice_test.goip.goip_test.goipmask.goipnet.goipnet_test.gostring.gostring_slice.gostring_slice_test.gouint.gouint16.gouint32.gouint64.gouint8.go
verify
golang.org
x
crypto
.gitattributes.gitignoreAUTHORSCONTRIBUTING.mdCONTRIBUTORSLICENSEPATENTSREADME
acme
internal
bcrypt
blowfish
bn256
cast5
codereview.cfgcurve25519
const_amd64.scswap_amd64.scurve25519.gocurve25519_test.godoc.gofreeze_amd64.sladderstep_amd64.smont25519_amd64.gomul_amd64.ssquare_amd64.s
ed25519
hkdf
md4
nacl
ocsp
openpgp
armor
canonical_text.gocanonical_text_test.goclearsign
elgamal
errors
keys.gokeys_test.gopacket
compressed.gocompressed_test.goconfig.goencrypted_key.goencrypted_key_test.goliteral.goocfb.goocfb_test.goone_pass_signature.goopaque.goopaque_test.gopacket.gopacket_test.goprivate_key.goprivate_key_test.gopublic_key.gopublic_key_test.gopublic_key_v3.gopublic_key_v3_test.goreader.gosignature.gosignature_test.gosignature_v3.gosignature_v3_test.gosymmetric_key_encrypted.gosymmetric_key_encrypted_test.gosymmetrically_encrypted.gosymmetrically_encrypted_test.gouserattribute.gouserattribute_test.gouserid.gouserid_test.go
read.goread_test.gos2k
write.gowrite_test.gootr
pbkdf2
pkcs12
bmp-string.gobmp-string_test.gocrypto.gocrypto_test.goerrors.go
internal
mac.gomac_test.gopbkdf.gopbkdf_test.gopkcs12.gopkcs12_test.gosafebags.gopoly1305
const_amd64.spoly1305.gopoly1305_amd64.spoly1305_arm.spoly1305_test.gosum_amd64.gosum_arm.gosum_ref.go
ripemd160
salsa20
scrypt
sha3
doc.gohashes.gokeccakf.goregister.gosha3.gosha3_test.goshake.go
testdata
xor.goxor_generic.goxor_unaligned.gossh
agent
client.goclient_test.goexample_test.goforward.gokeyring.gokeyring_test.goserver.goserver_test.gotestdata_test.go
benchmark_test.gobuffer.gobuffer_test.gocerts.gocerts_test.gochannel.gocipher.gocipher_test.goclient.goclient_auth.goclient_auth_test.goclient_test.gocommon.goconnection.godoc.goexample_test.gohandshake.gohandshake_test.gokex.gokex_test.gokeys.gokeys_test.gomac.gomempipe_test.gomessages.gomessages_test.gomux.gomux_test.goserver.gosession.gosession_test.gotcpip.gotcpip_test.goterminal
test
agent_unix_test.gocert_test.godoc.goforward_unix_test.gosession_test.gotcpip_test.gotest_unix_test.gotestdata_test.go
testdata
testdata_test.gotransport.gotransport_test.gotea
twofish
xtea
xts
net
.gitattributes.gitignoreAUTHORSCONTRIBUTING.mdCONTRIBUTORSLICENSEPATENTSREADME
bpf
codereview.cfgcontext
dict
html
atom
charset
const.godoc.godoctype.goentity.goentity_test.goescape.goescape_test.goexample_test.goforeign.gonode.gonode_test.goparse.goparse_test.gorender.gorender_test.gotestdata
go1.html
token.gotoken_test.gowebkit
READMEadoption01.datadoption02.datcomments01.datdoctype01.datentities01.datentities02.dathtml5test-com.datinbody01.datisindex.datpending-spec-changes-plain-text-unsafe.datpending-spec-changes.datplain-text-unsafe.datscriptdata01.dat
scripted
tables01.dattests1.dattests10.dattests11.dattests12.dattests14.dattests15.dattests16.dattests17.dattests18.dattests19.dattests2.dattests20.dattests21.dattests22.dattests23.dattests24.dattests25.dattests26.dattests3.dattests4.dattests5.dattests6.dattests7.dattests8.dattests9.dattests_innerHTML_1.dattricky01.datwebkit01.datwebkit02.dathttp2
.gitignoreDockerfileMakefileREADMEclient_conn_pool.goconfigure_transport.goerrors.goerrors_test.gofixed_buffer.gofixed_buffer_test.goflow.goflow_test.goframe.goframe_test.gogo16.gogo17.gogotrack.gogotrack_test.go
h2demo
h2i
headermap.gohpack
http2.gohttp2_test.gonot_go16.gonot_go17.gopipe.gopipe_test.gopriority_test.goserver.goserver_test.gotestdata
transport.gotransport_test.gowrite.gowritesched.goz_spec_test.goicmp
dstunreach.goecho.goendpoint.goexample_test.goextension.goextension_test.gohelper.gohelper_posix.gointerface.goipv4.goipv4_test.goipv6.golisten_posix.golisten_stub.gomessage.gomessage_test.gomessagebody.gompls.gomultipart.gomultipart_test.gopackettoobig.goparamprob.goping_test.gosys_freebsd.gotimeexceeded.go
idna
internal
iana
nettest
error_posix.goerror_stub.gointerface.gorlimit.gorlimit_stub.gorlimit_unix.gorlimit_windows.gostack.gostack_stub.gostack_unix.gostack_windows.go
timeseries
ipv4
bpf_test.gobpfopt_linux.gobpfopt_stub.gocontrol.gocontrol_bsd.gocontrol_pktinfo.gocontrol_stub.gocontrol_unix.gocontrol_windows.godefs_darwin.godefs_dragonfly.godefs_freebsd.godefs_linux.godefs_netbsd.godefs_openbsd.godefs_solaris.godgramopt_posix.godgramopt_stub.godoc.goendpoint.goexample_test.gogen.gogenericopt_posix.gogenericopt_stub.goheader.goheader_test.gohelper.gohelper_stub.gohelper_unix.gohelper_windows.goiana.goicmp.goicmp_linux.goicmp_stub.goicmp_test.gomocktransponder_test.gomulticast_test.gomulticastlistener_test.gomulticastsockopt_test.gopacket.gopayload.gopayload_cmsg.gopayload_nocmsg.goreadwrite_test.gosockopt.gosockopt_asmreq.gosockopt_asmreq_stub.gosockopt_asmreq_unix.gosockopt_asmreq_windows.gosockopt_asmreqn_stub.gosockopt_asmreqn_unix.gosockopt_ssmreq_stub.gosockopt_ssmreq_unix.gosockopt_stub.gosockopt_unix.gosockopt_windows.gosys_bsd.gosys_darwin.gosys_freebsd.gosys_linux.gosys_openbsd.gosys_stub.gosys_windows.gosyscall_linux_386.gosyscall_unix.gothunk_linux_386.sunicast_test.gounicastsockopt_test.gozsys_darwin.gozsys_dragonfly.gozsys_freebsd_386.gozsys_freebsd_amd64.gozsys_freebsd_arm.gozsys_linux_386.gozsys_linux_amd64.gozsys_linux_arm.gozsys_linux_arm64.gozsys_linux_mips64.gozsys_linux_mips64le.gozsys_linux_ppc64.gozsys_linux_ppc64le.gozsys_linux_s390x.gozsys_netbsd.gozsys_openbsd.gozsys_solaris.go
ipv6
bpf_test.gobpfopt_linux.gobpfopt_stub.gocontrol.gocontrol_rfc2292_unix.gocontrol_rfc3542_unix.gocontrol_stub.gocontrol_unix.gocontrol_windows.godefs_darwin.godefs_dragonfly.godefs_freebsd.godefs_linux.godefs_netbsd.godefs_openbsd.godefs_solaris.godgramopt_posix.godgramopt_stub.godoc.goendpoint.goexample_test.gogen.gogenericopt_posix.gogenericopt_stub.goheader.goheader_test.gohelper.gohelper_stub.gohelper_unix.gohelper_windows.goiana.goicmp.goicmp_bsd.goicmp_linux.goicmp_solaris.goicmp_stub.goicmp_test.goicmp_windows.gomocktransponder_test.gomulticast_test.gomulticastlistener_test.gomulticastsockopt_test.gopayload.gopayload_cmsg.gopayload_nocmsg.goreadwrite_test.gosockopt.gosockopt_asmreq_unix.gosockopt_asmreq_windows.gosockopt_ssmreq_stub.gosockopt_ssmreq_unix.gosockopt_stub.gosockopt_test.gosockopt_unix.gosockopt_windows.gosys_bsd.gosys_darwin.gosys_freebsd.gosys_linux.gosys_stub.gosys_windows.gosyscall_linux_386.gosyscall_unix.gothunk_linux_386.sunicast_test.gounicastsockopt_test.gozsys_darwin.gozsys_dragonfly.gozsys_freebsd_386.gozsys_freebsd_amd64.gozsys_freebsd_arm.gozsys_linux_386.gozsys_linux_amd64.gozsys_linux_arm.gozsys_linux_arm64.gozsys_linux_mips64.gozsys_linux_mips64le.gozsys_linux_ppc64.gozsys_linux_ppc64le.gozsys_linux_s390x.gozsys_netbsd.gozsys_openbsd.gozsys_solaris.go
lex
httplex
netutil
proxy
publicsuffix
route
address.goaddress_darwin_test.goaddress_test.gobinary.godefs_darwin.godefs_dragonfly.godefs_freebsd.godefs_netbsd.godefs_openbsd.gointerface.gointerface_announce.gointerface_classic.gointerface_freebsd.gointerface_multicast.gointerface_openbsd.gomessage.gomessage_darwin_test.gomessage_freebsd_test.gomessage_test.goroute.goroute_classic.goroute_openbsd.goroute_test.gosys.gosys_darwin.gosys_dragonfly.gosys_freebsd.gosys_netbsd.gosys_openbsd.gosyscall.gosyscall.szsys_darwin.gozsys_dragonfly.gozsys_freebsd_386.gozsys_freebsd_amd64.gozsys_freebsd_arm.gozsys_netbsd.gozsys_openbsd.go
trace
webdav
file.gofile_test.goif.goif_test.golitmus_test_server.golock.golock_test.goprop.goprop_test.gowebdav.gowebdav_test.goxml.goxml_test.go
internal
xml
websocket
client.goexampledial_test.goexamplehandler_test.gohybi.gohybi_test.goserver.gowebsocket.gowebsocket_test.go
xsrftoken
oauth2
.travis.ymlAUTHORSCONTRIBUTING.mdCONTRIBUTORSLICENSEREADME.md
bitbucket
client_appengine.goclientcredentials
example_test.gofacebook
fitbit
github
google
appengine.goappengine_hook.goappenginevm_hook.godefault.goexample_test.gogoogle.gogoogle_test.gojwt.gojwt_test.gosdk.gosdk_test.go
testdata
gcloud
hipchat
internal
jws
jwt
linkedin
microsoft
oauth2.gooauth2_test.goodnoklassniki
paypal
slack
token.gotoken_test.gotransport.gotransport_test.govk
google.golang.org
appengine
.travis.ymlLICENSEREADME.mderrors.go
aetest
appengine.goappengine_test.goappengine_vm.goblobstore
capability
channel
cloudsql
cmd
datastore
datastore.godatastore_test.godoc.gokey.gokey_test.goload.gometadata.goprop.goprop_test.goquery.goquery_test.gosave.gotime_test.gotransaction.go
delay
demos
guestbook
helloworld
file
identity.goimage
internal
aetesting
api.goapi_classic.goapi_common.goapi_race_test.goapi_test.goapp_id.goapp_id_test.goapp_identity
base
blobstore
capability
channel
datastore
identity.goidentity_classic.goidentity_vm.goimage
internal.gointernal_test.golog
mail
memcache
metadata.gomodules
net.gonet_test.goregen.shremote_api
search
socket
system
taskqueue
transaction.gourlfetch
user
xmpp
log
mail
memcache
module
namespace.gonamespace_test.goremote_api
runtime
search
socket
taskqueue
timeout.gourlfetch
user
xmpp
gopkg.in
asn1-ber.v1
.travis.ymlLICENSEREADME.mdber.gober_test.gocontent_int.goheader.goheader_test.goidentifier.goidentifier_test.golength.golength_test.gosuite_test.go
tests
tc1.bertc10.bertc11.bertc12.bertc13.bertc14.bertc15.bertc16.bertc17.bertc18.bertc19.bertc2.bertc20.bertc21.bertc22.bertc23.bertc24.bertc25.bertc26.bertc27.bertc28.bertc29.bertc3.bertc30.bertc31.bertc32.bertc33.bertc34.bertc35.bertc36.bertc37.bertc38.bertc39.bertc4.bertc40.bertc41.bertc42.bertc43.bertc44.bertc45.bertc46.bertc47.bertc48.bertc5.bertc6.bertc7.bertc8.bertc9.ber
util.goldap.v2
.gitignore.travis.ymlLICENSEREADME.mdadd.gobind.goclient.gocompare.goconn.goconn_test.gocontrol.godebug.godel.godn.godn_test.godoc.goerror.goerror_test.goexample_test.gofilter.gofilter_test.goldap.goldap_test.gomodify.gopasswdmodify.gosearch.gosearch_test.go
square
go-jose.v1
.gitcookies.sh.enc.gitignore.travis.ymlBUG-BOUNTY.mdCONTRIBUTING.mdLICENSEREADME.mdasymmetric.goasymmetric_test.go
cipher
cbc_hmac.gocbc_hmac_test.goconcat_kdf.goconcat_kdf_test.goecdh_es.goecdh_es_test.gokey_wrap.gokey_wrap_test.go
crypter.gocrypter_test.godoc.godoc_test.goencoding.goencoding_test.gojose-util
json
LICENSEREADME.mdbench_test.godecode.godecode_test.goencode.goencode_test.goindent.gonumber_test.goscanner.goscanner_test.gostream.gostream_test.gotagkey_test.gotags.gotags_test.go
json_fork.gojson_fork_test.gojson_std.gojson_std_test.gojwe.gojwe_test.gojwk.gojwk_test.gojws.gojws_test.goshared.gosigning.gosigning_test.gosymmetric.gosymmetric_test.goutils.goutils_test.gotestdata
go-jose.v2
.gitcookies.sh.enc.gitignore.travis.ymlBUG-BOUNTY.mdCONTRIBUTING.mdLICENSEREADME.mdasymmetric.goasymmetric_test.go
cipher
cbc_hmac.gocbc_hmac_test.goconcat_kdf.goconcat_kdf_test.goecdh_es.goecdh_es_test.gokey_wrap.gokey_wrap_test.go
crypter.gocrypter_test.godoc.godoc_test.goencoding.goencoding_test.gojose-util
json
LICENSEREADME.mdbench_test.godecode.godecode_test.goencode.goencode_test.goindent.gonumber_test.goscanner.goscanner_test.gostream.gostream_test.gotagkey_test.gotags.gotags_test.go
json_fork.gojson_fork_test.gojson_std.gojson_std_test.gojwe.gojwe_test.gojwk.gojwk_test.gojws.gojws_test.gotestdata
jwt
shared.gosigning.gosigning_test.gosymmetric.gosymmetric_test.goutils_test.goyaml.v2
version
463
vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go
generated
vendored
Normal file
463
vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go
generated
vendored
Normal file
@@ -0,0 +1,463 @@
|
||||
// Go support for Protocol Buffers - Google's data interchange format
|
||||
//
|
||||
// Copyright 2015 The Go Authors. All rights reserved.
|
||||
// https://github.com/golang/protobuf
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
// Package grpc outputs gRPC service descriptions in Go code.
|
||||
// It runs as a plugin for the Go protocol buffer compiler plugin.
|
||||
// It is linked in to protoc-gen-go.
|
||||
package grpc
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
pb "github.com/golang/protobuf/protoc-gen-go/descriptor"
|
||||
"github.com/golang/protobuf/protoc-gen-go/generator"
|
||||
)
|
||||
|
||||
// generatedCodeVersion indicates a version of the generated code.
|
||||
// It is incremented whenever an incompatibility between the generated code and
|
||||
// the grpc package is introduced; the generated code references
|
||||
// a constant, grpc.SupportPackageIsVersionN (where N is generatedCodeVersion).
|
||||
const generatedCodeVersion = 3
|
||||
|
||||
// Paths for packages used by code generated in this file,
|
||||
// relative to the import_prefix of the generator.Generator.
|
||||
const (
|
||||
contextPkgPath = "golang.org/x/net/context"
|
||||
grpcPkgPath = "google.golang.org/grpc"
|
||||
)
|
||||
|
||||
func init() {
|
||||
generator.RegisterPlugin(new(grpc))
|
||||
}
|
||||
|
||||
// grpc is an implementation of the Go protocol buffer compiler's
|
||||
// plugin architecture. It generates bindings for gRPC support.
|
||||
type grpc struct {
|
||||
gen *generator.Generator
|
||||
}
|
||||
|
||||
// Name returns the name of this plugin, "grpc".
|
||||
func (g *grpc) Name() string {
|
||||
return "grpc"
|
||||
}
|
||||
|
||||
// The names for packages imported in the generated code.
|
||||
// They may vary from the final path component of the import path
|
||||
// if the name is used by other packages.
|
||||
var (
|
||||
contextPkg string
|
||||
grpcPkg string
|
||||
)
|
||||
|
||||
// Init initializes the plugin.
|
||||
func (g *grpc) Init(gen *generator.Generator) {
|
||||
g.gen = gen
|
||||
contextPkg = generator.RegisterUniquePackageName("context", nil)
|
||||
grpcPkg = generator.RegisterUniquePackageName("grpc", nil)
|
||||
}
|
||||
|
||||
// Given a type name defined in a .proto, return its object.
|
||||
// Also record that we're using it, to guarantee the associated import.
|
||||
func (g *grpc) objectNamed(name string) generator.Object {
|
||||
g.gen.RecordTypeUse(name)
|
||||
return g.gen.ObjectNamed(name)
|
||||
}
|
||||
|
||||
// Given a type name defined in a .proto, return its name as we will print it.
|
||||
func (g *grpc) typeName(str string) string {
|
||||
return g.gen.TypeName(g.objectNamed(str))
|
||||
}
|
||||
|
||||
// P forwards to g.gen.P.
|
||||
func (g *grpc) P(args ...interface{}) { g.gen.P(args...) }
|
||||
|
||||
// Generate generates code for the services in the given file.
|
||||
func (g *grpc) Generate(file *generator.FileDescriptor) {
|
||||
if len(file.FileDescriptorProto.Service) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
g.P("// Reference imports to suppress errors if they are not otherwise used.")
|
||||
g.P("var _ ", contextPkg, ".Context")
|
||||
g.P("var _ ", grpcPkg, ".ClientConn")
|
||||
g.P()
|
||||
|
||||
// Assert version compatibility.
|
||||
g.P("// This is a compile-time assertion to ensure that this generated file")
|
||||
g.P("// is compatible with the grpc package it is being compiled against.")
|
||||
g.P("const _ = ", grpcPkg, ".SupportPackageIsVersion", generatedCodeVersion)
|
||||
g.P()
|
||||
|
||||
for i, service := range file.FileDescriptorProto.Service {
|
||||
g.generateService(file, service, i)
|
||||
}
|
||||
}
|
||||
|
||||
// GenerateImports generates the import declaration for this file.
|
||||
func (g *grpc) GenerateImports(file *generator.FileDescriptor) {
|
||||
if len(file.FileDescriptorProto.Service) == 0 {
|
||||
return
|
||||
}
|
||||
g.P("import (")
|
||||
g.P(contextPkg, " ", strconv.Quote(path.Join(g.gen.ImportPrefix, contextPkgPath)))
|
||||
g.P(grpcPkg, " ", strconv.Quote(path.Join(g.gen.ImportPrefix, grpcPkgPath)))
|
||||
g.P(")")
|
||||
g.P()
|
||||
}
|
||||
|
||||
// reservedClientName records whether a client name is reserved on the client side.
|
||||
var reservedClientName = map[string]bool{
|
||||
// TODO: do we need any in gRPC?
|
||||
}
|
||||
|
||||
func unexport(s string) string { return strings.ToLower(s[:1]) + s[1:] }
|
||||
|
||||
// generateService generates all the code for the named service.
|
||||
func (g *grpc) generateService(file *generator.FileDescriptor, service *pb.ServiceDescriptorProto, index int) {
|
||||
path := fmt.Sprintf("6,%d", index) // 6 means service.
|
||||
|
||||
origServName := service.GetName()
|
||||
fullServName := origServName
|
||||
if pkg := file.GetPackage(); pkg != "" {
|
||||
fullServName = pkg + "." + fullServName
|
||||
}
|
||||
servName := generator.CamelCase(origServName)
|
||||
|
||||
g.P()
|
||||
g.P("// Client API for ", servName, " service")
|
||||
g.P()
|
||||
|
||||
// Client interface.
|
||||
g.P("type ", servName, "Client interface {")
|
||||
for i, method := range service.Method {
|
||||
g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service.
|
||||
g.P(g.generateClientSignature(servName, method))
|
||||
}
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
// Client structure.
|
||||
g.P("type ", unexport(servName), "Client struct {")
|
||||
g.P("cc *", grpcPkg, ".ClientConn")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
// NewClient factory.
|
||||
g.P("func New", servName, "Client (cc *", grpcPkg, ".ClientConn) ", servName, "Client {")
|
||||
g.P("return &", unexport(servName), "Client{cc}")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
var methodIndex, streamIndex int
|
||||
serviceDescVar := "_" + servName + "_serviceDesc"
|
||||
// Client method implementations.
|
||||
for _, method := range service.Method {
|
||||
var descExpr string
|
||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
||||
// Unary RPC method
|
||||
descExpr = fmt.Sprintf("&%s.Methods[%d]", serviceDescVar, methodIndex)
|
||||
methodIndex++
|
||||
} else {
|
||||
// Streaming RPC method
|
||||
descExpr = fmt.Sprintf("&%s.Streams[%d]", serviceDescVar, streamIndex)
|
||||
streamIndex++
|
||||
}
|
||||
g.generateClientMethod(servName, fullServName, serviceDescVar, method, descExpr)
|
||||
}
|
||||
|
||||
g.P("// Server API for ", servName, " service")
|
||||
g.P()
|
||||
|
||||
// Server interface.
|
||||
serverType := servName + "Server"
|
||||
g.P("type ", serverType, " interface {")
|
||||
for i, method := range service.Method {
|
||||
g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service.
|
||||
g.P(g.generateServerSignature(servName, method))
|
||||
}
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
// Server registration.
|
||||
g.P("func Register", servName, "Server(s *", grpcPkg, ".Server, srv ", serverType, ") {")
|
||||
g.P("s.RegisterService(&", serviceDescVar, `, srv)`)
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
// Server handler implementations.
|
||||
var handlerNames []string
|
||||
for _, method := range service.Method {
|
||||
hname := g.generateServerMethod(servName, fullServName, method)
|
||||
handlerNames = append(handlerNames, hname)
|
||||
}
|
||||
|
||||
// Service descriptor.
|
||||
g.P("var ", serviceDescVar, " = ", grpcPkg, ".ServiceDesc {")
|
||||
g.P("ServiceName: ", strconv.Quote(fullServName), ",")
|
||||
g.P("HandlerType: (*", serverType, ")(nil),")
|
||||
g.P("Methods: []", grpcPkg, ".MethodDesc{")
|
||||
for i, method := range service.Method {
|
||||
if method.GetServerStreaming() || method.GetClientStreaming() {
|
||||
continue
|
||||
}
|
||||
g.P("{")
|
||||
g.P("MethodName: ", strconv.Quote(method.GetName()), ",")
|
||||
g.P("Handler: ", handlerNames[i], ",")
|
||||
g.P("},")
|
||||
}
|
||||
g.P("},")
|
||||
g.P("Streams: []", grpcPkg, ".StreamDesc{")
|
||||
for i, method := range service.Method {
|
||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
||||
continue
|
||||
}
|
||||
g.P("{")
|
||||
g.P("StreamName: ", strconv.Quote(method.GetName()), ",")
|
||||
g.P("Handler: ", handlerNames[i], ",")
|
||||
if method.GetServerStreaming() {
|
||||
g.P("ServerStreams: true,")
|
||||
}
|
||||
if method.GetClientStreaming() {
|
||||
g.P("ClientStreams: true,")
|
||||
}
|
||||
g.P("},")
|
||||
}
|
||||
g.P("},")
|
||||
g.P("Metadata: ", file.VarName(), ",")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
|
||||
// generateClientSignature returns the client-side signature for a method.
|
||||
func (g *grpc) generateClientSignature(servName string, method *pb.MethodDescriptorProto) string {
|
||||
origMethName := method.GetName()
|
||||
methName := generator.CamelCase(origMethName)
|
||||
if reservedClientName[methName] {
|
||||
methName += "_"
|
||||
}
|
||||
reqArg := ", in *" + g.typeName(method.GetInputType())
|
||||
if method.GetClientStreaming() {
|
||||
reqArg = ""
|
||||
}
|
||||
respName := "*" + g.typeName(method.GetOutputType())
|
||||
if method.GetServerStreaming() || method.GetClientStreaming() {
|
||||
respName = servName + "_" + generator.CamelCase(origMethName) + "Client"
|
||||
}
|
||||
return fmt.Sprintf("%s(ctx %s.Context%s, opts ...%s.CallOption) (%s, error)", methName, contextPkg, reqArg, grpcPkg, respName)
|
||||
}
|
||||
|
||||
func (g *grpc) generateClientMethod(servName, fullServName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string) {
|
||||
sname := fmt.Sprintf("/%s/%s", fullServName, method.GetName())
|
||||
methName := generator.CamelCase(method.GetName())
|
||||
inType := g.typeName(method.GetInputType())
|
||||
outType := g.typeName(method.GetOutputType())
|
||||
|
||||
g.P("func (c *", unexport(servName), "Client) ", g.generateClientSignature(servName, method), "{")
|
||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
||||
g.P("out := new(", outType, ")")
|
||||
// TODO: Pass descExpr to Invoke.
|
||||
g.P("err := ", grpcPkg, `.Invoke(ctx, "`, sname, `", in, out, c.cc, opts...)`)
|
||||
g.P("if err != nil { return nil, err }")
|
||||
g.P("return out, nil")
|
||||
g.P("}")
|
||||
g.P()
|
||||
return
|
||||
}
|
||||
streamType := unexport(servName) + methName + "Client"
|
||||
g.P("stream, err := ", grpcPkg, ".NewClientStream(ctx, ", descExpr, `, c.cc, "`, sname, `", opts...)`)
|
||||
g.P("if err != nil { return nil, err }")
|
||||
g.P("x := &", streamType, "{stream}")
|
||||
if !method.GetClientStreaming() {
|
||||
g.P("if err := x.ClientStream.SendMsg(in); err != nil { return nil, err }")
|
||||
g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }")
|
||||
}
|
||||
g.P("return x, nil")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
genSend := method.GetClientStreaming()
|
||||
genRecv := method.GetServerStreaming()
|
||||
genCloseAndRecv := !method.GetServerStreaming()
|
||||
|
||||
// Stream auxiliary types and methods.
|
||||
g.P("type ", servName, "_", methName, "Client interface {")
|
||||
if genSend {
|
||||
g.P("Send(*", inType, ") error")
|
||||
}
|
||||
if genRecv {
|
||||
g.P("Recv() (*", outType, ", error)")
|
||||
}
|
||||
if genCloseAndRecv {
|
||||
g.P("CloseAndRecv() (*", outType, ", error)")
|
||||
}
|
||||
g.P(grpcPkg, ".ClientStream")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
g.P("type ", streamType, " struct {")
|
||||
g.P(grpcPkg, ".ClientStream")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
if genSend {
|
||||
g.P("func (x *", streamType, ") Send(m *", inType, ") error {")
|
||||
g.P("return x.ClientStream.SendMsg(m)")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
if genRecv {
|
||||
g.P("func (x *", streamType, ") Recv() (*", outType, ", error) {")
|
||||
g.P("m := new(", outType, ")")
|
||||
g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }")
|
||||
g.P("return m, nil")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
if genCloseAndRecv {
|
||||
g.P("func (x *", streamType, ") CloseAndRecv() (*", outType, ", error) {")
|
||||
g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }")
|
||||
g.P("m := new(", outType, ")")
|
||||
g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }")
|
||||
g.P("return m, nil")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
}
|
||||
|
||||
// generateServerSignature returns the server-side signature for a method.
|
||||
func (g *grpc) generateServerSignature(servName string, method *pb.MethodDescriptorProto) string {
|
||||
origMethName := method.GetName()
|
||||
methName := generator.CamelCase(origMethName)
|
||||
if reservedClientName[methName] {
|
||||
methName += "_"
|
||||
}
|
||||
|
||||
var reqArgs []string
|
||||
ret := "error"
|
||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
||||
reqArgs = append(reqArgs, contextPkg+".Context")
|
||||
ret = "(*" + g.typeName(method.GetOutputType()) + ", error)"
|
||||
}
|
||||
if !method.GetClientStreaming() {
|
||||
reqArgs = append(reqArgs, "*"+g.typeName(method.GetInputType()))
|
||||
}
|
||||
if method.GetServerStreaming() || method.GetClientStreaming() {
|
||||
reqArgs = append(reqArgs, servName+"_"+generator.CamelCase(origMethName)+"Server")
|
||||
}
|
||||
|
||||
return methName + "(" + strings.Join(reqArgs, ", ") + ") " + ret
|
||||
}
|
||||
|
||||
func (g *grpc) generateServerMethod(servName, fullServName string, method *pb.MethodDescriptorProto) string {
|
||||
methName := generator.CamelCase(method.GetName())
|
||||
hname := fmt.Sprintf("_%s_%s_Handler", servName, methName)
|
||||
inType := g.typeName(method.GetInputType())
|
||||
outType := g.typeName(method.GetOutputType())
|
||||
|
||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
||||
g.P("func ", hname, "(srv interface{}, ctx ", contextPkg, ".Context, dec func(interface{}) error, interceptor ", grpcPkg, ".UnaryServerInterceptor) (interface{}, error) {")
|
||||
g.P("in := new(", inType, ")")
|
||||
g.P("if err := dec(in); err != nil { return nil, err }")
|
||||
g.P("if interceptor == nil { return srv.(", servName, "Server).", methName, "(ctx, in) }")
|
||||
g.P("info := &", grpcPkg, ".UnaryServerInfo{")
|
||||
g.P("Server: srv,")
|
||||
g.P("FullMethod: ", strconv.Quote(fmt.Sprintf("/%s/%s", fullServName, methName)), ",")
|
||||
g.P("}")
|
||||
g.P("handler := func(ctx ", contextPkg, ".Context, req interface{}) (interface{}, error) {")
|
||||
g.P("return srv.(", servName, "Server).", methName, "(ctx, req.(*", inType, "))")
|
||||
g.P("}")
|
||||
g.P("return interceptor(ctx, in, info, handler)")
|
||||
g.P("}")
|
||||
g.P()
|
||||
return hname
|
||||
}
|
||||
streamType := unexport(servName) + methName + "Server"
|
||||
g.P("func ", hname, "(srv interface{}, stream ", grpcPkg, ".ServerStream) error {")
|
||||
if !method.GetClientStreaming() {
|
||||
g.P("m := new(", inType, ")")
|
||||
g.P("if err := stream.RecvMsg(m); err != nil { return err }")
|
||||
g.P("return srv.(", servName, "Server).", methName, "(m, &", streamType, "{stream})")
|
||||
} else {
|
||||
g.P("return srv.(", servName, "Server).", methName, "(&", streamType, "{stream})")
|
||||
}
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
genSend := method.GetServerStreaming()
|
||||
genSendAndClose := !method.GetServerStreaming()
|
||||
genRecv := method.GetClientStreaming()
|
||||
|
||||
// Stream auxiliary types and methods.
|
||||
g.P("type ", servName, "_", methName, "Server interface {")
|
||||
if genSend {
|
||||
g.P("Send(*", outType, ") error")
|
||||
}
|
||||
if genSendAndClose {
|
||||
g.P("SendAndClose(*", outType, ") error")
|
||||
}
|
||||
if genRecv {
|
||||
g.P("Recv() (*", inType, ", error)")
|
||||
}
|
||||
g.P(grpcPkg, ".ServerStream")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
g.P("type ", streamType, " struct {")
|
||||
g.P(grpcPkg, ".ServerStream")
|
||||
g.P("}")
|
||||
g.P()
|
||||
|
||||
if genSend {
|
||||
g.P("func (x *", streamType, ") Send(m *", outType, ") error {")
|
||||
g.P("return x.ServerStream.SendMsg(m)")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
if genSendAndClose {
|
||||
g.P("func (x *", streamType, ") SendAndClose(m *", outType, ") error {")
|
||||
g.P("return x.ServerStream.SendMsg(m)")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
if genRecv {
|
||||
g.P("func (x *", streamType, ") Recv() (*", inType, ", error) {")
|
||||
g.P("m := new(", inType, ")")
|
||||
g.P("if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err }")
|
||||
g.P("return m, nil")
|
||||
g.P("}")
|
||||
g.P()
|
||||
}
|
||||
|
||||
return hname
|
||||
}
|
Reference in New Issue
Block a user