code: func (h *Connect) IntentionMatch(args *IntentionMatch, q *QueryOptions) (map[string][]*Intention, *QueryMeta, error) {
  	r := h.c.newRequest("GET", "/v1/connect/intentions/match")
  	r.setQueryOptions(q)
  	r.params.Set("by", string(args.By))
  	for _, name := range args.Names {
  		r.params.Add("name", name)
  	}
  	rtt, resp, err := requireOK(h.c.doRequest(r))
  	if err != nil {
  		return nil, nil, err
  	}
  	defer resp.Body.Close()
  
  	qm := &QueryMeta{}
  	parseQueryMeta(resp, qm)
  	qm.RequestTime = rtt
  
  	var out map[string][]*Intention
  	if err := decodeBody(resp, &out); err != nil {
  		return nil, nil, err
  	}
  	return out, qm, nil
  }
docs: // IntentionMatch returns the list of intentions that match a given source
  // or destination. The returned intentions are ordered by precedence where
  // result[0] is the highest precedence (if that matches, then that rule overrides
  // all other rules).
  //
  // Matching can be done for multiple names at the same time. The resulting
  // map is keyed by the given names. Casing is preserved.