43 lines
643 B
Go
43 lines
643 B
Go
package sqlite
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"encoding/json"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type JSONMap map[string]any
|
|
|
|
func (j *JSONMap) Scan(value interface{}) error {
|
|
if value == nil {
|
|
return nil
|
|
}
|
|
|
|
var data []byte
|
|
|
|
switch typ := value.(type) {
|
|
case []byte:
|
|
data = typ
|
|
case string:
|
|
data = []byte(typ)
|
|
default:
|
|
return errors.Errorf("unexpected type '%T'", value)
|
|
}
|
|
|
|
if err := json.Unmarshal(data, &j); err != nil {
|
|
return errors.WithStack(err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (j JSONMap) Value() (driver.Value, error) {
|
|
data, err := json.Marshal(j)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
return data, nil
|
|
}
|