github.com/lingyao2333/mo-zero@v1.4.1/zrpc/resolver/internal/kube/targetparser.go (about) 1 package kube 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 8 "github.com/lingyao2333/mo-zero/zrpc/resolver/internal/targets" 9 "google.golang.org/grpc/resolver" 10 ) 11 12 const ( 13 colon = ":" 14 defaultNamespace = "default" 15 ) 16 17 var emptyService Service 18 19 // Service represents a service with namespace, name and port. 20 type Service struct { 21 Namespace string 22 Name string 23 Port int 24 } 25 26 // ParseTarget parses the resolver.Target. 27 func ParseTarget(target resolver.Target) (Service, error) { 28 var service Service 29 service.Namespace = targets.GetAuthority(target) 30 if len(service.Namespace) == 0 { 31 service.Namespace = defaultNamespace 32 } 33 34 endpoints := targets.GetEndpoints(target) 35 segs := strings.SplitN(endpoints, colon, 2) 36 if len(segs) < 2 { 37 return emptyService, fmt.Errorf("bad endpoint: %s", endpoints) 38 } 39 40 service.Name = segs[0] 41 port, err := strconv.Atoi(segs[1]) 42 if err != nil { 43 return emptyService, err 44 } 45 46 service.Port = port 47 48 return service, nil 49 }