forked from baron/baron-sso
43 lines
804 B
Go
43 lines
804 B
Go
package domain
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
// JSONMap is a custom type for handling map[string]any with PostgreSQL JSONB
|
|
type JSONMap map[string]any
|
|
|
|
// Value implements the driver.Valuer interface
|
|
func (m JSONMap) Value() (driver.Value, error) {
|
|
if m == nil {
|
|
return nil, nil
|
|
}
|
|
ba, err := json.Marshal(m)
|
|
return string(ba), err
|
|
}
|
|
|
|
// Scan implements the sql.Scanner interface
|
|
func (m *JSONMap) Scan(value any) error {
|
|
if value == nil {
|
|
*m = make(JSONMap)
|
|
return nil
|
|
}
|
|
var bytes []byte
|
|
switch v := value.(type) {
|
|
case []byte:
|
|
bytes = v
|
|
case string:
|
|
bytes = []byte(v)
|
|
default:
|
|
return errors.New(fmt.Sprintf("failed to scan JSONMap: %v", value))
|
|
}
|
|
|
|
result := make(JSONMap)
|
|
err := json.Unmarshal(bytes, &result)
|
|
*m = result
|
|
return err
|
|
}
|