dodopayments_rust 2.2.2

Rust SDK for Dodo Payments API
Documentation
use crate::{
    client::DodoPaymentsClient,
    models::{
        subscription_credit_usage_response::SubscriptionCreditUsageResponse,
        ChangePlanPreviewResponse, CreateSubscriptionChargeRequest,
        CreateSubscriptionChargeResponse, CreateSubscriptionRequest, CreateSubscriptionResponse,
        GetSubscriptionsListResponse, ListUsageHistoryQueryParams, ListUsageHistoryResponse,
        PatchSubscriptionRequest, SubscriptionResponse, UpdatePaymentMethodReq,
        UpdatePaymentMethodResponse, UpdateSubscriptionPlanReq,
    },
    request_builder::RequestBuilder,
};
use reqwest::Method;

pub struct SubscriptionsApi<'client> {
    pub(crate) client: &'client DodoPaymentsClient,
}

impl<'client> SubscriptionsApi<'client> {
    pub fn new(client: &'client DodoPaymentsClient) -> Self {
        Self { client }
    }

    pub fn list(&self) -> RequestBuilder<'client, GetSubscriptionsListResponse, (), ()> {
        RequestBuilder::new(self.client, Method::GET, "/subscriptions")
    }

    #[deprecated(note = "This API will be deprecated soon. We recommend using Checkout Sessions.")]
    pub fn create(
        &self,
    ) -> RequestBuilder<'client, CreateSubscriptionResponse, (), CreateSubscriptionRequest> {
        RequestBuilder::new(self.client, Method::POST, "/subscriptions")
    }

    pub fn id(&self, subscription_id: impl Into<String>) -> SubscriptionByIdApi<'client> {
        SubscriptionByIdApi {
            client: self.client,
            subscription_id: subscription_id.into(),
        }
    }
}

pub struct SubscriptionByIdApi<'client> {
    client: &'client DodoPaymentsClient,
    subscription_id: String,
}

impl<'client> SubscriptionByIdApi<'client> {
    pub fn retrieve(&self) -> RequestBuilder<'client, SubscriptionResponse, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::GET,
            format!("/subscriptions/{}", self.subscription_id),
        )
    }

    pub fn update(
        &self,
    ) -> RequestBuilder<'client, SubscriptionResponse, (), PatchSubscriptionRequest> {
        RequestBuilder::new(
            self.client,
            Method::PATCH,
            format!("/subscriptions/{}", self.subscription_id),
        )
    }

    pub fn update_payment_method(
        &self,
    ) -> RequestBuilder<'client, UpdatePaymentMethodResponse, UpdatePaymentMethodReq> {
        RequestBuilder::new(
            self.client,
            Method::POST,
            format!(
                "/subscriptions/{}/update-payment-method",
                self.subscription_id
            ),
        )
    }

    pub fn charge(
        &self,
    ) -> RequestBuilder<
        'client,
        CreateSubscriptionChargeResponse,
        (),
        CreateSubscriptionChargeRequest,
    > {
        RequestBuilder::new(
            self.client,
            Method::POST,
            format!("/subscriptions/{}/charge", self.subscription_id),
        )
    }

    pub fn change_plan(
        &self,
    ) -> RequestBuilder<'client, SubscriptionResponse, (), UpdateSubscriptionPlanReq> {
        RequestBuilder::new(
            self.client,
            Method::POST,
            format!("/subscriptions/{}/change-plan", self.subscription_id),
        )
    }

    pub fn preview_plan_change(
        &self,
    ) -> RequestBuilder<'client, ChangePlanPreviewResponse, (), UpdateSubscriptionPlanReq> {
        RequestBuilder::new(
            self.client,
            Method::POST,
            format!(
                "/subscriptions/{}/change-plan/preview",
                self.subscription_id,
            ),
        )
    }

    pub fn usage_history(
        &self,
    ) -> RequestBuilder<'client, ListUsageHistoryResponse, ListUsageHistoryQueryParams, ()> {
        RequestBuilder::new(
            self.client,
            Method::GET,
            format!("/subscriptions/{}/usage-history", self.subscription_id),
        )
    }

    pub fn cancel_schedule_plan_change(&self) -> RequestBuilder<'client, (), (), ()> {
        RequestBuilder::new(
            self.client,
            Method::DELETE,
            format!(
                "/subscriptions/{}/change-plan/scheduled",
                self.subscription_id
            ),
        )
    }

    pub fn retrieve_credit_usage(
        &self,
    ) -> RequestBuilder<'client, SubscriptionCreditUsageResponse, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::GET,
            format!("/subscriptions/{}/credit-usage", self.subscription_id),
        )
    }
}