module Network.Http.Parser.RfcCommon where
import Control.Applicative hiding (many)
import Data.Attoparsec as AW
import Data.Attoparsec.Combinator as DACO
import Data.Attoparsec.Char8 as AC hiding (digit, char)
import qualified Data.Attoparsec.Char8 as DAC
import qualified Data.Attoparsec.FastSet as AF
import Data.ByteString as W
import Data.ByteString.Char8 as C
import Data.ByteString.Internal (c2w, w2c)
import Data.Word (Word8, Word64)
import Data.Char (digitToInt, isAsciiUpper, isAsciiLower)
import Control.Monad (join)
import Prelude hiding (take, takeWhile)
import Data.Typeable (Typeable)
import Data.Data (Data)
upalpha_pred, loalpha_pred, alpha_pred, digit_pred, hex_pred
:: Word8 -> Bool
upalpha_pred w = w >= 65 && w <= 90
upalpha :: Parser Word8
upalpha = AW.satisfy upalpha_pred
loalpha_pred w = w >= 97 && w <= 122
loalpha :: Parser Word8
loalpha = AW.satisfy loalpha_pred
alpha_pred w = upalpha_pred w || loalpha_pred w
alpha :: Parser Word8
alpha = AW.satisfy alpha_pred
digit_pred w = w >= 48 && w <= 57
digit :: Parser Word8
digit = AW.satisfy digit_pred
hex_pred w = (w >= 65 && w <= 70)
|| (w >= 97 && w <= 102)
|| (w >= 48 && w <= 57)
hex :: Parser [Word8]
hex = many1 $ AW.satisfy hex_pred
appcon :: [a] -> [[a]] -> [a]
appcon = (. join) . (++)
word8l w = (:[]) <$> word8 w
toRepr = C.unpack . W.pack