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 :: forall (m :: * -> *).
MonadUnliftIO m =>
InputStream ByteString -> m (InputStream Text)
decodeUtf8 = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. InputStream ByteString -> IO (InputStream Text)
ST.decodeUtf8

{-# INLINE decodeUtf8With #-}
decodeUtf8With :: (MonadUnliftIO m) => OnDecodeError -> InputStream ByteString -> m (InputStream Text)
decodeUtf8With :: forall (m :: * -> *).
MonadUnliftIO m =>
OnDecodeError -> InputStream ByteString -> m (InputStream Text)
decodeUtf8With OnDecodeError
onDecodeError = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. OnDecodeError -> InputStream ByteString -> IO (InputStream Text)
ST.decodeUtf8With OnDecodeError
onDecodeError

{-# INLINE encodeUtf8 #-}
encodeUtf8 :: (MonadUnliftIO m) => OutputStream ByteString -> m (OutputStream Text)
encodeUtf8 :: forall (m :: * -> *).
MonadUnliftIO m =>
OutputStream ByteString -> m (OutputStream Text)
encodeUtf8 = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. OutputStream ByteString -> IO (OutputStream Text)
ST.encodeUtf8