forked from livekit/psrpc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
client_options.go
89 lines (75 loc) · 2 KB
/
client_options.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package psrpc
import (
"time"
)
const (
DefaultClientTimeout = time.Second * 3
)
type ClientOption func(*clientOpts)
type clientOpts struct {
timeout time.Duration
channelSize int
enableStreams bool
requestHooks []ClientRequestHook
responseHooks []ClientResponseHook
rpcInterceptors []RPCInterceptorFactory
multiRPCInterceptors []MultiRPCInterceptorFactory
streamInterceptors []StreamInterceptorFactory
}
func WithClientTimeout(timeout time.Duration) ClientOption {
return func(o *clientOpts) {
o.timeout = timeout
}
}
func WithClientChannelSize(size int) ClientOption {
return func(o *clientOpts) {
o.channelSize = size
}
}
func WithClientRequestHooks(hooks ...ClientRequestHook) ClientOption {
return func(o *clientOpts) {
o.requestHooks = append(o.requestHooks, hooks...)
}
}
func WithClientResponseHooks(hooks ...ClientResponseHook) ClientOption {
return func(o *clientOpts) {
o.responseHooks = append(o.responseHooks, hooks...)
}
}
func WithClientRPCInterceptors(interceptors ...RPCInterceptorFactory) ClientOption {
return func(o *clientOpts) {
o.rpcInterceptors = append(o.rpcInterceptors, interceptors...)
}
}
func WithClientMultiRPCInterceptors(interceptors ...MultiRPCInterceptorFactory) ClientOption {
return func(o *clientOpts) {
o.multiRPCInterceptors = append(o.multiRPCInterceptors, interceptors...)
}
}
func WithClientStreamInterceptors(interceptors ...StreamInterceptorFactory) ClientOption {
return func(o *clientOpts) {
o.streamInterceptors = append(o.streamInterceptors, interceptors...)
}
}
func WithClientOptions(opts ...ClientOption) ClientOption {
return func(o *clientOpts) {
for _, opt := range opts {
opt(o)
}
}
}
func withStreams() ClientOption {
return func(o *clientOpts) {
o.enableStreams = true
}
}
func getClientOpts(opts ...ClientOption) clientOpts {
o := &clientOpts{
timeout: DefaultClientTimeout,
channelSize: DefaultChannelSize,
}
for _, opt := range opts {
opt(o)
}
return *o
}