dashboard/utils/hexcode.go
2021-11-09 15:40:47 +00:00

35 lines
611 B
Go

package utils
import (
"fmt"
"strconv"
"strings"
)
type HexColour int
func (h HexColour) Int() int {
return int(h)
}
func (h HexColour) MarshalJSON() ([]byte, error) {
return []byte(fmt.Sprintf(`"#%06x"`, h)), nil
}
func (h *HexColour) UnmarshalJSON(data []byte) error {
str := strings.TrimPrefix(string(data), `"`)
str = strings.TrimPrefix(str, "#")
str = strings.TrimSuffix(str, `"`)
i, err := strconv.ParseInt(str, 16, 32)
if err != nil {
return err
}
if i < 0 || i > 0xFFFFFF {
return fmt.Errorf("invalid hex colour: %s", str)
}
*h = HexColour(i)
return nil
}