code: func (d *DNSProvider) rpcCall(call *methodCall, resp response) error {
  	// marshal
  	b, err := xml.MarshalIndent(call, "", "  ")
  	if err != nil {
  		return fmt.Errorf("marshal error: %v", err)
  	}
  
  	// post
  	b = append([]byte(`<?xml version="1.0"?>`+"\n"), b...)
  	respBody, err := d.httpPost(d.config.BaseURL, "text/xml", bytes.NewReader(b))
  	if err != nil {
  		return err
  	}
  
  	// unmarshal
  	err = xml.Unmarshal(respBody, resp)
  	if err != nil {
  		return fmt.Errorf("unmarshal error: %v", err)
  	}
  	if resp.faultCode() != 0 {
  		return rpcError{
  			faultCode: resp.faultCode(), faultString: resp.faultString()}
  	}
  	return nil
  }
docs: // rpcCall makes an XML-RPC call to Gandi's RPC endpoint by
  // marshaling the data given in the call argument to XML and sending
  // that via HTTP Post to Gandi.
  // The response is then unmarshalled into the resp argument.