traq_bot_http/payloads/
user.rs

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