package http import ( "context" "net" "net/http" "go.unistack.org/micro/v4/client" "go.unistack.org/micro/v4/metadata" ) var ( // DefaultPoolMaxStreams maximum streams on a connectioin // (20) DefaultPoolMaxStreams = 20 // DefaultPoolMaxIdle maximum idle conns of a pool // (50) DefaultPoolMaxIdle = 50 // DefaultMaxRecvMsgSize maximum message that client can receive // (4 MB). DefaultMaxRecvMsgSize = 1024 * 1024 * 4 // DefaultMaxSendMsgSize maximum message that client can send // (4 MB). DefaultMaxSendMsgSize = 1024 * 1024 * 4 ) type poolMaxStreams struct{} // PoolMaxStreams maximum streams on a connectioin func PoolMaxStreams(n int) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, poolMaxStreams{}, n) } } type poolMaxIdle struct{} // PoolMaxIdle maximum idle conns of a pool func PoolMaxIdle(d int) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, poolMaxIdle{}, d) } } type maxRecvMsgSizeKey struct{} // MaxRecvMsgSize set the maximum size of message that client can receive. func MaxRecvMsgSize(s int) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, maxRecvMsgSizeKey{}, s) } } type maxSendMsgSizeKey struct{} // MaxSendMsgSize set the maximum size of message that client can send. func MaxSendMsgSize(s int) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, maxSendMsgSizeKey{}, s) } } type httpClientKey struct{} // nolint: golint // HTTPClient pass http.Client option to client Call func HTTPClient(c *http.Client) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, httpClientKey{}, c) } } type httpDialerKey struct{} // nolint: golint // HTTPDialer pass net.Dialer option to client func HTTPDialer(d *net.Dialer) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, httpDialerKey{}, d) } } type methodKey struct{} // Method pass method option to client Call func Method(m string) client.CallOption { return func(o *client.CallOptions) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, methodKey{}, m) } } type pathKey struct{} // Path spcecifies path option to client Call func Path(p string) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, pathKey{}, p) } } type bodyKey struct{} // Body specifies body option to client Call func Body(b string) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, bodyKey{}, b) } } type errorMapKey struct{} func ErrorMap(m map[string]interface{}) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, errorMapKey{}, m) } } type structTagsKey struct{} // StructTags pass tags slice option to client Call func StructTags(tags []string) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, structTagsKey{}, tags) } } type metadataKey struct{} // Metadata pass metadata to client Call func Metadata(md metadata.Metadata) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, metadataKey{}, md) } } type cookieKey struct{} // Cookie pass cookie to client Call func Cookie(cookies ...string) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, cookieKey{}, cookies) } } type headerKey struct{} // Header pass cookie to client Call func Header(headers ...string) client.Option { return func(o *client.Options) { if o.Context == nil { o.Context = context.Background() } o.Context = context.WithValue(o.Context, headerKey{}, headers) } }