directbuilder.go 699 B

12345678910111213141516171819202122232425262728293031323334
  1. package resolver
  2. import (
  3. "strings"
  4. "google.golang.org/grpc/resolver"
  5. )
  6. type directBuilder struct{}
  7. func (d *directBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (
  8. resolver.Resolver, error) {
  9. var addrs []resolver.Address
  10. endpoints := strings.FieldsFunc(target.Endpoint, func(r rune) bool {
  11. return r == EndpointSepChar
  12. })
  13. for _, val := range subset(endpoints, subsetSize) {
  14. addrs = append(addrs, resolver.Address{
  15. Addr: val,
  16. })
  17. }
  18. if err := cc.UpdateState(resolver.State{
  19. Addresses: addrs,
  20. }); err != nil {
  21. return nil, err
  22. }
  23. return &nopResolver{cc: cc}, nil
  24. }
  25. func (d *directBuilder) Scheme() string {
  26. return DirectScheme
  27. }