cubefs
57 строк · 1.5 Кб
1/*
2*
3* Copyright 2017 gRPC authors.
4*
5* Licensed under the Apache License, Version 2.0 (the "License");
6* you may not use this file except in compliance with the License.
7* You may obtain a copy of the License at
8*
9* http://www.apache.org/licenses/LICENSE-2.0
10*
11* Unless required by applicable law or agreed to in writing, software
12* distributed under the License is distributed on an "AS IS" BASIS,
13* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14* See the License for the specific language governing permissions and
15* limitations under the License.
16*
17*/
18
19// Package passthrough implements a pass-through resolver. It sends the target
20// name without scheme back to gRPC as resolved address.
21package passthrough
22
23import "google.golang.org/grpc/resolver"
24
25const scheme = "passthrough"
26
27type passthroughBuilder struct{}
28
29func (*passthroughBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
30r := &passthroughResolver{
31target: target,
32cc: cc,
33}
34r.start()
35return r, nil
36}
37
38func (*passthroughBuilder) Scheme() string {
39return scheme
40}
41
42type passthroughResolver struct {
43target resolver.Target
44cc resolver.ClientConn
45}
46
47func (r *passthroughResolver) start() {
48r.cc.UpdateState(resolver.State{Addresses: []resolver.Address{{Addr: r.target.Endpoint}}})
49}
50
51func (*passthroughResolver) ResolveNow(o resolver.ResolveNowOptions) {}
52
53func (*passthroughResolver) Close() {}
54
55func init() {
56resolver.Register(&passthroughBuilder{})
57}
58