{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE Rank2Types #-}
module Hack2.Handler.Mongrel2.Types where
import Data.ByteString (ByteString)
import Data.Int (Int64)
import Data.Aeson (Value(..))
import Data.Enumerator (Enumerator, Iteratee (..), ($$), joinI, run_, Enumeratee, Step, (=$), ($=))
import qualified System.ZMQ as ZMQ
import Data.Default
-- | Client identifier from Mongrel2. This identifies the currently
-- connected client uniquely.
type ClientID = Int64
-- | UUID for communicating with Mongrel2.
type UUID = ByteString
data Request = Request
{
-- (UUID, ClientID, Path, RequestHeaders, RequestBody)
requestUuid :: UUID
, requestClientId :: ClientID
, requestPath :: ByteString
, requestHeaders :: Value
, requestBody :: ByteString
}
deriving (Show)
data Response = Response
{
responseUuid :: UUID
, responseClientId :: ClientID
, responseBody :: (forall a. Enumerator ByteString IO a)
}
data Handler = Handler
{ handlerPullFrom :: String
, handlerPublishTo :: String
, handlerId :: Maybe String
}
instance Default Handler where
def = Handler def def def
data ConnectedHandler = ConnectedHandler
{ chPullSocket :: ZMQ.Socket ZMQ.Pull
, chPublishSocket :: ZMQ.Socket ZMQ.Pub
}