hipchat-hs-0.0.3: lib/HipChat/Types/WebPanel.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module HipChat.Types.WebPanel where
-- https://www.hipchat.com/docs/apiv2/webpanels
import Data.Aeson
import Data.Aeson.Casing
import Data.Aeson.Types
import Data.Monoid
import Data.Text (Text)
import qualified Data.Text as T
import GHC.Generics
import HipChat.Types.Icon
import HipChat.Types.Key
import HipChat.Types.Name
data WebPanelLocation = HipchatSidebarRight
deriving (Eq, Show)
instance ToJSON WebPanelLocation where
toJSON HipchatSidebarRight = "hipchat.sidebar.right"
instance FromJSON WebPanelLocation where
parseJSON (String "hipchat.sidebar.right") = return HipchatSidebarRight
parseJSON (String x) = fail $ "Unexpected string: \"" <> T.unpack x <> "\" when parsing WebPanelLocation"
parseJSON x = typeMismatch "WebPanelLocation" x
data WebPanel = WebPanel
{ webPanelIcon :: Maybe Icon -- ^ Icon to display on the left side of the webPanel title.
, webPanelKey :: Key -- ^ Unique key (in the context of the integration) to identify this webPanel. Valid length range: 1 - 40.
, webPanelLocation :: WebPanelLocation -- ^ The location of this webPanel Valid values: hipchat.sidebar.right.
, webPanelName :: Name -- ^ The display name of the webPanel.
, webPanelUrl :: Text -- ^ The URL of the resource providing the view content.
, webPanelWeight :: Maybe Int -- ^ Determines the order in which webPanel appear. Web panels are displayed top to bottom or left to right in order of ascending weight. Defaults to 100.
} deriving (Eq, Generic, Show)
webPanel :: Key -> Name -> Text -> WebPanel
webPanel k name url = WebPanel Nothing k HipchatSidebarRight name url Nothing
instance ToJSON WebPanel where
toJSON = genericToJSON (aesonDrop 8 camelCase){omitNothingFields = True}
instance FromJSON WebPanel where
parseJSON = genericParseJSON $ aesonDrop 8 camelCase