/
parser.go
116 lines (107 loc) · 2.36 KB
/
parser.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package main
import (
"errors"
"strconv"
"github.com/gin-gonic/gin"
"github.com/lucasb-eyer/go-colorful"
)
const (
BRIGHTNESS_RATIO = 4
BRIGHTNESS_OFFSET = 2
BRIGHTNESS_MIN = 1
BRIGHTNESS_MAX = 100
)
func ParseGroup(c *gin.Context) (int, error) {
group := c.Query("group")
id, err := strconv.Atoi(group)
if err != nil {
err = errors.New("failed to parse group")
return -1, err
}
if id < 0 || id > 4 {
err = errors.New("invalid id. must be <= 0 or >= 4")
return -1, err
}
return id, nil
}
func ParseRGB(c *gin.Context) (colorful.Color, error) {
rgb := map[string]float64{
"r": 0,
"g": 0,
"b": 0,
}
var err error
for k, v := range rgb {
if v, err = strconv.ParseFloat(c.Query(k), 64); err != nil {
err = errors.New("failed to parse color")
return colorful.Color{}, err
}
if v < 0 || v > 255 {
err = errors.New("invalid color value. must be <= 0 or >= 255")
return colorful.Color{}, err
}
rgb[k] = v
}
color := colorful.Color{
rgb["r"] / 255.0,
rgb["g"] / 255.0,
rgb["b"] / 255.0,
}
return color, nil
}
func parseSpeed(c *gin.Context) (string, error) {
speed := c.Query("speed")
switch speed {
case "":
return "", nil
case "up":
return "up", nil
case "down":
return "down", nil
default:
err := errors.New("failed to parse speed")
return "", err
}
}
func ParseBrightnessLevel(c *gin.Context) (uint8, error) {
level := c.Query("level")
b64, err := strconv.ParseUint(level, 10, 8)
if err != nil {
err = errors.New("failed to parse brightness level")
return 0, err
}
b := uint8(b64)
if b < BRIGHTNESS_MIN || b > BRIGHTNESS_MAX {
err = errors.New("invalid brightness level. Must be between 1-100")
return 0, err
}
b = b/BRIGHTNESS_RATIO + BRIGHTNESS_OFFSET
return b, nil
}
func ParseColor(c *gin.Context) (uint8, error) {
Colors := map[string]uint8{
"violet": 0x00,
"blue": 0x10,
"baby_blue": 0x20,
"aqua": 0x30,
"mint": 0x40,
"seafoam_green": 0x50,
"green": 0x60,
"lime_green": 0x70,
"yellow": 0x80,
"yellow_orange": 0x90,
"orange": 0xA0,
"red": 0xB0,
"pink": 0xC0,
"fusia": 0xD0,
"purple": 0xE0,
"lavendar": 0xF0,
}
color := c.Query("color")
colorHex, ok := Colors[color]
if !ok {
err := errors.New("invalid color name")
return 0, err
}
return colorHex, nil
}