code: func (c *client) call(ctx context.Context, method, urlPath string, params url.Values, data, dest interface{}, expectedHTTPCodes ...int) (int, error) {
  	headers := make(map[string]string)
  
  	var rawData []byte
  	if data != nil {
  		var err error
  		rawData, err = json.Marshal(data)
  		if err != nil {
  			return -1, status.Errorf(codes.Internal, "failed to serialize request message: %s", err)
  		}
  		headers["Content-Type"] = contentTypeJSON
  	}
  
  	ret, body, err := c.callRaw(ctx, method, urlPath, params, headers, rawData, expectedHTTPCodes...)
  	body = bytes.TrimPrefix(body, jsonPrefix)
  	if err == nil {
  		if err = json.Unmarshal(body, dest); err != nil {
  			return ret, status.Errorf(codes.Internal, "failed to desirealize response: %s", err)
  		}
  	}
  	return ret, err
  }
docs: // call executes a request to Gerrit REST API with JSON input/output.
  // If data is nil, request will be made without a body.
  //
  // call returns HTTP status code and gRPC error.
  // If error happens before HTTP status code was determined, HTTP status code
  // will be -1.