-
-
Notifications
You must be signed in to change notification settings - Fork 4k
/
options.go
129 lines (105 loc) · 2.95 KB
/
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package kratos
import (
"context"
"net/url"
"os"
"time"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/registry"
"github.com/go-kratos/kratos/v2/transport"
)
// Option is an application option.
type Option func(o *options)
// options is an application options.
type options struct {
id string
name string
version string
metadata map[string]string
endpoints []*url.URL
ctx context.Context
sigs []os.Signal
logger log.Logger
registrar registry.Registrar
registrarTimeout time.Duration
stopTimeout time.Duration
servers []transport.Server
// Before and After funcs
beforeStart []func(context.Context) error
beforeStop []func(context.Context) error
afterStart []func(context.Context) error
afterStop []func(context.Context) error
}
// ID with service id.
func ID(id string) Option {
return func(o *options) { o.id = id }
}
// Name with service name.
func Name(name string) Option {
return func(o *options) { o.name = name }
}
// Version with service version.
func Version(version string) Option {
return func(o *options) { o.version = version }
}
// Metadata with service metadata.
func Metadata(md map[string]string) Option {
return func(o *options) { o.metadata = md }
}
// Endpoint with service endpoint.
func Endpoint(endpoints ...*url.URL) Option {
return func(o *options) { o.endpoints = endpoints }
}
// Context with service context.
func Context(ctx context.Context) Option {
return func(o *options) { o.ctx = ctx }
}
// Logger with service logger.
func Logger(logger log.Logger) Option {
return func(o *options) { o.logger = logger }
}
// Server with transport servers.
func Server(srv ...transport.Server) Option {
return func(o *options) { o.servers = srv }
}
// Signal with exit signals.
func Signal(sigs ...os.Signal) Option {
return func(o *options) { o.sigs = sigs }
}
// Registrar with service registry.
func Registrar(r registry.Registrar) Option {
return func(o *options) { o.registrar = r }
}
// RegistrarTimeout with registrar timeout.
func RegistrarTimeout(t time.Duration) Option {
return func(o *options) { o.registrarTimeout = t }
}
// StopTimeout with app stop timeout.
func StopTimeout(t time.Duration) Option {
return func(o *options) { o.stopTimeout = t }
}
// Before and Afters
// BeforeStart run funcs before app starts
func BeforeStart(fn func(context.Context) error) Option {
return func(o *options) {
o.beforeStart = append(o.beforeStart, fn)
}
}
// BeforeStop run funcs before app stops
func BeforeStop(fn func(context.Context) error) Option {
return func(o *options) {
o.beforeStop = append(o.beforeStop, fn)
}
}
// AfterStart run funcs after app starts
func AfterStart(fn func(context.Context) error) Option {
return func(o *options) {
o.afterStart = append(o.afterStart, fn)
}
}
// AfterStop run funcs after app stops
func AfterStop(fn func(context.Context) error) Option {
return func(o *options) {
o.afterStop = append(o.afterStop, fn)
}
}