-- | Channel endpoints
module Calamity.HTTP.Channel
    ( ChannelRequest(..)
    , ChannelUpdate(..)
    , ChannelMessagesQuery(..)
    , GetReactionsOptions(..)
    , CreateChannelInviteOptions(..)
    , GroupDMAddRecipientOptions(..) ) where

import           Calamity.HTTP.Internal.Request
import           Calamity.HTTP.Internal.Route
import           Calamity.Internal.AesonThings
import           Calamity.Types.Model.Channel
import           Calamity.Types.Model.Guild
import           Calamity.Types.Model.User
import           Calamity.Types.Snowflake

import           Control.Arrow
import           Control.Lens                         hiding ( (.=) )

import           Data.Aeson
import           Data.Default.Class
import           Data.Maybe
import           Data.Text                            ( Text )

import           GHC.Generics

import           Network.Wreq

import           TextShow

data ChannelUpdate = ChannelUpdate
  { ChannelUpdate -> Maybe Text
name                 :: Maybe Text
  , ChannelUpdate -> Maybe Int
position             :: Maybe Int
  , ChannelUpdate -> Maybe Text
topic                :: Maybe Text
  , ChannelUpdate -> Maybe Bool
nsfw                 :: Maybe Bool
  , ChannelUpdate -> Maybe Int
rateLimitPerUser     :: Maybe Int
  , ChannelUpdate -> Maybe Int
bitrate              :: Maybe Int
  , ChannelUpdate -> Maybe Int
userLimit            :: Maybe Int
  , ChannelUpdate -> Maybe [Overwrite]
permissionOverwrites :: Maybe [Overwrite]
  , ChannelUpdate -> Maybe (Snowflake Channel)
parentID             :: Maybe (Snowflake Channel)
  }
  deriving ( (forall x. ChannelUpdate -> Rep ChannelUpdate x)
-> (forall x. Rep ChannelUpdate x -> ChannelUpdate)
-> Generic ChannelUpdate
forall x. Rep ChannelUpdate x -> ChannelUpdate
forall x. ChannelUpdate -> Rep ChannelUpdate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ChannelUpdate x -> ChannelUpdate
$cfrom :: forall x. ChannelUpdate -> Rep ChannelUpdate x
Generic, Int -> ChannelUpdate -> ShowS
[ChannelUpdate] -> ShowS
ChannelUpdate -> String
(Int -> ChannelUpdate -> ShowS)
-> (ChannelUpdate -> String)
-> ([ChannelUpdate] -> ShowS)
-> Show ChannelUpdate
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ChannelUpdate] -> ShowS
$cshowList :: [ChannelUpdate] -> ShowS
show :: ChannelUpdate -> String
$cshow :: ChannelUpdate -> String
showsPrec :: Int -> ChannelUpdate -> ShowS
$cshowsPrec :: Int -> ChannelUpdate -> ShowS
Show, ChannelUpdate
ChannelUpdate -> Default ChannelUpdate
forall a. a -> Default a
def :: ChannelUpdate
$cdef :: ChannelUpdate
Default )
  deriving ( [ChannelUpdate] -> Encoding
[ChannelUpdate] -> Value
ChannelUpdate -> Encoding
ChannelUpdate -> Value
(ChannelUpdate -> Value)
-> (ChannelUpdate -> Encoding)
-> ([ChannelUpdate] -> Value)
-> ([ChannelUpdate] -> Encoding)
-> ToJSON ChannelUpdate
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [ChannelUpdate] -> Encoding
$ctoEncodingList :: [ChannelUpdate] -> Encoding
toJSONList :: [ChannelUpdate] -> Value
$ctoJSONList :: [ChannelUpdate] -> Value
toEncoding :: ChannelUpdate -> Encoding
$ctoEncoding :: ChannelUpdate -> Encoding
toJSON :: ChannelUpdate -> Value
$ctoJSON :: ChannelUpdate -> Value
ToJSON ) via CalamityJSON ChannelUpdate

data ChannelMessagesQuery
  = ChannelMessagesAround
      { ChannelMessagesQuery -> Snowflake Message
around :: Snowflake Message
      }
  | ChannelMessagesBefore
      { ChannelMessagesQuery -> Snowflake Message
before :: Snowflake Message
      }
  | ChannelMessagesAfter
      { ChannelMessagesQuery -> Snowflake Message
after :: Snowflake Message
      }
  | ChannelMessagesLimit
      { ChannelMessagesQuery -> Int
limit :: Int
      }
  deriving ( (forall x. ChannelMessagesQuery -> Rep ChannelMessagesQuery x)
-> (forall x. Rep ChannelMessagesQuery x -> ChannelMessagesQuery)
-> Generic ChannelMessagesQuery
forall x. Rep ChannelMessagesQuery x -> ChannelMessagesQuery
forall x. ChannelMessagesQuery -> Rep ChannelMessagesQuery x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ChannelMessagesQuery x -> ChannelMessagesQuery
$cfrom :: forall x. ChannelMessagesQuery -> Rep ChannelMessagesQuery x
Generic, Int -> ChannelMessagesQuery -> ShowS
[ChannelMessagesQuery] -> ShowS
ChannelMessagesQuery -> String
(Int -> ChannelMessagesQuery -> ShowS)
-> (ChannelMessagesQuery -> String)
-> ([ChannelMessagesQuery] -> ShowS)
-> Show ChannelMessagesQuery
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ChannelMessagesQuery] -> ShowS
$cshowList :: [ChannelMessagesQuery] -> ShowS
show :: ChannelMessagesQuery -> String
$cshow :: ChannelMessagesQuery -> String
showsPrec :: Int -> ChannelMessagesQuery -> ShowS
$cshowsPrec :: Int -> ChannelMessagesQuery -> ShowS
Show )
  deriving ( [ChannelMessagesQuery] -> Encoding
[ChannelMessagesQuery] -> Value
ChannelMessagesQuery -> Encoding
ChannelMessagesQuery -> Value
(ChannelMessagesQuery -> Value)
-> (ChannelMessagesQuery -> Encoding)
-> ([ChannelMessagesQuery] -> Value)
-> ([ChannelMessagesQuery] -> Encoding)
-> ToJSON ChannelMessagesQuery
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [ChannelMessagesQuery] -> Encoding
$ctoEncodingList :: [ChannelMessagesQuery] -> Encoding
toJSONList :: [ChannelMessagesQuery] -> Value
$ctoJSONList :: [ChannelMessagesQuery] -> Value
toEncoding :: ChannelMessagesQuery -> Encoding
$ctoEncoding :: ChannelMessagesQuery -> Encoding
toJSON :: ChannelMessagesQuery -> Value
$ctoJSON :: ChannelMessagesQuery -> Value
ToJSON ) via CalamityJSON ChannelMessagesQuery

data GetReactionsOptions = GetReactionsOptions
  { GetReactionsOptions -> Maybe (Snowflake User)
before :: Maybe (Snowflake User)
  , GetReactionsOptions -> Maybe (Snowflake User)
after  :: Maybe (Snowflake User)
  , GetReactionsOptions -> Maybe Integer
limit  :: Maybe Integer
  }
  deriving ( Int -> GetReactionsOptions -> ShowS
[GetReactionsOptions] -> ShowS
GetReactionsOptions -> String
(Int -> GetReactionsOptions -> ShowS)
-> (GetReactionsOptions -> String)
-> ([GetReactionsOptions] -> ShowS)
-> Show GetReactionsOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetReactionsOptions] -> ShowS
$cshowList :: [GetReactionsOptions] -> ShowS
show :: GetReactionsOptions -> String
$cshow :: GetReactionsOptions -> String
showsPrec :: Int -> GetReactionsOptions -> ShowS
$cshowsPrec :: Int -> GetReactionsOptions -> ShowS
Show, (forall x. GetReactionsOptions -> Rep GetReactionsOptions x)
-> (forall x. Rep GetReactionsOptions x -> GetReactionsOptions)
-> Generic GetReactionsOptions
forall x. Rep GetReactionsOptions x -> GetReactionsOptions
forall x. GetReactionsOptions -> Rep GetReactionsOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetReactionsOptions x -> GetReactionsOptions
$cfrom :: forall x. GetReactionsOptions -> Rep GetReactionsOptions x
Generic, GetReactionsOptions
GetReactionsOptions -> Default GetReactionsOptions
forall a. a -> Default a
def :: GetReactionsOptions
$cdef :: GetReactionsOptions
Default )

data CreateChannelInviteOptions = CreateChannelInviteOptions
  { CreateChannelInviteOptions -> Maybe Int
maxAge    :: Maybe Int
  , CreateChannelInviteOptions -> Maybe Int
maxUses   :: Maybe Int
  , CreateChannelInviteOptions -> Maybe Bool
temporary :: Maybe Bool
  , CreateChannelInviteOptions -> Maybe Bool
unique    :: Maybe Bool
  }
  deriving ( Int -> CreateChannelInviteOptions -> ShowS
[CreateChannelInviteOptions] -> ShowS
CreateChannelInviteOptions -> String
(Int -> CreateChannelInviteOptions -> ShowS)
-> (CreateChannelInviteOptions -> String)
-> ([CreateChannelInviteOptions] -> ShowS)
-> Show CreateChannelInviteOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateChannelInviteOptions] -> ShowS
$cshowList :: [CreateChannelInviteOptions] -> ShowS
show :: CreateChannelInviteOptions -> String
$cshow :: CreateChannelInviteOptions -> String
showsPrec :: Int -> CreateChannelInviteOptions -> ShowS
$cshowsPrec :: Int -> CreateChannelInviteOptions -> ShowS
Show, (forall x.
 CreateChannelInviteOptions -> Rep CreateChannelInviteOptions x)
-> (forall x.
    Rep CreateChannelInviteOptions x -> CreateChannelInviteOptions)
-> Generic CreateChannelInviteOptions
forall x.
Rep CreateChannelInviteOptions x -> CreateChannelInviteOptions
forall x.
CreateChannelInviteOptions -> Rep CreateChannelInviteOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateChannelInviteOptions x -> CreateChannelInviteOptions
$cfrom :: forall x.
CreateChannelInviteOptions -> Rep CreateChannelInviteOptions x
Generic, CreateChannelInviteOptions
CreateChannelInviteOptions -> Default CreateChannelInviteOptions
forall a. a -> Default a
def :: CreateChannelInviteOptions
$cdef :: CreateChannelInviteOptions
Default )
  deriving ( [CreateChannelInviteOptions] -> Encoding
[CreateChannelInviteOptions] -> Value
CreateChannelInviteOptions -> Encoding
CreateChannelInviteOptions -> Value
(CreateChannelInviteOptions -> Value)
-> (CreateChannelInviteOptions -> Encoding)
-> ([CreateChannelInviteOptions] -> Value)
-> ([CreateChannelInviteOptions] -> Encoding)
-> ToJSON CreateChannelInviteOptions
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [CreateChannelInviteOptions] -> Encoding
$ctoEncodingList :: [CreateChannelInviteOptions] -> Encoding
toJSONList :: [CreateChannelInviteOptions] -> Value
$ctoJSONList :: [CreateChannelInviteOptions] -> Value
toEncoding :: CreateChannelInviteOptions -> Encoding
$ctoEncoding :: CreateChannelInviteOptions -> Encoding
toJSON :: CreateChannelInviteOptions -> Value
$ctoJSON :: CreateChannelInviteOptions -> Value
ToJSON ) via CalamityJSON CreateChannelInviteOptions

data GroupDMAddRecipientOptions = GroupDMAddRecipientOptions
  { GroupDMAddRecipientOptions -> Text
accessToken :: Text
  , GroupDMAddRecipientOptions -> Text
nick        :: Text
  }
  deriving ( Int -> GroupDMAddRecipientOptions -> ShowS
[GroupDMAddRecipientOptions] -> ShowS
GroupDMAddRecipientOptions -> String
(Int -> GroupDMAddRecipientOptions -> ShowS)
-> (GroupDMAddRecipientOptions -> String)
-> ([GroupDMAddRecipientOptions] -> ShowS)
-> Show GroupDMAddRecipientOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GroupDMAddRecipientOptions] -> ShowS
$cshowList :: [GroupDMAddRecipientOptions] -> ShowS
show :: GroupDMAddRecipientOptions -> String
$cshow :: GroupDMAddRecipientOptions -> String
showsPrec :: Int -> GroupDMAddRecipientOptions -> ShowS
$cshowsPrec :: Int -> GroupDMAddRecipientOptions -> ShowS
Show, (forall x.
 GroupDMAddRecipientOptions -> Rep GroupDMAddRecipientOptions x)
-> (forall x.
    Rep GroupDMAddRecipientOptions x -> GroupDMAddRecipientOptions)
-> Generic GroupDMAddRecipientOptions
forall x.
Rep GroupDMAddRecipientOptions x -> GroupDMAddRecipientOptions
forall x.
GroupDMAddRecipientOptions -> Rep GroupDMAddRecipientOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GroupDMAddRecipientOptions x -> GroupDMAddRecipientOptions
$cfrom :: forall x.
GroupDMAddRecipientOptions -> Rep GroupDMAddRecipientOptions x
Generic )
  deriving ( [GroupDMAddRecipientOptions] -> Encoding
[GroupDMAddRecipientOptions] -> Value
GroupDMAddRecipientOptions -> Encoding
GroupDMAddRecipientOptions -> Value
(GroupDMAddRecipientOptions -> Value)
-> (GroupDMAddRecipientOptions -> Encoding)
-> ([GroupDMAddRecipientOptions] -> Value)
-> ([GroupDMAddRecipientOptions] -> Encoding)
-> ToJSON GroupDMAddRecipientOptions
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [GroupDMAddRecipientOptions] -> Encoding
$ctoEncodingList :: [GroupDMAddRecipientOptions] -> Encoding
toJSONList :: [GroupDMAddRecipientOptions] -> Value
$ctoJSONList :: [GroupDMAddRecipientOptions] -> Value
toEncoding :: GroupDMAddRecipientOptions -> Encoding
$ctoEncoding :: GroupDMAddRecipientOptions -> Encoding
toJSON :: GroupDMAddRecipientOptions -> Value
$ctoJSON :: GroupDMAddRecipientOptions -> Value
ToJSON ) via CalamityJSON GroupDMAddRecipientOptions

data ChannelRequest a where
  CreateMessage            :: (HasID Channel c) =>                                c -> Text ->                                 ChannelRequest Message
  GetMessage               :: (HasID Channel c, HasID Message m) =>               c -> m ->                                    ChannelRequest Message
  EditMessage              :: (HasID Channel c, HasID Message m) =>               c -> m -> Maybe Text -> Maybe Embed ->       ChannelRequest Message
  DeleteMessage            :: (HasID Channel c, HasID Message m) =>               c -> m ->                                    ChannelRequest ()
  BulkDeleteMessages       :: (HasID Channel c, HasID Message m) =>               c -> [m] ->                                  ChannelRequest ()
  GetChannel               :: (HasID Channel c) =>                                c ->                                         ChannelRequest Channel
  ModifyChannel            :: (HasID Channel c) =>                                c -> ChannelUpdate ->                        ChannelRequest Channel
  DeleteChannel            :: (HasID Channel c) =>                                c ->                                         ChannelRequest ()
  GetChannelMessages       :: (HasID Channel c) =>                                c -> Maybe ChannelMessagesQuery ->           ChannelRequest [Message]
  CreateReaction           :: (HasID Channel c, HasID Message m) =>               c -> m -> RawEmoji ->                        ChannelRequest ()
  DeleteOwnReaction        :: (HasID Channel c, HasID Message m) =>               c -> m -> RawEmoji ->                        ChannelRequest ()
  DeleteUserReaction       :: (HasID Channel c, HasID Message m, HasID User u) => c -> m -> RawEmoji -> u ->                   ChannelRequest ()
  GetReactions             :: (HasID Channel c, HasID Message m) =>               c -> m -> RawEmoji -> GetReactionsOptions -> ChannelRequest [User]
  DeleteAllReactions       :: (HasID Channel c, HasID Message m) =>               c -> m ->                                    ChannelRequest ()
  GetChannelInvites        :: (HasID Channel c) =>                                c ->                                         ChannelRequest [Invite]
  CreateChannelInvite      :: (HasID Channel c) =>                                c -> CreateChannelInviteOptions ->           ChannelRequest Invite
  EditChannelPermissions   :: (HasID Channel c) =>                                c -> Overwrite ->                            ChannelRequest ()
  DeleteChannelPermission  :: (HasID Channel c, HasID Overwrite o) =>             c -> o ->                                    ChannelRequest ()
  TriggerTyping            :: (HasID Channel c) =>                                c ->                                         ChannelRequest ()
  GetPinnedMessages        :: (HasID Channel c) =>                                c ->                                         ChannelRequest [Message]
  AddPinnedMessage         :: (HasID Channel c, HasID Message m) =>               c -> m ->                                    ChannelRequest ()
  DeletePinnedMessage      :: (HasID Channel c, HasID Message m) =>               c -> m ->                                    ChannelRequest ()
  GroupDMAddRecipient      :: (HasID Channel c, HasID User u) =>                  c -> u -> GroupDMAddRecipientOptions ->      ChannelRequest ()
  GroupDMRemoveRecipient   :: (HasID Channel c, HasID User u) =>                  c -> u ->                                    ChannelRequest ()


baseRoute :: Snowflake Channel -> RouteBuilder _
baseRoute :: Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute id :: Snowflake Channel
id = RouteBuilder '[]
mkRouteBuilder RouteBuilder '[] -> S -> ConsRes S '[]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "channels" RouteBuilder '[] -> ID Channel -> ConsRes (ID Channel) '[]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Channel
forall k (a :: k). ID a
ID @Channel
  RouteBuilder '[ '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Required)]
    -> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Required)]
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Channel
id

instance Request (ChannelRequest a) a where
  toRoute :: ChannelRequest a -> Route
toRoute (CreateMessage (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id) _)      = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
id RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (GetChannel    (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id))        = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
id                 RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (ModifyChannel (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id) _)      = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
id                 RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (DeleteChannel (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id))        = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
id                 RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (GetChannelMessages (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
id) _) = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
id RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (GetMessage (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid)) = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message
    RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
    RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (CreateReaction (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid) emoji :: RawEmoji
emoji) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "reactions" RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S (RawEmoji -> Text
forall a. TextShow a => a -> Text
showt RawEmoji
emoji) RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "@me"
    RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
    RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (DeleteOwnReaction (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid) emoji :: RawEmoji
emoji) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "reactions" RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S (RawEmoji -> Text
forall a. TextShow a => a -> Text
showt RawEmoji
emoji) RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "@me"
    RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
    RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (DeleteUserReaction (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid) emoji :: RawEmoji
emoji (forall a. HasID User a => a -> Snowflake User
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @User -> Snowflake User
uid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "reactions" RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S (RawEmoji -> Text
forall a. TextShow a => a -> Text
showt RawEmoji
emoji) RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> ID User
-> ConsRes
     (ID User)
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID User
forall k (a :: k). ID a
ID @User
    RouteBuilder
  '[ '(User, 'Required), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Required), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(User, 'Required),
            '(Message, 'Required), '(Channel, 'Satisfied),
            '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(User, 'Required),
        '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(User, 'Required), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(User, 'Required),
        '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
    RouteBuilder
  '[ '(Message, 'Satisfied), '(User, 'Required),
     '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(User, 'Required),
         '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
            '(Message, 'Required), '(Channel, 'Satisfied),
            '(Channel, 'Required)])
-> RouteBuilder
     '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
        '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(User, 'Required),
        '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
        '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake User
uid
    RouteBuilder
  '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
     '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
         '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(User, 'Satisfied), '(Message, 'Satisfied), '(User, 'Required),
     '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (GetReactions (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid) emoji :: RawEmoji
emoji _) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "reactions" RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S (RawEmoji -> Text
forall a. TextShow a => a -> Text
showt RawEmoji
emoji)
    RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
    RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (DeleteAllReactions (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> S
-> ConsRes
     S
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "reactions"
    RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
    RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (EditMessage (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid) _ _) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message
    RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
    RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (DeleteMessage (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message
    RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
    RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (BulkDeleteMessages (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) _) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "messages" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "bulk-delete"
    RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (GetChannelInvites (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid)) = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "invites" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (CreateChannelInvite (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) _) = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "invites" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (EditChannelPermissions (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Overwrite a => a -> Snowflake Overwrite
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Overwrite -> Snowflake Overwrite
oid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "permissions" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Overwrite
-> ConsRes
     (ID Overwrite) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Overwrite
forall k (a :: k). ID a
ID @Overwrite
    RouteBuilder
  '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Overwrite
-> RouteBuilder
     '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Overwrite
oid
    RouteBuilder
  '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (DeleteChannelPermission (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Overwrite a => a -> Snowflake Overwrite
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Overwrite -> Snowflake Overwrite
oid)) =
    Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "permissions" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Overwrite
-> ConsRes
     (ID Overwrite) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Overwrite
forall k (a :: k). ID a
ID @Overwrite
    RouteBuilder
  '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Overwrite
-> RouteBuilder
     '[ '(Overwrite, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Overwrite
oid
    RouteBuilder
  '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Overwrite, 'Satisfied), '(Overwrite, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (TriggerTyping (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid)) = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "typing" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (GetPinnedMessages (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid)) = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "pins" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (AddPinnedMessage (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid)) = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "pins" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message
    RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
    RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (DeletePinnedMessage (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID Message a => a -> Snowflake Message
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Message -> Snowflake Message
mid)) = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "pins" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID Message
-> ConsRes
     (ID Message) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID Message
forall k (a :: k). ID a
ID @Message
    RouteBuilder
  '[ '(Message, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(Message, 'Satisfied), '(Message, 'Required),
            '(Channel, 'Satisfied), '(Channel, 'Required)])
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake Message
-> RouteBuilder
     '[ '(Message, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(Message, 'Satisfied), '(Message, 'Required),
        '(Channel, 'Satisfied), '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake Message
mid
    RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(Message, 'Satisfied), '(Message, 'Required),
         '(Channel, 'Satisfied), '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(Message, 'Satisfied), '(Message, 'Required),
     '(Channel, 'Satisfied), '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (GroupDMAddRecipient (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID User a => a -> Snowflake User
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @User -> Snowflake User
uid) _) = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "recipients" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID User
-> ConsRes
     (ID User) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID User
forall k (a :: k). ID a
ID @User
    RouteBuilder
  '[ '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
            '(Channel, 'Required)])
-> RouteBuilder
     '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake User
uid
    RouteBuilder
  '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute
  toRoute (GroupDMRemoveRecipient (c -> Snowflake Channel
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID -> Snowflake Channel
cid) (forall a. HasID User a => a -> Snowflake User
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @User -> Snowflake User
uid)) = Snowflake Channel
-> RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
baseRoute Snowflake Channel
cid RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> S -> ConsRes S '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// Text -> S
S "recipients" RouteBuilder '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
-> ID User
-> ConsRes
     (ID User) '[ '(Channel, 'Satisfied), '(Channel, 'Required)]
forall a (ids :: [(*, RouteRequirement)]).
RouteFragmentable a ids =>
RouteBuilder ids -> a -> ConsRes a ids
// ID User
forall k (a :: k). ID a
ID @User
    RouteBuilder
  '[ '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> RouteBuilder
         '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
            '(Channel, 'Required)])
-> RouteBuilder
     '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall a b. a -> (a -> b) -> b
& Snowflake User
-> RouteBuilder
     '[ '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
-> RouteBuilder
     '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
        '(Channel, 'Required)]
forall k (ids :: [(*, RouteRequirement)]).
Typeable k =>
Snowflake k
-> RouteBuilder ids -> RouteBuilder ('(k, 'Satisfied) : ids)
giveID Snowflake User
uid
    RouteBuilder
  '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> (RouteBuilder
      '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
         '(Channel, 'Required)]
    -> Route)
-> Route
forall a b. a -> (a -> b) -> b
& RouteBuilder
  '[ '(User, 'Satisfied), '(User, 'Required), '(Channel, 'Satisfied),
     '(Channel, 'Required)]
-> Route
forall (ids :: [(*, RouteRequirement)]).
EnsureFulfilled ids =>
RouteBuilder ids -> Route
buildRoute

  toAction :: ChannelRequest a -> Options -> String -> IO (Response ByteString)
toAction (CreateMessage _ t :: Text
t) = Value -> Options -> String -> IO (Response ByteString)
forall a.
Postable a =>
a -> Options -> String -> IO (Response ByteString)
postWith' ([Pair] -> Value
object ["content" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
.= Text
t])
  toAction (GetChannel _)      = Options -> String -> IO (Response ByteString)
getWith
  toAction (ModifyChannel _ p :: ChannelUpdate
p) = Value -> Options -> String -> IO (Response ByteString)
forall a.
Putable a =>
a -> Options -> String -> IO (Response ByteString)
putWith' (ChannelUpdate -> Value
forall a. ToJSON a => a -> Value
toJSON ChannelUpdate
p)
  toAction (DeleteChannel _)   = Options -> String -> IO (Response ByteString)
deleteWith
  toAction (GetChannelMessages _ (Just (ChannelMessagesAround (Word64 -> Text
forall a. TextShow a => a -> Text
showt (Word64 -> Text)
-> (Snowflake Message -> Word64) -> Snowflake Message -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Snowflake Message -> Word64
forall k (t :: k). Snowflake t -> Word64
fromSnowflake -> Text
a)))) = (Options -> Options)
-> Options -> String -> IO (Response ByteString)
getWithP (Text -> Lens' Options [Text]
param "around" (([Text] -> Identity [Text]) -> Options -> Identity Options)
-> [Text] -> Options -> Options
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Text
a])
  toAction (GetChannelMessages _ (Just (ChannelMessagesBefore (Word64 -> Text
forall a. TextShow a => a -> Text
showt (Word64 -> Text)
-> (Snowflake Message -> Word64) -> Snowflake Message -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Snowflake Message -> Word64
forall k (t :: k). Snowflake t -> Word64
fromSnowflake -> Text
a)))) = (Options -> Options)
-> Options -> String -> IO (Response ByteString)
getWithP (Text -> Lens' Options [Text]
param "before" (([Text] -> Identity [Text]) -> Options -> Identity Options)
-> [Text] -> Options -> Options
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Text
a])
  toAction (GetChannelMessages _ (Just (ChannelMessagesAfter  (Word64 -> Text
forall a. TextShow a => a -> Text
showt (Word64 -> Text)
-> (Snowflake Message -> Word64) -> Snowflake Message -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Snowflake Message -> Word64
forall k (t :: k). Snowflake t -> Word64
fromSnowflake -> Text
a)))) = (Options -> Options)
-> Options -> String -> IO (Response ByteString)
getWithP (Text -> Lens' Options [Text]
param "after"  (([Text] -> Identity [Text]) -> Options -> Identity Options)
-> [Text] -> Options -> Options
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Text
a])
  toAction (GetChannelMessages _ (Just (ChannelMessagesLimit  (Int -> Text
forall a. TextShow a => a -> Text
showt -> Text
a))))                 = (Options -> Options)
-> Options -> String -> IO (Response ByteString)
getWithP (Text -> Lens' Options [Text]
param "around" (([Text] -> Identity [Text]) -> Options -> Identity Options)
-> [Text] -> Options -> Options
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [Text
a])
  toAction (GetChannelMessages _ Nothing) = Options -> String -> IO (Response ByteString)
getWith
  toAction (GetMessage _ _)               = Options -> String -> IO (Response ByteString)
getWith
  toAction CreateReaction {}              = Options -> String -> IO (Response ByteString)
putEmpty
  toAction DeleteOwnReaction {}           = Options -> String -> IO (Response ByteString)
deleteWith
  toAction DeleteUserReaction {}          = Options -> String -> IO (Response ByteString)
deleteWith
  toAction (GetReactions _ _ _ GetReactionsOptions { Maybe (Snowflake User)
before :: Maybe (Snowflake User)
$sel:before:GetReactionsOptions :: GetReactionsOptions -> Maybe (Snowflake User)
before, Maybe (Snowflake User)
after :: Maybe (Snowflake User)
$sel:after:GetReactionsOptions :: GetReactionsOptions -> Maybe (Snowflake User)
after, Maybe Integer
limit :: Maybe Integer
$sel:limit:GetReactionsOptions :: GetReactionsOptions -> Maybe Integer
limit }) = (Options -> Options)
-> Options -> String -> IO (Response ByteString)
getWithP
    (Text -> Lens' Options [Text]
param "before" (([Text] -> Identity [Text]) -> Options -> Identity Options)
-> [Text] -> Options -> Options
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe Text -> [Text]
forall a. Maybe a -> [a]
maybeToList (Snowflake User -> Text
forall a. TextShow a => a -> Text
showt (Snowflake User -> Text) -> Maybe (Snowflake User) -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Snowflake User)
before)
     (Options -> Options) -> (Options -> Options) -> Options -> Options
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Text -> Lens' Options [Text]
param "after" (([Text] -> Identity [Text]) -> Options -> Identity Options)
-> [Text] -> Options -> Options
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe Text -> [Text]
forall a. Maybe a -> [a]
maybeToList (Snowflake User -> Text
forall a. TextShow a => a -> Text
showt (Snowflake User -> Text) -> Maybe (Snowflake User) -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Snowflake User)
after)
     (Options -> Options) -> (Options -> Options) -> Options -> Options
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Text -> Lens' Options [Text]
param "limit" (([Text] -> Identity [Text]) -> Options -> Identity Options)
-> [Text] -> Options -> Options
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Maybe Text -> [Text]
forall a. Maybe a -> [a]
maybeToList (Integer -> Text
forall a. TextShow a => a -> Text
showt (Integer -> Text) -> Maybe Integer -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Integer
limit))
  toAction (DeleteAllReactions _ _) = Options -> String -> IO (Response ByteString)
deleteWith
  toAction (EditMessage _ _ content :: Maybe Text
content embed :: Maybe Embed
embed) = Value -> Options -> String -> IO (Response ByteString)
forall a.
Patchable a =>
a -> Options -> String -> IO (Response ByteString)
patchWith'
    ([Pair] -> Value
object ["content" Text -> Maybe Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
.= Maybe Text
content, "embed" Text -> Maybe Embed -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
.= Maybe Embed
embed])
  toAction (DeleteMessage _ _)                       = Options -> String -> IO (Response ByteString)
deleteWith
  toAction (BulkDeleteMessages _ ((m -> Snowflake Message) -> [m] -> [Snowflake Message]
forall a b. (a -> b) -> [a] -> [b]
map (forall a. HasID Message a => a -> Snowflake Message
forall k (b :: k) a. HasID b a => a -> Snowflake b
getID @Message) -> [Snowflake Message]
ids)) = Value -> Options -> String -> IO (Response ByteString)
forall a.
Postable a =>
a -> Options -> String -> IO (Response ByteString)
postWith' ([Pair] -> Value
object ["messages" Text -> [Snowflake Message] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
.= [Snowflake Message]
ids])
  toAction (GetChannelInvites _)                     = Options -> String -> IO (Response ByteString)
getWith
  toAction (CreateChannelInvite _ o :: CreateChannelInviteOptions
o)                 = Value -> Options -> String -> IO (Response ByteString)
forall a.
Postable a =>
a -> Options -> String -> IO (Response ByteString)
postWith' (CreateChannelInviteOptions -> Value
forall a. ToJSON a => a -> Value
toJSON CreateChannelInviteOptions
o)
  toAction (EditChannelPermissions _ o :: Overwrite
o)              = Value -> Options -> String -> IO (Response ByteString)
forall a.
Putable a =>
a -> Options -> String -> IO (Response ByteString)
putWith' (Overwrite -> Value
forall a. ToJSON a => a -> Value
toJSON Overwrite
o)
  toAction (DeleteChannelPermission _ _)             = Options -> String -> IO (Response ByteString)
deleteWith
  toAction (TriggerTyping _)                         = Options -> String -> IO (Response ByteString)
postEmpty
  toAction (GetPinnedMessages _)                     = Options -> String -> IO (Response ByteString)
getWith
  toAction (AddPinnedMessage _ _)                    = Options -> String -> IO (Response ByteString)
putEmpty
  toAction (DeletePinnedMessage _ _)                 = Options -> String -> IO (Response ByteString)
deleteWith
  toAction (GroupDMAddRecipient _ _ o :: GroupDMAddRecipientOptions
o)               = Value -> Options -> String -> IO (Response ByteString)
forall a.
Putable a =>
a -> Options -> String -> IO (Response ByteString)
putWith' (GroupDMAddRecipientOptions -> Value
forall a. ToJSON a => a -> Value
toJSON GroupDMAddRecipientOptions
o)
  toAction (GroupDMRemoveRecipient _ _)              = Options -> String -> IO (Response ByteString)
deleteWith