{-# LANGUAGE
    UnicodeSyntax
  #-}
-- |This module provides functions to parse and format RFC 1123 date
-- and time formats.
--
-- The format is basically same as RFC 822, but the syntax for @date@
-- is changed from:
--
-- > year ::= 2DIGIT
--
-- to:
--
-- > year ::= 4DIGIT
module Data.Time.RFC1123
    ( -- * Formatting
      toAscii
    , toAsciiBuilder

      -- * Parsing
    , fromAscii
    , rfc1123DateAndTime
    )
    where
import Data.Ascii (Ascii)
import qualified Data.Ascii as A
import qualified Data.Attoparsec.Char8 as P
import Data.Time
import Data.Time.RFC1123.Internal
import Prelude.Unicode

-- |Convert a 'ZonedTime' to RFC 1123 date and time string.
toAscii  ZonedTime  Ascii
toAscii = A.fromAsciiBuilder  toAsciiBuilder

-- |Parse an RFC 1123 date and time string. When the string can't be
-- parsed, it returns @'Left' err@.
fromAscii  Ascii  Either String ZonedTime
fromAscii = P.parseOnly p  A.toByteString
    where
      p = do zt  rfc1123DateAndTime
             P.endOfInput
             return zt