Skip to main content

twilight_http/request/application/monetization/
get_sku_subscription.rs

1use crate::{
2    Client, Error, Response,
3    request::{Request, TryIntoRequest},
4    response::ResponseFuture,
5    routing::Route,
6};
7use std::future::IntoFuture;
8use twilight_model::{
9    application::monetization::Subscription,
10    id::{
11        Id,
12        marker::{SkuMarker, SubscriptionMarker},
13    },
14};
15
16/// Returns all subscriptions containing the SKU, filtered by user.
17#[must_use = "requests must be configured and executed"]
18pub struct GetSKUSubscription<'a> {
19    http: &'a Client,
20    sku_id: Id<SkuMarker>,
21    subscription_id: Id<SubscriptionMarker>,
22}
23
24impl<'a> GetSKUSubscription<'a> {
25    pub(crate) const fn new(
26        http: &'a Client,
27        sku_id: Id<SkuMarker>,
28        subscription_id: Id<SubscriptionMarker>,
29    ) -> Self {
30        Self {
31            http,
32            sku_id,
33            subscription_id,
34        }
35    }
36}
37
38impl IntoFuture for GetSKUSubscription<'_> {
39    type Output = Result<Response<Subscription>, Error>;
40
41    type IntoFuture = ResponseFuture<Subscription>;
42
43    fn into_future(self) -> Self::IntoFuture {
44        let http = self.http;
45
46        match self.try_into_request() {
47            Ok(request) => http.request(request),
48            Err(source) => ResponseFuture::error(source),
49        }
50    }
51}
52
53impl TryIntoRequest for GetSKUSubscription<'_> {
54    fn try_into_request(self) -> Result<Request, Error> {
55        Ok(Request::from_route(&Route::GetSKUSubscription {
56            subscription_id: self.subscription_id.get(),
57            sku_id: self.sku_id.get(),
58        }))
59    }
60}