Implemented llen command

This commit is contained in:
Kelvin Clement Mwinuka
2023-07-08 19:30:26 +08:00
parent f0c3526138
commit 74fea27a32

View File

@@ -44,6 +44,9 @@ func (p *plugin) HandleCommand(cmd []string, server interface{}, conn *bufio.Wri
c := strings.ToLower(cmd[0])
switch {
case c == "llen":
handleLLen(cmd, server.(Server), conn)
case c == "lrange":
handleLRange(cmd, server.(Server), conn)
@@ -58,6 +61,29 @@ func (p *plugin) HandleCommand(cmd []string, server interface{}, conn *bufio.Wri
}
}
func handleLLen(cmd []string, server Server, conn *bufio.Writer) {
if len(cmd) != 2 {
conn.Write([]byte("-Error wrong number of args for LLEN command\r\n\n"))
conn.Flush()
return
}
server.Lock()
list, ok := server.GetData(cmd[1]).([]interface{})
if !ok {
server.Unlock()
conn.Write([]byte("-Error LLEN command on non-list item\r\n\n"))
conn.Flush()
return
}
server.Unlock()
conn.Write([]byte(fmt.Sprintf(":%d\r\n\n", len(list))))
conn.Flush()
}
func handleLRange(cmd []string, server Server, conn *bufio.Writer) {
if len(cmd) != 4 {
conn.Write([]byte("-Error wrong number of arguments for LRANGE command\r\n\n"))
@@ -257,13 +283,6 @@ func handlePop(cmd []string, server Server, conn *bufio.Writer) {
return
}
if list == nil {
server.Unlock()
conn.Write([]byte("-Error no list at key\r\n\n"))
conn.Flush()
return
}
switch strings.ToLower(cmd[0]) {
default:
server.SetData(cmd[1], list[1:])