Browse Source

update add type map[string]interface{}

ls 3 years ago
parent
commit
0376c57554
1 changed files with 59 additions and 0 deletions
  1. 59 0
      utils.go

+ 59 - 0
utils.go

@@ -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})
+}