package entity

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

	"github.com/pingcap/errors"
)

func (j *Labels) Scan(value interface{}) error {
	bytes, ok := value.([]byte)
	if !ok {
		return errors.New(fmt.Sprint("Failed to unmarshal JSON value:", value))
	}

	result := Labels{}
	err := json.Unmarshal(bytes, &result)
	if err != nil {
		return errors.AddStack(err)
	}
	*j = result
	return nil
}

func (j Labels) Value() (driver.Value, error) {
	return json.Marshal(j)
}

func (j *MeteringUnits) Scan(value interface{}) error {
	bytes, ok := value.([]byte)
	if !ok {
		return errors.New(fmt.Sprint("Failed to unmarshal JSON value:", value))
	}

	result := MeteringUnits{}
	err := json.Unmarshal(bytes, &result)
	if err != nil {
		return errors.AddStack(err)
	}
	*j = result
	return nil
}

func (j MeteringUnits) Value() (driver.Value, error) {
	return json.Marshal(j)
}
