traq_bot_http/payloads/
stamp.rs

1//! スタンプ関連のイベントペイロード
2//! ## types
3//! - [`StampCreatedPayload`](StampCreatedPayload)
4
5use serde::{Deserialize, Serialize};
6
7use super::types::{TimeStamp, User, Uuid};
8
9/// `STAMP_CREATED`ペイロード
10/// - [traQの型定義](https://github.com/traPtitech/traQ/blob/d2bc98f1e0e68f4acc371eb78e6a49a167446761/service/bot/event/payload/ev_stamp_created.go#L11-L18)
11/// - [traQ-bot-consoleのリファレンス](https://github.com/traPtitech/traQ-bot-console/blob/dev/src/docs/bot/events/stamp.md#stamp_created)
12///
13/// ## Example
14/// ```
15/// # fn main() -> Result<(), serde_json::Error> {
16/// use traq_bot_http::payloads::StampCreatedPayload;
17/// let payload = r##"{
18///     "eventTime": "2019-05-08T08:31:06.566228282Z",
19///     "id": "2bc06cda-bdb9-4a68-8000-62f907f36a92",
20///     "name": "naruhodo",
21///     "fileId": "2bc06cda-bdb9-4a68-8000-62f907f36a92",
22///     "creator": {
23///         "id": "dfdff0c9-5de0-46ee-9721-2525e8bb3d45",
24///         "name": "takashi_trap",
25///         "displayName": "",
26///         "iconId": "2bc06cda-bdb9-4a68-8000-62f907f36a92",
27///         "bot": false
28///     }
29/// }"##;
30/// let payload: StampCreatedPayload = payload.parse()?;
31/// println!("{payload}");
32/// # Ok(())
33/// # }
34/// ```
35#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
36#[serde(rename_all = "camelCase")]
37pub struct StampCreatedPayload {
38    #[serde(with = "crate::payloads::serde::timestamp")]
39    pub event_time: TimeStamp,
40    pub id: Uuid,
41    pub name: String,
42    pub file_id: Uuid,
43    pub creator: User,
44}
45
46#[cfg(test)]
47mod tests {
48    use super::*;
49    use crate::test_utils::{takashi_trap, timestamp, uuid};
50
51    use std::fs::read_to_string;
52
53    #[test]
54    fn stamp_created_test() {
55        let data = read_to_string("testdata/stamp/stamp_created.json").unwrap();
56        let payload: StampCreatedPayload = data.parse().unwrap();
57        let pretty_payload = serde_json::to_string_pretty(&payload).unwrap();
58        println!("{pretty_payload}");
59        println!("{payload}");
60        assert_eq!(
61            payload,
62            StampCreatedPayload {
63                event_time: timestamp("2019-05-08T08:31:06.566228282Z"),
64                id: uuid("2bc06cda-bdb9-4a68-8000-62f907f36a92"),
65                name: "naruhodo".to_string(),
66                file_id: uuid("2bc06cda-bdb9-4a68-8000-62f907f36a92"),
67                creator: {
68                    let mut creator = takashi_trap();
69                    creator.display_name.clear();
70                    creator
71                },
72            }
73        );
74    }
75}