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)