-- | This module provides no own time type for taskwarrior rather it only gives deserialisation and serialisation support. module Taskwarrior.Time ( parse , toValue ) where import Data.Aeson ( withText ) import qualified Data.Aeson as Aeson import Data.Aeson.Types ( Parser , typeMismatch ) import Data.Time ( UTCTime , parseTimeM , defaultTimeLocale ) import qualified Data.Time.Format as Time.Format import qualified Data.Text as Text -- | Converts a time to the taskwarrior time format. toValue :: UTCTime -> Aeson.Value toValue time = Aeson.String . Text.pack $ Time.Format.formatTime defaultTimeLocale "%Y%m%dT%H%M%SZ" time -- | Parses a JSON string from the taskwarrior time format. parse :: Aeson.Value -> Parser UTCTime parse value = withText "Date" ( maybe (typeMismatch "Date" value) pure . parseTimeM False defaultTimeLocale "%Y%m%dT%H%M%SZ" . Text.unpack ) value