diff options
| author | acdenisSK <[email protected]> | 2018-04-11 17:37:30 +0200 |
|---|---|---|
| committer | acdenisSK <[email protected]> | 2018-04-11 17:37:49 +0200 |
| commit | 217e1c6ebd9577fa5a538b4ecd3c1303ee034462 (patch) | |
| tree | ffea3e460afb33241b461216c41202cf775c3f8f /src | |
| parent | Handle (de)serializing `target_id` from/to a string (diff) | |
| download | serenity-217e1c6ebd9577fa5a538b4ecd3c1303ee034462.tar.xz serenity-217e1c6ebd9577fa5a538b4ecd3c1303ee034462.zip | |
Turn the number-like properties of `Options` into `u64`
Diffstat (limited to 'src')
| -rw-r--r-- | src/model/guild/audit_log.rs | 83 |
1 files changed, 45 insertions, 38 deletions
diff --git a/src/model/guild/audit_log.rs b/src/model/guild/audit_log.rs index c09fd98..508b138 100644 --- a/src/model/guild/audit_log.rs +++ b/src/model/guild/audit_log.rs @@ -216,9 +216,10 @@ pub struct AuditLogEntry { /// Determines what action was done on a [`target`] /// /// [`target`]: #structfield.target - #[serde(deserialize_with = "deserialize_action", - rename = "action_type", - serialize_with = "serialize_action")] + #[serde( + with = "action_handler", + rename = "action_type" + )] pub action: Action, /// What was the reasoning by doing an action on a target? If there was one. pub reason: Option<String>, @@ -235,13 +236,16 @@ pub struct AuditLogEntry { #[derive(Debug, Deserialize, Serialize)] pub struct Options { /// Number of days after which inactive members were kicked. - pub delete_member_days: String, + #[serde(with = "u64_handler")] + pub delete_member_days: u64, /// Number of members removed by the prune - pub members_removed: String, + #[serde(with = "u64_handler")] + pub members_removed: u64, /// Channel in which the messages were deleted pub channel_id: ChannelId, /// Number of deleted messages. - pub count: u32, + #[serde(with = "u64_handler")] + pub count: u64, /// Id of the overwritten entity pub id: u64, /// Type of overwritten entity ("member" or "role"). @@ -281,45 +285,48 @@ mod u64_handler { } } -fn deserialize_action<'de, D: Deserializer<'de>>(de: D) -> StdResult<Action, D::Error> { - struct ActionVisitor; +mod action_handler { + use super::*; + + pub fn deserialize<'de, D: Deserializer<'de>>(de: D) -> StdResult<Action, D::Error> { + struct ActionVisitor; - impl<'de> Visitor<'de> for ActionVisitor { - type Value = Action; + impl<'de> Visitor<'de> for ActionVisitor { + type Value = Action; - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("an integer between 1 to 72") - } + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("an integer between 1 to 72") + } - // NOTE: Serde internally delegates number types below `u64` to it. - fn visit_u64<E: de::Error>(self, value: u64) -> StdResult<Action, E> { - let value = value as u8; - - Ok(match value { - 1 => Action::GuildUpdate, - 10...12 => Action::Channel(unsafe { transmute(value) }), - 13...15 => Action::ChannelOverwrite(unsafe { transmute(value) }), - 20...25 => Action::Member(unsafe { transmute(value) }), - 30...32 => Action::Role(unsafe { transmute(value) }), - 40...42 => Action::Invite(unsafe { transmute(value) }), - 50...52 => Action::Webhook(unsafe { transmute(value) }), - 60...62 => Action::Emoji(unsafe { transmute(value) }), - 72 => Action::MessageDelete, - _ => return Err(E::custom(format!("Unexpected action number: {}", value))), - }) + // NOTE: Serde internally delegates number types below `u64` to it. + fn visit_u64<E: de::Error>(self, value: u64) -> StdResult<Action, E> { + let value = value as u8; + + Ok(match value { + 1 => Action::GuildUpdate, + 10...12 => Action::Channel(unsafe { transmute(value) }), + 13...15 => Action::ChannelOverwrite(unsafe { transmute(value) }), + 20...25 => Action::Member(unsafe { transmute(value) }), + 30...32 => Action::Role(unsafe { transmute(value) }), + 40...42 => Action::Invite(unsafe { transmute(value) }), + 50...52 => Action::Webhook(unsafe { transmute(value) }), + 60...62 => Action::Emoji(unsafe { transmute(value) }), + 72 => Action::MessageDelete, + _ => return Err(E::custom(format!("Unexpected action number: {}", value))), + }) + } } - } - de.deserialize_any(ActionVisitor) -} + de.deserialize_any(ActionVisitor) + } -fn serialize_action<S: Serializer>( - action: &Action, - serializer: S, -) -> StdResult<S::Ok, S::Error> { - serializer.serialize_u8(action.num()) + pub fn serialize<S: Serializer>( + action: &Action, + serializer: S, + ) -> StdResult<S::Ok, S::Error> { + serializer.serialize_u8(action.num()) + } } - impl<'de> Deserialize<'de> for AuditLogs { fn deserialize<D: Deserializer<'de>>(de: D) -> StdResult<Self, D::Error> { #[derive(Deserialize)] |