taskwarrior-0.3.1.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 (
FromJSON,
Object,
ToJSON,
object,
pairs,
withObject,
(.:),
(.=),
)
import qualified Data.Aeson as Aeson
import Data.Aeson.Types (
Pair,
Parser,
)
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