titanium_model/
lib.rs

1//! Titan Model - Core types and models for Discord API
2#![deny(unsafe_code)]
3#![allow(clippy::struct_excessive_bools)]
4//!
5//! This crate provides zero-copy deserialization support for Discord API entities.
6//! All types follow Discord API v10/11 specifications.
7//!
8//!
9//! # Modules
10//!
11
12//! - [`automod`] - `AutoMod` rules and actions
13//! - [`audit`] - Audit log entries
14//! - [`integration`] - Integrations and webhooks
15//! - [`invite`] - Guild invites
16//! - [`member`] - Guild members, roles, emoji, stickers
17//! - [`monetization`] - Entitlements, subscriptions, SKUs
18//! - [`reaction`] - Message reactions
19//! - [`scheduled`] - Scheduled events
20//! - [`soundboard`] - Soundboard sounds
21//! - [`stage`] - Stage instances
22//! - [`thread`] - Thread channels and members
23
24pub mod audit;
25pub mod automod;
26pub mod builder;
27pub mod cdn_tests;
28pub mod command;
29pub mod component;
30pub mod create_message;
31pub mod integration;
32pub mod intents;
33pub mod interaction;
34pub mod invite;
35pub mod json;
36pub mod member;
37pub mod monetization;
38pub mod permissions;
39pub mod reaction;
40pub mod scheduled;
41pub mod snowflake;
42pub mod soundboard;
43pub mod string;
44pub mod thread;
45pub mod ui;
46pub mod voice;
47
48// New modules
49pub mod channel;
50pub mod guild;
51pub mod message;
52pub mod user;
53
54// Re-exports from submodules
55pub use audit::{AuditLogChange, AuditLogEntry, AuditLogEvent, AuditLogOptions};
56pub use automod::{
57    AutoModAction, AutoModActionExecution, AutoModActionMetadata, AutoModActionType,
58    AutoModEventType, AutoModKeywordPresetType, AutoModRule, AutoModTriggerMetadata,
59    AutoModTriggerType,
60};
61pub use builder::{
62    ActionRowBuilder, AutoModRuleBuilder, ButtonBuilder, CommandBuilder, CreateChannelBuilder,
63    CreateEmojiBuilder, CreateGuildBuilder, CreateInviteBuilder, CreateRoleBuilder,
64    CreateStickerBuilder, EmbedBuilder, InteractionResponseBuilder, MessageBuilder,
65    ModifyEmojiBuilder, ModifyGuildBuilder, ModifyMemberBuilder, PollBuilder,
66    ScheduledEventBuilder, SelectMenuBuilder, StageInstanceBuilder, StartThreadBuilder,
67    WebhookExecuteBuilder,
68};
69pub use command::{ApplicationCommand, CommandOption, CommandType};
70pub use component::{ActionRow, Button, Component, ComponentType, SelectMenu};
71pub use create_message::CreateMessage;
72pub use create_message::FileUpload;
73pub use integration::{
74    GuildIntegrationsUpdateEvent, Integration, IntegrationAccount, IntegrationApplication,
75    IntegrationDeleteEvent, Webhook, WebhooksUpdateEvent,
76};
77pub use intents::Intents;
78pub use interaction::{
79    Interaction, InteractionCallbackData, InteractionCallbackType, InteractionResponse,
80    InteractionType,
81};
82pub use invite::{InviteCreateEvent, InviteDeleteEvent};
83pub use member::{Emoji, GuildMember, Role, RoleTags, Sticker};
84pub use message::{Poll, PollAnswer, PollMedia, PollResults};
85pub use monetization::{
86    Entitlement, EntitlementType, Sku, SkuType, Subscription, SubscriptionStatus,
87};
88pub use permissions::Permissions;
89pub use reaction::{
90    MessageReactionAddEvent, MessageReactionRemoveAllEvent, MessageReactionRemoveEmojiEvent,
91    MessageReactionRemoveEvent, ReactionEmoji,
92};
93pub use scheduled::{
94    ScheduledEvent, ScheduledEventEntityMetadata, ScheduledEventEntityType,
95    ScheduledEventPrivacyLevel, ScheduledEventStatus, ScheduledEventUserEvent,
96};
97pub use snowflake::Snowflake;
98pub use soundboard::{
99    GuildSoundboardSoundsUpdateEvent, SoundboardSound, SoundboardSoundDeleteEvent,
100    SoundboardSoundsUpdateEvent,
101};
102pub use string::TitanString;
103pub use thread::{
104    DefaultReaction, ForumTag, ThreadDeleteEvent, ThreadListSyncEvent, ThreadMember,
105    ThreadMemberUpdateEvent, ThreadMembersUpdateEvent, ThreadMetadata,
106};
107pub use voice::PartialVoiceState;
108pub use voice::{StageInstance, StagePrivacyLevel};
109
110// Re-exports from new modules
111pub use channel::{Channel, ChannelMention, ChannelPinsUpdateEvent, PermissionOverwrite};
112pub use guild::{
113    Application, Guild, GuildBanEvent, GuildEmojisUpdateEvent, GuildMemberAddEvent,
114    GuildMemberRemoveEvent, GuildMemberUpdateEvent, GuildMembersChunkEvent, GuildRoleDeleteEvent,
115    GuildRoleEvent, GuildStickersUpdateEvent, ReadyEventData, UnavailableGuild,
116};
117pub use message::{
118    Attachment, Embed, EmbedAuthor, EmbedField, EmbedFooter, EmbedMedia, EmbedProvider, Message,
119    MessageDeleteBulkEvent, MessageDeleteEvent, MessageReference, MessageUpdateEvent, Reaction,
120    ReactionCountDetails, StickerItem, TypingStartEvent,
121};
122pub use user::{ClientStatus, PartialUser, PresenceUpdateEvent, User};
123
124// Builder From impls are now in builder.rs
125
126/// Trait for items that can be mentioned in Discord.
127pub trait Mention {
128    /// Returns the mention string for this item (e.g., <@123>).
129    fn mention(&self) -> String;
130}
131
132impl Mention for GuildMember<'_> {
133    fn mention(&self) -> String {
134        if let Some(user) = &self.user {
135            format!("<@{}>", user.id.0)
136        } else {
137            String::new() // Should not happen for valid members
138        }
139    }
140}
141
142impl Mention for Role<'_> {
143    fn mention(&self) -> String {
144        format!("<@&{}>", self.id.0)
145    }
146}