aboutsummaryrefslogtreecommitdiff
path: root/src/model/channel/mod.rs
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2018-01-01 15:55:46 -0800
committerZeyla Hellyer <[email protected]>2018-01-01 15:55:46 -0800
commit25dddb6695109eeead9e19593cb85a22096c2c7a (patch)
treed68d78d210a2804d10027035163871bf806c7e23 /src/model/channel/mod.rs
parentGive hyper Response in HTTP errors (diff)
downloadserenity-25dddb6695109eeead9e19593cb85a22096c2c7a.tar.xz
serenity-25dddb6695109eeead9e19593cb85a22096c2c7a.zip
Implement or derive Serialize on all models
Diffstat (limited to 'src/model/channel/mod.rs')
-rw-r--r--src/model/channel/mod.rs41
1 files changed, 40 insertions, 1 deletions
diff --git a/src/model/channel/mod.rs b/src/model/channel/mod.rs
index 7764fea..00fc7f6 100644
--- a/src/model/channel/mod.rs
+++ b/src/model/channel/mod.rs
@@ -23,6 +23,7 @@ pub use self::channel_category::*;
use internal::RwLockExt;
use model::prelude::*;
use serde::de::Error as DeError;
+use serde::ser::{SerializeStruct, Serialize, Serializer};
use serde_json;
use super::utils::deserialize_u64;
@@ -504,6 +505,26 @@ impl<'de> Deserialize<'de> for Channel {
}
}
+impl Serialize for Channel {
+ fn serialize<S>(&self, serializer: S) -> StdResult<S::Ok, S::Error>
+ where S: Serializer {
+ match *self {
+ Channel::Category(ref c) => {
+ ChannelCategory::serialize(&*c.read(), serializer)
+ },
+ Channel::Group(ref c) => {
+ Group::serialize(&*c.read(), serializer)
+ },
+ Channel::Guild(ref c) => {
+ GuildChannel::serialize(&*c.read(), serializer)
+ },
+ Channel::Private(ref c) => {
+ PrivateChannel::serialize(&*c.read(), serializer)
+ },
+ }
+ }
+}
+
#[cfg(feature = "model")]
impl Display for Channel {
/// Formats the channel into a "mentioned" string.
@@ -582,7 +603,7 @@ impl ChannelType {
}
}
-#[derive(Deserialize)]
+#[derive(Deserialize, Serialize)]
struct PermissionOverwriteData {
allow: Permissions,
deny: Permissions,
@@ -617,6 +638,24 @@ impl<'de> Deserialize<'de> for PermissionOverwrite {
}
}
+impl Serialize for PermissionOverwrite {
+ fn serialize<S>(&self, serializer: S) -> StdResult<S::Ok, S::Error>
+ where S: Serializer {
+ let (id, kind) = match self.kind {
+ PermissionOverwriteType::Member(id) => (id.0, "member"),
+ PermissionOverwriteType::Role(id) => (id.0, "role"),
+ };
+
+ let mut state = serializer.serialize_struct("PermissionOverwrite", 4)?;
+ state.serialize_field("allow", &self.allow.bits())?;
+ state.serialize_field("deny", &self.deny.bits())?;
+ state.serialize_field("id", &id)?;
+ state.serialize_field("type", kind)?;
+
+ state.end()
+ }
+}
+
/// The type of edit being made to a Channel's permissions.
///
/// This is for use with methods such as `GuildChannel::create_permission`.