]> gitweb @ CieloNegro.org - Lucu.git/blob - Network/HTTP/Lucu/ETag.hs
data/mime.types
[Lucu.git] / Network / HTTP / Lucu / ETag.hs
1 module Network.HTTP.Lucu.ETag
2     ( ETag
3     , mkETag     -- Bool -> String -> ETag
4     , strongETag -- String -> ETag
5     , weakETag   -- String -> ETag
6     , eTagP     -- Parser ETag
7     , eTagListP -- Parser [ETag]
8     )
9     where
10
11 import           Control.Monad
12 import           Network.HTTP.Lucu.Parser
13 import           Network.HTTP.Lucu.Parser.Http
14 import           Network.HTTP.Lucu.Utils
15
16
17 data ETag = ETag {
18       etagIsWeak :: Bool
19     , etagToken  :: String
20     } deriving (Eq)
21
22 instance Show ETag where
23     show (ETag isWeak token) = (if isWeak then
24                                     "W/"
25                                 else
26                                     "")
27                                ++
28                                quoteStr token
29
30
31 mkETag :: Bool -> String -> ETag
32 mkETag = ETag
33
34
35 strongETag :: String -> ETag
36 strongETag = ETag False
37
38
39 weakETag :: String -> ETag
40 weakETag = ETag True
41
42
43 eTagP :: Parser ETag
44 eTagP = do isWeak <- option False (string "W/" >> return True)
45            str    <- quotedStr
46            return $ mkETag isWeak str
47
48
49 eTagListP :: Parser [ETag]
50 eTagListP = allowEOF
51             $ do xs <- listOf eTagP
52                  when (null xs)
53                           $ fail ""
54                  return xs