dodopayments_rust 2.2.2

Rust SDK for Dodo Payments API
Documentation
use crate::{
    client::DodoPaymentsClient,
    models::{
        AddProductsToGroupRequest, CreateProductCollectionRequest,
        PatchProductCollectionGroupProductRequest, ProductCollectionGroup,
        ProductCollectionGroupResponse, ProductCollectionListItem,
        ProductCollectionProductResponse, ProductCollectionResponse, UndeleteCollectionResponse,
        UpdateCollectionImageResponse,
    },
    request_builder::{RawBytes, RequestBuilder},
};
use reqwest::Method;

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

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

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

    pub fn create(
        &self,
    ) -> RequestBuilder<'client, ProductCollectionResponse, (), CreateProductCollectionRequest>
    {
        RequestBuilder::new(self.client, Method::POST, "/product-collections")
    }

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

pub struct ProductCollectionsByIdApi<'client> {
    client: &'client DodoPaymentsClient,
    id: String,
}

impl<'client> ProductCollectionsByIdApi<'client> {
    pub fn retrieve(&self) -> RequestBuilder<'client, ProductCollectionResponse, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::GET,
            format!("/product-collections/{}", self.id),
        )
    }

    pub fn update(&self) -> RequestBuilder<'client, RawBytes, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::PATCH,
            format!("/product-collections/{}", self.id),
        )
    }

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

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

    pub fn update_images(&self) -> RequestBuilder<'client, UpdateCollectionImageResponse, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::PUT,
            format!("/product-collections/{}/images", self.id),
        )
    }

    pub fn create_group(
        &self,
    ) -> RequestBuilder<'client, ProductCollectionGroupResponse, (), ProductCollectionGroup> {
        RequestBuilder::new(
            self.client,
            Method::POST,
            format!("/product-collections/{}/groups", self.id),
        )
    }

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

pub struct ProductCollectionsGroupByIdApi<'client> {
    client: &'client DodoPaymentsClient,
    id: String,
    group_id: String,
}

impl<'client> ProductCollectionsGroupByIdApi<'client> {
    pub fn update(&self) -> RequestBuilder<'client, RawBytes, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::PATCH,
            format!("/product-collections/{}/groups/{}", self.id, self.group_id),
        )
    }

    pub fn delete(&self) -> RequestBuilder<'client, RawBytes, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::DELETE,
            format!("/product-collections/{}/groups/{}", self.id, self.group_id),
        )
    }

    pub fn add_products_to_group(
        &self,
    ) -> RequestBuilder<'client, Vec<ProductCollectionProductResponse>, (), AddProductsToGroupRequest>
    {
        RequestBuilder::new(
            self.client,
            Method::POST,
            format!(
                "/product-collections/{}/groups/{}/items",
                self.id, self.group_id
            ),
        )
    }

    pub fn item_id(
        &self,
        item_id: impl Into<String>,
    ) -> ProductCollectionsGroupItemByIdApi<'client> {
        ProductCollectionsGroupItemByIdApi {
            client: self.client,
            id: self.id.clone(),
            group_id: self.group_id.clone(),
            item_id: item_id.into(),
        }
    }
}

pub struct ProductCollectionsGroupItemByIdApi<'client> {
    client: &'client DodoPaymentsClient,
    id: String,
    group_id: String,
    item_id: String,
}

impl<'client> ProductCollectionsGroupItemByIdApi<'client> {
    pub fn update(
        &self,
    ) -> RequestBuilder<'client, (), (), PatchProductCollectionGroupProductRequest> {
        RequestBuilder::new(
            self.client,
            Method::PATCH,
            format!(
                "/product-collections/{}/groups/{}/items/{}",
                self.id, self.group_id, self.item_id
            ),
        )
    }

    pub fn delete(&self) -> RequestBuilder<'client, RawBytes, (), ()> {
        RequestBuilder::new(
            self.client,
            Method::DELETE,
            format!(
                "/product-collections/{}/groups/{}/items/{}",
                self.id, self.group_id, self.item_id
            ),
        )
    }
}