spectacles_model/
invite.rs1use std::time::Duration;
3
4use chrono::{DateTime, FixedOffset};
5
6use crate::channel::Channel;
7use crate::guild::Guild;
8use crate::User;
9
10#[derive(Deserialize, Serialize, Clone, Debug)]
12pub struct Invite {
13    pub code: String,
15    #[serde(default)]
17    pub guild: Option<Guild>,
18    pub channel: Channel,
20    #[serde(default)]
22    pub approximate_presence_count: Option<i32>,
23    #[serde(default)]
25    pub approximate_member_count: Option<i32>
26}
27
28#[derive(Deserialize, Serialize, Clone, Debug)]
30pub struct PartialInvite {
31    pub code: String
33}
34
35
36#[derive(Deserialize, Serialize, Clone, Debug)]
38pub struct InviteMetadata {
39    pub inviter: User,
41    pub uses: i32,
43    pub max_uses: i32,
45    pub max_age: i32,
47    pub temporary: bool,
49    pub created_at: DateTime<FixedOffset>,
51    pub revoked: bool
53}
54
55#[derive(Deserialize, Serialize, Clone, Debug)]
57pub struct CreateInviteOptions {
58    max_age: u64,
59    max_uses: i32,
60    temporary: bool,
61    unique: bool,
62}
63
64impl CreateInviteOptions {
65    pub fn new() -> Self {
66        CreateInviteOptions {
67            max_age: 86400,
68            max_uses: 0,
69            temporary: false,
70            unique: false,
71        }
72    }
73
74    pub fn set_max_age(mut self, age: Duration) -> Self {
76        self.max_age = age.as_secs();
77        self
78    }
79
80    pub fn set_max_uses(mut self, uses: i32) -> Self {
82        self.max_uses = uses;
83        self
84    }
85
86    pub fn set_temporary(mut self, temp: bool) -> Self {
88        self.temporary = temp;
89        self
90    }
91
92    pub fn set_unique(mut self, unique: bool) -> Self {
94        self.unique = unique;
95        self
96    }
97}