1 // gob.go - Encode/Decode a Map into a gob object.
2 3 package mxj
4 5 import (
6 "bytes"
7 "encoding/gob"
8 )
9 10 // NewMapGob returns a Map value for a gob object that has been
11 // encoded from a map[string]interface{} (or compatible type) value.
12 // It is intended to provide symmetric handling of Maps that have
13 // been encoded using mv.Gob.
14 func NewMapGob(gobj []byte) (Map, error) {
15 m := make(map[string]interface{}, 0)
16 if len(gobj) == 0 {
17 return m, nil
18 }
19 r := bytes.NewReader(gobj)
20 dec := gob.NewDecoder(r)
21 if err := dec.Decode(&m); err != nil {
22 return m, err
23 }
24 return m, nil
25 }
26 27 // Gob returns a gob-encoded value for the Map 'mv'.
28 func (mv Map) Gob() ([]byte, error) {
29 var buf bytes.Buffer
30 enc := gob.NewEncoder(&buf)
31 if err := enc.Encode(map[string]interface{}(mv)); err != nil {
32 return nil, err
33 }
34 return buf.Bytes(), nil
35 }
36