taskwarrior-0.2.0.0: src/Taskwarrior/RecurringChild.hs
-- | This Module provides the RecurringChild type with
-- FromJSON and ToJSON instances.
module Taskwarrior.RecurringChild
( RecurringChild(..)
, parseFromObjectMay
, toPairs
)
where
import Control.Applicative ( optional )
import Data.Aeson ( Object
, (.:)
, (.=)
, ToJSON
, FromJSON
, pairs
, object
, withObject
)
import qualified Data.Aeson as Aeson
import Data.Aeson.Types ( Parser
, Pair
)
import Data.Text ( Text )
import Data.UUID ( UUID )
-- | The 'RecurringChild' type saves information about how a 'Taskwarrior.Task.Task'
-- is child of another 'Taskwarrior.Task.Task' wich is recurring.
data RecurringChild =
RecurringChild {
recur :: Text,
imask :: Integer,
parent :: UUID }
deriving (Eq, Show, Read, Ord)
-- | Gathers all fields for a 'RecurringChild' status.
parseFromObjectMay :: Object -> Parser (Maybe RecurringChild)
parseFromObjectMay = optional . parseFromObject
parseFromObject :: Object -> Parser RecurringChild
parseFromObject o =
RecurringChild <$> o .: "recur" <*> o .: "imask" <*> o .: "parent"
-- | Can be used to serialize 'RecurringChild' to JSON.
toPairs :: RecurringChild -> [Pair]
toPairs RecurringChild {..} =
["recur" .= recur, "imask" .= imask, "parent" .= parent]
instance FromJSON RecurringChild where
parseJSON = withObject "RecurringChild" parseFromObject
instance ToJSON RecurringChild where
toJSON = object . toPairs
toEncoding = pairs . mconcat . map (uncurry (.=)) . toPairs