aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAustin Hellyer <[email protected]>2017-01-13 09:06:40 -0800
committerAustin Hellyer <[email protected]>2017-01-18 21:51:47 -0800
commit147cf01d4f13e3ee15eb03705ab2b7a006851cdd (patch)
tree90084581a3039cb7332f652231e31a8bb91568c8 /src
parentTRACE-log on shard handler event receival (diff)
downloadserenity-147cf01d4f13e3ee15eb03705ab2b7a006851cdd.tar.xz
serenity-147cf01d4f13e3ee15eb03705ab2b7a006851cdd.zip
Make a single POST on guild role create
The endpoint to create a role no longer returns an empty role which must be PATCHed, and can be completed in the initial request.
Diffstat (limited to 'src')
-rw-r--r--src/client/context.rs14
-rw-r--r--src/client/rest/mod.rs4
-rw-r--r--src/model/guild.rs5
3 files changed, 4 insertions, 19 deletions
diff --git a/src/client/context.rs b/src/client/context.rs
index 334d63c..73882dd 100644
--- a/src/client/context.rs
+++ b/src/client/context.rs
@@ -505,19 +505,7 @@ impl Context {
/// [Manage Roles]: ../model/permissions/constant.MANAGE_ROLES.html
pub fn create_role<F, G>(&self, guild_id: G, f: F) -> Result<Role>
where F: FnOnce(EditRole) -> EditRole, G: Into<GuildId> {
- let id = guild_id.into().0;
-
- // The API only allows creating an empty role, which must then be
- // edited.
- //
- // Note to self: [this] issue/proposal may make this not require an
- // edit.
- //
- // [this]: http://github.com/hammerandchisel/discord-api-docs/issues/156
- let role = rest::create_role(id)?;
- let map = f(EditRole::default()).0.build();
-
- rest::edit_role(id, role.id.0, map)
+ rest::create_role(guild_id.into().0, f(EditRole::default()).0.build())
}
/// Deletes a [`Channel`] based on the Id given.
diff --git a/src/client/rest/mod.rs b/src/client/rest/mod.rs
index 8c5873e..43f8f8c 100644
--- a/src/client/rest/mod.rs
+++ b/src/client/rest/mod.rs
@@ -357,8 +357,8 @@ pub fn create_reaction(channel_id: u64,
}
/// Creates a role.
-pub fn create_role(guild_id: u64) -> Result<Role> {
- let body = String::from("{}");
+pub fn create_role(guild_id: u64, map: Value) -> Result<Role> {
+ let body = serde_json::to_string(&map)?;
let response = request!(Route::GuildsIdRoles(guild_id),
post(body),
"/guilds/{}/roles",
diff --git a/src/model/guild.rs b/src/model/guild.rs
index 9b0c321..fa8df32 100644
--- a/src/model/guild.rs
+++ b/src/model/guild.rs
@@ -417,10 +417,7 @@ impl Guild {
}
}
- let role = rest::create_role(self.id.0)?;
- let map = f(EditRole::new(&role)).0.build();
-
- rest::edit_role(self.id.0, role.id.0, map)
+ rest::create_role(self.id.0, f(EditRole::default()).0.build())
}
#[doc(hidden)]