From 8245390b5a4872330a98d1ce5e3681dfb8dd9a18 Mon Sep 17 00:00:00 2001 From: Asim Date: Thu, 26 May 2016 18:01:02 +0100 Subject: [PATCH] Support endpoint metadata --- server/handler.go | 9 +++++++++ server/rpc_handler.go | 10 +++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/server/handler.go b/server/handler.go index b944efeb..d3a25d86 100644 --- a/server/handler.go +++ b/server/handler.go @@ -34,6 +34,7 @@ type Subscriber interface { type HandlerOptions struct { Internal bool + Metadata map[string]map[string]string } type SubscriberOptions struct { @@ -50,6 +51,14 @@ func InternalHandler(b bool) HandlerOption { } } +// EndpointMetadata is a Handler option that allows metadata to be added to +// individual endpoints. +func EndpointMetadata(endpoint string, metadata map[string]string) HandlerOption { + return func(o *HandlerOptions) { + o.Metadata[endpoint] = metadata + } +} + // Internal Subscriber options specifies that a subscriber is not advertised // to the discovery system. func InternalSubscriber(b bool) SubscriberOption { diff --git a/server/rpc_handler.go b/server/rpc_handler.go index e01b4b25..42ec7f0f 100644 --- a/server/rpc_handler.go +++ b/server/rpc_handler.go @@ -14,7 +14,10 @@ type rpcHandler struct { } func newRpcHandler(handler interface{}, opts ...HandlerOption) Handler { - var options HandlerOptions + options := HandlerOptions{ + Metadata: make(map[string]map[string]string), + } + for _, o := range opts { o(&options) } @@ -28,6 +31,11 @@ func newRpcHandler(handler interface{}, opts ...HandlerOption) Handler { for m := 0; m < typ.NumMethod(); m++ { if e := extractEndpoint(typ.Method(m)); e != nil { e.Name = name + "." + e.Name + + for k, v := range options.Metadata[e.Name] { + e.Metadata[k] = v + } + endpoints = append(endpoints, e) } }