Skip to main content

neptunium_http/endpoints/meta/
limits.rs

1use std::collections::HashMap;
2
3use serde::Deserialize;
4
5#[derive(Deserialize, Copy, Clone, Debug, Hash, PartialEq, Eq)]
6#[serde(rename_all = "snake_case")]
7pub enum LimitKey {
8    AvatarMaxSize,
9    EmojiMaxSize,
10    FeatureAnimatedAvatar,
11    FeatureAnimatedBanner,
12    FeatureCustomDiscriminator,
13    FeatureCustomNotificationSounds,
14    FeatureEarlyAccess,
15    FeatureGlobalExpressions,
16    FeatureHigherVideoQuality,
17    FeaturePerGuildProfiles,
18    FeatureVoiceEntranceSounds,
19    MaxAttachmentsPerMessage,
20    MaxBioLength,
21    MaxBookmarks,
22    MaxChannelsPerCategory,
23    MaxCreatedPacks,
24    MaxCustomBackgrounds,
25    MaxEmbedsPerMessage,
26    MaxFavoriteMemeTags,
27    MaxFavoriteMemes,
28    MaxGroupDmRecipients,
29    MaxGroupDmsPerUser,
30    MaxGuildChannels,
31    MaxGuildEmojisAnimatedMore,
32    MaxGuildEmojisAnimated,
33    MaxGuildEmojisStaticMore,
34    MaxGuildEmojisStatic,
35    MaxGuildInvites,
36    MaxGuildMembers,
37    MaxGuildRoles,
38    MaxGuildStickersMore,
39    MaxGuildStickers,
40    MaxGuilds,
41    MaxInstalledPacks,
42    MaxAttachmentFileSize,
43    MaxMessageLength,
44    MaxPackExpressions,
45    MaxPrivateChannelsPerUser,
46    MaxReactionsPerMessage,
47    MaxRelationships,
48    MaxUsersPerMessageReaction,
49    MaxVoiceMessageDuration,
50    MaxWebhooksPerChannel,
51    MaxWebhooksPerGuild,
52    StickerMaxSize,
53}
54
55#[derive(Deserialize, Clone, Debug)]
56pub struct InstanceDiscoveryDocumentLimitsRuleFilters {
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub traits: Option<Vec<String>>,
59    #[serde(skip_serializing_if = "Option::is_none", rename = "guildFeatures")]
60    pub guild_features: Option<Vec<String>>,
61}
62
63#[derive(Deserialize, Clone, Debug)]
64pub struct InstanceDiscoveryDocumentLimitsRule {
65    /// Unique identifier for this limits rule.
66    pub id: String,
67    pub overrides: HashMap<LimitKey, i64>,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub filters: Option<InstanceDiscoveryDocumentLimitsRuleFilters>,
70}
71
72#[derive(Deserialize, Clone, Debug)]
73pub struct InstanceDiscoveryDocumentLimits {
74    /// Wire format version. Is always `2`.
75    pub version: u32,
76    /// Available trait definitions, e.g. "premium".
77    #[serde(rename = "traitDefinitions")]
78    pub trait_definitions: Vec<String>,
79    pub rules: Vec<InstanceDiscoveryDocumentLimitsRule>,
80    /// Hash of the default limit values for cache invalidation.
81    #[serde(rename = "defaultsHash")]
82    pub defaults_hash: String,
83}