github.com/btccom/go-micro/v2@v2.9.3/store/cockroach/metadata.go (about)

     1  package cockroach
     2  
     3  import (
     4  	"database/sql/driver"
     5  	"encoding/json"
     6  	"errors"
     7  )
     8  
     9  // https://github.com/upper/db/blob/master/postgresql/custom_types.go#L43
    10  type Metadata map[string]interface{}
    11  
    12  // Scan satisfies the sql.Scanner interface.
    13  func (m *Metadata) Scan(src interface{}) error {
    14  	source, ok := src.([]byte)
    15  	if !ok {
    16  		return errors.New("Type assertion .([]byte) failed.")
    17  	}
    18  
    19  	var i interface{}
    20  	err := json.Unmarshal(source, &i)
    21  	if err != nil {
    22  		return err
    23  	}
    24  
    25  	*m, ok = i.(map[string]interface{})
    26  	if !ok {
    27  		return errors.New("Type assertion .(map[string]interface{}) failed.")
    28  	}
    29  
    30  	return nil
    31  }
    32  
    33  // Value satisfies the driver.Valuer interface.
    34  func (m Metadata) Value() (driver.Value, error) {
    35  	j, err := json.Marshal(m)
    36  	return j, err
    37  }
    38  
    39  func toMetadata(m *Metadata) map[string]interface{} {
    40  	md := make(map[string]interface{})
    41  	for k, v := range *m {
    42  		md[k] = v
    43  	}
    44  	return md
    45  }