code: func (c *Catalog) NodeServices(args *structs.NodeSpecificRequest, reply *structs.IndexedNodeServices) error {
  	if done, err := c.srv.forward("Catalog.NodeServices", args, args, reply); done {
  		return err
  	}
  
  	// Verify the arguments
  	if args.Node == "" {
  		return fmt.Errorf("Must provide node")
  	}
  
  	var filterType map[string]*structs.NodeService
  	filter, err := bexpr.CreateFilter(args.Filter, nil, filterType)
  	if err != nil {
  		return err
  	}
  
  	return c.srv.blockingQuery(
  		&args.QueryOptions,
  		&reply.QueryMeta,
  		func(ws memdb.WatchSet, state *state.Store) error {
  			index, services, err := state.NodeServices(ws, args.Node)
  			if err != nil {
  				return err
  			}
  
  			reply.Index, reply.NodeServices = index, services
  			if err := c.srv.filterACL(args.Token, reply); err != nil {
  				return err
  			}
  
  			if reply.NodeServices != nil {
  				raw, err := filter.Execute(reply.NodeServices.Services)
  				if err != nil {
  					return err
  				}
  				reply.NodeServices.Services = raw.(map[string]*structs.NodeService)
  			}
  
  			return nil
  		})
  }
docs: // NodeServices returns all the services registered as part of a node