{-# LANGUAGE RecordWildCards, ScopedTypeVariables #-}
module Taskwarrior.Annotation
( Annotation(..)
)
where
import qualified Taskwarrior.Time as Time
import Data.Time ( UTCTime )
import Data.Text ( Text )
import Data.Aeson ( (.:)
, (.=)
)
import qualified Data.Aeson as Aeson
data Annotation = Annotation { entry :: UTCTime, description :: Text } deriving (Eq, Show, Read, Ord)
instance Aeson.FromJSON Annotation where
parseJSON = Aeson.withObject "Annotation" $ \o -> do
description <- o .: "description"
entry <- o .: "entry" >>= Time.parse
pure Annotation { .. }
instance Aeson.ToJSON Annotation where
toJSON Annotation {..} =
Aeson.object ["description" .= description, "entry" .= Time.toValue entry]