module Clckwrks.NavBar.Types where
import Clckwrks.Types (NamedLink(..))
import Data.Aeson (ToJSON(..), (.=), object)
import Data.Data (Data, Typeable)
import Data.SafeCopy (base, deriveSafeCopy)
import Data.Text (Text)
newtype NavBar = NavBar
{ navBarItems :: [NavBarItem]
}
deriving (Eq, Read, Show, Data, Typeable)
data NavBarItem
= NBLink NamedLink
| NBSubNavBar Text NavBar
deriving (Eq, Read, Show, Data, Typeable)
$(deriveSafeCopy 1 'base ''NavBar)
$(deriveSafeCopy 1 'base ''NavBarItem)
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