packages feed

natskell-0.0.0.1: internal/Plumbing/Network/ConnectionAPI.hs

module Network.ConnectionAPI
  ( ReadError
  , WriteError
  , ReaderAPI (..)
  , WriterAPI (..)
  , Conn
  , TransportOption (..)
  , ConnectionAPI (..)
  ) where

import           Data.ByteString          (ByteString)
import qualified Data.ByteString.Lazy     as LBS
import           Network.Connection.Types
    ( Conn
    , ReadError
    , TransportOption (..)
    , WriteError
    )

data ReaderAPI reader = ReaderAPI
                          { readData :: reader -> Int -> IO (Either ReadError ByteString)
                          , closeReader :: reader -> IO ()
                          , openReader :: reader -> IO ()
                          }

data WriterAPI writer = WriterAPI
                          { writeData :: writer -> ByteString -> IO (Either WriteError ())
                          , writeDataLazy :: writer -> LBS.ByteString -> IO (Either WriteError ())
                          , closeWriter :: writer -> IO ()
                          , openWriter :: writer -> IO ()
                          }

data ConnectionAPI = ConnectionAPI
                       { newConn :: IO Conn
                       , reader :: ReaderAPI Conn
                       , writer :: WriterAPI Conn
                       , open :: Conn -> IO ()
                       , close :: Conn -> IO ()
                       , connectTcp :: Conn -> String -> Int -> IO (Either String ())
                       , configure :: Conn -> TransportOption -> IO (Either String ())
                       }