|
@@ -2,6 +2,7 @@ package myth
|
|
|
|
|
|
import (
|
|
import (
|
|
"encoding/json"
|
|
"encoding/json"
|
|
|
|
+ "encoding/xml"
|
|
)
|
|
)
|
|
|
|
|
|
// Map is a shortcut for map[string]interface{}
|
|
// Map is a shortcut for map[string]interface{}
|
|
@@ -18,3 +19,25 @@ func (m Map) Bytes() []byte {
|
|
bs, _ := json.Marshal(m)
|
|
bs, _ := json.Marshal(m)
|
|
return bs
|
|
return bs
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+// MarshalXML allows type Map to be used with xml.Marshal.
|
|
|
|
+func (m Map) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
|
|
|
+ start.Name = xml.Name{
|
|
|
|
+ Space: "",
|
|
|
|
+ Local: "map",
|
|
|
|
+ }
|
|
|
|
+ if err := e.EncodeToken(start); err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ for key, value := range m {
|
|
|
|
+ elem := xml.StartElement{
|
|
|
|
+ Name: xml.Name{Space: "", Local: key},
|
|
|
|
+ Attr: []xml.Attr{},
|
|
|
|
+ }
|
|
|
|
+ if err := e.EncodeElement(value, elem); err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return e.EncodeToken(xml.EndElement{Name: start.Name})
|
|
|
|
+}
|