, strongETag
, weakETag
- , eTagP
- , eTagListP
+ , eTag
+ , eTagList
)
where
import Control.Applicative
import qualified Data.Ascii as A
import Data.Attoparsec.Char8
import Data.Monoid.Unicode
+import Network.HTTP.Lucu.Parser
import Network.HTTP.Lucu.Parser.Http hiding (token)
import Network.HTTP.Lucu.Utils
import Prelude.Unicode
parseETag ∷ Ascii → ETag
{-# INLINEABLE parseETag #-}
parseETag str
- = case parseOnly p $ A.toByteString str of
+ = case parseOnly (finishOff eTag) $ A.toByteString str of
Right et → et
Left err → error ("unparsable ETag: " ⧺ A.toString str ⧺ ": " ⧺ err)
- where
- p ∷ Parser ETag
- {-# INLINE p #-}
- p = do et ← eTagP
- endOfInput
- return et
-- |This is equivalent to @'ETag' 'False'@. If you want to generate an
-- ETag from a file, try using
weakETag = ETag True
-- |'Parser' for an 'ETag'.
-eTagP ∷ Parser ETag
-{-# INLINEABLE eTagP #-}
-eTagP = do isWeak ← option False (string "W/" *> return True)
- str ← quotedStr
- return $ ETag isWeak str
+eTag ∷ Parser ETag
+{-# INLINEABLE eTag #-}
+eTag = do isWeak ← option False (string "W/" *> return True)
+ str ← quotedStr
+ return $ ETag isWeak str
-- |'Parser' for a list of 'ETag's.
-eTagListP ∷ Parser [ETag]
-{-# INLINEABLE eTagListP #-}
-eTagListP = do xs ← listOf eTagP
- when (null xs) $
- fail "empty list of ETags"
- return xs
+eTagList ∷ Parser [ETag]
+{-# INLINEABLE eTagList #-}
+eTagList = do xs ← listOf eTag
+ when (null xs) $
+ fail "empty list of ETags"
+ return xs