mywork-1.0.0.0: app/Defs/JSON.hs
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Defs.JSON
where
import Data.Aeson
import Defs
instance ToJSON ProjectName where toJSON (ProjectName pnm) = toJSON pnm
instance ToJSON LocationSpec where
toJSON = genericToJSON locationSpecOptions
instance ToJSON Projects
instance ToJSON Project
instance ToJSON Group
instance ToJSON Role
instance ToJSON Language
instance ToJSON Location where
-- only emit notes with NoteSource of MyWorkDB
toJSON l = object [ ("location", toJSON (location l))
, ("locatedOn", toJSON (locatedOn l))
, ("locValid", toJSON (locValid l))
, ("notes",
toJSON (filter ((MyWorkDB ==) . noteSource) $ notes l))
]
instance ToJSON Note where
-- does not emit noteSource
toJSON n = object [ ("note", toJSON (note n))
, ("notedOn", toJSON (notedOn n))
]
instance FromJSON ProjectName where parseJSON = fmap ProjectName . parseJSON
instance FromJSON LocationSpec where
parseJSON = genericParseJSON locationSpecOptions
instance FromJSON Projects
instance FromJSON Project where
parseJSON = withObject "Project" $ \v -> Project
<$> v .: "name"
<*> v .:? "group" .!= Personal
<*> v .: "role"
<*> v .: "description"
<*> v .: "language"
<*> v .: "locations"
instance FromJSON Group
instance FromJSON Role
instance FromJSON Language
instance FromJSON Location where
parseJSON = withObject "Location" $ \v -> Location
<$> v .: "location"
<*> v .: "locatedOn"
<*> v .:? "locValid" .!= True -- assumed -- Added in v0.1.1.0
<*> v .: "notes"
instance FromJSON Note where
parseJSON = withObject "Note" $ \v -> Note
<$> v .: "notedOn"
<*> v .: "note"
<*> pure MyWorkDB
locationSpecOptions :: Options
locationSpecOptions = defaultOptions { sumEncoding = UntaggedValue }