You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

50 lines
797 B

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)
}