clckwrks-0.28.0.1: Clckwrks/NavBar/Types.hs
{-# LANGUAGE CPP, DeriveGeneric, DeriveDataTypeable, OverloadedStrings, RecordWildCards, TemplateHaskell, FlexibleContexts, UndecidableInstances #-}
module Clckwrks.NavBar.Types where
import Clckwrks.Types (NamedLink(..))
import Data.Aeson (ToJSON(..), (.=), object)
import Data.Data (Data, Typeable)
import Data.SafeCopy (SafeCopy(..), base, contain, deriveSafeCopy, getSafePut, getSafeGet)
import Data.Serialize (label, putWord8, getWord8)
import Data.Text (Text)
import GHC.Generics (Generic)
newtype NavBar = NavBar
{ navBarItems :: [NavBarItem]
}
deriving (Eq, Read, Show, Data, Typeable, Generic)
data NavBarItem
= NBLink NamedLink
| NBSubNavBar Text NavBar
deriving (Eq, Read, Show, Data, Typeable, Generic)
#if __GLASGOW_HASKELL >= __900__
instance SafeCopy NavBar where version = 1
instance SafeCopy NavBarItem where version = 1
#else
$(deriveSafeCopy 1 'base ''NavBar)
$(deriveSafeCopy 1 'base ''NavBarItem)
#endif
newtype NavBarLinks = NavBarLinks [(String, [NamedLink])]
deriving (Eq, Read, Show, Data, Typeable)
instance ToJSON NavBarLinks where
toJSON (NavBarLinks navBarLinks) =
toJSON $ map (\(plugName, links) ->
object [ "pluginName" .= plugName
, "pluginLinks" .= map toJSON links
]) navBarLinks