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