use serde::{Deserialize, Serialize};
use super::types::{Channel, TimeStamp};
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PingPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct JoinedPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub channel: Channel,
}
impl From<LeftPayload> for JoinedPayload {
fn from(payload: LeftPayload) -> Self {
let LeftPayload {
event_time,
channel,
} = payload;
Self {
event_time,
channel,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct LeftPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub channel: Channel,
}
impl From<JoinedPayload> for LeftPayload {
fn from(payload: JoinedPayload) -> Self {
let JoinedPayload {
event_time,
channel,
} = payload;
Self {
event_time,
channel,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::test_utils::{channel_a_po, timestamp};
use std::fs::read_to_string;
#[test]
fn ping_test() {
let data = read_to_string("testdata/system/ping.json").unwrap();
let payload: PingPayload = data.parse().unwrap();
let pretty_payload = serde_json::to_string_pretty(&payload).unwrap();
println!("{pretty_payload}");
println!("{payload}");
assert_eq!(
payload,
PingPayload {
event_time: timestamp("2019-05-07T04:50:48.582586882Z")
}
);
}
#[test]
fn joined_test() {
let data = read_to_string("testdata/system/joined.json").unwrap();
let payload: JoinedPayload = data.parse().unwrap();
let pretty_payload = serde_json::to_string_pretty(&payload).unwrap();
println!("{pretty_payload}");
println!("{payload}");
assert_eq!(
payload,
JoinedPayload {
event_time: timestamp("2019-05-08T13:49:13.769110201Z"),
channel: channel_a_po(),
}
);
}
#[test]
fn left_test() {
let data = read_to_string("testdata/system/left.json").unwrap();
let payload: LeftPayload = data.parse().unwrap();
let pretty_payload = serde_json::to_string_pretty(&payload).unwrap();
println!("{pretty_payload}");
println!("{payload}");
assert_eq!(
payload,
LeftPayload {
event_time: timestamp("2019-05-08T13:49:16.497848449Z"),
channel: channel_a_po(),
},
);
}
}