dodopayments_rust 2.2.2

Rust SDK for Dodo Payments API
Documentation
use crate::{
    client::DodoPaymentsClient,
    models::{
        CreateProductRequest, CreateShortLinkRequest, GetProductResponse, GetProductsListResponse,
        ListShortLinksResponse, PatchProductRequest, ShortLinkResponse, UpdateProductImageResponse,
        UploadProductFile, UploadProductFileResponse,
    },
    request_builder::RequestBuilder,
};
use reqwest::Method;

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

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

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

    pub fn create(&self) -> RequestBuilder<'client, GetProductResponse, (), CreateProductRequest> {
        RequestBuilder::new(self.client, Method::POST, "/products")
    }

    pub fn list_short_links(&self) -> RequestBuilder<'client, ListShortLinksResponse, (), ()> {
        RequestBuilder::new(self.client, Method::GET, "/products/short_links")
    }

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

pub struct ProductByIdApi<'client> {
    client: &'client DodoPaymentsClient,
    product_id: String,
}

impl<'client> ProductByIdApi<'client> {
    pub fn retrieve(&self) -> RequestBuilder<'client, GetProductResponse, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::GET,
            format!("/products/{}", self.product_id),
        )
    }

    pub fn update(&self) -> RequestBuilder<'client, GetProductResponse, (), PatchProductRequest> {
        RequestBuilder::new(
            self.client,
            Method::PATCH,
            format!("/products/{}", self.product_id),
        )
    }

    pub fn update_image(&self) -> RequestBuilder<'client, UpdateProductImageResponse, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::PUT,
            format!("/products/{}/images", self.product_id),
        )
    }

    pub fn archive(&self) -> RequestBuilder<'client, (), (), ()> {
        RequestBuilder::new(
            self.client,
            Method::DELETE,
            format!("/products/{}", self.product_id),
        )
    }

    pub fn unarchive(&self) -> RequestBuilder<'client, (), (), ()> {
        RequestBuilder::new(
            self.client,
            Method::POST,
            format!("/products/{}/unarchive", self.product_id),
        )
    }

    pub fn update_files(
        &self,
    ) -> RequestBuilder<'client, UploadProductFileResponse, (), UploadProductFile> {
        RequestBuilder::new(
            self.client,
            Method::PUT,
            format!("/products/{}/files", self.product_id),
        )
    }

    pub fn create_short_link(
        &self,
    ) -> RequestBuilder<'client, ShortLinkResponse, (), CreateShortLinkRequest> {
        RequestBuilder::new(
            self.client,
            Method::POST,
            format!("/products/{}/short_links", self.product_id),
        )
    }
}