revolt_database/models/
mod.rs

1mod admin_migrations;
2mod bots;
3mod channel_invites;
4mod channel_unreads;
5mod channel_webhooks;
6mod channels;
7mod emojis;
8mod file_hashes;
9mod files;
10mod messages;
11mod policy_changes;
12mod ratelimit_events;
13mod safety_reports;
14mod safety_snapshots;
15mod server_bans;
16mod server_members;
17mod servers;
18mod user_settings;
19mod users;
20
21pub use admin_migrations::*;
22pub use bots::*;
23pub use channel_invites::*;
24pub use channel_unreads::*;
25pub use channel_webhooks::*;
26pub use channels::*;
27pub use emojis::*;
28pub use file_hashes::*;
29pub use files::*;
30pub use messages::*;
31pub use policy_changes::*;
32pub use ratelimit_events::*;
33pub use safety_reports::*;
34pub use safety_snapshots::*;
35pub use server_bans::*;
36pub use server_members::*;
37pub use servers::*;
38pub use user_settings::*;
39pub use users::*;
40
41use crate::{Database, ReferenceDb};
42
43#[cfg(feature = "mongodb")]
44use crate::MongoDb;
45
46pub trait AbstractDatabase:
47    Sync
48    + Send
49    + admin_migrations::AbstractMigrations
50    + bots::AbstractBots
51    + channels::AbstractChannels
52    + channel_invites::AbstractChannelInvites
53    + channel_unreads::AbstractChannelUnreads
54    + channel_webhooks::AbstractWebhooks
55    + emojis::AbstractEmojis
56    + file_hashes::AbstractAttachmentHashes
57    + files::AbstractAttachments
58    + messages::AbstractMessages
59    + policy_changes::AbstractPolicyChange
60    + ratelimit_events::AbstractRatelimitEvents
61    + safety_reports::AbstractReport
62    + safety_snapshots::AbstractSnapshot
63    + server_bans::AbstractServerBans
64    + server_members::AbstractServerMembers
65    + servers::AbstractServers
66    + user_settings::AbstractUserSettings
67    + users::AbstractUsers
68{
69}
70
71impl AbstractDatabase for ReferenceDb {}
72
73#[cfg(feature = "mongodb")]
74impl AbstractDatabase for MongoDb {}
75
76impl std::ops::Deref for Database {
77    type Target = dyn AbstractDatabase;
78
79    fn deref(&self) -> &Self::Target {
80        match &self {
81            Database::Reference(dummy) => dummy,
82            #[cfg(feature = "mongodb")]
83            Database::MongoDb(mongo) => mongo,
84        }
85    }
86}