Skip to main content

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}