module Yesod.Goodies.PNotify.Modules.History ( History(..) , defaultHistory )where import Data.Aeson import Data.Text (Text) import Yesod.Goodies.PNotify.Types import Yesod.Goodies.PNotify.Types.Instances data Labels = Labels { _redisplay :: Maybe Text , _all :: Maybe Text , _last :: Maybe Text } deriving (Read, Show, Eq, Ord) instance FromJSON Labels where parseJSON (Object v) = Labels <$> v .:? "redisplay" <*> v .:? "all" <*> v .:? "last" instance ToJSON Labels where toJSON (Labels { _redisplay , _all , _last }) = object $ maybe [] (\x -> ["redisplay" .= x]) _redisplay ++ maybe [] (\x -> ["all" .= x]) _all ++ maybe [] (\x -> ["last" .= x]) _last ++ [] data History = History { _history :: Maybe Bool , _menu :: Maybe Bool , _fixed :: Maybe Bool , _maxonscreen :: Maybe Int , _labels :: Maybe Labels } deriving (Read, Show, Eq, Ord) instance FromJSON History where parseJSON (Object v) = History <$> v .:? "history" <*> v .:? "menu" <*> v .:? "fixed" <*> v .:? "maxonscreen" <*> v .:? "labels" instance ToJSON History where toJSON (History { _history , _menu , _fixed , _maxonscreen , _labels }) = object $ maybe [] (\x -> ["history" .= x]) _history ++ maybe [] (\x -> ["menu" .= x]) _menu ++ maybe [] (\x -> ["fixed" .= x]) _fixed ++ maybe [] (\x -> ["maxonscreen" .= x]) _maxonscreen ++ maybe [] (\x -> ["labels" .= x]) _labels ++ [] defaultHistory :: History defaultHistory = History { _history = Nothing , _menu = Nothing , _fixed = Nothing , _maxonscreen = Nothing , _labels = Nothing }