-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcommand.go
80 lines (74 loc) · 1.87 KB
/
command.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
package main
import (
"strconv"
"strings"
)
type Command struct {
fullText string
}
func (c Command) parse() (commandType string, key string, parsedArguments [][2]string) {
commandComponents := strings.Fields(c.fullText)
if len(commandComponents) == 0 {
return
}
if commandComponents[0] == "GET" && len(commandComponents) == 2 {
commandType = "GET"
key = commandComponents[1]
return
}
if commandComponents[0] == "SET" && len(commandComponents) == 3 {
commandType = "SET"
key = commandComponents[1]
parsedArguments = [][2]string{
{commandComponents[2], ""},
}
return
}
if commandComponents[0] == "EXPIRE" && len(commandComponents) == 3 {
if _, err := strconv.ParseInt(commandComponents[2], 10, 64); err != nil {
return
}
commandType = "EXPIRE"
key = commandComponents[1]
parsedArguments = [][2]string{
{commandComponents[2], ""},
}
return
}
if commandComponents[0] == "ZRANK" && len(commandComponents) == 3 {
commandType = "ZRANK"
key = commandComponents[1]
parsedArguments = [][2]string{
{commandComponents[2], ""},
}
return
}
if commandComponents[0] == "ZADD" && len(commandComponents) >= 4 &&
len(commandComponents)%2 == 0 {
commandType = "ZADD"
key = commandComponents[1]
for i := 2; i < len(commandComponents); i = i + 2 {
parsedArguments = append(parsedArguments, [2]string{
commandComponents[i],
commandComponents[i+1],
})
}
return
}
if commandComponents[0] == "ZRANGE" && len(commandComponents) >= 4 {
commandType = "ZRANGE"
key = commandComponents[1]
if len(commandComponents) == 5 && commandComponents[4] == "WITHSCORES" {
parsedArguments = [][2]string{
{commandComponents[2], commandComponents[3]},
{commandComponents[4], ""},
}
} else if len(commandComponents) == 4 {
parsedArguments = [][2]string{
{commandComponents[2], commandComponents[3]},
}
}
return
}
return
}