X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=time-http.git;a=blobdiff_plain;f=Data%2FTime%2FHTTP%2FInternal.hs;h=b008d9da6911d530050ae3d91a32efbf94afcd75;hp=06a0ad2c532f6068a4dd30b1ba79d1af3dba87aa;hb=dac3f35;hpb=82afb594c5b4254385435491700befcbea185a5d diff --git a/Data/Time/HTTP/Internal.hs b/Data/Time/HTTP/Internal.hs index 06a0ad2..b008d9d 100644 --- a/Data/Time/HTTP/Internal.hs +++ b/Data/Time/HTTP/Internal.hs @@ -1,19 +1,44 @@ -{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE + UnicodeSyntax + #-} +-- |Internal functions for "Data.Time.HTTP". module Data.Time.HTTP.Internal - ( rfc2616DateAndTime + ( httpDateAndTime + , toAsciiBuilder ) where -import Control.Monad +import Control.Applicative +import Data.Ascii (AsciiBuilder) +import Data.Attoparsec.Char8 +import Data.Convertible.Base +import Data.Tagged import Data.Time -import Data.Time.RFC1123.Internal -import Data.Time.RFC733.Internal -import Data.Time.Asctime.Internal +import Data.Time.RFC1123 +import Data.Time.RFC733 +import Data.Time.Asctime +import Prelude.Unicode --- |This is a parsec parser for date and time formats allowed in --- HTTP\/1.1 (RFC 2616). -rfc2616DateAndTime :: Stream s m Char => ParsecT s u m UTCTime -rfc2616DateAndTime - = choice [ liftM zonedTimeToUTC $ try rfc1123DateAndTime - , liftM zonedTimeToUTC $ try rfc733DateAndTime - , liftM (localTimeToUTC utc) asctime +-- |Parse a date and time string in any formats allowed by HTTP\/1.1 +-- (RFC 2616). +httpDateAndTime ∷ Parser UTCTime +httpDateAndTime + = choice [ zonedTimeToUTC <$> try rfc1123DateAndTime + , zonedTimeToUTC <$> try rfc733DateAndTime + , localTimeToUTC utc <$> asctime ] + +-- |Convert a 'UTCTime' to RFC 1123 date and time string. +toAsciiBuilder ∷ UTCTime → AsciiBuilder +toAsciiBuilder = untag' ∘ cs ∘ ut2zt + where + untag' ∷ Tagged RFC1123 AsciiBuilder → AsciiBuilder + {-# INLINE CONLIKE untag' #-} + untag' = untag + + ut2zt ∷ UTCTime → ZonedTime + {-# INLINE ut2zt #-} + ut2zt = utcToZonedTime gmt + + gmt ∷ TimeZone + {-# INLINE CONLIKE gmt #-} + gmt = TimeZone 0 False "GMT"