github.com/annwntech/go-micro/v2@v2.9.5/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 }