Skip to content

Instantly share code, notes, and snippets.

@nabeken
Created January 1, 2015 08:49
Show Gist options
  • Save nabeken/ba4687a72e3cc9c33c2f to your computer and use it in GitHub Desktop.
Save nabeken/ba4687a72e3cc9c33c2f to your computer and use it in GitHub Desktop.
xml vs map in Go
package main
import "fmt"
import "encoding/xml"
// IdentityDkimAttributes is undocumented.
type IdentityDkimAttributes struct {
DkimEnabled bool `query:"DkimEnabled" xml:"DkimEnabled"`
DkimTokens []string `query:"DkimTokens.member" xml:"DkimTokens>member"`
DkimVerificationStatus string `query:"DkimVerificationStatus" xml:"DkimVerificationStatus"`
}
type IdentityDkimAttributesMap map[string]IdentityDkimAttributes
func (m *IdentityDkimAttributesMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
(*m) = make(IdentityDkimAttributesMap)
v := struct {
Entry []struct{
Key string `xml:"key"`
Value IdentityDkimAttributes `xml:"value"`
} `xml:"entry"`
}{}
if err := d.DecodeElement(&v, &start); err != nil {
return err
}
for _, e := range v.Entry {
(*m)[e.Key] = e.Value
}
return nil
}
// GetIdentityDkimAttributesResponse is undocumented.
type GetIdentityDkimAttributesResponse struct {
DkimAttributes IdentityDkimAttributesMap `query:"DkimAttributes" xml:"GetIdentityDkimAttributesResult>DkimAttributes"`
}
var x = []byte(`<?xml version="1.0"?>
<GetIdentityDkimAttributesResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
<GetIdentityDkimAttributesResult>
<DkimAttributes>
<entry>
<key>amazon.com</key>
<value>
<DkimEnabled>true</DkimEnabled>
<DkimVerificationStatus>Success</DkimVerificationStatus>
<DkimTokens>
<member>vvjuipp74whm76gqoni7qmwwn4w4qusjiainivf6f</member>
<member>3frqe7jn4obpuxjpwpolz6ipb3k5nvt2nhjpik2oy</member>
<member>wrqplteh7oodxnad7hsl4mixg2uavzneazxv5sxi2</member>
</DkimTokens>
</value>
</entry>
<entry>
<key>amazon.co.jp</key>
<value>
<DkimEnabled>true</DkimEnabled>
<DkimVerificationStatus>Success</DkimVerificationStatus>
<DkimTokens>
<member>vvjuipp74whm76gqoni7qmwwn4w4qusjiainivf6f</member>
<member>3frqe7jn4obpuxjpwpolz6ipb3k5nvt2nhjpik2oy</member>
<member>wrqplteh7oodxnad7hsl4mixg2uavzneazxv5sxi2</member>
</DkimTokens>
</value>
</entry>
</DkimAttributes>
</GetIdentityDkimAttributesResult>
<ResponseMetadata>
<RequestId>bb5a105d-c468-11e1-82eb-dff885ccc06a</RequestId>
</ResponseMetadata>
</GetIdentityDkimAttributesResponse>
`)
var m = []byte(`<?xml version="1.0"?>
<DkimAttributes>
<entry>
<key>amazon.com</key>
<value>
<DkimEnabled>true</DkimEnabled>
<DkimVerificationStatus>Success</DkimVerificationStatus>
<DkimTokens>
<member>vvjuipp74whm76gqoni7qmwwn4w4qusjiainivf6f</member>
<member>3frqe7jn4obpuxjpwpolz6ipb3k5nvt2nhjpik2oy</member>
<member>wrqplteh7oodxnad7hsl4mixg2uavzneazxv5sxi2</member>
</DkimTokens>
</value>
</entry>
<entry>
<key>amazon.co.jp</key>
<value>
<DkimEnabled>true</DkimEnabled>
<DkimVerificationStatus>Success</DkimVerificationStatus>
<DkimTokens>
<member>vvjuipp74whm76gqoni7qmwwn4w4qusjiainivf6f</member>
<member>3frqe7jn4obpuxjpwpolz6ipb3k5nvt2nhjpik2oy</member>
<member>wrqplteh7oodxnad7hsl4mixg2uavzneazxv5sxi2</member>
</DkimTokens>
</value>
</entry>
</DkimAttributes>
`)
func main() {
{
e := GetIdentityDkimAttributesResponse{}
xml.Unmarshal(x, &e)
fmt.Println(e)
}
{
e := IdentityDkimAttributesMap{}
xml.Unmarshal(m, &e)
fmt.Println(e)
}
}
var _ xml.Unmarshaler = &IdentityDkimAttributesMap{}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment