{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
module Web.Slack.UsersConversations (
UsersConversationsRequest (..),
UsersConversationsResponse (..),
usersConversations,
usersConversationsAll,
) where
import Servant.API
import Servant.Client hiding (Response)
import Servant.Client.Core hiding (Response)
import Web.FormUrlEncoded (ToForm (..), genericToForm)
import Web.Slack.AesonUtils
import Web.Slack.Common (Cursor, TeamId, UserId)
import Web.Slack.Conversation (Conversation, ConversationType)
import Web.Slack.Internal
import Web.Slack.Pager (LoadPage, PagedRequest (..), PagedResponse (..), Response, ResponseMetadata, fetchAllBy)
import Web.Slack.Prelude
newtype ConversationTypesList = ConversationTypesList {ConversationTypesList -> NonEmpty ConversationType
unConversationTypesList :: NonEmpty ConversationType}
deriving stock (Int -> ConversationTypesList -> ShowS
[ConversationTypesList] -> ShowS
ConversationTypesList -> String
(Int -> ConversationTypesList -> ShowS)
-> (ConversationTypesList -> String)
-> ([ConversationTypesList] -> ShowS)
-> Show ConversationTypesList
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ConversationTypesList -> ShowS
showsPrec :: Int -> ConversationTypesList -> ShowS
$cshow :: ConversationTypesList -> String
show :: ConversationTypesList -> String
$cshowList :: [ConversationTypesList] -> ShowS
showList :: [ConversationTypesList] -> ShowS
Show, ConversationTypesList -> ConversationTypesList -> Bool
(ConversationTypesList -> ConversationTypesList -> Bool)
-> (ConversationTypesList -> ConversationTypesList -> Bool)
-> Eq ConversationTypesList
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ConversationTypesList -> ConversationTypesList -> Bool
== :: ConversationTypesList -> ConversationTypesList -> Bool
$c/= :: ConversationTypesList -> ConversationTypesList -> Bool
/= :: ConversationTypesList -> ConversationTypesList -> Bool
Eq)
deriving newtype (ConversationTypesList -> ()
(ConversationTypesList -> ()) -> NFData ConversationTypesList
forall a. (a -> ()) -> NFData a
$crnf :: ConversationTypesList -> ()
rnf :: ConversationTypesList -> ()
NFData)
instance ToHttpApiData ConversationTypesList where
toQueryParam :: ConversationTypesList -> Text
toQueryParam (ConversationTypesList NonEmpty ConversationType
list) = Element (NonEmpty Text) -> NonEmpty Text -> Element (NonEmpty Text)
forall mono.
(MonoFoldable mono, Monoid (Element mono)) =>
Element mono -> mono -> Element mono
intercalate Text
Element (NonEmpty Text)
"," (NonEmpty Text -> Element (NonEmpty Text))
-> NonEmpty Text -> Element (NonEmpty Text)
forall a b. (a -> b) -> a -> b
$ ConversationType -> Text
forall a. ToHttpApiData a => a -> Text
toUrlPiece (ConversationType -> Text)
-> NonEmpty ConversationType -> NonEmpty Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> NonEmpty ConversationType
list
data UsersConversationsRequest = UsersConversationsRequest
{ UsersConversationsRequest -> Maybe Cursor
cursor :: Maybe Cursor
, UsersConversationsRequest -> Maybe Bool
excludeArchived :: Maybe Bool
, UsersConversationsRequest -> Maybe Int
limit :: Maybe Int
, UsersConversationsRequest -> Maybe TeamId
teamId :: Maybe TeamId
, UsersConversationsRequest -> Maybe ConversationTypesList
types :: Maybe ConversationTypesList
, UsersConversationsRequest -> Maybe UserId
user :: Maybe UserId
}
deriving stock (Int -> UsersConversationsRequest -> ShowS
[UsersConversationsRequest] -> ShowS
UsersConversationsRequest -> String
(Int -> UsersConversationsRequest -> ShowS)
-> (UsersConversationsRequest -> String)
-> ([UsersConversationsRequest] -> ShowS)
-> Show UsersConversationsRequest
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UsersConversationsRequest -> ShowS
showsPrec :: Int -> UsersConversationsRequest -> ShowS
$cshow :: UsersConversationsRequest -> String
show :: UsersConversationsRequest -> String
$cshowList :: [UsersConversationsRequest] -> ShowS
showList :: [UsersConversationsRequest] -> ShowS
Show, UsersConversationsRequest -> UsersConversationsRequest -> Bool
(UsersConversationsRequest -> UsersConversationsRequest -> Bool)
-> (UsersConversationsRequest -> UsersConversationsRequest -> Bool)
-> Eq UsersConversationsRequest
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: UsersConversationsRequest -> UsersConversationsRequest -> Bool
== :: UsersConversationsRequest -> UsersConversationsRequest -> Bool
$c/= :: UsersConversationsRequest -> UsersConversationsRequest -> Bool
/= :: UsersConversationsRequest -> UsersConversationsRequest -> Bool
Eq, (forall x.
UsersConversationsRequest -> Rep UsersConversationsRequest x)
-> (forall x.
Rep UsersConversationsRequest x -> UsersConversationsRequest)
-> Generic UsersConversationsRequest
forall x.
Rep UsersConversationsRequest x -> UsersConversationsRequest
forall x.
UsersConversationsRequest -> Rep UsersConversationsRequest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
UsersConversationsRequest -> Rep UsersConversationsRequest x
from :: forall x.
UsersConversationsRequest -> Rep UsersConversationsRequest x
$cto :: forall x.
Rep UsersConversationsRequest x -> UsersConversationsRequest
to :: forall x.
Rep UsersConversationsRequest x -> UsersConversationsRequest
Generic)
deriving anyclass (UsersConversationsRequest
UsersConversationsRequest -> Default UsersConversationsRequest
forall a. a -> Default a
$cdef :: UsersConversationsRequest
def :: UsersConversationsRequest
Default)
instance ToForm UsersConversationsRequest where
toForm :: UsersConversationsRequest -> Form
toForm = FormOptions -> UsersConversationsRequest -> Form
forall a.
(Generic a, GToForm a (Rep a)) =>
FormOptions -> a -> Form
genericToForm FormOptions
snakeCaseFormOptions
instance PagedRequest UsersConversationsRequest where
setCursor :: Maybe Cursor
-> UsersConversationsRequest -> UsersConversationsRequest
setCursor Maybe Cursor
c UsersConversationsRequest
req = UsersConversationsRequest
req {cursor = c}
data UsersConversationsResponse = UsersConversationsResponse
{ UsersConversationsResponse -> [Conversation]
channels :: [Conversation]
, UsersConversationsResponse -> Maybe ResponseMetadata
responseMetadata :: Maybe ResponseMetadata
}
deriving stock (Int -> UsersConversationsResponse -> ShowS
[UsersConversationsResponse] -> ShowS
UsersConversationsResponse -> String
(Int -> UsersConversationsResponse -> ShowS)
-> (UsersConversationsResponse -> String)
-> ([UsersConversationsResponse] -> ShowS)
-> Show UsersConversationsResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UsersConversationsResponse -> ShowS
showsPrec :: Int -> UsersConversationsResponse -> ShowS
$cshow :: UsersConversationsResponse -> String
show :: UsersConversationsResponse -> String
$cshowList :: [UsersConversationsResponse] -> ShowS
showList :: [UsersConversationsResponse] -> ShowS
Show, UsersConversationsResponse -> UsersConversationsResponse -> Bool
(UsersConversationsResponse -> UsersConversationsResponse -> Bool)
-> (UsersConversationsResponse
-> UsersConversationsResponse -> Bool)
-> Eq UsersConversationsResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: UsersConversationsResponse -> UsersConversationsResponse -> Bool
== :: UsersConversationsResponse -> UsersConversationsResponse -> Bool
$c/= :: UsersConversationsResponse -> UsersConversationsResponse -> Bool
/= :: UsersConversationsResponse -> UsersConversationsResponse -> Bool
Eq)
instance PagedResponse UsersConversationsResponse where
type ResponseObject UsersConversationsResponse = Conversation
getResponseData :: UsersConversationsResponse
-> [ResponseObject UsersConversationsResponse]
getResponseData UsersConversationsResponse {[Conversation]
channels :: UsersConversationsResponse -> [Conversation]
channels :: [Conversation]
channels} = [ResponseObject UsersConversationsResponse]
[Conversation]
channels
getResponseMetadata :: UsersConversationsResponse -> Maybe ResponseMetadata
getResponseMetadata UsersConversationsResponse {Maybe ResponseMetadata
responseMetadata :: UsersConversationsResponse -> Maybe ResponseMetadata
responseMetadata :: Maybe ResponseMetadata
responseMetadata} = Maybe ResponseMetadata
responseMetadata
$(deriveFromJSON snakeCaseOptions ''UsersConversationsResponse)
type Api =
"users.conversations"
:> AuthProtect "token"
:> ReqBody '[FormUrlEncoded] UsersConversationsRequest
:> Post '[JSON] (ResponseJSON UsersConversationsResponse)
usersConversations :: SlackConfig -> UsersConversationsRequest -> IO (Response UsersConversationsResponse)
usersConversations :: SlackConfig
-> UsersConversationsRequest
-> IO (Response UsersConversationsResponse)
usersConversations SlackConfig
slackConfig UsersConversationsRequest
req = do
let authR :: AuthenticatedRequest (AuthProtect "token")
authR = SlackConfig -> AuthenticatedRequest (AuthProtect "token")
mkSlackAuthenticateReq SlackConfig
slackConfig
ClientM (ResponseJSON UsersConversationsResponse)
-> Manager -> IO (Response UsersConversationsResponse)
forall a. ClientM (ResponseJSON a) -> Manager -> IO (Response a)
run (AuthenticatedRequest (AuthProtect "token")
-> UsersConversationsRequest
-> ClientM (ResponseJSON UsersConversationsResponse)
usersConversations_ AuthenticatedRequest (AuthProtect "token")
authR UsersConversationsRequest
req) (Manager -> IO (Response UsersConversationsResponse))
-> (SlackConfig -> Manager)
-> SlackConfig
-> IO (Response UsersConversationsResponse)
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. SlackConfig -> Manager
slackConfigManager (SlackConfig -> IO (Response UsersConversationsResponse))
-> SlackConfig -> IO (Response UsersConversationsResponse)
forall a b. (a -> b) -> a -> b
$ SlackConfig
slackConfig
usersConversations_ ::
AuthenticatedRequest (AuthProtect "token") ->
UsersConversationsRequest ->
ClientM (ResponseJSON UsersConversationsResponse)
usersConversations_ :: AuthenticatedRequest (AuthProtect "token")
-> UsersConversationsRequest
-> ClientM (ResponseJSON UsersConversationsResponse)
usersConversations_ = Proxy Api -> Client ClientM Api
forall api.
HasClient ClientM api =>
Proxy api -> Client ClientM api
client (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @Api)
usersConversationsAll :: SlackConfig -> UsersConversationsRequest -> IO (LoadPage IO Conversation)
usersConversationsAll :: SlackConfig
-> UsersConversationsRequest -> IO (LoadPage IO Conversation)
usersConversationsAll = (UsersConversationsRequest
-> IO (Response UsersConversationsResponse))
-> UsersConversationsRequest
-> IO (LoadPage IO (ResponseObject UsersConversationsResponse))
(UsersConversationsRequest
-> IO (Response UsersConversationsResponse))
-> UsersConversationsRequest -> IO (LoadPage IO Conversation)
forall (m :: * -> *) req resp.
(MonadIO m, PagedRequest req, PagedResponse resp) =>
(req -> m (Response resp))
-> req -> m (LoadPage m (ResponseObject resp))
fetchAllBy ((UsersConversationsRequest
-> IO (Response UsersConversationsResponse))
-> UsersConversationsRequest -> IO (LoadPage IO Conversation))
-> (SlackConfig
-> UsersConversationsRequest
-> IO (Response UsersConversationsResponse))
-> SlackConfig
-> UsersConversationsRequest
-> IO (LoadPage IO Conversation)
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. SlackConfig
-> UsersConversationsRequest
-> IO (Response UsersConversationsResponse)
usersConversations