use crate::model::id::{AttachmentId, ChannelId, GuildId, MessageId, RoleId, Snowflake, UserId};
pub(crate) enum Route {
GetCurrentUser,
GetUser {
user_id: UserId,
},
ModifyCurrentUser,
CreateDm,
ListPrivateChannels,
GetUserProfile {
target_id: UserId,
},
ListCurrentUserMentions,
DeleteCurrentUserMention {
message_id: MessageId,
},
ListFavoriteMemes,
CreateMemeFromUrl,
GetFavoriteMeme {
meme_id: String,
},
UpdateFavoriteMeme {
meme_id: String,
},
DeleteFavoriteMeme {
meme_id: String,
},
GetGuild {
guild_id: GuildId,
},
GetGuildPreview {
guild_id: GuildId,
},
ModifyGuild {
guild_id: GuildId,
},
GetGuildChannels {
guild_id: GuildId,
},
GetGuildMembers {
guild_id: GuildId,
},
GetGuildMember {
guild_id: GuildId,
user_id: UserId,
},
ModifyGuildMember {
guild_id: GuildId,
user_id: UserId,
},
ModifyCurrentMember {
guild_id: GuildId,
},
CreateGuildChannel {
guild_id: GuildId,
},
GetGuildInvites {
guild_id: GuildId,
},
GetGuildVanityUrl {
guild_id: GuildId,
},
UpdateGuildVanityUrl {
guild_id: GuildId,
},
BulkCreateGuildEmojis {
guild_id: GuildId,
},
BulkCreateGuildStickers {
guild_id: GuildId,
},
AcceptInvite {
code: String,
},
CreateGuild,
DeleteGuild2 {
guild_id: GuildId,
},
TransferGuildOwnership {
guild_id: GuildId,
},
ToggleDetachedBanner {
guild_id: GuildId,
},
ToggleTextChannelFlexibleNames {
guild_id: GuildId,
},
UpdateRoleHoistPositions {
guild_id: GuildId,
},
ResetRoleHoistPositions {
guild_id: GuildId,
},
ListGuildAuditLogs {
guild_id: GuildId,
query: String,
},
ListGuildEmojis {
guild_id: GuildId,
},
CreateGuildEmoji {
guild_id: GuildId,
},
UpdateGuildEmoji {
guild_id: GuildId,
emoji_id: String,
},
DeleteGuildEmoji {
guild_id: GuildId,
emoji_id: String,
},
ListGuildStickers {
guild_id: GuildId,
},
CreateGuildSticker {
guild_id: GuildId,
},
UpdateGuildSticker {
guild_id: GuildId,
sticker_id: String,
},
DeleteGuildSticker {
guild_id: GuildId,
sticker_id: String,
},
SearchGuildMembers {
guild_id: GuildId,
},
UpdateGuildChannelPositions {
guild_id: GuildId,
},
UpdateGuildRolePositions {
guild_id: GuildId,
},
GetCurrentGuildMember {
guild_id: GuildId,
},
ListCurrentUserGuilds {
query: String,
},
LeaveGuild {
guild_id: GuildId,
},
GetGuildBans {
guild_id: GuildId,
},
GetGuildBan {
guild_id: GuildId,
user_id: UserId,
},
CreateGuildBan {
guild_id: GuildId,
user_id: UserId,
},
RemoveGuildBan {
guild_id: GuildId,
user_id: UserId,
},
RemoveGuildMember {
guild_id: GuildId,
user_id: UserId,
},
GetGuildRoles {
guild_id: GuildId,
},
CreateGuildRole {
guild_id: GuildId,
},
ModifyGuildRole {
guild_id: GuildId,
role_id: RoleId,
},
DeleteGuildRole {
guild_id: GuildId,
role_id: RoleId,
},
AddGuildMemberRole {
guild_id: GuildId,
user_id: UserId,
role_id: RoleId,
},
RemoveGuildMemberRole {
guild_id: GuildId,
user_id: UserId,
role_id: RoleId,
},
GetChannel {
channel_id: ChannelId,
},
ModifyChannel {
channel_id: ChannelId,
},
DeleteChannel {
channel_id: ChannelId,
},
GetChannelInvites {
channel_id: ChannelId,
},
CreateChannelInvite {
channel_id: ChannelId,
},
TriggerTyping {
channel_id: ChannelId,
},
SetChannelPermissionOverwrite {
channel_id: ChannelId,
overwrite_id: String,
},
DeleteChannelPermissionOverwrite {
channel_id: ChannelId,
overwrite_id: String,
},
GetMessages {
channel_id: ChannelId,
query: String,
},
GetMessage {
channel_id: ChannelId,
message_id: MessageId,
},
CreateMessage {
channel_id: ChannelId,
},
EditMessage {
channel_id: ChannelId,
message_id: MessageId,
},
DeleteMessage {
channel_id: ChannelId,
message_id: MessageId,
},
BulkDeleteMessages {
channel_id: ChannelId,
},
DeleteMessageAttachment {
channel_id: ChannelId,
message_id: MessageId,
attachment_id: AttachmentId,
},
AddGroupDmRecipient {
channel_id: ChannelId,
user_id: UserId,
},
RemoveGroupDmRecipient {
channel_id: ChannelId,
user_id: UserId,
},
ScheduleMessage {
channel_id: ChannelId,
},
CreateMemeFromMessage {
channel_id: ChannelId,
message_id: MessageId,
},
ListScheduledMessages,
GetScheduledMessage {
scheduled_message_id: Snowflake,
},
UpdateScheduledMessage {
scheduled_message_id: Snowflake,
},
CancelScheduledMessage {
scheduled_message_id: Snowflake,
},
AcknowledgeMessage {
channel_id: ChannelId,
message_id: MessageId,
},
AcknowledgePins {
channel_id: ChannelId,
},
ClearChannelReadState {
channel_id: ChannelId,
},
AckBulkMessages,
CreateReaction {
channel_id: ChannelId,
message_id: MessageId,
emoji: String,
},
DeleteOwnReaction {
channel_id: ChannelId,
message_id: MessageId,
emoji: String,
},
DeleteUserReaction {
channel_id: ChannelId,
message_id: MessageId,
emoji: String,
user_id: UserId,
},
GetReactionUsers {
channel_id: ChannelId,
message_id: MessageId,
emoji: String,
},
DeleteAllReactions {
channel_id: ChannelId,
message_id: MessageId,
},
DeleteAllReactionsForEmoji {
channel_id: ChannelId,
message_id: MessageId,
emoji: String,
},
GetPinnedMessages {
channel_id: ChannelId,
},
PinMessage {
channel_id: ChannelId,
message_id: MessageId,
},
UnpinMessage {
channel_id: ChannelId,
message_id: MessageId,
},
GetInvite {
code: String,
},
DeleteInvite {
code: String,
},
CreateWebhook {
channel_id: ChannelId,
},
GetChannelWebhooks {
channel_id: ChannelId,
},
GetGuildWebhooks {
guild_id: GuildId,
},
GetWebhook {
webhook_id: String,
},
ModifyWebhook {
webhook_id: String,
},
DeleteWebhook {
webhook_id: String,
},
ExecuteWebhook {
webhook_id: String,
webhook_token: String,
},
GetWebhookWithToken {
webhook_id: String,
webhook_token: String,
},
UpdateWebhookWithToken {
webhook_id: String,
webhook_token: String,
},
DeleteWebhookWithToken {
webhook_id: String,
webhook_token: String,
},
ExecuteGithubWebhook {
webhook_id: String,
webhook_token: String,
},
ExecuteSentryWebhook {
webhook_id: String,
webhook_token: String,
},
ExecuteSlackWebhook {
webhook_id: String,
webhook_token: String,
},
#[allow(dead_code)]
GetGateway,
GetGatewayBot,
SearchMessages,
}
impl Route {
pub fn method(&self) -> reqwest::Method {
use reqwest::Method;
match self {
Self::GetCurrentUser
| Self::GetUser { .. }
| Self::GetGuild { .. }
| Self::GetGuildPreview { .. }
| Self::GetGuildChannels { .. }
| Self::GetGuildMembers { .. }
| Self::GetGuildMember { .. }
| Self::GetGuildBans { .. }
| Self::GetGuildBan { .. }
| Self::GetGuildRoles { .. }
| Self::GetGuildInvites { .. }
| Self::GetChannel { .. }
| Self::GetChannelInvites { .. }
| Self::GetMessages { .. }
| Self::GetMessage { .. }
| Self::GetReactionUsers { .. }
| Self::GetPinnedMessages { .. }
| Self::GetInvite { .. }
| Self::GetChannelWebhooks { .. }
| Self::GetGuildWebhooks { .. }
| Self::GetWebhook { .. }
| Self::ListGuildAuditLogs { .. }
| Self::GetCurrentGuildMember { .. }
| Self::ListCurrentUserGuilds { .. }
| Self::ListGuildEmojis { .. }
| Self::ListGuildStickers { .. }
| Self::ListScheduledMessages
| Self::GetScheduledMessage { .. }
| Self::GetWebhookWithToken { .. }
| Self::ListPrivateChannels
| Self::GetUserProfile { .. }
| Self::ListCurrentUserMentions
| Self::ListFavoriteMemes
| Self::GetFavoriteMeme { .. }
| Self::GetGuildVanityUrl { .. }
| Self::GetGateway
| Self::GetGatewayBot => Method::GET,
Self::CreateDm
| Self::CreateGuildChannel { .. }
| Self::CreateMessage { .. }
| Self::CreateGuildRole { .. }
| Self::BulkDeleteMessages { .. }
| Self::CreateChannelInvite { .. }
| Self::TriggerTyping { .. }
| Self::CreateWebhook { .. }
| Self::ExecuteWebhook { .. }
| Self::SearchGuildMembers { .. }
| Self::SearchMessages
| Self::CreateGuildEmoji { .. }
| Self::CreateGuildSticker { .. }
| Self::ScheduleMessage { .. }
| Self::CreateMemeFromMessage { .. }
| Self::CreateMemeFromUrl
| Self::AcknowledgeMessage { .. }
| Self::AcknowledgePins { .. }
| Self::AckBulkMessages
| Self::ExecuteGithubWebhook { .. }
| Self::ExecuteSentryWebhook { .. }
| Self::ExecuteSlackWebhook { .. }
| Self::BulkCreateGuildEmojis { .. }
| Self::BulkCreateGuildStickers { .. }
| Self::AcceptInvite { .. }
| Self::CreateGuild
| Self::DeleteGuild2 { .. }
| Self::TransferGuildOwnership { .. } => Method::POST,
Self::CreateGuildBan { .. }
| Self::CreateReaction { .. }
| Self::AddGuildMemberRole { .. }
| Self::PinMessage { .. }
| Self::SetChannelPermissionOverwrite { .. }
| Self::AddGroupDmRecipient { .. } => Method::PUT,
Self::ModifyCurrentUser
| Self::ModifyChannel { .. }
| Self::ModifyGuild { .. }
| Self::ModifyGuildMember { .. }
| Self::ModifyCurrentMember { .. }
| Self::EditMessage { .. }
| Self::ModifyGuildRole { .. }
| Self::ModifyWebhook { .. }
| Self::UpdateGuildChannelPositions { .. }
| Self::UpdateGuildRolePositions { .. }
| Self::UpdateGuildEmoji { .. }
| Self::UpdateGuildSticker { .. }
| Self::UpdateScheduledMessage { .. }
| Self::UpdateWebhookWithToken { .. }
| Self::UpdateGuildVanityUrl { .. }
| Self::UpdateFavoriteMeme { .. }
| Self::ToggleDetachedBanner { .. }
| Self::ToggleTextChannelFlexibleNames { .. }
| Self::UpdateRoleHoistPositions { .. } => Method::PATCH,
Self::DeleteChannel { .. }
| Self::DeleteMessage { .. }
| Self::RemoveGuildBan { .. }
| Self::RemoveGuildMember { .. }
| Self::DeleteGuildRole { .. }
| Self::RemoveGuildMemberRole { .. }
| Self::DeleteOwnReaction { .. }
| Self::DeleteUserReaction { .. }
| Self::DeleteAllReactions { .. }
| Self::DeleteAllReactionsForEmoji { .. }
| Self::UnpinMessage { .. }
| Self::DeleteInvite { .. }
| Self::DeleteWebhook { .. }
| Self::DeleteChannelPermissionOverwrite { .. }
| Self::LeaveGuild { .. }
| Self::DeleteGuildEmoji { .. }
| Self::DeleteGuildSticker { .. }
| Self::CancelScheduledMessage { .. }
| Self::ClearChannelReadState { .. }
| Self::DeleteWebhookWithToken { .. }
| Self::DeleteMessageAttachment { .. }
| Self::RemoveGroupDmRecipient { .. }
| Self::DeleteCurrentUserMention { .. }
| Self::DeleteFavoriteMeme { .. }
| Self::ResetRoleHoistPositions { .. } => Method::DELETE,
}
}
pub fn path(&self) -> String {
match self {
Self::GetCurrentUser | Self::ModifyCurrentUser => "/users/@me".into(),
Self::GetUser { user_id } => format!("/users/{user_id}"),
Self::CreateDm | Self::ListPrivateChannels => "/users/@me/channels".into(),
Self::GetUserProfile { target_id } => format!("/users/{target_id}/profile"),
Self::ListCurrentUserMentions => "/users/@me/mentions".into(),
Self::DeleteCurrentUserMention { message_id } => {
format!("/users/@me/mentions/{message_id}")
}
Self::ListFavoriteMemes | Self::CreateMemeFromUrl => "/users/@me/memes".into(),
Self::GetFavoriteMeme { meme_id }
| Self::UpdateFavoriteMeme { meme_id }
| Self::DeleteFavoriteMeme { meme_id } => format!("/users/@me/memes/{meme_id}"),
Self::CreateGuild => "/guilds".into(),
Self::GetGuild { guild_id } | Self::ModifyGuild { guild_id } => {
format!("/guilds/{guild_id}")
}
Self::DeleteGuild2 { guild_id } => format!("/guilds/{guild_id}/delete"),
Self::TransferGuildOwnership { guild_id } => {
format!("/guilds/{guild_id}/transfer-ownership")
}
Self::ToggleDetachedBanner { guild_id } => {
format!("/guilds/{guild_id}/detached-banner")
}
Self::ToggleTextChannelFlexibleNames { guild_id } => {
format!("/guilds/{guild_id}/text-channel-flexible-names")
}
Self::UpdateRoleHoistPositions { guild_id }
| Self::ResetRoleHoistPositions { guild_id } => {
format!("/guilds/{guild_id}/roles/hoist-positions")
}
Self::GetGuildPreview { guild_id } => format!("/guilds/{guild_id}/preview"),
Self::GetGuildChannels { guild_id } | Self::CreateGuildChannel { guild_id } => {
format!("/guilds/{guild_id}/channels")
}
Self::GetGuildMembers { guild_id } => format!("/guilds/{guild_id}/members"),
Self::GetGuildMember { guild_id, user_id }
| Self::ModifyGuildMember { guild_id, user_id }
| Self::RemoveGuildMember { guild_id, user_id } => {
format!("/guilds/{guild_id}/members/{user_id}")
}
Self::ModifyCurrentMember { guild_id } => format!("/guilds/{guild_id}/members/@me"),
Self::GetGuildInvites { guild_id } => format!("/guilds/{guild_id}/invites"),
Self::GetGuildVanityUrl { guild_id } | Self::UpdateGuildVanityUrl { guild_id } => {
format!("/guilds/{guild_id}/vanity-url")
}
Self::BulkCreateGuildEmojis { guild_id } => format!("/guilds/{guild_id}/emojis/bulk"),
Self::BulkCreateGuildStickers { guild_id } => {
format!("/guilds/{guild_id}/stickers/bulk")
}
Self::AcceptInvite { code } => format!("/invites/{code}"),
Self::ListGuildAuditLogs { guild_id, query } => {
format!("/guilds/{guild_id}/audit-logs{query}")
}
Self::SearchGuildMembers { guild_id } => format!("/guilds/{guild_id}/members-search"),
Self::UpdateGuildChannelPositions { guild_id } => {
format!("/guilds/{guild_id}/channels")
}
Self::UpdateGuildRolePositions { guild_id } => format!("/guilds/{guild_id}/roles"),
Self::GetCurrentGuildMember { guild_id } => format!("/guilds/{guild_id}/members/@me"),
Self::ListCurrentUserGuilds { query } => format!("/users/@me/guilds{query}"),
Self::LeaveGuild { guild_id } => format!("/users/@me/guilds/{guild_id}"),
Self::ListGuildEmojis { guild_id } | Self::CreateGuildEmoji { guild_id } => {
format!("/guilds/{guild_id}/emojis")
}
Self::UpdateGuildEmoji { guild_id, emoji_id }
| Self::DeleteGuildEmoji { guild_id, emoji_id } => {
format!("/guilds/{guild_id}/emojis/{emoji_id}")
}
Self::ListGuildStickers { guild_id } | Self::CreateGuildSticker { guild_id } => {
format!("/guilds/{guild_id}/stickers")
}
Self::UpdateGuildSticker {
guild_id,
sticker_id,
}
| Self::DeleteGuildSticker {
guild_id,
sticker_id,
} => {
format!("/guilds/{guild_id}/stickers/{sticker_id}")
}
Self::GetGuildBans { guild_id } => format!("/guilds/{guild_id}/bans"),
Self::GetGuildBan { guild_id, user_id }
| Self::CreateGuildBan { guild_id, user_id }
| Self::RemoveGuildBan { guild_id, user_id } => {
format!("/guilds/{guild_id}/bans/{user_id}")
}
Self::GetGuildRoles { guild_id } | Self::CreateGuildRole { guild_id } => {
format!("/guilds/{guild_id}/roles")
}
Self::ModifyGuildRole { guild_id, role_id }
| Self::DeleteGuildRole { guild_id, role_id } => {
format!("/guilds/{guild_id}/roles/{role_id}")
}
Self::AddGuildMemberRole {
guild_id,
user_id,
role_id,
}
| Self::RemoveGuildMemberRole {
guild_id,
user_id,
role_id,
} => {
format!("/guilds/{guild_id}/members/{user_id}/roles/{role_id}")
}
Self::GetChannel { channel_id }
| Self::ModifyChannel { channel_id }
| Self::DeleteChannel { channel_id } => format!("/channels/{channel_id}"),
Self::GetChannelInvites { channel_id } | Self::CreateChannelInvite { channel_id } => {
format!("/channels/{channel_id}/invites")
}
Self::TriggerTyping { channel_id } => format!("/channels/{channel_id}/typing"),
Self::SetChannelPermissionOverwrite {
channel_id,
overwrite_id,
}
| Self::DeleteChannelPermissionOverwrite {
channel_id,
overwrite_id,
} => {
format!("/channels/{channel_id}/permissions/{overwrite_id}")
}
Self::GetMessages { channel_id, query } => {
format!("/channels/{channel_id}/messages{query}")
}
Self::CreateMessage { channel_id } => format!("/channels/{channel_id}/messages"),
Self::GetMessage {
channel_id,
message_id,
}
| Self::EditMessage {
channel_id,
message_id,
}
| Self::DeleteMessage {
channel_id,
message_id,
} => format!("/channels/{channel_id}/messages/{message_id}"),
Self::BulkDeleteMessages { channel_id } => {
format!("/channels/{channel_id}/messages/bulk-delete")
}
Self::ScheduleMessage { channel_id } => {
format!("/channels/{channel_id}/messages/schedule")
}
Self::CreateMemeFromMessage {
channel_id,
message_id,
} => {
format!("/channels/{channel_id}/messages/{message_id}/memes")
}
Self::AcknowledgeMessage {
channel_id,
message_id,
} => {
format!("/channels/{channel_id}/messages/{message_id}/ack")
}
Self::AcknowledgePins { channel_id } => format!("/channels/{channel_id}/pins/ack"),
Self::ClearChannelReadState { channel_id } => {
format!("/channels/{channel_id}/messages/ack")
}
Self::ListScheduledMessages => "/users/@me/scheduled-messages".into(),
Self::GetScheduledMessage {
scheduled_message_id,
}
| Self::UpdateScheduledMessage {
scheduled_message_id,
}
| Self::CancelScheduledMessage {
scheduled_message_id,
} => {
format!("/users/@me/scheduled-messages/{scheduled_message_id}")
}
Self::AckBulkMessages => "/read-states/ack-bulk".into(),
Self::DeleteMessageAttachment {
channel_id,
message_id,
attachment_id,
} => {
format!("/channels/{channel_id}/messages/{message_id}/attachments/{attachment_id}")
}
Self::AddGroupDmRecipient {
channel_id,
user_id,
}
| Self::RemoveGroupDmRecipient {
channel_id,
user_id,
} => {
format!("/channels/{channel_id}/recipients/{user_id}")
}
Self::CreateReaction {
channel_id,
message_id,
emoji,
}
| Self::DeleteOwnReaction {
channel_id,
message_id,
emoji,
} => {
format!("/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/@me")
}
Self::DeleteUserReaction {
channel_id,
message_id,
emoji,
user_id,
} => {
format!("/channels/{channel_id}/messages/{message_id}/reactions/{emoji}/{user_id}")
}
Self::GetReactionUsers {
channel_id,
message_id,
emoji,
} => {
format!("/channels/{channel_id}/messages/{message_id}/reactions/{emoji}")
}
Self::DeleteAllReactions {
channel_id,
message_id,
} => {
format!("/channels/{channel_id}/messages/{message_id}/reactions")
}
Self::DeleteAllReactionsForEmoji {
channel_id,
message_id,
emoji,
} => {
format!("/channels/{channel_id}/messages/{message_id}/reactions/{emoji}")
}
Self::GetPinnedMessages { channel_id } => format!("/channels/{channel_id}/pins"),
Self::PinMessage {
channel_id,
message_id,
}
| Self::UnpinMessage {
channel_id,
message_id,
} => format!("/channels/{channel_id}/pins/{message_id}"),
Self::GetInvite { code } | Self::DeleteInvite { code } => format!("/invites/{code}"),
Self::CreateWebhook { channel_id } | Self::GetChannelWebhooks { channel_id } => {
format!("/channels/{channel_id}/webhooks")
}
Self::GetGuildWebhooks { guild_id } => format!("/guilds/{guild_id}/webhooks"),
Self::GetWebhook { webhook_id }
| Self::ModifyWebhook { webhook_id }
| Self::DeleteWebhook { webhook_id } => format!("/webhooks/{webhook_id}"),
Self::ExecuteWebhook {
webhook_id,
webhook_token,
}
| Self::GetWebhookWithToken {
webhook_id,
webhook_token,
}
| Self::UpdateWebhookWithToken {
webhook_id,
webhook_token,
}
| Self::DeleteWebhookWithToken {
webhook_id,
webhook_token,
} => {
format!("/webhooks/{webhook_id}/{webhook_token}")
}
Self::ExecuteGithubWebhook {
webhook_id,
webhook_token,
} => {
format!("/webhooks/{webhook_id}/{webhook_token}/github")
}
Self::ExecuteSentryWebhook {
webhook_id,
webhook_token,
} => {
format!("/webhooks/{webhook_id}/{webhook_token}/sentry")
}
Self::ExecuteSlackWebhook {
webhook_id,
webhook_token,
} => {
format!("/webhooks/{webhook_id}/{webhook_token}/slack")
}
Self::GetGateway => "/gateway".into(),
Self::GetGatewayBot => "/gateway/bot".into(),
Self::SearchMessages => "/search/messages".into(),
}
}
pub fn bucket(&self) -> String {
match self {
Self::GetCurrentUser
| Self::ModifyCurrentUser
| Self::CreateDm
| Self::ListPrivateChannels
| Self::ListCurrentUserMentions
| Self::DeleteCurrentUserMention { .. }
| Self::ListFavoriteMemes
| Self::CreateMemeFromUrl
| Self::GetFavoriteMeme { .. }
| Self::UpdateFavoriteMeme { .. }
| Self::DeleteFavoriteMeme { .. } => "users/@me".into(),
Self::GetUser { .. } | Self::GetUserProfile { .. } => "users".into(),
Self::GetGuild { guild_id }
| Self::ModifyGuild { guild_id }
| Self::GetGuildPreview { guild_id }
| Self::GetGuildChannels { guild_id }
| Self::CreateGuildChannel { guild_id }
| Self::GetGuildMembers { guild_id }
| Self::GetGuildMember { guild_id, .. }
| Self::ModifyGuildMember { guild_id, .. }
| Self::ModifyCurrentMember { guild_id }
| Self::RemoveGuildMember { guild_id, .. }
| Self::GetGuildBans { guild_id }
| Self::GetGuildBan { guild_id, .. }
| Self::CreateGuildBan { guild_id, .. }
| Self::RemoveGuildBan { guild_id, .. }
| Self::GetGuildRoles { guild_id }
| Self::CreateGuildRole { guild_id }
| Self::ModifyGuildRole { guild_id, .. }
| Self::DeleteGuildRole { guild_id, .. }
| Self::AddGuildMemberRole { guild_id, .. }
| Self::RemoveGuildMemberRole { guild_id, .. }
| Self::GetGuildInvites { guild_id }
| Self::GetGuildWebhooks { guild_id }
| Self::ListGuildAuditLogs { guild_id, .. }
| Self::SearchGuildMembers { guild_id }
| Self::UpdateGuildChannelPositions { guild_id }
| Self::UpdateGuildRolePositions { guild_id }
| Self::GetCurrentGuildMember { guild_id }
| Self::LeaveGuild { guild_id }
| Self::ListGuildEmojis { guild_id }
| Self::CreateGuildEmoji { guild_id }
| Self::UpdateGuildEmoji { guild_id, .. }
| Self::DeleteGuildEmoji { guild_id, .. }
| Self::ListGuildStickers { guild_id }
| Self::CreateGuildSticker { guild_id }
| Self::UpdateGuildSticker { guild_id, .. }
| Self::DeleteGuildSticker { guild_id, .. }
| Self::GetGuildVanityUrl { guild_id }
| Self::UpdateGuildVanityUrl { guild_id }
| Self::BulkCreateGuildEmojis { guild_id }
| Self::BulkCreateGuildStickers { guild_id }
| Self::DeleteGuild2 { guild_id }
| Self::TransferGuildOwnership { guild_id }
| Self::ToggleDetachedBanner { guild_id }
| Self::ToggleTextChannelFlexibleNames { guild_id }
| Self::UpdateRoleHoistPositions { guild_id }
| Self::ResetRoleHoistPositions { guild_id } => {
format!("guilds/{guild_id}")
}
Self::CreateGuild => "guilds".into(),
Self::ListCurrentUserGuilds { .. } => "users/@me/guilds".into(),
Self::GetChannel { channel_id }
| Self::ModifyChannel { channel_id }
| Self::DeleteChannel { channel_id }
| Self::GetChannelInvites { channel_id }
| Self::CreateChannelInvite { channel_id }
| Self::TriggerTyping { channel_id }
| Self::CreateWebhook { channel_id }
| Self::GetChannelWebhooks { channel_id }
| Self::SetChannelPermissionOverwrite { channel_id, .. }
| Self::DeleteChannelPermissionOverwrite { channel_id, .. } => {
format!("channels/{channel_id}")
}
Self::GetMessages { channel_id, .. }
| Self::GetMessage { channel_id, .. }
| Self::CreateMessage { channel_id }
| Self::EditMessage { channel_id, .. }
| Self::DeleteMessage { channel_id, .. }
| Self::BulkDeleteMessages { channel_id }
| Self::ScheduleMessage { channel_id }
| Self::CreateMemeFromMessage { channel_id, .. }
| Self::AcknowledgeMessage { channel_id, .. }
| Self::AcknowledgePins { channel_id }
| Self::ClearChannelReadState { channel_id }
| Self::DeleteMessageAttachment { channel_id, .. }
| Self::AddGroupDmRecipient { channel_id, .. }
| Self::RemoveGroupDmRecipient { channel_id, .. }
| Self::CreateReaction { channel_id, .. }
| Self::DeleteOwnReaction { channel_id, .. }
| Self::DeleteUserReaction { channel_id, .. }
| Self::GetReactionUsers { channel_id, .. }
| Self::DeleteAllReactions { channel_id, .. }
| Self::DeleteAllReactionsForEmoji { channel_id, .. }
| Self::GetPinnedMessages { channel_id }
| Self::PinMessage { channel_id, .. }
| Self::UnpinMessage { channel_id, .. } => format!("channels/{channel_id}/messages"),
Self::GetInvite { .. } | Self::DeleteInvite { .. } | Self::AcceptInvite { .. } => {
"invites".into()
}
Self::GetWebhook { webhook_id }
| Self::ModifyWebhook { webhook_id }
| Self::DeleteWebhook { webhook_id } => format!("webhooks/{webhook_id}"),
Self::ExecuteWebhook { webhook_id, .. }
| Self::GetWebhookWithToken { webhook_id, .. }
| Self::UpdateWebhookWithToken { webhook_id, .. }
| Self::DeleteWebhookWithToken { webhook_id, .. }
| Self::ExecuteGithubWebhook { webhook_id, .. }
| Self::ExecuteSentryWebhook { webhook_id, .. }
| Self::ExecuteSlackWebhook { webhook_id, .. } => format!("webhooks/{webhook_id}"),
Self::ListScheduledMessages
| Self::GetScheduledMessage { .. }
| Self::UpdateScheduledMessage { .. }
| Self::CancelScheduledMessage { .. } => "users/@me/scheduled-messages".into(),
Self::AckBulkMessages => "read-states".into(),
Self::GetGateway | Self::GetGatewayBot => "gateway".into(),
Self::SearchMessages => "search".into(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use reqwest::Method;
struct RouteCase {
route: Route,
method: Method,
path: &'static str,
bucket: &'static str,
}
#[test]
fn routes_resolve_method_path_and_bucket() {
let user_id = UserId::new(111);
let guild_id = GuildId::new(222);
let channel_id = ChannelId::new(333);
let message_id = MessageId::new(444);
let attachment_id = AttachmentId::new(555);
let role_id = RoleId::new(666);
let cases = [
RouteCase {
route: Route::GetCurrentUser,
method: Method::GET,
path: "/users/@me",
bucket: "users/@me",
},
RouteCase {
route: Route::ModifyCurrentUser,
method: Method::PATCH,
path: "/users/@me",
bucket: "users/@me",
},
RouteCase {
route: Route::GetUser { user_id },
method: Method::GET,
path: "/users/111",
bucket: "users",
},
RouteCase {
route: Route::ListCurrentUserGuilds {
query: "?limit=2".into(),
},
method: Method::GET,
path: "/users/@me/guilds?limit=2",
bucket: "users/@me/guilds",
},
RouteCase {
route: Route::GetGuild { guild_id },
method: Method::GET,
path: "/guilds/222",
bucket: "guilds/222",
},
RouteCase {
route: Route::DeleteGuild2 { guild_id },
method: Method::POST,
path: "/guilds/222/delete",
bucket: "guilds/222",
},
RouteCase {
route: Route::ListGuildAuditLogs {
guild_id,
query: "?before=333".into(),
},
method: Method::GET,
path: "/guilds/222/audit-logs?before=333",
bucket: "guilds/222",
},
RouteCase {
route: Route::ModifyGuildMember { guild_id, user_id },
method: Method::PATCH,
path: "/guilds/222/members/111",
bucket: "guilds/222",
},
RouteCase {
route: Route::CreateGuildBan { guild_id, user_id },
method: Method::PUT,
path: "/guilds/222/bans/111",
bucket: "guilds/222",
},
RouteCase {
route: Route::AddGuildMemberRole {
guild_id,
user_id,
role_id,
},
method: Method::PUT,
path: "/guilds/222/members/111/roles/666",
bucket: "guilds/222",
},
RouteCase {
route: Route::GetChannel { channel_id },
method: Method::GET,
path: "/channels/333",
bucket: "channels/333",
},
RouteCase {
route: Route::GetMessages {
channel_id,
query: "?limit=50".into(),
},
method: Method::GET,
path: "/channels/333/messages?limit=50",
bucket: "channels/333/messages",
},
RouteCase {
route: Route::CreateMessage { channel_id },
method: Method::POST,
path: "/channels/333/messages",
bucket: "channels/333/messages",
},
RouteCase {
route: Route::EditMessage {
channel_id,
message_id,
},
method: Method::PATCH,
path: "/channels/333/messages/444",
bucket: "channels/333/messages",
},
RouteCase {
route: Route::DeleteMessageAttachment {
channel_id,
message_id,
attachment_id,
},
method: Method::DELETE,
path: "/channels/333/messages/444/attachments/555",
bucket: "channels/333/messages",
},
RouteCase {
route: Route::CreateReaction {
channel_id,
message_id,
emoji: "smile".into(),
},
method: Method::PUT,
path: "/channels/333/messages/444/reactions/smile/@me",
bucket: "channels/333/messages",
},
RouteCase {
route: Route::AcknowledgePins { channel_id },
method: Method::POST,
path: "/channels/333/pins/ack",
bucket: "channels/333/messages",
},
RouteCase {
route: Route::AckBulkMessages,
method: Method::POST,
path: "/read-states/ack-bulk",
bucket: "read-states",
},
RouteCase {
route: Route::GetPinnedMessages { channel_id },
method: Method::GET,
path: "/channels/333/pins",
bucket: "channels/333/messages",
},
RouteCase {
route: Route::GetInvite { code: "abc".into() },
method: Method::GET,
path: "/invites/abc",
bucket: "invites",
},
RouteCase {
route: Route::AcceptInvite { code: "abc".into() },
method: Method::POST,
path: "/invites/abc",
bucket: "invites",
},
RouteCase {
route: Route::ExecuteWebhook {
webhook_id: "wh".into(),
webhook_token: "tok".into(),
},
method: Method::POST,
path: "/webhooks/wh/tok",
bucket: "webhooks/wh",
},
RouteCase {
route: Route::ExecuteSlackWebhook {
webhook_id: "wh".into(),
webhook_token: "tok".into(),
},
method: Method::POST,
path: "/webhooks/wh/tok/slack",
bucket: "webhooks/wh",
},
RouteCase {
route: Route::UpdateFavoriteMeme {
meme_id: "meme".into(),
},
method: Method::PATCH,
path: "/users/@me/memes/meme",
bucket: "users/@me",
},
RouteCase {
route: Route::GetGatewayBot,
method: Method::GET,
path: "/gateway/bot",
bucket: "gateway",
},
RouteCase {
route: Route::SearchMessages,
method: Method::POST,
path: "/search/messages",
bucket: "search",
},
];
for case in cases {
assert_eq!(case.route.method(), case.method, "{}", case.path);
assert_eq!(case.route.path(), case.path);
assert_eq!(case.route.bucket(), case.bucket, "{}", case.path);
}
}
}