gob.go raw

   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