package model import ( "database/sql/driver" "encoding/json" ) // ScanJSON scans a database value (nil, []byte, or string) into any JSON-unmarshalable pointer. func ScanJSON[T any](ptr *T, value any) error { if value == nil { return nil } var data []byte switch v := value.(type) { case []byte: data = v case string: data = []byte(v) default: return nil } return json.Unmarshal(data, ptr) } // ValueJSON marshals any value to JSON for database storage. func ValueJSON[T any](val T) (driver.Value, error) { return json.Marshal(val) }