-- | The raw HTTP transformer

module Network.HTTP.Pony.Transformer.HTTP where

import           Data.ByteString.Char8 (ByteString)
import           Pipes (Producer, Consumer, runEffect, (>->))

import qualified Network.HTTP.Pony.Transformer.HTTP.Builder as Builder
import qualified Network.HTTP.Pony.Transformer.HTTP.Parser as Parser
import           Network.HTTP.Pony.Transformer.HTTP.Type (Middleware, HttpRequest, HttpResponse)

http :: (Monad m) => Middleware m
                                (Producer ByteString m a)
                                (Producer ByteString m ())
                                (HttpRequest ByteString m a)
                                (HttpResponse ByteString m b)
http app pull = do
  maybeRequest <- Parser.parseMessage pull (pure ())

  case maybeRequest of
    Just (Right request) -> do
      response <- app request

      pure (Builder.message response >> pure ())

    _ -> (pure . pure) ()

    -- Just (Left err) -> pure - pure - err
    -- _ -> pure Nothing