Skip to content

Commit 4d54465

Browse files
committed
Remove more json! usage (#2986)
1 parent 6764370 commit 4d54465

File tree

4 files changed

+83
-68
lines changed

4 files changed

+83
-68
lines changed

src/builder/create_components.rs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use std::borrow::Cow;
22

33
use serde::Serialize;
4-
use serde_json::json;
54

65
use crate::model::prelude::*;
76

@@ -31,19 +30,20 @@ impl<'a> CreateActionRow<'a> {
3130
}
3231
}
3332

34-
impl<'a> serde::Serialize for CreateActionRow<'a> {
33+
impl serde::Serialize for CreateActionRow<'_> {
3534
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
36-
use serde::ser::Error as _;
37-
38-
json!({
39-
"type": 1,
40-
"components": match self {
41-
Self::Buttons(x) => serde_json::to_value(x).map_err(S::Error::custom)?,
42-
Self::SelectMenu(x) => serde_json::to_value(vec![x]).map_err(S::Error::custom)?,
43-
Self::InputText(x) => serde_json::to_value(vec![x]).map_err(S::Error::custom)?,
44-
}
45-
})
46-
.serialize(serializer)
35+
use serde::ser::SerializeMap as _;
36+
37+
let mut map = serializer.serialize_map(Some(2))?;
38+
map.serialize_entry("type", &1_u8)?;
39+
40+
match self {
41+
CreateActionRow::Buttons(buttons) => map.serialize_entry("components", &buttons)?,
42+
CreateActionRow::SelectMenu(select) => map.serialize_entry("components", &[select])?,
43+
CreateActionRow::InputText(input) => map.serialize_entry("components", &[input])?,
44+
}
45+
46+
map.end()
4747
}
4848
}
4949

@@ -191,12 +191,18 @@ struct CreateSelectMenuDefault(Mention);
191191

192192
impl Serialize for CreateSelectMenuDefault {
193193
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
194+
use serde::ser::SerializeMap as _;
195+
194196
let (id, kind) = match self.0 {
195197
Mention::Channel(c) => (c.get(), "channel"),
196198
Mention::Role(r) => (r.get(), "role"),
197199
Mention::User(u) => (u.get(), "user"),
198200
};
199-
json!({"id": id, "type": kind}).serialize(serializer)
201+
202+
let mut map = serializer.serialize_map(Some(2))?;
203+
map.serialize_entry("id", &id)?;
204+
map.serialize_entry("type", kind)?;
205+
map.end()
200206
}
201207
}
202208

src/builder/create_interaction_response.rs

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
use std::borrow::Cow;
22
use std::collections::HashMap;
33

4-
use serde_json::json;
5-
64
use super::{
75
CreateActionRow,
86
CreateAllowedMentions,
@@ -61,30 +59,30 @@ pub enum CreateInteractionResponse<'a> {
6159

6260
impl serde::Serialize for CreateInteractionResponse<'_> {
6361
fn serialize<S: serde::Serializer>(&self, serializer: S) -> StdResult<S::Ok, S::Error> {
64-
use serde::ser::Error as _;
65-
66-
#[allow(clippy::match_same_arms)] // hurts readability
67-
json!({
68-
"type": match self {
69-
Self::Pong => 1,
70-
Self::Message(_) => 4,
71-
Self::Defer(_) => 5,
72-
Self::Acknowledge => 6,
73-
Self::UpdateMessage(_) => 7,
74-
Self::Autocomplete(_) => 8,
75-
Self::Modal(_) => 9,
76-
},
77-
"data": match self {
78-
Self::Pong => Value::Null,
79-
Self::Message(x) => serde_json::to_value(x).map_err(S::Error::custom)?,
80-
Self::Defer(x) => serde_json::to_value(x).map_err(S::Error::custom)?,
81-
Self::Acknowledge => Value::Null,
82-
Self::UpdateMessage(x) => serde_json::to_value(x).map_err(S::Error::custom)?,
83-
Self::Autocomplete(x) => serde_json::to_value(x).map_err(S::Error::custom)?,
84-
Self::Modal(x) => serde_json::to_value(x).map_err(S::Error::custom)?,
85-
}
86-
})
87-
.serialize(serializer)
62+
use serde::ser::SerializeMap as _;
63+
64+
let mut map = serializer.serialize_map(Some(2))?;
65+
map.serialize_entry("type", &match self {
66+
Self::Pong => 1,
67+
Self::Message(_) => 4,
68+
Self::Defer(_) => 5,
69+
Self::Acknowledge => 6,
70+
Self::UpdateMessage(_) => 7,
71+
Self::Autocomplete(_) => 8,
72+
Self::Modal(_) => 9,
73+
})?;
74+
75+
match self {
76+
Self::Pong => map.serialize_entry("data", &None::<()>)?,
77+
Self::Message(x) => map.serialize_entry("data", &x)?,
78+
Self::Defer(x) => map.serialize_entry("data", &x)?,
79+
Self::Acknowledge => map.serialize_entry("data", &None::<()>)?,
80+
Self::UpdateMessage(x) => map.serialize_entry("data", &x)?,
81+
Self::Autocomplete(x) => map.serialize_entry("data", &x)?,
82+
Self::Modal(x) => map.serialize_entry("data", &x)?,
83+
}
84+
85+
map.end()
8886
}
8987
}
9088

src/http/client.rs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use reqwest::{Client, ClientBuilder, Response as ReqwestResponse, StatusCode};
1616
use secrecy::{ExposeSecret as _, Secret};
1717
use serde::de::DeserializeOwned;
1818
use serde::ser::SerializeSeq as _;
19-
use serde_json::{from_value, json, to_string, to_vec};
19+
use serde_json::{from_value, to_string, to_vec};
2020
use to_arraystring::ToArrayString as _;
2121
use tracing::{debug, warn};
2222

@@ -938,15 +938,24 @@ impl Http {
938938
sku_id: SkuId,
939939
owner: EntitlementOwner,
940940
) -> Result<Entitlement> {
941+
#[derive(serde::Serialize)]
942+
struct TestEntitlement {
943+
sku_id: SkuId,
944+
owner_id: u64,
945+
owner_type: u8,
946+
}
947+
941948
let (owner_id, owner_type) = match owner {
942949
EntitlementOwner::Guild(id) => (id.get(), 1),
943950
EntitlementOwner::User(id) => (id.get(), 2),
944951
};
945-
let map = json!({
946-
"sku_id": sku_id,
947-
"owner_id": owner_id,
948-
"owner_type": owner_type
949-
});
952+
953+
let map = TestEntitlement {
954+
sku_id,
955+
owner_id,
956+
owner_type,
957+
};
958+
950959
self.fire(Request {
951960
body: Some(to_vec(&map)?),
952961
multipart: None,

src/model/application/component_interaction.rs

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use serde::de::Error as DeError;
2-
use serde::ser::{Error as _, Serialize};
3-
use serde_json::{from_value, json};
2+
use serde::ser::{Serialize, SerializeMap as _};
3+
use serde_json::from_value;
44

55
#[cfg(feature = "model")]
66
use crate::builder::{
@@ -297,27 +297,29 @@ impl<'de> Deserialize<'de> for ComponentInteractionDataKind {
297297
}
298298

299299
impl Serialize for ComponentInteractionDataKind {
300+
#[rustfmt::skip] // Remove this for horror.
300301
fn serialize<S: serde::Serializer>(&self, serializer: S) -> StdResult<S::Ok, S::Error> {
301-
json!({
302-
"component_type": match self {
303-
Self::Button { .. } => 2,
304-
Self::StringSelect { .. } => 3,
305-
Self::UserSelect { .. } => 5,
306-
Self::RoleSelect { .. } => 6,
307-
Self::MentionableSelect { .. } => 7,
308-
Self::ChannelSelect { .. } => 8,
309-
Self::Unknown(x) => *x,
310-
},
311-
"values": match self {
312-
Self::StringSelect { values } => serde_json::to_value(values).map_err(S::Error::custom)?,
313-
Self::UserSelect { values } => serde_json::to_value(values).map_err(S::Error::custom)?,
314-
Self::RoleSelect { values } => serde_json::to_value(values).map_err(S::Error::custom)?,
315-
Self::MentionableSelect { values } => serde_json::to_value(values).map_err(S::Error::custom)?,
316-
Self::ChannelSelect { values } => serde_json::to_value(values).map_err(S::Error::custom)?,
317-
Self::Button | Self::Unknown(_) => Value::Null,
318-
},
319-
})
320-
.serialize(serializer)
302+
let mut map = serializer.serialize_map(Some(2))?;
303+
map.serialize_entry("component_type", &match self {
304+
Self::Button { .. } => 2,
305+
Self::StringSelect { .. } => 3,
306+
Self::UserSelect { .. } => 5,
307+
Self::RoleSelect { .. } => 6,
308+
Self::MentionableSelect { .. } => 7,
309+
Self::ChannelSelect { .. } => 8,
310+
Self::Unknown(x) => *x,
311+
})?;
312+
313+
match self {
314+
Self::StringSelect { values } => map.serialize_entry("values", values)?,
315+
Self::UserSelect { values } => map.serialize_entry("values", values)?,
316+
Self::RoleSelect { values } => map.serialize_entry("values", values)?,
317+
Self::MentionableSelect { values } => map.serialize_entry("values", values)?,
318+
Self::ChannelSelect { values } => map.serialize_entry("values", values)?,
319+
Self::Button | Self::Unknown(_) => map.serialize_entry("values", &None::<()>)?,
320+
};
321+
322+
map.end()
321323
}
322324
}
323325

0 commit comments

Comments
 (0)