{-# LANGUAGE OverloadedStrings #-}

module Network.HTTP.Pony.Transformer.StartLine.Parser where


import           Data.Attoparsec.ByteString (Parser)
import qualified Data.Attoparsec.ByteString.Char8 as Char
import           Data.ByteString.Char8 (ByteString)
import qualified Data.ByteString.Char8 as B
import           Data.Char (ord)
import qualified Network.HTTP.Types as HTTP

import Network.HTTP.Pony.Transformer.StartLine.Type (RequestLine)

requestLineTokens :: Parser RequestLine
requestLineTokens = do
  method <- Char.takeTill (== ' ')
  Char.char ' '
  requestURI <- Char.takeTill (== ' ')
  Char.char ' '
  Char.string "HTTP/"

  let minusZero = (+) (- ord '0')
      charToInt = minusZero . ord
      digit = fmap charToInt Char.digit

  major <- digit
  Char.char '.'
  minor <- digit

  pure (method, requestURI, HTTP.HttpVersion major minor)