]> gitweb @ CieloNegro.org - Lucu.git/blob - Network/HTTP/Lucu/ETag.hs
0341f5ac382b245638575477b0474ec0b1fafe40
[Lucu.git] / Network / HTTP / Lucu / ETag.hs
1 module Network.HTTP.Lucu.ETag
2     ( ETag
3     , mkETag    -- Bool -> String -> ETag
4     , eTagP     -- Parser ETag
5     , eTagListP -- Parser [ETag]
6     )
7     where
8
9 import           Network.HTTP.Lucu.Parser
10 import           Network.HTTP.Lucu.Parser.Http
11
12
13 data ETag = ETag {
14       etagIsWeak :: Bool
15     , etagToken  :: String
16     } deriving (Eq)
17
18
19 instance Show ETag where
20     show (ETag isWeak token) = (if isWeak then
21                                     "W/"
22                                 else
23                                     "")
24                                ++
25                                foldr (++) "" (["\""] ++ map quote token ++ ["\""])
26         where
27           quote :: Char -> String
28           quote '"' = "\\\""
29           quote c   = [c]
30
31
32 mkETag :: Bool -> String -> ETag
33 mkETag = ETag
34
35
36 eTagP :: Parser ETag
37 eTagP = do isWeak <- option False (string "W/" >> return True)
38            str    <- quotedStr
39            return $ mkETag isWeak str
40
41
42 eTagListP :: Parser [ETag]
43 eTagListP = allowEOF
44             $ sepBy1 eTagP (do many sp
45                                char ','
46                                many sp)