module Language.JSON.String.Parser

import Language.JSON.String.Tokens
import Text.Lexer
import Text.Parser

%access private
%default total

stringChar : Grammar JSONStringToken True Char
stringChar = match JSTChar
         <|> match JSTSimpleEscape
         <|> match JSTUnicodeEscape

quotedString : Grammar JSONStringToken True String
quotedString = let q = match JSTQuote in
                   do chars <- between q q (many stringChar)
                      eof
                      pure $ pack chars

export
parseString : List JSONStringToken -> Maybe String
parseString toks = case parse quotedString toks of
                        Right (str, []) => Just str
                        _ => Nothing