{-# 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 Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"guilds" Url 'Https -> GuildId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ GuildId
gid Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"scheduled-events"
instance Request (ScheduledEventRequest a) where
majorRoute :: ScheduledEventRequest a -> String
majorRoute = String -> ScheduledEventRequest a -> String
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) Option 'Https
forall a. Monoid a => a
mempty
GetScheduledEvent GuildId
gid ScheduledEventId
ev -> Url 'Https -> Option 'Https -> JsonRequest
Get (GuildId -> Url 'Https
sevEndpoint GuildId
gid Url 'Https -> ScheduledEventId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ ScheduledEventId
ev) Option 'Https
forall a. Monoid a => a
mempty
CreateScheduledEvent GuildId
gid CreateScheduledEventData
ev ->
Url 'Https
-> RestIO (ReqBodyJson Value) -> Option 'Https -> JsonRequest
forall a.
HttpBody a =>
Url 'Https -> RestIO a -> Option 'Https -> JsonRequest
Post (GuildId -> Url 'Https
sevEndpoint GuildId
gid) (ReqBodyJson Value -> RestIO (ReqBodyJson Value)
forall a. a -> RestIO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ReqBodyJson Value -> RestIO (ReqBodyJson Value))
-> ReqBodyJson Value -> RestIO (ReqBodyJson Value)
forall a b. (a -> b) -> a -> b
$ Value -> ReqBodyJson Value
forall a. a -> ReqBodyJson a
R.ReqBodyJson (Value -> ReqBodyJson Value) -> Value -> ReqBodyJson Value
forall a b. (a -> b) -> a -> b
$ CreateScheduledEventData -> Value
forall a. ToJSON a => a -> Value
toJSON CreateScheduledEventData
ev) Option 'Https
forall a. Monoid a => a
mempty
ModifyScheduledEvent GuildId
gid ScheduledEventId
evi ModifyScheduledEventData
ev -> Url 'Https
-> RestIO (ReqBodyJson Value) -> Option 'Https -> JsonRequest
forall a.
HttpBody a =>
Url 'Https -> RestIO a -> Option 'Https -> JsonRequest
Patch
(GuildId -> Url 'Https
sevEndpoint GuildId
gid Url 'Https -> ScheduledEventId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ ScheduledEventId
evi)
(ReqBodyJson Value -> RestIO (ReqBodyJson Value)
forall a. a -> RestIO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ReqBodyJson Value -> RestIO (ReqBodyJson Value))
-> ReqBodyJson Value -> RestIO (ReqBodyJson Value)
forall a b. (a -> b) -> a -> b
$ Value -> ReqBodyJson Value
forall a. a -> ReqBodyJson a
R.ReqBodyJson (Value -> ReqBodyJson Value) -> Value -> ReqBodyJson Value
forall a b. (a -> b) -> a -> b
$ ModifyScheduledEventData -> Value
forall a. ToJSON a => a -> Value
toJSON ModifyScheduledEventData
ev)
Option 'Https
forall a. Monoid a => a
mempty
DeleteScheduledEvent GuildId
gid ScheduledEventId
evi -> Url 'Https -> Option 'Https -> JsonRequest
Delete (GuildId -> Url 'Https
sevEndpoint GuildId
gid Url 'Https -> ScheduledEventId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ ScheduledEventId
evi) Option 'Https
forall a. Monoid a => a
mempty
GetScheduledEventUsers GuildId
gid ScheduledEventId
evi ->
Url 'Https -> Option 'Https -> JsonRequest
Get (GuildId -> Url 'Https
sevEndpoint GuildId
gid Url 'Https -> ScheduledEventId -> Url 'Https
forall a (scheme :: Scheme).
ToHttpApiData a =>
Url scheme -> a -> Url scheme
/~ ScheduledEventId
evi Url 'Https -> Text -> Url 'Https
forall (scheme :: Scheme). Url scheme -> Text -> Url scheme
/: Text
"users") Option 'Https
forall a. Monoid a => a
mempty