willow-0.1.0.0: test/Test/Willow/WebPlatformTests/Manual/Common.hs
{-# LANGUAGE CPP #-}
{-|
Description:
Copyright: (c) 2020 Samuel May
License: MPL-2.0
Maintainer: ag.eitilt@gmail.com
Stability: experimental
Portability: portable
-}
module Test.Willow.WebPlatformTests.Manual.Common
( InlineEncode ( .. )
, InlineDecode ( .. )
, decodeEnc
, decodeEnc'
, encodeEnc
, encodeEnc'
#if MIN_VERSION_base(4,11,0)
#else
, (<>)
#endif
) where
import qualified Data.ByteString as BS
import qualified Data.ByteString.Short as BS.SH
import qualified Data.Text as T
import Web.Willow.Common.Encoding
#if MIN_VERSION_base(4,11,0)
#else
import Data.Semigroup ( (<>) )
#endif
--TODO: Automate reading these from the files.
data InlineEncode = InlineEncode
{ inputE :: T.Text
, outputE :: BS.ByteString
, nameE :: String
}
--TODO: Automate reading these from the files.
data InlineDecode = InlineDecode
{ inputD :: BS.ByteString
, outputD :: T.Text
, nameD :: String
}
decodeEnc :: Encoding -> BS.ByteString -> [Either BS.SH.ShortByteString String]
decodeEnc enc stream = cs ++ finalizeDecode state
where (cs, state) = decode (initialDecoderState enc) stream
decodeEnc' :: Encoding -> BS.ByteString -> T.Text
decodeEnc' enc stream = cs <> finalizeDecode' state
where (cs, state) = decode' (initialDecoderState enc) stream
encodeEnc :: Encoding -> T.Text -> [Either Char BS.SH.ShortByteString]
encodeEnc enc = fst . encode (initialEncoderState enc)
encodeEnc' :: Encoding -> T.Text -> BS.ByteString
encodeEnc' enc = fst . encode' (initialEncoderState enc)