Skip to main content

shopify_client/admin/subscription/
mod.rs

1pub mod remote;
2
3use crate::common::ServiceContext;
4
5use std::sync::Arc;
6
7use crate::{
8    common::types::{APIError, RequestCallbacks},
9    types::subscription::{
10        ActiveSubscriptionsResp, CancelSubscriptionResp, CreateCombinedSubscriptionRequest,
11        CreateRecurringSubscriptionRequest, CreateSubscriptionResp, CreateUsageRecordRequest,
12        CreateUsageRecordResp, CreateUsageSubscriptionRequest, ExtendTrialResp, MoneyInput,
13        UpdateCappedAmountResp,
14    },
15};
16
17pub struct Subscription {
18    pub(crate) ctx: ServiceContext,
19}
20
21impl Subscription {
22    pub fn new(
23        shop_url: Arc<String>,
24        version: Arc<String>,
25        access_token: Arc<String>,
26        callbacks: Arc<RequestCallbacks>,
27    ) -> Self {
28        Self::with_ctx(ServiceContext::new(
29            shop_url,
30            version,
31            access_token,
32            callbacks,
33        ))
34    }
35
36    /// Build the service from a shared `ServiceContext`. Cheaper than `new` at
37    /// construction sites that already hold a context (one `Arc` clone per service).
38    pub fn with_ctx(ctx: ServiceContext) -> Self {
39        Self { ctx }
40    }
41
42    pub async fn create_recurring(
43        &self,
44        request: &CreateRecurringSubscriptionRequest,
45    ) -> Result<CreateSubscriptionResp, APIError> {
46        remote::create_recurring_subscription(&self.ctx, request).await
47    }
48
49    pub async fn create_usage(
50        &self,
51        request: &CreateUsageSubscriptionRequest,
52    ) -> Result<CreateSubscriptionResp, APIError> {
53        remote::create_usage_subscription(&self.ctx, request).await
54    }
55
56    pub async fn create_combined(
57        &self,
58        request: &CreateCombinedSubscriptionRequest,
59    ) -> Result<CreateSubscriptionResp, APIError> {
60        remote::create_combined_subscription(&self.ctx, request).await
61    }
62
63    pub async fn cancel(
64        &self,
65        subscription_id: &String,
66        prorate: bool,
67    ) -> Result<CancelSubscriptionResp, APIError> {
68        remote::cancel_subscription(&self.ctx, subscription_id, prorate).await
69    }
70
71    pub async fn extend_trial(
72        &self,
73        subscription_id: &String,
74        days: i32,
75    ) -> Result<ExtendTrialResp, APIError> {
76        remote::extend_trial(&self.ctx, subscription_id, days).await
77    }
78
79    pub async fn update_capped_amount(
80        &self,
81        line_item_id: &String,
82        capped_amount: &MoneyInput,
83    ) -> Result<UpdateCappedAmountResp, APIError> {
84        remote::update_capped_amount(&self.ctx, line_item_id, capped_amount).await
85    }
86
87    pub async fn create_usage_record(
88        &self,
89        request: &CreateUsageRecordRequest,
90    ) -> Result<CreateUsageRecordResp, APIError> {
91        remote::create_usage_record(&self.ctx, request).await
92    }
93
94    pub async fn get_active_subscriptions(&self) -> Result<ActiveSubscriptionsResp, APIError> {
95        remote::get_active_subscriptions(&self.ctx).await
96    }
97}