package selector import ( "go-micro.dev/v4/registry" ) // FilterEndpoint is an endpoint based Select Filter which will // only return services with the endpoint specified. func FilterEndpoint(name string) Filter { return func(old []*registry.Service) []*registry.Service { var services []*registry.Service for _, service := range old { for _, ep := range service.Endpoints { if ep.Name == name { services = append(services, service) break } } } return services } } // FilterLabel is a label based Select Filter which will // only return services with the label specified. func FilterLabel(key, val string) Filter { return func(old []*registry.Service) []*registry.Service { var services []*registry.Service for _, service := range old { serv := new(registry.Service) var nodes []*registry.Node for _, node := range service.Nodes { if node.Metadata == nil { continue } if node.Metadata[key] == val { nodes = append(nodes, node) } } // only add service if there's some nodes if len(nodes) > 0 { // copy *serv = *service serv.Nodes = nodes services = append(services, serv) } } return services } } // FilterVersion is a version based Select Filter which will // only return services with the version specified. func FilterVersion(version string) Filter { return func(old []*registry.Service) []*registry.Service { var services []*registry.Service for _, service := range old { if service.Version == version { services = append(services, service) } } return services } }