/examples/TestRFC2616.hs
Haskell | 37 lines | 31 code | 4 blank | 2 comment | 2 complexity | 92feb2a2c350a63d3fb51103e379bbdb MD5 | raw file
Possible License(s): BSD-3-Clause
- {-# LANGUAGE BangPatterns #-}
- import RFC2616
- import Control.Monad (forM_)
- import System.IO
- import Control.Exception (bracket)
- import System.Environment
- import qualified Data.ByteString.Char8 as B
- import Data.Attoparsec
- refill h = B.hGet h (4*1024)
- listy file h = do
- r <- parseWith (refill h) (many request) =<< refill h
- case r of
- Fail _ _ msg -> hPutStrLn stderr $ file ++ ": " ++ msg
- Done _ reqs -> print (length reqs)
-
- incrementy file h = go 0 =<< refill h
- where
- go !n is = do
- r <- parseWith (refill h) request is
- case r of
- Fail _ _ msg -> hPutStrLn stderr $ file ++ ": " ++ msg
- Done bs _req
- | B.null bs -> do
- s <- refill h
- if B.null s
- then print (n+1)
- else go (n+1) s
- | otherwise -> go (n+1) bs
-
- main = do
- args <- getArgs
- forM_ args $ \arg ->
- bracket (openFile arg ReadMode) hClose $
- -- listy arg
- incrementy arg