{-# LANGUAGE GADTs #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Discord.Internal.Rest.ScheduledEvents
( ScheduledEventRequest(..)
) where
import Data.Aeson ( ToJSON(toJSON) )
import Discord.Internal.Rest.Prelude ( JsonRequest(..)
, Request
( jsonRequest
, majorRoute
)
, baseUrl
)
import Discord.Internal.Types.Prelude ( GuildId
, ScheduledEventId
)
import Discord.Internal.Types.ScheduledEvents
( CreateScheduledEventData
, ModifyScheduledEventData
, ScheduledEvent
, ScheduledEventUser
)
import qualified Network.HTTP.Req as R
import Network.HTTP.Req ( (/:), (/~) )
data ScheduledEventRequest a where
ListScheduledEvents ::GuildId
-> ScheduledEventRequest [ScheduledEvent]
CreateScheduledEvent ::GuildId
-> CreateScheduledEventData
-> ScheduledEventRequest ScheduledEvent
GetScheduledEvent ::GuildId
-> ScheduledEventId
-> ScheduledEventRequest ScheduledEvent
ModifyScheduledEvent ::GuildId
-> ScheduledEventId
-> ModifyScheduledEventData
-> ScheduledEventRequest ScheduledEvent
DeleteScheduledEvent ::GuildId
-> ScheduledEventId
-> ScheduledEventRequest ()
GetScheduledEventUsers ::GuildId
-> ScheduledEventId
-> ScheduledEventRequest [ScheduledEventUser]
sevEndpoint :: GuildId -> R.Url 'R.Https
sevEndpoint :: GuildId -> Url 'Https
sevEndpoint GuildId
gid = Url 'Https
baseUrl forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"guilds" forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ GuildId
gid forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"scheduled-events"
instance Request (ScheduledEventRequest a) where
majorRoute :: ScheduledEventRequest a -> String
majorRoute = forall a b. a -> b -> a
const String
"scheduledEvent"
jsonRequest :: ScheduledEventRequest a -> JsonRequest
jsonRequest ScheduledEventRequest a
rq = case ScheduledEventRequest a
rq of
ListScheduledEvents GuildId
gid -> Url 'Https -> Option 'Https -> JsonRequest
Get (GuildId -> Url 'Https
sevEndpoint GuildId
gid) forall a. Monoid a => a
mempty
GetScheduledEvent GuildId
gid ScheduledEventId
ev -> Url 'Https -> Option 'Https -> JsonRequest
Get (GuildId -> Url 'Https
sevEndpoint GuildId
gid forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ ScheduledEventId
ev) forall a. Monoid a => a
mempty
CreateScheduledEvent GuildId
gid CreateScheduledEventData
ev ->
forall a.
HttpBody a =>
Url 'Https -> RestIO a -> Option 'Https -> JsonRequest
Post (GuildId -> Url 'Https
sevEndpoint GuildId
gid) (forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall a. a -> ReqBodyJson a
R.ReqBodyJson forall a b. (a -> b) -> a -> b
$ forall a. ToJSON a => a -> Value
toJSON CreateScheduledEventData
ev) forall a. Monoid a => a
mempty
ModifyScheduledEvent GuildId
gid ScheduledEventId
evi ModifyScheduledEventData
ev -> forall a.
HttpBody a =>
Url 'Https -> RestIO a -> Option 'Https -> JsonRequest
Patch
(GuildId -> Url 'Https
sevEndpoint GuildId
gid forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ ScheduledEventId
evi)
(forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall a. a -> ReqBodyJson a
R.ReqBodyJson forall a b. (a -> b) -> a -> b
$ forall a. ToJSON a => a -> Value
toJSON ModifyScheduledEventData
ev)
forall a. Monoid a => a
mempty
DeleteScheduledEvent GuildId
gid ScheduledEventId
evi -> Url 'Https -> Option 'Https -> JsonRequest
Delete (GuildId -> Url 'Https
sevEndpoint GuildId
gid forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ ScheduledEventId
evi) forall a. Monoid a => a
mempty
GetScheduledEventUsers GuildId
gid ScheduledEventId
evi ->
Url 'Https -> Option 'Https -> JsonRequest
Get (GuildId -> Url 'Https
sevEndpoint GuildId
gid forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ ScheduledEventId
evi forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"users") forall a. Monoid a => a
mempty