module Hasql.Postgres.TemplateConverter where import Hasql.Postgres.Prelude import qualified Data.ByteString.Lazy as BL import qualified Data.ByteString.Lazy.Builder as BB import qualified Data.ByteString.Lazy.Builder.ASCII as BB import qualified Hasql.Postgres.TemplateConverter.Parser as Parser convert :: ByteString -> Either Text ByteString convert t = do parts <- Parser.run t Parser.parts return $ BL.toStrict $ BB.toLazyByteString $ mconcat $ ($ 1) $ evalState $ do forM parts $ \case Parser.Chunk c -> do return c Parser.Placeholder -> do i <- get put $ succ i return $ BB.char8 '$' <> BB.wordDec i