-- | Parse W3C Date and Time string.
module Data.Time.W3C.Parser
    ( parse
    )
    where

import qualified Text.Parsec as P

import Data.Convertible
import Data.Time.W3C.Parser.Parsec
import Data.Time.W3C.Types

-- | Parse W3C Date and Time string to anything convertible from
-- 'W3CDateTime' type. The most obvious acceptable type is the
-- 'W3CDateTime' itself. If the given string is ill-formatted, 'parse'
-- returns 'Prelude.Nothing'.
parse :: Convertible W3CDateTime t => String -> Maybe t
parse src = case P.parse p "" src of
              Right w3c -> Just (convert w3c)
              Left  _   -> Nothing
    where
      p = do w3c <- w3cDateTime
             _   <- P.eof
             return w3c