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