1use crate::Snowflake;
6use crate::TitanString;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Deserialize, Serialize)]
11pub struct InviteCreateEvent<'a> {
12 pub channel_id: Snowflake,
14
15 #[serde(default)]
17 pub code: TitanString<'a>,
18
19 #[serde(default)]
21 pub created_at: TitanString<'a>,
22
23 #[serde(default)]
25 pub guild_id: Option<Snowflake>,
26
27 #[serde(default)]
29 pub inviter: Option<super::User<'a>>,
30
31 pub max_age: u32,
33
34 pub max_uses: u32,
36
37 #[serde(default)]
39 pub target_type: Option<u8>,
40
41 #[serde(default)]
43 pub target_user: Option<super::User<'a>>,
44
45 #[serde(default)]
47 pub target_application: Option<super::Application>,
48
49 pub temporary: bool,
51
52 pub uses: u32,
54}
55
56#[derive(Debug, Clone, Deserialize, Serialize)]
58pub struct InviteDeleteEvent<'a> {
59 pub channel_id: Snowflake,
61
62 #[serde(default)]
64 pub guild_id: Option<Snowflake>,
65
66 #[serde(default)]
68 pub code: TitanString<'a>,
69}
70
71#[cfg(test)]
72mod tests {
73 use super::*;
74
75 #[test]
76 fn test_invite_create_event() {
77 let json = r#"{
78 "channel_id": "123",
79 "code": "abcdef",
80 "created_at": "2021-01-01T00:00:00.000Z",
81 "max_age": 86400,
82 "max_uses": 0,
83 "temporary": false,
84 "uses": 0
85 }"#;
86
87 let event: InviteCreateEvent = crate::json::from_str(json).unwrap();
88 assert_eq!(event.code, "abcdef");
89 assert_eq!(event.max_age, 86400);
90 }
91}