...
1 package colorful
2
3 import (
4 "database/sql/driver"
5 "encoding/json"
6 "fmt"
7 "reflect"
8 )
9
10
11
12
13 type HexColor Color
14
15 type errUnsupportedType struct {
16 got interface{}
17 want reflect.Type
18 }
19
20 func (hc *HexColor) Scan(value interface{}) error {
21 s, ok := value.(string)
22 if !ok {
23 return errUnsupportedType{got: reflect.TypeOf(value), want: reflect.TypeOf("")}
24 }
25 c, err := Hex(s)
26 if err != nil {
27 return err
28 }
29 *hc = HexColor(c)
30 return nil
31 }
32
33 func (hc *HexColor) Value() (driver.Value, error) {
34 return Color(*hc).Hex(), nil
35 }
36
37 func (e errUnsupportedType) Error() string {
38 return fmt.Sprintf("unsupported type: got %v, want a %s", e.got, e.want)
39 }
40
41 func (hc *HexColor) UnmarshalJSON(data []byte) error {
42 var hexCode string
43 if err := json.Unmarshal(data, &hexCode); err != nil {
44 return err
45 }
46
47 var col, err = Hex(hexCode)
48 if err != nil {
49 return err
50 }
51 *hc = HexColor(col)
52 return nil
53 }
54
55 func (hc HexColor) MarshalJSON() ([]byte, error) {
56 return json.Marshal(Color(hc).Hex())
57 }
58
59
60 func (hc *HexColor) Decode(hexCode string) error {
61 var col, err = Hex(hexCode)
62 if err != nil {
63 return err
64 }
65 *hc = HexColor(col)
66 return nil
67 }
68
View as plain text