postgresql-connection-string-0.1: src/percent-encoding/PercentEncoding/TextBuilders.hs
module PercentEncoding.TextBuilders where
import qualified Data.CharSet as CharSet
import qualified Data.Text as Text
import qualified PercentEncoding.Charsets as Charsets
import qualified PercentEncoding.Utf8CharView as Utf8CharView
import Platform.Prelude
import TextBuilder
-- | Apply URL-encoding to text
urlEncodedText :: Text -> TextBuilder
urlEncodedText =
foldMap urlEncodedChar . Text.unpack
urlEncodedChar :: Char -> TextBuilder
urlEncodedChar c =
if CharSet.member c Charsets.passthrough
then char c
else
Utf8CharView.char
c
( \b1 ->
urlEncodedByte b1
)
( \b1 b2 ->
urlEncodedByte b1 <> urlEncodedByte b2
)
( \b1 b2 b3 ->
mconcat [urlEncodedByte b1, urlEncodedByte b2, urlEncodedByte b3]
)
( \b1 b2 b3 b4 ->
mconcat [urlEncodedByte b1, urlEncodedByte b2, urlEncodedByte b3, urlEncodedByte b4]
)
urlEncodedByte :: Word8 -> TextBuilder
urlEncodedByte x = char '%' <> hexadecimal x