module UnliftIO.Streams.Text
  ( decodeUtf8
  , decodeUtf8With
  , encodeUtf8
  ) where

import           Control.Monad.IO.Unlift (MonadUnliftIO, liftIO)
import           Data.ByteString (ByteString)
import           Data.Text (Text)
import           Data.Text.Encoding.Error (OnDecodeError)
import           System.IO.Streams (InputStream, OutputStream)
import qualified System.IO.Streams.Text as ST

{-# INLINE decodeUtf8 #-}
decodeUtf8 :: (MonadUnliftIO m) => InputStream ByteString -> m (InputStream Text)
decodeUtf8 = liftIO . ST.decodeUtf8

{-# INLINE decodeUtf8With #-}
decodeUtf8With :: (MonadUnliftIO m) => OnDecodeError -> InputStream ByteString -> m (InputStream Text)
decodeUtf8With onDecodeError = liftIO . ST.decodeUtf8With onDecodeError

{-# INLINE encodeUtf8 #-}
encodeUtf8 :: (MonadUnliftIO m) => OutputStream ByteString -> m (OutputStream Text)
encodeUtf8 = liftIO . ST.encodeUtf8