titanium_model/
channel.rs1use crate::snowflake::Snowflake;
2use crate::thread::{DefaultReaction, ForumTag, ThreadMember, ThreadMetadata};
3use crate::user::User;
4use crate::TitanString;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Deserialize, Serialize)]
9pub struct Channel<'a> {
10 pub id: Snowflake,
12 #[serde(rename = "type")]
14 pub channel_type: u8,
15 #[serde(default)]
17 pub guild_id: Option<Snowflake>,
18 #[serde(default)]
20 pub position: Option<i32>,
21 #[serde(default)]
23 pub permission_overwrites: Vec<PermissionOverwrite>,
24 #[serde(default)]
26 pub name: Option<TitanString<'a>>,
27 #[serde(default)]
29 pub topic: Option<TitanString<'a>>,
30 #[serde(default)]
32 pub nsfw: bool,
33 #[serde(default)]
35 pub last_message_id: Option<Snowflake>,
36 #[serde(default)]
38 pub bitrate: Option<u32>,
39 #[serde(default)]
41 pub user_limit: Option<u32>,
42 #[serde(default)]
44 pub rate_limit_per_user: Option<u32>,
45 #[serde(default)]
47 pub recipients: Vec<User<'a>>,
48 #[serde(default)]
50 pub icon: Option<TitanString<'a>>,
51 #[serde(default)]
53 pub owner_id: Option<Snowflake>,
54 #[serde(default)]
56 pub application_id: Option<Snowflake>,
57 #[serde(default)]
59 pub managed: bool,
60 #[serde(default)]
62 pub parent_id: Option<Snowflake>,
63 #[serde(default)]
65 pub last_pin_timestamp: Option<TitanString<'a>>,
66 #[serde(default)]
68 pub rtc_region: Option<TitanString<'a>>,
69 #[serde(default)]
71 pub video_quality_mode: Option<u8>,
72 #[serde(default)]
74 pub message_count: Option<u32>,
75 #[serde(default)]
77 pub member_count: Option<u32>,
78 #[serde(default)]
80 pub thread_metadata: Option<ThreadMetadata<'a>>,
81 #[serde(default)]
83 pub member: Option<ThreadMember<'a>>,
84 #[serde(default)]
86 pub default_auto_archive_duration: Option<u32>,
87 #[serde(default)]
89 pub permissions: Option<crate::permissions::Permissions>,
90 #[serde(default)]
92 pub flags: Option<u64>,
93 #[serde(default)]
95 pub total_message_sent: Option<u32>,
96 #[serde(default)]
98 pub available_tags: Vec<ForumTag<'a>>,
99 #[serde(default)]
101 pub applied_tags: Vec<Snowflake>,
102 #[serde(default)]
104 pub default_reaction_emoji: Option<DefaultReaction<'a>>,
105 #[serde(default)]
107 pub default_thread_rate_limit_per_user: Option<u32>,
108 #[serde(default)]
110 pub default_sort_order: Option<u8>,
111 #[serde(default)]
113 pub default_forum_layout: Option<u8>,
114}
115
116impl<'a> crate::Mention for Channel<'a> {
117 fn mention(&self) -> String {
118 format!("<#{}>", self.id.0)
119 }
120}
121
122#[derive(Debug, Clone, Deserialize, Serialize)]
124pub struct PermissionOverwrite {
125 pub id: Snowflake,
127 #[serde(rename = "type")]
129 pub overwrite_type: u8,
130 pub allow: crate::permissions::Permissions,
132 pub deny: crate::permissions::Permissions,
134}
135
136#[derive(Debug, Clone, Deserialize, Serialize)]
138pub struct ChannelMention {
139 pub id: Snowflake,
141 pub guild_id: Snowflake,
143 #[serde(rename = "type")]
145 pub channel_type: u8,
146 pub name: String,
148}
149
150#[derive(Debug, Clone, Deserialize, Serialize)]
152pub struct ChannelPinsUpdateEvent {
153 #[serde(default)]
154 pub guild_id: Option<Snowflake>,
155 pub channel_id: Snowflake,
156 #[serde(default)]
157 pub last_pin_timestamp: Option<String>,
158}