use serde::{Deserialize, Serialize};
use super::types::{TimeStamp, Uuid};
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TagAddedPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub tag_id: Uuid,
pub tag: String,
}
impl From<TagRemovedPayload> for TagAddedPayload {
fn from(payload: TagRemovedPayload) -> Self {
let TagRemovedPayload {
event_time,
tag_id,
tag,
} = payload;
Self {
event_time,
tag_id,
tag,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TagRemovedPayload {
#[serde(with = "crate::payloads::serde::timestamp")]
pub event_time: TimeStamp,
pub tag_id: Uuid,
pub tag: String,
}
impl From<TagAddedPayload> for TagRemovedPayload {
fn from(payload: TagAddedPayload) -> Self {
let TagAddedPayload {
event_time,
tag_id,
tag,
} = payload;
Self {
event_time,
tag_id,
tag,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::test_utils::{timestamp, uuid};
use std::fs::read_to_string;
#[test]
fn tag_added_test() {
let data = read_to_string("testdata/tag/tag_added.json").unwrap();
let payload: TagAddedPayload = data.parse().unwrap();
let pretty_payload = serde_json::to_string_pretty(&payload).unwrap();
println!("{pretty_payload}");
println!("{payload}");
assert_eq!(
payload,
TagAddedPayload {
event_time: timestamp("2019-05-08T08:31:06.566228282Z"),
tag_id: uuid("2bc06cda-bdb9-4a68-8000-62f907f36a92"),
tag: "全強".to_string(),
}
);
}
#[test]
fn tag_removed_test() {
let data = read_to_string("testdata/tag/tag_removed.json").unwrap();
let payload: TagRemovedPayload = data.parse().unwrap();
let pretty_payload = serde_json::to_string_pretty(&payload).unwrap();
println!("{pretty_payload}");
println!("{payload}");
assert_eq!(
payload,
TagRemovedPayload {
event_time: timestamp("2019-05-08T08:31:06.566228282Z"),
tag_id: uuid("2bc06cda-bdb9-4a68-8000-62f907f36a92"),
tag: "全強".to_string(),
}
);
}
}