/*
* Selling Partner API for Retail Procurement Shipments
*
* The Selling Partner API for Retail Procurement Shipments provides programmatic access to retail shipping data for vendors.
*
* The version of the OpenAPI document: v1
*
* Generated by: https://openapi-generator.tech
*/
use reqwest;
use serde::{Deserialize, Serialize, de::Error as _};
use crate::{apis::ResponseContent, models};
use super::{Error, configuration, ContentType};
/// struct for typed errors of method [`get_shipment_details`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum GetShipmentDetailsError {
Status400(models::vendor_shipments::GetShipmentDetailsResponse),
Status401(models::vendor_shipments::GetShipmentDetailsResponse),
Status403(models::vendor_shipments::GetShipmentDetailsResponse),
Status404(models::vendor_shipments::GetShipmentDetailsResponse),
Status415(models::vendor_shipments::GetShipmentDetailsResponse),
Status429(models::vendor_shipments::GetShipmentDetailsResponse),
Status500(models::vendor_shipments::GetShipmentDetailsResponse),
Status503(models::vendor_shipments::GetShipmentDetailsResponse),
UnknownValue(serde_json::Value),
}
/// struct for typed errors of method [`get_shipment_labels`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum GetShipmentLabelsError {
Status400(models::vendor_shipments::GetShipmentLabels),
Status401(models::vendor_shipments::GetShipmentLabels),
Status403(models::vendor_shipments::GetShipmentLabels),
Status404(models::vendor_shipments::GetShipmentLabels),
Status415(models::vendor_shipments::GetShipmentLabels),
Status429(models::vendor_shipments::GetShipmentLabels),
Status500(models::vendor_shipments::GetShipmentLabels),
Status503(models::vendor_shipments::GetShipmentLabels),
UnknownValue(serde_json::Value),
}
/// struct for typed errors of method [`submit_shipment_confirmations`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SubmitShipmentConfirmationsError {
Status400(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status403(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status404(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status413(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status415(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status429(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status500(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status503(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
UnknownValue(serde_json::Value),
}
/// struct for typed errors of method [`submit_shipments`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SubmitShipmentsError {
Status400(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status403(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status404(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status413(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status415(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status429(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status500(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
Status503(models::vendor_shipments::SubmitShipmentConfirmationsResponse),
UnknownValue(serde_json::Value),
}
/// Returns the Details about Shipment, Carrier Details, status of the shipment, container details and other details related to shipment based on the filter parameters value that you specify. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 10 | 10 | The `x-amzn-RateLimit-Limit` response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, see [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
pub async fn get_shipment_details(configuration: &configuration::Configuration, limit: Option<i64>, sort_order: Option<&str>, next_token: Option<&str>, created_after: Option<String>, created_before: Option<String>, shipment_confirmed_before: Option<String>, shipment_confirmed_after: Option<String>, package_label_created_before: Option<String>, package_label_created_after: Option<String>, shipped_before: Option<String>, shipped_after: Option<String>, estimated_delivery_before: Option<String>, estimated_delivery_after: Option<String>, shipment_delivery_before: Option<String>, shipment_delivery_after: Option<String>, requested_pick_up_before: Option<String>, requested_pick_up_after: Option<String>, scheduled_pick_up_before: Option<String>, scheduled_pick_up_after: Option<String>, current_shipment_status: Option<&str>, vendor_shipment_identifier: Option<&str>, buyer_reference_number: Option<&str>, buyer_warehouse_code: Option<&str>, seller_warehouse_code: Option<&str>) -> Result<models::vendor_shipments::GetShipmentDetailsResponse, Error<GetShipmentDetailsError>> {
// add a prefix to parameters to efficiently prevent name collisions
let p_limit = limit;
let p_sort_order = sort_order;
let p_next_token = next_token;
let p_created_after = created_after;
let p_created_before = created_before;
let p_shipment_confirmed_before = shipment_confirmed_before;
let p_shipment_confirmed_after = shipment_confirmed_after;
let p_package_label_created_before = package_label_created_before;
let p_package_label_created_after = package_label_created_after;
let p_shipped_before = shipped_before;
let p_shipped_after = shipped_after;
let p_estimated_delivery_before = estimated_delivery_before;
let p_estimated_delivery_after = estimated_delivery_after;
let p_shipment_delivery_before = shipment_delivery_before;
let p_shipment_delivery_after = shipment_delivery_after;
let p_requested_pick_up_before = requested_pick_up_before;
let p_requested_pick_up_after = requested_pick_up_after;
let p_scheduled_pick_up_before = scheduled_pick_up_before;
let p_scheduled_pick_up_after = scheduled_pick_up_after;
let p_current_shipment_status = current_shipment_status;
let p_vendor_shipment_identifier = vendor_shipment_identifier;
let p_buyer_reference_number = buyer_reference_number;
let p_buyer_warehouse_code = buyer_warehouse_code;
let p_seller_warehouse_code = seller_warehouse_code;
let uri_str = format!("{}/vendor/shipping/v1/shipments", configuration.base_path);
let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
if let Some(ref param_value) = p_limit {
req_builder = req_builder.query(&[("limit", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_sort_order {
req_builder = req_builder.query(&[("sortOrder", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_next_token {
req_builder = req_builder.query(&[("nextToken", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_created_after {
req_builder = req_builder.query(&[("createdAfter", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_created_before {
req_builder = req_builder.query(&[("createdBefore", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_shipment_confirmed_before {
req_builder = req_builder.query(&[("shipmentConfirmedBefore", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_shipment_confirmed_after {
req_builder = req_builder.query(&[("shipmentConfirmedAfter", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_package_label_created_before {
req_builder = req_builder.query(&[("packageLabelCreatedBefore", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_package_label_created_after {
req_builder = req_builder.query(&[("packageLabelCreatedAfter", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_shipped_before {
req_builder = req_builder.query(&[("shippedBefore", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_shipped_after {
req_builder = req_builder.query(&[("shippedAfter", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_estimated_delivery_before {
req_builder = req_builder.query(&[("estimatedDeliveryBefore", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_estimated_delivery_after {
req_builder = req_builder.query(&[("estimatedDeliveryAfter", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_shipment_delivery_before {
req_builder = req_builder.query(&[("shipmentDeliveryBefore", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_shipment_delivery_after {
req_builder = req_builder.query(&[("shipmentDeliveryAfter", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_requested_pick_up_before {
req_builder = req_builder.query(&[("requestedPickUpBefore", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_requested_pick_up_after {
req_builder = req_builder.query(&[("requestedPickUpAfter", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_scheduled_pick_up_before {
req_builder = req_builder.query(&[("scheduledPickUpBefore", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_scheduled_pick_up_after {
req_builder = req_builder.query(&[("scheduledPickUpAfter", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_current_shipment_status {
req_builder = req_builder.query(&[("currentShipmentStatus", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_vendor_shipment_identifier {
req_builder = req_builder.query(&[("vendorShipmentIdentifier", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_buyer_reference_number {
req_builder = req_builder.query(&[("buyerReferenceNumber", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_buyer_warehouse_code {
req_builder = req_builder.query(&[("buyerWarehouseCode", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_seller_warehouse_code {
req_builder = req_builder.query(&[("sellerWarehouseCode", ¶m_value.to_string())]);
}
if let Some(ref user_agent) = configuration.user_agent {
req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
}
let req = req_builder.build()?;
let resp = configuration.client.execute(req).await?;
let status = resp.status();
let content_type = resp
.headers()
.get("content-type")
.and_then(|v| v.to_str().ok())
.unwrap_or("application/octet-stream");
let content_type = super::ContentType::from(content_type);
if !status.is_client_error() && !status.is_server_error() {
let content = resp.text().await?;
match content_type {
ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::vendor_shipments::GetShipmentDetailsResponse`"))),
ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::vendor_shipments::GetShipmentDetailsResponse`")))),
}
} else {
let content = resp.text().await?;
let entity: Option<GetShipmentDetailsError> = serde_json::from_str(&content).ok();
Err(Error::ResponseError(ResponseContent { status, content, entity }))
}
}
/// Returns small parcel shipment labels based on the filters that you specify. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 10 | 10 | The `x-amzn-RateLimit-Limit` response header contains the usage plan rate limits for the operation, when available. The preceding table contains the default rate and burst values for this operation. Selling partners whose business demands require higher throughput might have higher rate and burst values than those shown here. For more information, refer to [Usage Plans and Rate Limits](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
pub async fn get_shipment_labels(configuration: &configuration::Configuration, limit: Option<i64>, sort_order: Option<&str>, next_token: Option<&str>, label_created_after: Option<String>, label_created_before: Option<String>, buyer_reference_number: Option<&str>, vendor_shipment_identifier: Option<&str>, seller_warehouse_code: Option<&str>) -> Result<models::vendor_shipments::GetShipmentLabels, Error<GetShipmentLabelsError>> {
// add a prefix to parameters to efficiently prevent name collisions
let p_limit = limit;
let p_sort_order = sort_order;
let p_next_token = next_token;
let p_label_created_after = label_created_after;
let p_label_created_before = label_created_before;
let p_buyer_reference_number = buyer_reference_number;
let p_vendor_shipment_identifier = vendor_shipment_identifier;
let p_seller_warehouse_code = seller_warehouse_code;
let uri_str = format!("{}/vendor/shipping/v1/transportLabels", configuration.base_path);
let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
if let Some(ref param_value) = p_limit {
req_builder = req_builder.query(&[("limit", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_sort_order {
req_builder = req_builder.query(&[("sortOrder", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_next_token {
req_builder = req_builder.query(&[("nextToken", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_label_created_after {
req_builder = req_builder.query(&[("labelCreatedAfter", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_label_created_before {
req_builder = req_builder.query(&[("labelCreatedBefore", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_buyer_reference_number {
req_builder = req_builder.query(&[("buyerReferenceNumber", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_vendor_shipment_identifier {
req_builder = req_builder.query(&[("vendorShipmentIdentifier", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_seller_warehouse_code {
req_builder = req_builder.query(&[("sellerWarehouseCode", ¶m_value.to_string())]);
}
if let Some(ref user_agent) = configuration.user_agent {
req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
}
let req = req_builder.build()?;
let resp = configuration.client.execute(req).await?;
let status = resp.status();
let content_type = resp
.headers()
.get("content-type")
.and_then(|v| v.to_str().ok())
.unwrap_or("application/octet-stream");
let content_type = super::ContentType::from(content_type);
if !status.is_client_error() && !status.is_server_error() {
let content = resp.text().await?;
match content_type {
ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::vendor_shipments::GetShipmentLabels`"))),
ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::vendor_shipments::GetShipmentLabels`")))),
}
} else {
let content = resp.text().await?;
let entity: Option<GetShipmentLabelsError> = serde_json::from_str(&content).ok();
Err(Error::ResponseError(ResponseContent { status, content, entity }))
}
}
/// Submits one or more shipment confirmations for vendor orders. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 10 | 10 | The `x-amzn-RateLimit-Limit` response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, see [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
pub async fn submit_shipment_confirmations(configuration: &configuration::Configuration, body: models::vendor_shipments::SubmitShipmentConfirmationsRequest) -> Result<models::vendor_shipments::SubmitShipmentConfirmationsResponse, Error<SubmitShipmentConfirmationsError>> {
// add a prefix to parameters to efficiently prevent name collisions
let p_body = body;
let uri_str = format!("{}/vendor/shipping/v1/shipmentConfirmations", configuration.base_path);
let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
if let Some(ref user_agent) = configuration.user_agent {
req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
}
req_builder = req_builder.json(&p_body);
let req = req_builder.build()?;
let resp = configuration.client.execute(req).await?;
let status = resp.status();
let content_type = resp
.headers()
.get("content-type")
.and_then(|v| v.to_str().ok())
.unwrap_or("application/octet-stream");
let content_type = super::ContentType::from(content_type);
if !status.is_client_error() && !status.is_server_error() {
let content = resp.text().await?;
match content_type {
ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::vendor_shipments::SubmitShipmentConfirmationsResponse`"))),
ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::vendor_shipments::SubmitShipmentConfirmationsResponse`")))),
}
} else {
let content = resp.text().await?;
let entity: Option<SubmitShipmentConfirmationsError> = serde_json::from_str(&content).ok();
Err(Error::ResponseError(ResponseContent { status, content, entity }))
}
}
/// Submits one or more shipment request for vendor Orders. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 10 | 10 | The `x-amzn-RateLimit-Limit` response header returns the usage plan rate limits that were applied to the requested operation, when available. The table above indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may see higher rate and burst values than those shown here. For more information, see [Usage Plans and Rate Limits in the Selling Partner API](https://developer-docs.amazon.com/sp-api/docs/usage-plans-and-rate-limits-in-the-sp-api).
pub async fn submit_shipments(configuration: &configuration::Configuration, body: models::vendor_shipments::SubmitShipments) -> Result<models::vendor_shipments::SubmitShipmentConfirmationsResponse, Error<SubmitShipmentsError>> {
// add a prefix to parameters to efficiently prevent name collisions
let p_body = body;
let uri_str = format!("{}/vendor/shipping/v1/shipments", configuration.base_path);
let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
if let Some(ref user_agent) = configuration.user_agent {
req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
}
req_builder = req_builder.json(&p_body);
let req = req_builder.build()?;
let resp = configuration.client.execute(req).await?;
let status = resp.status();
let content_type = resp
.headers()
.get("content-type")
.and_then(|v| v.to_str().ok())
.unwrap_or("application/octet-stream");
let content_type = super::ContentType::from(content_type);
if !status.is_client_error() && !status.is_server_error() {
let content = resp.text().await?;
match content_type {
ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::vendor_shipments::SubmitShipmentConfirmationsResponse`"))),
ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::vendor_shipments::SubmitShipmentConfirmationsResponse`")))),
}
} else {
let content = resp.text().await?;
let entity: Option<SubmitShipmentsError> = serde_json::from_str(&content).ok();
Err(Error::ResponseError(ResponseContent { status, content, entity }))
}
}