{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module Web.Slack.Channel
( Channel(..)
, Purpose(..)
, Topic(..)
, CreateReq(..)
, mkCreateReq
, CreateRsp(..)
, ListReq(..)
, mkListReq
, ListRsp(..)
)
where
import Data.Aeson.TH
import GHC.Generics (Generic)
import Web.FormUrlEncoded
import Web.Slack.Common
import Web.Slack.Util
import Data.Text (Text)
data Channel =
Channel
{ channelId :: Text
, channelName :: Text
, channelCreated :: Integer
, channelCreator :: UserId
, channelIsArchived :: Bool
, channelIsMember :: Bool
, channelIsGeneral :: Bool
, channelLastRead :: Maybe Text
, channelLatest :: Maybe Text
, channelUnreadCount :: Maybe Integer
, channelUnreadCountDisplay :: Maybe Integer
, channelMembers :: [UserId]
, channelTopic :: Topic
, channelPurpose :: Purpose
}
deriving (Eq, Generic, Show)
data Purpose =
Purpose
{ purposeValue :: Text
, purposeCreator :: Text
, purposeLastSet :: Integer
}
deriving (Eq, Generic, Show)
data Topic =
Topic
{ topicValue :: Text
, topicCreator :: Text
, topicLastSet :: Integer
}
deriving (Eq, Generic, Show)
$(deriveFromJSON (jsonOpts "channel") ''Channel)
$(deriveJSON (jsonOpts "purpose") ''Purpose)
$(deriveJSON (jsonOpts "topic") ''Topic)
data CreateReq =
CreateReq
{ createReqName :: Text
, createReqValidate :: Maybe Bool
}
deriving (Eq, Generic, Show)
$(deriveJSON (jsonOpts "createReq") ''CreateReq)
instance ToForm CreateReq where
toForm =
genericToForm (formOpts "createReq")
mkCreateReq
:: Text
-> CreateReq
mkCreateReq name =
CreateReq
{ createReqName = name
, createReqValidate = Nothing
}
data CreateRsp =
CreateRsp
{ createRspChannel :: Channel
}
deriving (Eq, Generic, Show)
$(deriveFromJSON (jsonOpts "createRsp") ''CreateRsp)
data ListReq =
ListReq
{ listReqExcludeArchived :: Maybe Bool
, listReqExcludeMembers :: Maybe Bool
}
deriving (Eq, Generic, Show)
$(deriveJSON (jsonOpts "listReq") ''ListReq)
instance ToForm ListReq where
toForm =
genericToForm (formOpts "listReq")
mkListReq
:: ListReq
mkListReq =
ListReq
{ listReqExcludeArchived = Nothing
, listReqExcludeMembers = Nothing
}
data ListRsp =
ListRsp
{ listRspChannels :: [Channel]
}
deriving (Eq, Generic, Show)
$(deriveFromJSON (jsonOpts "listRsp") ''ListRsp)