forked from go-gost/core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
option.go
102 lines (85 loc) · 1.99 KB
/
option.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
90
91
92
93
94
95
96
97
98
99
100
101
102
package handler
import (
"crypto/tls"
"net/url"
"github.com/dolfly/core/auth"
"github.com/dolfly/core/bypass"
"github.com/dolfly/core/chain"
"github.com/dolfly/core/limiter/rate"
"github.com/dolfly/core/limiter/traffic"
"github.com/dolfly/core/logger"
"github.com/dolfly/core/metadata"
"github.com/dolfly/core/observer"
)
type Options struct {
Bypass bypass.Bypass
Router *chain.Router
Auth *url.Userinfo
Auther auth.Authenticator
RateLimiter rate.RateLimiter
Limiter traffic.TrafficLimiter
TLSConfig *tls.Config
Logger logger.Logger
Observer observer.Observer
Service string
}
type Option func(opts *Options)
func BypassOption(bypass bypass.Bypass) Option {
return func(opts *Options) {
opts.Bypass = bypass
}
}
func RouterOption(router *chain.Router) Option {
return func(opts *Options) {
opts.Router = router
}
}
func AuthOption(auth *url.Userinfo) Option {
return func(opts *Options) {
opts.Auth = auth
}
}
func AutherOption(auther auth.Authenticator) Option {
return func(opts *Options) {
opts.Auther = auther
}
}
func RateLimiterOption(limiter rate.RateLimiter) Option {
return func(opts *Options) {
opts.RateLimiter = limiter
}
}
func TrafficLimiterOption(limiter traffic.TrafficLimiter) Option {
return func(opts *Options) {
opts.Limiter = limiter
}
}
func TLSConfigOption(tlsConfig *tls.Config) Option {
return func(opts *Options) {
opts.TLSConfig = tlsConfig
}
}
func LoggerOption(logger logger.Logger) Option {
return func(opts *Options) {
opts.Logger = logger
}
}
func ObserverOption(observer observer.Observer) Option {
return func(opts *Options) {
opts.Observer = observer
}
}
func ServiceOption(service string) Option {
return func(opts *Options) {
opts.Service = service
}
}
type HandleOptions struct {
Metadata metadata.Metadata
}
type HandleOption func(opts *HandleOptions)
func MetadataHandleOption(md metadata.Metadata) HandleOption {
return func(opts *HandleOptions) {
opts.Metadata = md
}
}