module Network.HTTP.Lucu.ETag ( ETag , mkETag -- Bool -> String -> ETag , strongETag -- String -> ETag , weakETag -- String -> ETag , eTagP -- Parser ETag , eTagListP -- Parser [ETag] ) where import Control.Monad import Network.HTTP.Lucu.Parser import Network.HTTP.Lucu.Parser.Http import Network.HTTP.Lucu.Utils data ETag = ETag { etagIsWeak :: Bool , etagToken :: String } deriving (Eq) instance Show ETag where show (ETag isWeak token) = (if isWeak then "W/" else "") ++ quoteStr token mkETag :: Bool -> String -> ETag mkETag = ETag strongETag :: String -> ETag strongETag = ETag False weakETag :: String -> ETag weakETag = ETag True eTagP :: Parser ETag eTagP = do isWeak <- option False (string "W/" >> return True) str <- quotedStr return $ mkETag isWeak str eTagListP :: Parser [ETag] eTagListP = allowEOF $ do xs <- listOf eTagP when (null xs) $ fail "" return xs