Skip to content

Handling Nil in the XML-RPC #84

@isaacwein

Description

@isaacwein

This project is a major help in for me and it freed up a lot of hours of my time.

This is not a bug it is an Enhancement request

but I think that this library is not parsing the nil values from XML-RPC to GO the right way

GO-PLAYGROUND

for example i have this XML-RPC

<?xml version='1.0'?>
<methodResponse>
  <params>
    <param>
      <value>
        <struct>
          <member><name>result</name><value><string>OK</string></value></member>
          <member><name>users</name><value><array><data>
	     <value><struct>
		<member><name>id</name><value><int>123</int></value></member>
		<member><name>name</name><value><string>jack</string></value></member>
		<member><name>vendor</name><value><nil/></value></member>
		<member><name>account_id</name><value><int>1</int></value></member>
		<member><name>number</name><value><string>+12345678900</string></value></member>
             </struct></value>
             <value><struct>
		<member><name>id</name><value><int>123</int></value></member>
                <member><name>name</name><value><string>mark</string></value></member>
                <member><name>vendor</name><value><struct>
                   <member><name>vendor_name</name><value><string>abc.xyz</string></value></member>
                </struct></value></member>
                <member><name>account_id</name><value><int>1</int></value></member>
                <member><name>number</name><value><nil/></value></member>
             </struct></value>
           </data></array></value></member>
        </struct>
      </value>
    </param>
  </params>
</methodResponse>

and I am trying to parse it into this type structure

type ResponseData struct {
	Result string  `xmlrpc:"result"`
	// this will throw an error "error: type mismatch - can't unmarshal invalid to struct"
	// solution: use []User
	Data   []*User `xmlrpc:"users"`
}

type User struct {
	ID        int64   `xmlrpc:"id"`
	Name      string  `xmlrpc:"name"`
	// this will not throw error,
	// but it will define it even it's nil
	Vendor    *Vendor `xmlrpc:"vendor"` // vendor might be nil
	AccountID int64   `xmlrpc:"account_id"`
	// this will not work it will always be empty string even the value is nil
	Number    *string `xmlrpc:"number"` // phone number might be nil
}

type Vendor struct {
	VendorName string `xmlrpc:"vendor_name"`
}

in some cases, it will throw an error, and in some cases it will ignore the XML-RPC nil value and define the pointer as an empty value,
for example, if the XML-RPC has a nullable string and the type has a pointer type of a string the parser shouldn't define the string in a nil case it should leave it nil

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions