{-# 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)