code: func (c *Client) Send(ctx context.Context, req *Request, auth *discovery.AuthInfo) (Response, error) {
  	reqToBeSent := *req.Request
  	reqToBeSent.Authentication = auth
  	payload, err := proto.Marshal(&reqToBeSent)
  	if err != nil {
  		return nil, errors.Wrap(err, "failed marshaling Request to bytes")
  	}
  
  	sig, err := c.signRequest(payload)
  	if err != nil {
  		return nil, errors.Wrap(err, "failed signing Request")
  	}
  
  	conn, err := c.createConnection()
  	if err != nil {
  		return nil, errors.Wrap(err, "failed connecting to discovery service")
  	}
  
  	cl := discovery.NewDiscoveryClient(conn)
  	resp, err := cl.Discover(ctx, &discovery.SignedRequest{
  		Payload:   payload,
  		Signature: sig,
  	})
  	if err != nil {
  		return nil, errors.Wrap(err, "discovery service refused our Request")
  	}
  	if n := len(resp.Results); n != req.lastIndex {
  		return nil, errors.Errorf("Sent %d queries but received %d responses back", req.lastIndex, n)
  	}
  	return req.computeResponse(resp)
  }
docs: // Send sends the request and returns the response, or error on failure