packages feed

hack2-handler-mongrel2-http-2011.6.22: src/Hack2/Handler/Mongrel2/Types.hs

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