serenity/builder/
get_entitlements.rs

1#[cfg(feature = "http")]
2use crate::http::CacheHttp;
3use crate::internal::prelude::Result;
4use crate::model::id::{EntitlementId, GuildId, SkuId, UserId};
5use crate::model::monetization::Entitlement;
6
7/// Builds a request to fetch active and ended [`Entitlement`]s.
8///
9/// This is a helper for [`Http::get_entitlements`] used via [`Entitlement::list`].
10///
11/// [`Http::get_entitlements`]: crate::http::Http::get_entitlements
12#[derive(Clone, Debug, Default)]
13#[must_use]
14pub struct GetEntitlements {
15    user_id: Option<UserId>,
16    sku_ids: Option<Vec<SkuId>>,
17    before: Option<EntitlementId>,
18    after: Option<EntitlementId>,
19    limit: Option<u8>,
20    guild_id: Option<GuildId>,
21    exclude_ended: Option<bool>,
22}
23
24impl GetEntitlements {
25    /// Filters the returned entitlements by the given [`UserId`].
26    pub fn user_id(mut self, user_id: UserId) -> Self {
27        self.user_id = Some(user_id);
28        self
29    }
30
31    /// Filters the returned entitlements by the given [`SkuId`]s.
32    pub fn sku_ids(mut self, sku_ids: Vec<SkuId>) -> Self {
33        self.sku_ids = Some(sku_ids);
34        self
35    }
36
37    /// Filters the returned entitlements to before the given [`EntitlementId`].
38    pub fn before(mut self, before: EntitlementId) -> Self {
39        self.before = Some(before);
40        self
41    }
42
43    /// Filters the returned entitlements to after the given [`EntitlementId`].
44    pub fn after(mut self, after: EntitlementId) -> Self {
45        self.after = Some(after);
46        self
47    }
48
49    /// Limits the number of entitlements that may be returned.
50    ///
51    /// This is limited to `0..=100`.
52    pub fn limit(mut self, limit: u8) -> Self {
53        self.limit = Some(limit);
54        self
55    }
56
57    /// Filters the returned entitlements by the given [`GuildId`].
58    pub fn guild_id(mut self, guild_id: GuildId) -> Self {
59        self.guild_id = Some(guild_id);
60        self
61    }
62
63    /// Filters the returned entitlements to only active entitlements, if `true`.
64    pub fn exclude_ended(mut self, exclude_ended: bool) -> Self {
65        self.exclude_ended = Some(exclude_ended);
66        self
67    }
68}
69
70#[cfg(feature = "http")]
71#[async_trait::async_trait]
72impl super::Builder for GetEntitlements {
73    type Context<'ctx> = ();
74    type Built = Vec<Entitlement>;
75
76    async fn execute(
77        self,
78        cache_http: impl CacheHttp,
79        _: Self::Context<'_>,
80    ) -> Result<Self::Built> {
81        let http = cache_http.http();
82        http.get_entitlements(
83            self.user_id,
84            self.sku_ids,
85            self.before,
86            self.after,
87            self.limit,
88            self.guild_id,
89            self.exclude_ended,
90        )
91        .await
92    }
93}