code: func (c *Client) CallWithOptions(serviceMethod string, args interface{}, ret interface{}, opts ...func(*RequestOpts)) error {
  	var buf bytes.Buffer
  	if args != nil {
  		if err := json.NewEncoder(&buf).Encode(args); err != nil {
  			return err
  		}
  	}
  	body, err := c.callWithRetry(serviceMethod, &buf, true, opts...)
  	if err != nil {
  		return err
  	}
  	defer body.Close()
  	if ret != nil {
  		if err := json.NewDecoder(body).Decode(&ret); err != nil {
  			logrus.Errorf("%s: error reading plugin resp: %v", serviceMethod, err)
  			return err
  		}
  	}
  	return nil
  }
docs: // CallWithOptions is just like call except it takes options