package models import ( "database/sql" "database/sql/driver" "encoding/json" "fmt" ) type scannableJSON struct { v interface{} } func (s *scannableJSON) Scan(src interface{}) error { if src == nil { return nil } var data []byte switch v := src.(type) { case []byte: data = v case string: data = []byte(v) default: return fmt.Errorf("unsupported type for JSON scan: %T", src) } return json.Unmarshal(data, s.v) } func tagsToJSON(tags []string) string { if tags == nil { return "[]" } b, _ := json.Marshal(tags) return string(b) } func boolToInt(b bool) int { if b { return 1 } return 0 } var _ sql.Scanner = (*scannableJSON)(nil) var _ driver.Valuer = (*scannableJSON)(nil) func (s *scannableJSON) Value() (driver.Value, error) { return json.Marshal(s.v) }