{-# LANGUAGE OverloadedStrings #-} module Hack2.Handler.Mongrel2.Response ( Response , mkResponse ) where import Blaze.ByteString.Builder (Builder, toByteString, fromByteString) import Blaze.Text.Int (integral) import Data.ByteString (ByteString) import Data.ByteString.Char8 () import Data.List (intersperse) import Data.Monoid import Hack2.Handler.Mongrel2.Types import qualified Data.ByteString as S -- | Build a single space. buildSpace :: Builder buildSpace = fromByteString " " -- | Build a UUID. buildUUID :: UUID -> Builder buildUUID = fromByteString -- def send(self, uuid, conn_id, msg): -- """ -- Raw send to the given connection ID at the given uuid, mostly used -- internally. -- """ -- header = "%s %d:%s," % (uuid, len(str(conn_id)), str(conn_id)) -- self.resp.send(header + ' ' + msg) -- bcc1453e-9cc0-11e0-af11-6cf049b16ec3 1:0, HTTP/1.1 200 OK -- | Build a response from a server UUID, a list of -- client IDs and a response body builder. mkResponse :: UUID -> ClientID -> ByteString -> ByteString mkResponse uuid clientID body = toByteString $ mconcat [ buildUUID uuid , buildSpace , integral $ S.length $ toByteString $ integral clientID , fromByteString ":" , integral clientID , fromByteString "," , buildSpace , fromByteString body ]