module Web.Mackerel.Types.Dashboard where
import Data.Aeson
import qualified Data.Aeson as Aeson
import Data.Aeson.TH (deriveJSON, fieldLabelModifier)
import Data.Aeson.Types (typeMismatch)
import Data.Char (toLower)
import qualified Data.Text as Text
import Web.Mackerel.Internal.TH
data DashboardId = DashboardId String
deriving (Eq, Show)
instance FromJSON DashboardId where
parseJSON (Aeson.String dashboardId') = return $ DashboardId $ Text.unpack dashboardId'
parseJSON o = typeMismatch "DashboardId" o
instance ToJSON DashboardId where
toJSON (DashboardId dashboardId') = toJSON dashboardId'
data DashboardCreate
= DashboardCreate {
dashboardCreateTitle :: String,
dashboardCreateBodyMarkdown :: String,
dashboardCreateUrlPath :: String
} deriving (Eq, Show)
$(deriveJSON options { fieldLabelModifier = (\(c:cs) -> toLower c : cs) . drop 15 } ''DashboardCreate)
data Dashboard
= Dashboard {
dashboardId :: DashboardId,
dashboardTitle :: String,
dashboardBodyMarkdown :: String,
dashboardUrlPath :: String
} deriving (Eq, Show)
$(deriveJSON options ''Dashboard)