module Network.Text.Stream
(
Result(..),
Stream,
invalidate,
withStream,
write,
receive,
receiveE
)
where
import Control.Monad.IO.Class
import qualified Data.Enumerator as E
import qualified Data.Enumerator.List as EL
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Network.ByteString.Stream as S
import Network.ByteString.Stream (Result(..), Stream, invalidate, withStream)
import System.IO
write :: Stream -> T.Text -> IO ()
write s t = S.write s (T.encodeUtf8 t)
receive :: Handle -> IO (Maybe T.Text)
receive h = do bytesM <- S.receive h
case bytesM of
Nothing -> return Nothing
Just bytes -> return . Just $ T.decodeUtf8 bytes
receiveE :: MonadIO m => Handle -> E.Iteratee T.Text m b -> m (Maybe b)
receiveE h iter = let iter' = EL.map T.decodeUtf8 E.=$ iter
in S.receiveE h iter'