module Database.Redis.Parser (
parseRequest,
) where
import Control.Applicative
import Control.Monad
import Data.Attoparsec.Char8 as A
import Database.Redis.Types
parseRequest :: Parser Request
parseRequest = unified <|> inline where
unified = do
n <- char '*' *> decimal <* crlf
Request <$> replicateM n arg
arg = do
n <- char '$' *> decimal <* crlf
A.take n <* crlf
inline = do
cmd <- A.takeWhile1 A.isAlpha_ascii
Request <$> ((cmd:) <$> many (char ' ' *> A.takeTill isSpace)) <* crlf
crlf = string "\r\n"