serenity/builder/
get_entitlements.rs1#[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#[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 pub fn user_id(mut self, user_id: UserId) -> Self {
27 self.user_id = Some(user_id);
28 self
29 }
30
31 pub fn sku_ids(mut self, sku_ids: Vec<SkuId>) -> Self {
33 self.sku_ids = Some(sku_ids);
34 self
35 }
36
37 pub fn before(mut self, before: EntitlementId) -> Self {
39 self.before = Some(before);
40 self
41 }
42
43 pub fn after(mut self, after: EntitlementId) -> Self {
45 self.after = Some(after);
46 self
47 }
48
49 pub fn limit(mut self, limit: u8) -> Self {
53 self.limit = Some(limit);
54 self
55 }
56
57 pub fn guild_id(mut self, guild_id: GuildId) -> Self {
59 self.guild_id = Some(guild_id);
60 self
61 }
62
63 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}