twilight_cache_any_backend/model/
channel.rs

1use twilight_model::{
2    channel::{
3        permission_overwrite::PermissionOverwrite,
4        thread::{AutoArchiveDuration, ThreadMetadata},
5        Channel, ChannelType, VideoQualityMode,
6    },
7    id::{
8        marker::{ApplicationMarker, ChannelMarker, GuildMarker, UserMarker},
9        Id,
10    },
11    util::ImageHash,
12};
13
14/// A cached channel
15///
16/// It's the same as [`twilight_model::channel::Channel`] except:
17///
18/// - `recipients` field is removed, as it's only sent in DM channels, which are
19///   cached separately
20///
21/// - `last_message_id`, `last_pin_timestamp`, `member_count` and
22///   `message_count` fields are removed, as keeping them up-to-date would add
23///   unnecessary caching overhead
24///
25/// - `member` and `newly_created` fields are removed, as they're only sent in
26///   some HTTP endpoints
27#[derive(Clone, Debug)]
28pub struct CachedChannel {
29    pub application_id: Option<Id<ApplicationMarker>>,
30    pub bitrate: Option<u32>,
31    pub default_auto_archive_duration: Option<AutoArchiveDuration>,
32    pub guild_id: Option<Id<GuildMarker>>,
33    pub icon: Option<ImageHash>,
34    pub id: Id<ChannelMarker>,
35    pub invitable: Option<bool>,
36    pub kind: ChannelType,
37    pub name: Option<String>,
38    pub nsfw: Option<bool>,
39    pub owner_id: Option<Id<UserMarker>>,
40    pub parent_id: Option<Id<ChannelMarker>>,
41    pub permission_overwrites: Option<Vec<PermissionOverwrite>>,
42    pub position: Option<i32>,
43    pub rate_limit_per_user: Option<u16>,
44    pub rtc_region: Option<String>,
45    pub thread_metadata: Option<ThreadMetadata>,
46    pub topic: Option<String>,
47    pub user_limit: Option<u32>,
48    pub video_quality_mode: Option<VideoQualityMode>,
49}
50
51impl From<&Channel> for CachedChannel {
52    fn from(channel: &Channel) -> Self {
53        Self {
54            application_id: channel.application_id,
55            bitrate: channel.bitrate,
56            default_auto_archive_duration: channel.default_auto_archive_duration,
57            guild_id: channel.guild_id,
58            icon: channel.icon,
59            id: channel.id,
60            invitable: channel.invitable,
61            kind: channel.kind,
62            name: channel.name.clone(),
63            nsfw: channel.nsfw,
64            owner_id: channel.owner_id,
65            parent_id: channel.parent_id,
66            permission_overwrites: channel.permission_overwrites.clone(),
67            position: channel.position,
68            rate_limit_per_user: channel.rate_limit_per_user,
69            rtc_region: channel.rtc_region.clone(),
70            thread_metadata: channel.thread_metadata.clone(),
71            topic: channel.topic.clone(),
72            user_limit: channel.user_limit,
73            video_quality_mode: channel.video_quality_mode,
74        }
75    }
76}