traq_bot_http/payloads/
tag.rs1use serde::{Deserialize, Serialize};
7
8use super::types::{TimeStamp, Uuid};
9
10#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
29#[serde(rename_all = "camelCase")]
30pub struct TagAddedPayload {
31 #[serde(with = "crate::payloads::serde::timestamp")]
32 pub event_time: TimeStamp,
33 pub tag_id: Uuid,
34 pub tag: String,
35}
36
37impl From<TagRemovedPayload> for TagAddedPayload {
38 fn from(payload: TagRemovedPayload) -> Self {
39 let TagRemovedPayload {
40 event_time,
41 tag_id,
42 tag,
43 } = payload;
44 Self {
45 event_time,
46 tag_id,
47 tag,
48 }
49 }
50}
51
52#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
71#[serde(rename_all = "camelCase")]
72pub struct TagRemovedPayload {
73 #[serde(with = "crate::payloads::serde::timestamp")]
74 pub event_time: TimeStamp,
75 pub tag_id: Uuid,
76 pub tag: String,
77}
78
79impl From<TagAddedPayload> for TagRemovedPayload {
80 fn from(payload: TagAddedPayload) -> Self {
81 let TagAddedPayload {
82 event_time,
83 tag_id,
84 tag,
85 } = payload;
86 Self {
87 event_time,
88 tag_id,
89 tag,
90 }
91 }
92}
93
94#[cfg(test)]
95mod tests {
96 use super::*;
97 use crate::test_utils::{timestamp, uuid};
98
99 use std::fs::read_to_string;
100
101 #[test]
102 fn tag_added_test() {
103 let data = read_to_string("testdata/tag/tag_added.json").unwrap();
104 let payload: TagAddedPayload = data.parse().unwrap();
105 let pretty_payload = serde_json::to_string_pretty(&payload).unwrap();
106 println!("{pretty_payload}");
107 println!("{payload}");
108 assert_eq!(
109 payload,
110 TagAddedPayload {
111 event_time: timestamp("2019-05-08T08:31:06.566228282Z"),
112 tag_id: uuid("2bc06cda-bdb9-4a68-8000-62f907f36a92"),
113 tag: "全強".to_string(),
114 }
115 );
116 }
117
118 #[test]
119 fn tag_removed_test() {
120 let data = read_to_string("testdata/tag/tag_removed.json").unwrap();
121 let payload: TagRemovedPayload = data.parse().unwrap();
122 let pretty_payload = serde_json::to_string_pretty(&payload).unwrap();
123 println!("{pretty_payload}");
124 println!("{payload}");
125 assert_eq!(
126 payload,
127 TagRemovedPayload {
128 event_time: timestamp("2019-05-08T08:31:06.566228282Z"),
129 tag_id: uuid("2bc06cda-bdb9-4a68-8000-62f907f36a92"),
130 tag: "全強".to_string(),
131 }
132 );
133 }
134}