packages feed

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)