{-# 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 }