summaryrefslogtreecommitdiff
path: root/libs/shared/src/payloads.rs
diff options
context:
space:
mode:
authorMatthieuCoder <matthieu@matthieu-dev.xyz>2023-01-14 19:06:14 +0400
committerMatthieuCoder <matthieu@matthieu-dev.xyz>2023-01-14 19:06:14 +0400
commitdb93991c41ca2c7af9edfa03c8b10200da12957a (patch)
tree6c477eac7fc3e08043503294353738d8fe38a217 /libs/shared/src/payloads.rs
parent3f342846149c0b1f8d1ac1f0b857a9d9fdf2034b (diff)
add tests
Diffstat (limited to 'libs/shared/src/payloads.rs')
-rw-r--r--libs/shared/src/payloads.rs62
1 files changed, 54 insertions, 8 deletions
diff --git a/libs/shared/src/payloads.rs b/libs/shared/src/payloads.rs
index 3f183a9..a4818e6 100644
--- a/libs/shared/src/payloads.rs
+++ b/libs/shared/src/payloads.rs
@@ -1,4 +1,5 @@
use std::fmt::Debug;
+use std::ops::{Deref, DerefMut};
use serde::de::DeserializeSeed;
use serde::Deserializer;
@@ -7,10 +8,20 @@ use serde_json::Value;
use tracing::trace_span;
use twilight_model::gateway::event::{DispatchEvent, DispatchEventWithTypeDeserializer};
-#[derive(Debug, Clone)]
+#[derive(Debug, Clone, PartialEq)]
#[repr(transparent)]
-pub struct DispatchEventTagged {
- pub data: DispatchEvent,
+pub struct DispatchEventTagged(pub DispatchEvent);
+
+impl Deref for DispatchEventTagged {
+ type Target = DispatchEvent;
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+impl DerefMut for DispatchEventTagged {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
}
#[derive(Serialize, Deserialize)]
@@ -31,9 +42,7 @@ impl<'de> Deserialize<'de> for DispatchEventTagged {
let tagged = DispatchEventTaggedSerialized::deserialize(deserializer)?;
let deserializer_seed = DispatchEventWithTypeDeserializer::new(&tagged.kind);
let dispatch_event = deserializer_seed.deserialize(tagged.data).unwrap();
- Ok(Self {
- data: dispatch_event,
- })
+ Ok(Self(dispatch_event))
}
}
@@ -43,9 +52,9 @@ impl Serialize for DispatchEventTagged {
S: serde::Serializer,
{
let _s = trace_span!("serializing DispatchEventTagged");
- let kind = self.data.kind().name().unwrap();
+ let kind = self.0.kind().name().unwrap();
DispatchEventTaggedSerialized {
- data: serde_json::to_value(&self.data).unwrap(),
+ data: serde_json::to_value(&self.0).unwrap(),
kind: kind.to_string(),
}
.serialize(serializer)
@@ -58,3 +67,40 @@ pub struct CachePayload {
#[serde(flatten)]
pub data: DispatchEventTagged,
}
+#[cfg(test)]
+mod tests {
+ use serde_json::json;
+ use twilight_model::gateway::event::DispatchEvent;
+
+ use super::DispatchEventTagged;
+
+ #[test]
+ fn serialize_event_tagged() {
+ let dispatch_event = DispatchEvent::GiftCodeUpdate;
+
+ let value = serde_json::to_value(&dispatch_event);
+ assert!(value.is_ok());
+ let value = value.unwrap();
+
+ let kind = value.get("t").and_then(serde_json::Value::as_str);
+ assert_eq!(kind, Some("GIFT_CODE_UPDATE"));
+ }
+
+ #[test]
+ fn deserialize_event_tagged() {
+ let json = json!({
+ "t": "GIFT_CODE_UPDATE",
+ "d": {}
+ });
+
+ let dispatch_event = serde_json::from_value::<DispatchEventTagged>(json);
+ assert!(dispatch_event.is_ok());
+
+ let dispatch_event_tagged = dispatch_event.unwrap();
+
+ assert_eq!(
+ DispatchEventTagged(DispatchEvent::GiftCodeUpdate),
+ dispatch_event_tagged
+ );
+ }
+}