micro-server-grpc/handler.go

61 lines
1.2 KiB
Go
Raw Permalink Normal View History

2019-06-03 20:44:43 +03:00
package grpc
import (
"reflect"
"github.com/unistack-org/micro/v3/register"
"github.com/unistack-org/micro/v3/server"
2019-06-03 20:44:43 +03:00
)
type rpcHandler struct {
opts server.HandlerOptions
2019-06-03 20:44:43 +03:00
handler interface{}
name string
endpoints []*register.Endpoint
2019-06-03 20:44:43 +03:00
}
func newRPCHandler(handler interface{}, opts ...server.HandlerOption) server.Handler {
options := server.NewHandlerOptions(opts...)
2019-06-03 20:44:43 +03:00
typ := reflect.TypeOf(handler)
hdlr := reflect.ValueOf(handler)
name := reflect.Indirect(hdlr).Type().Name()
var endpoints []*register.Endpoint
2019-06-03 20:44:43 +03:00
for m := 0; m < typ.NumMethod(); m++ {
if e := register.ExtractEndpoint(typ.Method(m)); e != nil {
2019-06-03 20:44:43 +03:00
e.Name = name + "." + e.Name
for k, v := range options.Metadata[e.Name] {
e.Metadata[k] = v
}
endpoints = append(endpoints, e)
}
}
return &rpcHandler{
name: name,
handler: handler,
endpoints: endpoints,
opts: options,
}
}
func (r *rpcHandler) Name() string {
return r.name
}
func (r *rpcHandler) Handler() interface{} {
return r.handler
}
func (r *rpcHandler) Endpoints() []*register.Endpoint {
2019-06-03 20:44:43 +03:00
return r.endpoints
}
func (r *rpcHandler) Options() server.HandlerOptions {
return r.opts
}