http-pony-serve-wai 0.1.0.0 → 0.1.0.1
raw patch · 3 files changed
+39/−31 lines, 3 filesdep −networkdep −transformersdep ~bytestring
Dependencies removed: network, transformers
Dependency ranges changed: bytestring
Files
- http-pony-serve-wai.cabal +14/−4
- src/Network/HTTP/Pony/Serve/Wai.hs +20/−16
- src/Network/HTTP/Pony/Serve/Wai/Type.hs +5/−11
http-pony-serve-wai.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: http-pony-serve-wai-version: 0.1.0.0+version: 0.1.0.1 synopsis: Serve a WAI application with http-pony -- description: license: BSD3@@ -14,6 +14,7 @@ build-type: Simple extra-source-files: ChangeLog.md cabal-version: >=1.10+Homepage: https://github.com/nfjinjing/http-pony-serve-wai library exposed-modules: Network.HTTP.Pony.Serve.Wai@@ -25,14 +26,23 @@ build-depends: base >=4.9 && <4.10 , attoparsec >=0.13 , blaze-builder- , bytestring >=0.10 && <0.11+ , bytestring >=0.10 , case-insensitive , http-types- , network , pipes >=4.1 , pipes-bytestring- , transformers >=0.5 , wai + -- testing+ -- , pipes-safe+ -- , pipes-network+ -- , http-pony-transformer-http >= 0.1.0.2+ -- , http-pony-transformer-case-insensitive >= 0.1.0.1+ -- , foreign-store+ -- , http-pony+ -- , lens+ hs-source-dirs: src+ -- test+ default-language: Haskell2010
src/Network/HTTP/Pony/Serve/Wai.hs view
@@ -9,20 +9,24 @@ import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as B import Data.IORef (newIORef, readIORef, writeIORef)-import Data.Semigroup+import Data.Semigroup ((<>))+import qualified Network.HTTP.Types as HTTP import qualified Network.Wai as Wai-import Network.Wai.Internal hiding (Request, Response)-import Pipes (yield, for, next)+import Network.Wai.Internal (Response(ResponseBuilder)+ , ResponseReceived(ResponseReceived))+import Pipes (next) import Pipes.ByteString (fromLazy)-import qualified Network.HTTP.Types as HTTP import Network.HTTP.Pony.Serve.Wai.Helper ((-))-import Network.HTTP.Pony.Serve.Wai.Parser-import Network.HTTP.Pony.Serve.Wai.Type+import Network.HTTP.Pony.Serve.Wai.Parser (parseRequestURITokens+ , requestLineTokens)+import Network.HTTP.Pony.Serve.Wai.Type (Request, Response, App) import Prelude hiding ((-)) -parseRequest :: Request ByteString IO a -> IO (Either String Wai.Request)-parseRequest (requestLine, headers, body) = do+++parseRequest :: Request -> IO (Either String Wai.Request)+parseRequest ((requestLine, headers), body) = do bodyRef <- newIORef (Just body) let eitherRequest =@@ -32,12 +36,12 @@ pure - Wai.defaultRequest {- requestMethod = method- , httpVersion = version- , rawPathInfo = pathInfo- , requestHeaders = headers- , rawQueryString = queryString- , requestBody = do+ Wai.requestMethod = method+ , Wai.httpVersion = version+ , Wai.rawPathInfo = pathInfo+ , Wai.requestHeaders = headers+ , Wai.rawQueryString = queryString+ , Wai.requestBody = do bodyC <- readIORef bodyRef case bodyC of Just _body -> do@@ -87,12 +91,12 @@ ResponseBuilder _ _ builder -> do let p = fromLazy (toLazyByteString builder)- writeIORef responseRef (Just (responseLine, headers, p))+ writeIORef responseRef (Just ((responseLine, headers), p)) pure ResponseReceived _ -> do pure ResponseReceived - waiC - callback (httpVersion waiRequest)+ waiC - callback (Wai.httpVersion waiRequest) maybeResponse <- readIORef responseRef
src/Network/HTTP/Pony/Serve/Wai/Type.hs view
@@ -3,17 +3,11 @@ import Data.ByteString (ByteString) import Data.CaseInsensitive (CI)-import Network.Socket (Socket)-import Pipes (Producer)--type StartLine = ByteString-type Header = (CI ByteString, ByteString)+import qualified Network.HTTP.Pony.Transformer.HTTP.Type as HTTP -type Message a m r = (StartLine, [Header], Producer a m r)+type MessageType = (ByteString, [(CI ByteString, ByteString)]) -type Request a m r = Message a m r-type Response a m r = Message a m r+type Request = HTTP.Request MessageType ByteString IO ()+type Response = HTTP.Response MessageType ByteString IO () --- App shouldn't block!-type Application m a b c d = Request a m c -> m (Response b m d)-type App = Application IO ByteString ByteString () ()+type App = Request -> IO Response