-
Notifications
You must be signed in to change notification settings - Fork 94
Open
Labels
Description
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
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