// Package proxy is a transparent proxy built on the go-micro/server package proxy import ( "context" "github.com/micro/go-micro/client" "github.com/micro/go-micro/config/options" "github.com/micro/go-micro/router" "github.com/micro/go-micro/server" ) // Proxy can be used as a proxy server for go-micro services type Proxy interface { options.Options // SendRequest honours the client.Router interface SendRequest(context.Context, client.Request, client.Response) error // ServeRequest honours the server.Router interface ServeRequest(context.Context, server.Request, server.Response) error } var ( DefaultEndpoint = "localhost:9090" ) // WithEndpoint sets a proxy endpoint func WithEndpoint(e string) options.Option { return options.WithValue("proxy.endpoint", e) } // WithClient sets the client func WithClient(c client.Client) options.Option { return options.WithValue("proxy.client", c) } // WithRouter specifies the router to use func WithRouter(r router.Router) options.Option { return options.WithValue("proxy.router", r) } // WithLink sets a link for outbound requests func WithLink(name string, c client.Client) options.Option { return func(o *options.Values) error { var links map[string]client.Client v, ok := o.Get("proxy.links") if ok { links = v.(map[string]client.Client) } else { links = map[string]client.Client{} } links[name] = c // save the links o.Set("proxy.links", links) return nil } }