module HNormalise.Snoopy.Parser where
import Control.Applicative ((<|>))
import Data.Attoparsec.Combinator (lookAhead, manyTill)
import Data.Attoparsec.Text
import Data.Char (isSpace)
import Data.Text (Text)
import HNormalise.Common.Parser
import HNormalise.Snoopy.Internal
parseSnoopy :: Parser (Text, Snoopy)
parseSnoopy = do
string "snoopy["
pid <- decimal
takeTill ( == '[') *> char '['
uid <- string "uid:" *> decimal
username <- maybeOption $ skipSpace *> string "username:" *> takeTill isSpace
sid <- skipSpace *> string "sid:" *> decimal
tty <- skipSpace *> string "tty:" *> takeTill isSpace
cwd <- skipSpace *> string "cwd:" *> takeTill isSpace
executable <- skipSpace *> "filename:" *> takeTill ( == ']')
string "]:"
command <- skipSpace *> takeText
return $ ("snoopy", Snoopy
{ pid = pid
, uid = uid
, username = username
, sid = sid
, tty = tty
, cwd = cwd
, executable = executable
, command = command
})