kick_api/models/moderation.rs
1use serde::{Deserialize, Serialize};
2
3/// Request body for banning a user
4///
5/// If `duration` is provided, this is a timeout (temporary ban).
6/// If `duration` is `None`, this is a permanent ban.
7///
8/// # Example
9/// ```
10/// use kick_api::BanRequest;
11///
12/// // Permanent ban
13/// let ban = BanRequest {
14/// broadcaster_user_id: 12345,
15/// user_id: 67890,
16/// reason: Some("Spamming".to_string()),
17/// duration: None,
18/// };
19///
20/// // 10-minute timeout
21/// let timeout = BanRequest {
22/// broadcaster_user_id: 12345,
23/// user_id: 67890,
24/// reason: Some("Cool off".to_string()),
25/// duration: Some(600),
26/// };
27/// ```
28#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct BanRequest {
30 /// The broadcaster's channel where the ban applies
31 pub broadcaster_user_id: u64,
32
33 /// The user to ban
34 pub user_id: u64,
35
36 /// Reason for the ban
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub reason: Option<String>,
39
40 /// Duration in seconds (None = permanent ban)
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub duration: Option<u32>,
43}
44
45/// Request body for unbanning a user
46///
47/// # Example
48/// ```
49/// use kick_api::UnbanRequest;
50///
51/// let unban = UnbanRequest {
52/// broadcaster_user_id: 12345,
53/// user_id: 67890,
54/// };
55/// ```
56#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct UnbanRequest {
58 /// The broadcaster's channel where the unban applies
59 pub broadcaster_user_id: u64,
60
61 /// The user to unban
62 pub user_id: u64,
63}