]> gitweb @ CieloNegro.org - time-http.git/blobdiff - Data/Time/HTTP/Internal.hs
Data.Time.HTTP now compiles.
[time-http.git] / Data / Time / HTTP / Internal.hs
index 06a0ad2c532f6068a4dd30b1ba79d1af3dba87aa..e94567076420449fb0c22e27b7fd8bb4f5aef3ad 100644 (file)
@@ -1,19 +1,36 @@
-{-# 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.Time
-import Data.Time.RFC1123.Internal
-import Data.Time.RFC733.Internal
-import Data.Time.Asctime.Internal
+import qualified Data.Time.RFC1123.Internal as RFC1123
+import qualified Data.Time.RFC733.Internal  as RFC733
+import qualified Data.Time.Asctime.Internal as 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 RFC1123.rfc1123DateAndTime
+             , zonedTimeToUTC     <$> try RFC733.rfc733DateAndTime
+             , localTimeToUTC utc <$> Asctime.asctime
              ]
+
+-- |Convert a 'UTCTime' to RFC 1123 date and time string.
+toAsciiBuilder ∷ UTCTime → AsciiBuilder
+toAsciiBuilder = RFC1123.toAsciiBuilder ∘ ut2zt
+    where
+      ut2zt ∷ UTCTime → ZonedTime
+      ut2zt = utcToZonedTime gmt
+
+      gmt ∷ TimeZone
+      gmt = TimeZone 0 False "GMT"