5 {-# OPTIONS_HADDOCK prune #-}
7 -- |Manipulation of entity tags.
8 module Network.HTTP.Lucu.ETag
20 import Control.Monad.Unicode
21 import Data.Ascii (Ascii)
22 import qualified Data.Ascii as A
23 import Data.Attoparsec.Char8
24 import Data.Monoid.Unicode
25 import Network.HTTP.Lucu.Parser.Http hiding (token)
26 import Network.HTTP.Lucu.Utils
28 -- |An entity tag is made of a weakness flag and a opaque string.
30 -- |The weakness flag. Weak tags looks like W\/\"blahblah\" and
31 -- strong tags are like \"blahblah\".
33 -- |An opaque string. Only characters from 0x20 (sp) to 0x7e (~)
38 -- |Convert an 'ETag' to 'Ascii'.
39 printETag ∷ ETag → Ascii
41 = A.fromAsciiBuilder $
42 ( ( if etagIsWeak et then
48 quoteStr (etagToken et) )
50 -- |This is equivalent to @'ETag' 'Prelude.False'@. If you want to
51 -- generate an ETag from a file, try using
52 -- 'Network.HTTP.Lucu.StaticFile.generateETagFromFile'.
53 strongETag ∷ Ascii → ETag
54 strongETag = ETag False
56 -- |This is equivalent to @'ETag' 'Prelude.True'@.
57 weakETag ∷ Ascii → ETag
61 eTagP = do isWeak ← option False (string "W/" ≫ return True)
63 return $ ETag isWeak str
65 eTagListP ∷ Parser [ETag]
66 eTagListP = do xs ← listOf eTagP
68 fail "empty list of ETags"