attoparsec-run-0.0.2.0: library/Data/Attoparsec/ByteString/Run.hs
module Data.Attoparsec.ByteString.Run
(
parseStream, parseAndRestore, parseOnlyStrict, parseOnlyLazy,
module Data.Attoparsec.Run,
)
where
import Data.Attoparsec.Run
import Control.Monad (unless)
import Control.Monad.State (evalState)
import Data.Attoparsec.ByteString (parseWith, Parser)
import Data.ByteString (ByteString, null)
import qualified Data.ByteString.Lazy as Lazy
import Prelude (($), (<$>), pure, mempty, Monad, Either)
parseOnlyStrict :: ByteString -> Parser a -> Either ParseError a
parseOnlyStrict x p = evalState (parseAndRestore inputState p) [x]
parseOnlyLazy :: Lazy.ByteString -> Parser a -> Either ParseError a
parseOnlyLazy x p = evalState (parseAndRestore inputState p) (Lazy.toChunks x)
parseStream :: Monad m =>
BufferedInput m ByteString -> Parser a -> m (FinalResult ByteString a)
parseStream (BufferedInput initial get) p =
finalizeResult <$> parseWith get p initial
parseAndRestore :: Monad m =>
RestorableInput m ByteString -> Parser a -> m (Either ParseError a)
parseAndRestore (RestorableInput get restore) p = do
FinalResult remainder value <- parseStream (BufferedInput mempty get) p
unless (null remainder) $ restore remainder
pure value