json-stream-0.4.6.0: Data/JsonStream/TokenParser.hs
{-# LANGUAGE OverloadedStrings #-}
module Data.JsonStream.TokenParser (
Element(..)
, TokenResult(..)
) where
import qualified Data.Aeson as AE
import qualified Data.ByteString.Char8 as BS
import Foreign.C.Types
data Element =
ArrayBegin
| ArrayEnd !BS.ByteString -- Rest of the source string for correct (ParseDone <rest>)
| ObjectBegin
| ObjectEnd !BS.ByteString -- Rest of the source string for correct (ParseDone <rest>)
| StringContent !BS.ByteString
| StringRaw !BS.ByteString !Bool !BS.ByteString -- Allow raw strings to go into parser as bytestring/ isAscii
| StringEnd !BS.ByteString
| JValue !AE.Value
| JInteger !CLong
deriving (Show, Eq)
-- | Public interface for parsing JSON tokens.
data TokenResult = TokMoreData (BS.ByteString -> TokenResult)
| PartialResult Element TokenResult
-- ^ found element, continuation, actual parsing view - so that we can report the unparsed
-- data when the parsing finishes.
| TokFailed
-- For debugging purposes
instance Show TokenResult where
show (TokMoreData _) = "TokMoreData"
show TokFailed = "TokFailed"
show (PartialResult el next) = "(PartialResult (" ++ show el ++ ") " ++ show next ++ ")"