dodopayments_rust 2.2.2

Rust SDK for Dodo Payments API
Documentation
use crate::{
    client::DodoPaymentsClient,
    models::{
        CreateCustomerPortalSessionResponse, CreateCustomerRequest, CreateLedgerEntryRequest,
        CreateLedgerEntryResponse, CustomerResponse, CustomerWalletResponse,
        GetCustomersListResponse, ListLedgerResponse, PatchCustomerRequest,
    },
    request_builder::RequestBuilder,
};
use reqwest::Method;

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

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

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

    pub fn create(&self) -> RequestBuilder<'client, CustomerResponse, (), CreateCustomerRequest> {
        RequestBuilder::new(self.client, Method::POST, "/customers")
    }

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

pub struct CustomerByIdApi<'client> {
    client: &'client DodoPaymentsClient,
    customer_id: String,
}

impl<'client> CustomerByIdApi<'client> {
    pub fn retrieve(&self) -> RequestBuilder<'client, CustomerResponse, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::GET,
            format!("/customers/{}", self.customer_id),
        )
    }

    pub fn list_customer_wallets(&self) -> RequestBuilder<'client, CustomerWalletResponse, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::GET,
            format!("/customers/{}/wallets", self.customer_id),
        )
    }

    pub fn retrieve_customer_wallet_ledger_entries(
        &self,
    ) -> RequestBuilder<'client, ListLedgerResponse, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::GET,
            format!("/customers/{}/wallets/ledger-entries", self.customer_id),
        )
    }

    pub fn create_customer_wallet_ledger_entry(
        &self,
    ) -> RequestBuilder<'client, CreateLedgerEntryResponse, (), CreateLedgerEntryRequest> {
        RequestBuilder::new(
            self.client,
            Method::POST,
            format!("/customers/{}/wallets/ledger-entries", self.customer_id),
        )
    }

    pub fn update(&self) -> RequestBuilder<'client, CustomerResponse, (), PatchCustomerRequest> {
        RequestBuilder::new(
            self.client,
            Method::PATCH,
            format!("/customers/{}", self.customer_id),
        )
    }

    pub fn create_customer_portal(
        &self,
    ) -> RequestBuilder<'client, CreateCustomerPortalSessionResponse, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::POST,
            format!("/customers/{}/customer-portal/session", self.customer_id),
        )
    }
}