diff options
| author | Zeyla Hellyer <[email protected]> | 2018-01-01 15:55:46 -0800 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2018-01-01 15:55:46 -0800 |
| commit | 25dddb6695109eeead9e19593cb85a22096c2c7a (patch) | |
| tree | d68d78d210a2804d10027035163871bf806c7e23 /src/model/channel/mod.rs | |
| parent | Give hyper Response in HTTP errors (diff) | |
| download | serenity-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.rs | 41 |
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`. |