From 74fea27a32043e86ff7d87bc5f404bcc8c4337fb Mon Sep 17 00:00:00 2001 From: Kelvin Clement Mwinuka Date: Sat, 8 Jul 2023 19:30:26 +0800 Subject: [PATCH] Implemented llen command --- server/plugins/commands/list/list.go | 33 ++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/server/plugins/commands/list/list.go b/server/plugins/commands/list/list.go index 039d252..ec507a2 100644 --- a/server/plugins/commands/list/list.go +++ b/server/plugins/commands/list/list.go @@ -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:])