{-# 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)