-----------------------------------------------------------------------------
-- |
-- Module      :  Data.ByteString.Encoding
-- Copyright   :  (c) Masahiro Sakai 2018
-- License     :  BSD-style
-- 
-- Maintainer  :  masahiro.sakai@gmail.com
-- Stability   :  provisional
-- Portability :  non-portable
--
-- 'B.ByteString' ↔ 'T.Text' converter based on "GHC.IO.Encoding".
--
-----------------------------------------------------------------------------
module Data.ByteString.Encoding
  (
  -- * Converter functions
    encode
  , decode

  -- * Text encodings (re-exported from "System.IO")
  , TextEncoding
  , latin1
  , utf8
  , utf8_bom
  , utf16
  , utf16le
  , utf16be
  , utf32
  , utf32le
  , utf32be
  , localeEncoding
  , char8
  , mkTextEncoding
  ) where

import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL
import qualified Data.ByteString.Lazy.Encoding as L
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import System.IO

-- | Encode a strict 'T.Text' into strict 'B.ByteString' using a given 'Enc.TextEncoding'.
encode :: TextEncoding -> T.Text -> B.ByteString
encode enc = BL.toStrict . L.encode enc . TL.fromStrict

-- | Decode a strict 'B.ByteString' to a strit 'T.Text' using a given 'Enc.TextEncoding'.
decode :: TextEncoding -> B.ByteString -> T.Text
decode enc = TL.toStrict . L.decode enc . BL.fromStrict