module WebbyPrelude
    ( module Exports

    -- | Custom prelude functions
    , decodeUtf8Lenient
    , parseInt
    ) where

import           Control.Monad.Trans.Resource as Exports (ResourceT,
                                                          liftResourceT,
                                                          runResourceT)
import           Network.HTTP.Types           as Exports
import           Network.Wai                  as Exports
import           Protolude                    as Exports hiding (get, put, (%))

import           Data.Text.Encoding           as Exports (encodeUtf8)

-- Imports for custom functionality coded in this module.
import           Data.Text.Encoding           (decodeUtf8With)
import           Data.Text.Encoding.Error     (lenientDecode)
import qualified Data.Text.Read               as TR

-- Text formatting
import           Formatting                   as Exports (format, sformat, (%))
import           Formatting.ShortFormatters   as Exports (d, sh, st, t)

-- Decode UTF8 leniently (by replacing an invalid input byte with the
-- Unicode replacement character U+FFFD).
decodeUtf8Lenient :: ByteString -> Text
decodeUtf8Lenient = decodeUtf8With lenientDecode

parseInt :: Integral a => Text -> Maybe a
parseInt t' = hush $ fmap fst $ TR.decimal t'