github.com/lingyao2333/mo-zero@v1.4.1/zrpc/resolver/internal/directbuilder.go (about) 1 package internal 2 3 import ( 4 "strings" 5 6 "github.com/lingyao2333/mo-zero/zrpc/resolver/internal/targets" 7 "google.golang.org/grpc/resolver" 8 ) 9 10 type directBuilder struct{} 11 12 func (d *directBuilder) Build(target resolver.Target, cc resolver.ClientConn, _ resolver.BuildOptions) ( 13 resolver.Resolver, error) { 14 endpoints := strings.FieldsFunc(targets.GetEndpoints(target), func(r rune) bool { 15 return r == EndpointSepChar 16 }) 17 endpoints = subset(endpoints, subsetSize) 18 addrs := make([]resolver.Address, 0, len(endpoints)) 19 20 for _, val := range endpoints { 21 addrs = append(addrs, resolver.Address{ 22 Addr: val, 23 }) 24 } 25 if err := cc.UpdateState(resolver.State{ 26 Addresses: addrs, 27 }); err != nil { 28 return nil, err 29 } 30 31 return &nopResolver{cc: cc}, nil 32 } 33 34 func (d *directBuilder) Scheme() string { 35 return DirectScheme 36 }