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  }