sellapp-sdk 0.1.1

Official Rust SDK for the SellApp API: manage products, orders, subscriptions, and customers.
// This file is auto-generated by oagen. Do not edit.

use crate::client::Client;
#[allow(unused_imports)]
use crate::enums::*;
use crate::error::Error;
#[allow(unused_imports)]
use crate::models::*;
#[allow(unused_imports)]
use serde::Serialize;

pub struct OrdersLineItemsApi<'a> {
    pub(crate) client: &'a Client,
}

#[derive(Debug, Clone, Serialize)]
pub struct ListParams {
    /// Maximum number of line items per page.
    ///
    /// Defaults to `15`.
    #[serde(skip_serializing_if = "Option::is_none")]
    pub limit: Option<i64>,
    /// One-based result page.
    ///
    /// Defaults to `1`.
    #[serde(skip_serializing_if = "Option::is_none")]
    pub page: Option<i64>,
    /// Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(rename = "X-STORE")]
    pub x_store: Option<String>,
}

impl Default for ListParams {
    #[allow(deprecated)]
    fn default() -> Self {
        Self {
            limit: Some(15),
            page: Some(1),
            x_store: Default::default(),
        }
    }
}

#[derive(Debug, Clone, Serialize)]
pub struct SearchParams {
    /// Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(rename = "X-STORE")]
    pub x_store: Option<String>,
    /// Request body sent with this call.
    ///
    /// Required.
    #[serde(skip)]
    pub body: SdkSearchOrderSLineItemsRequestApplicationJson,
}

impl SearchParams {
    /// Construct a new `SearchParams` with the required fields set.
    #[allow(deprecated)]
    pub fn new(body: SdkSearchOrderSLineItemsRequestApplicationJson) -> Self {
        Self {
            x_store: Default::default(),
            body,
        }
    }
}

#[derive(Debug, Clone, Default, Serialize)]
pub struct GetParams {
    /// Store slug. Required for OAuth access tokens. API keys may omit it to use their current store, or the first accessible store when no current store is selected.
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(rename = "X-STORE")]
    pub x_store: Option<String>,
}

impl<'a> OrdersLineItemsApi<'a> {
    /// List an order's line items
    ///
    /// List purchase line items for the selected store. Requires the `invoice` API-key ability or the corresponding OAuth scope and current store permission. The order path parameter scopes the result and must match the line item's parent order. OAuth callers use the admin grant and select a store with X-STORE. Current membership and role permissions apply to every request.
    pub async fn list(
        &self,
        order: &str,
        params: ListParams,
    ) -> Result<SdkListOrderSLineItemsResponseValue200ApplicationJson, Error> {
        self.list_with_options(order, params, None).await
    }

    /// Variant of [`Self::list`] that accepts per-request [`crate::RequestOptions`].
    pub async fn list_with_options(
        &self,
        order: &str,
        params: ListParams,
        options: Option<&crate::RequestOptions>,
    ) -> Result<SdkListOrderSLineItemsResponseValue200ApplicationJson, Error> {
        self.list_raw(order, params, options)
            .await
            .map(|response| response.data)
    }

    /// Returns the typed result together with status, headers, and request ID.
    pub async fn list_raw(
        &self,
        order: &str,
        params: ListParams,
        options: Option<&crate::RequestOptions>,
    ) -> Result<crate::RawResponse<SdkListOrderSLineItemsResponseValue200ApplicationJson>, Error>
    {
        let order = crate::client::path_segment(order);
        let path = format!("/v2/orders/{order}/line-items");
        let method = http::Method::GET;
        let mut merged = options.cloned().unwrap_or_default();
        merged.idempotency_supported = false;
        merged.operation_id = Some("listOrderSLineItems".to_string());
        let options = Some(&merged);
        self.client
            .request_with_query_schema_opts_raw(
                method,
                &path,
                &params,
                options,
                "GET /v2/orders/{order}/line-items",
            )
            .await
    }

    /// Search an order's line items
    ///
    /// Search product-level sale records with filters and sorting. Requires the `invoice` token ability. The order path parameter scopes the result and must match the line item's parent order. OAuth callers use the admin grant and select a store with X-STORE. Current membership and role permissions apply to every request.
    pub async fn search(
        &self,
        order: &str,
        params: SearchParams,
    ) -> Result<SdkSearchOrderSLineItemsResponseValue200ApplicationJson, Error> {
        self.search_with_options(order, params, None).await
    }

    /// Variant of [`Self::search`] that accepts per-request [`crate::RequestOptions`].
    pub async fn search_with_options(
        &self,
        order: &str,
        params: SearchParams,
        options: Option<&crate::RequestOptions>,
    ) -> Result<SdkSearchOrderSLineItemsResponseValue200ApplicationJson, Error> {
        self.search_raw(order, params, options)
            .await
            .map(|response| response.data)
    }

    /// Returns the typed result together with status, headers, and request ID.
    pub async fn search_raw(
        &self,
        order: &str,
        params: SearchParams,
        options: Option<&crate::RequestOptions>,
    ) -> Result<crate::RawResponse<SdkSearchOrderSLineItemsResponseValue200ApplicationJson>, Error>
    {
        let order = crate::client::path_segment(order);
        let path = format!("/v2/orders/{order}/line-items/search");
        let method = http::Method::POST;
        let mut merged = options.cloned().unwrap_or_default();
        merged.idempotency_supported = false;
        merged.operation_id = Some("searchOrderSLineItems".to_string());
        let options = Some(&merged);
        self.client
            .request_with_body_schema_opts_raw(
                method,
                &path,
                &params,
                Some(&params.body),
                options,
                "POST /v2/orders/{order}/line-items/search",
            )
            .await
    }

    /// Retrieve an order's line item
    ///
    /// Retrieve one product-level sale record for the selected store. Requires the `invoice` token ability. Records from another store or whose order does not match the store return `404`. The order path parameter scopes the result and must match the line item's parent order. OAuth callers use the admin grant and select a store with X-STORE. Current membership and role permissions apply to every request.
    pub async fn get(
        &self,
        order: &str,
        line_item: &str,
        params: GetParams,
    ) -> Result<SdkGetOrderSLineItemResponseValue200ApplicationJson, Error> {
        self.get_with_options(order, line_item, params, None).await
    }

    /// Variant of [`Self::get`] that accepts per-request [`crate::RequestOptions`].
    pub async fn get_with_options(
        &self,
        order: &str,
        line_item: &str,
        params: GetParams,
        options: Option<&crate::RequestOptions>,
    ) -> Result<SdkGetOrderSLineItemResponseValue200ApplicationJson, Error> {
        self.get_raw(order, line_item, params, options)
            .await
            .map(|response| response.data)
    }

    /// Returns the typed result together with status, headers, and request ID.
    pub async fn get_raw(
        &self,
        order: &str,
        line_item: &str,
        params: GetParams,
        options: Option<&crate::RequestOptions>,
    ) -> Result<crate::RawResponse<SdkGetOrderSLineItemResponseValue200ApplicationJson>, Error>
    {
        let order = crate::client::path_segment(order);
        let line_item = crate::client::path_segment(line_item);
        let path = format!("/v2/orders/{order}/line-items/{line_item}");
        let method = http::Method::GET;
        let mut merged = options.cloned().unwrap_or_default();
        merged.idempotency_supported = false;
        merged.operation_id = Some("getOrderSLineItem".to_string());
        let options = Some(&merged);
        self.client
            .request_with_query_schema_opts_raw(
                method,
                &path,
                &params,
                options,
                "GET /v2/orders/{order}/line-items/{lineItem}",
            )
            .await
    }
}