44 lines
743 B
Go
44 lines
743 B
Go
package common
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"encoding/json"
|
|
"errors"
|
|
)
|
|
|
|
type JSONMap map[string]interface{}
|
|
|
|
func (m JSONMap) Value() (driver.Value, error) {
|
|
if m == nil {
|
|
return nil, nil
|
|
}
|
|
return json.Marshal(m)
|
|
}
|
|
|
|
func (m *JSONMap) Scan(value interface{}) error {
|
|
if value == nil {
|
|
*m = make(map[string]interface{})
|
|
return nil
|
|
}
|
|
var err error
|
|
switch value.(type) {
|
|
case []byte:
|
|
err = json.Unmarshal(value.([]byte), m)
|
|
case string:
|
|
err = json.Unmarshal([]byte(value.(string)), m)
|
|
default:
|
|
err = errors.New("basetypes.JSONMap.Scan: invalid value type")
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type TreeNode[T any] interface {
|
|
GetChildren() []T
|
|
SetChildren(children T)
|
|
GetID() int
|
|
GetParentID() int
|
|
}
|