forked from kitex-contrib/optionloader
-
Notifications
You must be signed in to change notification settings - Fork 0
/
translator.go
114 lines (103 loc) · 2.82 KB
/
translator.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
package etcdclient
import (
"fmt"
"github.com/Printemps417/optionloader/utils"
kitexclient "github.com/cloudwego/kitex/client"
"github.com/cloudwego/kitex/pkg/connpool"
"github.com/cloudwego/kitex/pkg/rpcinfo"
"github.com/cloudwego/kitex/transport"
)
// Protocol indicates the transport protocol.
type Protocol int
// Predefined transport protocols.
const (
PurePayload Protocol = 0
TTHeader Protocol = 1 << iota
Framed
HTTP
GRPC
HESSIAN2
TTHeaderFramed = TTHeader | Framed
)
var protocolMap = map[string]Protocol{
"PurePayload": PurePayload,
"TTHeader": TTHeader,
"Framed": Framed,
"HTTP": HTTP,
"GRPC": GRPC,
"HESSIAN2": HESSIAN2,
"TTHeaderFramed": TTHeaderFramed,
}
func basicInfoTranslator(config *EtcdConfig) ([]kitexclient.Option, error) {
c := config.ClientBasicInfo
if c == nil {
return nil, nil
}
var res []kitexclient.Option
rpcInfo := rpcinfo.EndpointBasicInfo{
ServiceName: c.ServiceName,
Method: c.Method,
Tags: c.Tags,
}
res = append(res, kitexclient.WithClientBasicInfo(&rpcInfo))
return res, nil
}
func protocolTranslator(config *EtcdConfig) ([]kitexclient.Option, error) {
c := config.Protocol
if c == nil {
return nil, nil
}
var res []kitexclient.Option
protocol, ok := protocolMap[*c]
if !ok {
return nil, fmt.Errorf("unknown protocol: %s", *c)
}
res = append(res, kitexclient.WithTransportProtocol(transport.Protocol(protocol)))
return res, nil
}
func destServiceTranslator(config *EtcdConfig) ([]kitexclient.Option, error) {
c := config.DestService
if c == nil {
return nil, nil
}
var res []kitexclient.Option
res = append(res, kitexclient.WithDestService(*c))
return res, nil
}
func hostPortsTranslator(config *EtcdConfig) ([]kitexclient.Option, error) {
c := config.HostPorts
if c == nil {
return nil, nil
}
var res []kitexclient.Option
res = append(res, kitexclient.WithHostPorts(c...))
return res, nil
}
func connectionTranslator(config *EtcdConfig) ([]kitexclient.Option, error) {
c := config.Connection
if c == nil {
return nil, nil
}
var res []kitexclient.Option
switch c.Method {
case "ShortConnection":
res = append(res, kitexclient.WithShortConnection())
case "LongConnection":
MaxIdleTimeout, err := utils.ParseDuration(c.LongConnection.MaxIdleTimeout)
if err != nil {
return nil, err
}
idleConfig := connpool.IdleConfig{
MinIdlePerAddress: c.LongConnection.MinIdlePerAddress,
MaxIdlePerAddress: c.LongConnection.MaxIdlePerAddress,
MaxIdleGlobal: c.LongConnection.MaxIdleGlobal,
MaxIdleTimeout: MaxIdleTimeout,
}
res = append(res, kitexclient.WithLongConnection(idleConfig))
case "MuxConnection":
res = append(res, kitexclient.WithMuxConnection(c.MuxConnection.ConnNum))
default:
return nil, fmt.Errorf("unsupported connection method: %s", c.Method)
}
return res, nil
}