Support endpoint metadata
This commit is contained in:
		| @@ -34,6 +34,7 @@ type Subscriber interface { | |||||||
|  |  | ||||||
| type HandlerOptions struct { | type HandlerOptions struct { | ||||||
| 	Internal bool | 	Internal bool | ||||||
|  | 	Metadata map[string]map[string]string | ||||||
| } | } | ||||||
|  |  | ||||||
| type SubscriberOptions struct { | 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 | // Internal Subscriber options specifies that a subscriber is not advertised | ||||||
| // to the discovery system. | // to the discovery system. | ||||||
| func InternalSubscriber(b bool) SubscriberOption { | func InternalSubscriber(b bool) SubscriberOption { | ||||||
|   | |||||||
| @@ -14,7 +14,10 @@ type rpcHandler struct { | |||||||
| } | } | ||||||
|  |  | ||||||
| func newRpcHandler(handler interface{}, opts ...HandlerOption) Handler { | func newRpcHandler(handler interface{}, opts ...HandlerOption) Handler { | ||||||
| 	var options HandlerOptions | 	options := HandlerOptions{ | ||||||
|  | 		Metadata: make(map[string]map[string]string), | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	for _, o := range opts { | 	for _, o := range opts { | ||||||
| 		o(&options) | 		o(&options) | ||||||
| 	} | 	} | ||||||
| @@ -28,6 +31,11 @@ func newRpcHandler(handler interface{}, opts ...HandlerOption) Handler { | |||||||
| 	for m := 0; m < typ.NumMethod(); m++ { | 	for m := 0; m < typ.NumMethod(); m++ { | ||||||
| 		if e := extractEndpoint(typ.Method(m)); e != nil { | 		if e := extractEndpoint(typ.Method(m)); e != nil { | ||||||
| 			e.Name = name + "." + e.Name | 			e.Name = name + "." + e.Name | ||||||
|  |  | ||||||
|  | 			for k, v := range options.Metadata[e.Name] { | ||||||
|  | 				e.Metadata[k] = v | ||||||
|  | 			} | ||||||
|  |  | ||||||
| 			endpoints = append(endpoints, e) | 			endpoints = append(endpoints, e) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user