package model

import (
	"database/sql/driver"
	"encoding/json"
)

// StringJSONBArray 用于将 []string 与 PostgreSQL jsonb 列互转
// 读写时通过 Scan/Value 完成序列化，空切片序列化为 []
type StringJSONBArray []string

// Value 写入数据库时序列化为 JSON
func (a StringJSONBArray) Value() (driver.Value, error) {
	if a == nil {
		return "[]", nil
	}
	return json.Marshal(a)
}

// Scan 从数据库读取时反序列化
func (a *StringJSONBArray) Scan(value any) error {
	if value == nil {
		*a = StringJSONBArray{}
		return nil
	}
	b, ok := value.([]byte)
	if !ok {
		*a = StringJSONBArray{}
		return nil
	}
	return json.Unmarshal(b, a)
}
