module Network.HTTP.Lucu.ETag
( ETag(..)
, strongETag
, weakETag
, eTagP
, eTagListP
)
where
import Control.Monad
import Network.HTTP.Lucu.Parser
import Network.HTTP.Lucu.Parser.Http hiding (token)
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
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 $ ETag isWeak str
eTagListP :: Parser [ETag]
eTagListP = allowEOF
$! do xs <- listOf eTagP
when (null xs)
$ fail ""
return xs