|
@@ -0,0 +1,59 @@
|
|
|
+package sacred
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "encoding/xml"
|
|
|
+)
|
|
|
+
|
|
|
+// M is a shortcut for map[string]interface{}
|
|
|
+type M map[string]interface{}
|
|
|
+
|
|
|
+// NewM make map[string]interface{}
|
|
|
+func NewM() M {
|
|
|
+ return make(map[string]interface{})
|
|
|
+}
|
|
|
+
|
|
|
+// Set key-value to map[string]interface{}
|
|
|
+func (m M) Set(k string, v interface{}) {
|
|
|
+ m[k] = v
|
|
|
+}
|
|
|
+
|
|
|
+// Get value from map[string]interface{}
|
|
|
+func (m M) Get(k string) (v interface{}, ok bool) {
|
|
|
+ v, ok = m[k]
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// String map to json string
|
|
|
+func (m M) String() string {
|
|
|
+ bs, _ := json.Marshal(m)
|
|
|
+ return string(bs)
|
|
|
+}
|
|
|
+
|
|
|
+// Bytes map to json bytes
|
|
|
+func (m M) Bytes() []byte {
|
|
|
+ bs, _ := json.Marshal(m)
|
|
|
+ return bs
|
|
|
+}
|
|
|
+
|
|
|
+// MarshalXML allows type Map to be used with xml.Marshal.
|
|
|
+func (m M) 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})
|
|
|
+}
|