/*
* Selling Partner API for Feeds
*
* The Selling Partner API for Feeds lets you upload data to Amazon on behalf of a selling partner.
*
* The version of the OpenAPI document: 2021-06-30
*
* Generated by: https://openapi-generator.tech
*/
use super::{configuration, ContentType, Error};
use crate::{apis::ResponseContent, models};
use reqwest;
use serde::{de::Error as _, Deserialize, Serialize};
/// struct for typed errors of method [`cancel_feed`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum CancelFeedError {
Status400(models::feeds_2021_06_30::ErrorList),
Status401(models::feeds_2021_06_30::ErrorList),
Status403(models::feeds_2021_06_30::ErrorList),
Status404(models::feeds_2021_06_30::ErrorList),
Status415(models::feeds_2021_06_30::ErrorList),
Status429(models::feeds_2021_06_30::ErrorList),
Status500(models::feeds_2021_06_30::ErrorList),
Status503(models::feeds_2021_06_30::ErrorList),
UnknownValue(serde_json::Value),
}
/// struct for typed errors of method [`create_feed`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum CreateFeedError {
Status400(models::feeds_2021_06_30::ErrorList),
Status401(models::feeds_2021_06_30::ErrorList),
Status403(models::feeds_2021_06_30::ErrorList),
Status404(models::feeds_2021_06_30::ErrorList),
Status415(models::feeds_2021_06_30::ErrorList),
Status429(models::feeds_2021_06_30::ErrorList),
Status500(models::feeds_2021_06_30::ErrorList),
Status503(models::feeds_2021_06_30::ErrorList),
UnknownValue(serde_json::Value),
}
/// struct for typed errors of method [`create_feed_document`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum CreateFeedDocumentError {
Status400(models::feeds_2021_06_30::ErrorList),
Status403(models::feeds_2021_06_30::ErrorList),
Status404(models::feeds_2021_06_30::ErrorList),
Status413(models::feeds_2021_06_30::ErrorList),
Status415(models::feeds_2021_06_30::ErrorList),
Status429(models::feeds_2021_06_30::ErrorList),
Status500(models::feeds_2021_06_30::ErrorList),
Status503(models::feeds_2021_06_30::ErrorList),
UnknownValue(serde_json::Value),
}
/// struct for typed errors of method [`get_feed`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum GetFeedError {
Status400(models::feeds_2021_06_30::ErrorList),
Status401(models::feeds_2021_06_30::ErrorList),
Status403(models::feeds_2021_06_30::ErrorList),
Status404(models::feeds_2021_06_30::ErrorList),
Status415(models::feeds_2021_06_30::ErrorList),
Status429(models::feeds_2021_06_30::ErrorList),
Status500(models::feeds_2021_06_30::ErrorList),
Status503(models::feeds_2021_06_30::ErrorList),
UnknownValue(serde_json::Value),
}
/// struct for typed errors of method [`get_feed_document`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum GetFeedDocumentError {
Status400(models::feeds_2021_06_30::ErrorList),
Status401(models::feeds_2021_06_30::ErrorList),
Status403(models::feeds_2021_06_30::ErrorList),
Status404(models::feeds_2021_06_30::ErrorList),
Status415(models::feeds_2021_06_30::ErrorList),
Status429(models::feeds_2021_06_30::ErrorList),
Status500(models::feeds_2021_06_30::ErrorList),
Status503(models::feeds_2021_06_30::ErrorList),
UnknownValue(serde_json::Value),
}
/// struct for typed errors of method [`get_feeds`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum GetFeedsError {
Status400(models::feeds_2021_06_30::ErrorList),
Status401(models::feeds_2021_06_30::ErrorList),
Status403(models::feeds_2021_06_30::ErrorList),
Status404(models::feeds_2021_06_30::ErrorList),
Status415(models::feeds_2021_06_30::ErrorList),
Status429(models::feeds_2021_06_30::ErrorList),
Status500(models::feeds_2021_06_30::ErrorList),
Status503(models::feeds_2021_06_30::ErrorList),
UnknownValue(serde_json::Value),
}
/// Cancels the feed that you specify. Only feeds with `processingStatus=IN_QUEUE` can be cancelled. Cancelled feeds are returned in subsequent calls to the [`getFeed`](https://developer-docs.amazon.com/sp-api/reference/getfeed) and [`getFeeds`](https://developer-docs.amazon.com/sp-api/reference/getfeeds) operations. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 15 | The `x-amzn-RateLimit-Limit` response header returns the usage plan rate limits that were applied to the requested operation, when available. The preceding table indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may have higher rate and burst values than those shown here. For more information, refer to [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 cancel_feed(
configuration: &configuration::Configuration,
feed_id: &str,
) -> Result<(), Error<CancelFeedError>> {
// add a prefix to parameters to efficiently prevent name collisions
let p_feed_id = feed_id;
let uri_str = format!(
"{}/feeds/2021-06-30/feeds/{feedId}",
configuration.base_path,
feedId = crate::apis::urlencode(p_feed_id)
);
let mut req_builder = configuration
.client
.request(reqwest::Method::DELETE, &uri_str);
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();
if !status.is_client_error() && !status.is_server_error() {
Ok(())
} else {
let content = resp.text().await?;
let entity: Option<CancelFeedError> = serde_json::from_str(&content).ok();
Err(Error::ResponseError(ResponseContent {
status,
content,
entity,
}))
}
}
/// Creates a feed. Upload the contents of the feed document before calling this operation. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 0.0083 | 15 | The `x-amzn-RateLimit-Limit` response header returns the usage plan rate limits that were applied to the requested operation, when available. The preceding table indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may have higher rate and burst values than those shown here. For more information, refer to [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). The rate limit for the [`JSON_LISTINGS_FEED`](https://developer-docs.amazon.com/sp-api/docs/listings-feed-type-values#listings-feed) feed type differs from the rate limit for the [`createFeed`](https://developer-docs.amazon.com/sp-api/reference/createfeed) operation. For more information, refer to the [Building Listings Management Workflows Guide](https://developer-docs.amazon.com/sp-api/docs/building-listings-management-workflows-guide#should-i-submit-in-bulk-using-the-json_listings_feed-or-individually-with-the-listings-items-api).
pub async fn create_feed(
configuration: &configuration::Configuration,
body: models::feeds_2021_06_30::CreateFeedSpecification,
) -> Result<models::feeds_2021_06_30::CreateFeedResponse, Error<CreateFeedError>> {
// add a prefix to parameters to efficiently prevent name collisions
let p_body = body;
let uri_str = format!("{}/feeds/2021-06-30/feeds", 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::feeds_2021_06_30::CreateFeedResponse`"))),
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::feeds_2021_06_30::CreateFeedResponse`")))),
}
} else {
let content = resp.text().await?;
let entity: Option<CreateFeedError> = serde_json::from_str(&content).ok();
Err(Error::ResponseError(ResponseContent {
status,
content,
entity,
}))
}
}
/// Creates a feed document for the feed type that you specify. This operation returns a presigned URL for uploading the feed document contents. It also returns a `feedDocumentId` value that you can pass in with a subsequent call to the [`createFeed`](https://developer-docs.amazon.com/sp-api/reference/createfeed) operation. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 0.5 | 15 | The `x-amzn-RateLimit-Limit` response header returns the usage plan rate limits that were applied to the requested operation, when available. The preceding table indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may have higher rate and burst values than those shown here. For more information, refer to [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 create_feed_document(
configuration: &configuration::Configuration,
body: models::feeds_2021_06_30::CreateFeedDocumentSpecification,
) -> Result<models::feeds_2021_06_30::CreateFeedDocumentResponse, Error<CreateFeedDocumentError>> {
// add a prefix to parameters to efficiently prevent name collisions
let p_body = body;
let uri_str = format!("{}/feeds/2021-06-30/documents", 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::feeds_2021_06_30::CreateFeedDocumentResponse`"))),
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::feeds_2021_06_30::CreateFeedDocumentResponse`")))),
}
} else {
let content = resp.text().await?;
let entity: Option<CreateFeedDocumentError> = serde_json::from_str(&content).ok();
Err(Error::ResponseError(ResponseContent {
status,
content,
entity,
}))
}
}
/// Returns feed details (including the `resultDocumentId`, if available) for the feed that you specify. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 2 | 15 | The `x-amzn-RateLimit-Limit` response header returns the usage plan rate limits that were applied to the requested operation, when available. The preceding table indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may have higher rate and burst values than those shown here. For more information, refer to [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_feed(
configuration: &configuration::Configuration,
feed_id: &str,
) -> Result<models::feeds_2021_06_30::Feed, Error<GetFeedError>> {
// add a prefix to parameters to efficiently prevent name collisions
let p_feed_id = feed_id;
let uri_str = format!(
"{}/feeds/2021-06-30/feeds/{feedId}",
configuration.base_path,
feedId = crate::apis::urlencode(p_feed_id)
);
let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
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::feeds_2021_06_30::Feed`"))),
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::feeds_2021_06_30::Feed`")))),
}
} else {
let content = resp.text().await?;
let entity: Option<GetFeedError> = serde_json::from_str(&content).ok();
Err(Error::ResponseError(ResponseContent {
status,
content,
entity,
}))
}
}
/// Returns the information required for retrieving a feed document's contents. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 0.0222 | 10 | The `x-amzn-RateLimit-Limit` response header returns the usage plan rate limits that were applied to the requested operation, when available. The preceding table indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may have higher rate and burst values than those shown here. For more information, refer to [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_feed_document(
configuration: &configuration::Configuration,
feed_document_id: &str,
) -> Result<models::feeds_2021_06_30::FeedDocument, Error<GetFeedDocumentError>> {
// add a prefix to parameters to efficiently prevent name collisions
let p_feed_document_id = feed_document_id;
let uri_str = format!(
"{}/feeds/2021-06-30/documents/{feedDocumentId}",
configuration.base_path,
feedDocumentId = crate::apis::urlencode(p_feed_document_id)
);
let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
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::feeds_2021_06_30::FeedDocument`"))),
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::feeds_2021_06_30::FeedDocument`")))),
}
} else {
let content = resp.text().await?;
let entity: Option<GetFeedDocumentError> = serde_json::from_str(&content).ok();
Err(Error::ResponseError(ResponseContent {
status,
content,
entity,
}))
}
}
/// Returns feed details for the feeds that match the filters that you specify. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 0.0222 | 10 | The `x-amzn-RateLimit-Limit` response header returns the usage plan rate limits that were applied to the requested operation, when available. The preceding table indicates the default rate and burst values for this operation. Selling partners whose business demands require higher throughput may have higher rate and burst values than those shown here. For more information, refer to [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_feeds(
configuration: &configuration::Configuration,
feed_types: Option<Vec<String>>,
marketplace_ids: Option<Vec<String>>,
page_size: Option<i32>,
processing_statuses: Option<Vec<String>>,
created_since: Option<String>,
created_until: Option<String>,
next_token: Option<&str>,
) -> Result<models::feeds_2021_06_30::GetFeedsResponse, Error<GetFeedsError>> {
// add a prefix to parameters to efficiently prevent name collisions
let p_feed_types = feed_types;
let p_marketplace_ids = marketplace_ids;
let p_page_size = page_size;
let p_processing_statuses = processing_statuses;
let p_created_since = created_since;
let p_created_until = created_until;
let p_next_token = next_token;
let uri_str = format!("{}/feeds/2021-06-30/feeds", configuration.base_path);
let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
if let Some(ref param_value) = p_feed_types {
req_builder = match "csv" {
"multi" => req_builder.query(
¶m_value
.into_iter()
.map(|p| ("feedTypes".to_owned(), p.to_string()))
.collect::<Vec<(std::string::String, std::string::String)>>(),
),
_ => req_builder.query(&[(
"feedTypes",
¶m_value
.into_iter()
.map(|p| p.to_string())
.collect::<Vec<String>>()
.join(",")
.to_string(),
)]),
};
}
if let Some(ref param_value) = p_marketplace_ids {
req_builder = match "csv" {
"multi" => req_builder.query(
¶m_value
.into_iter()
.map(|p| ("marketplaceIds".to_owned(), p.to_string()))
.collect::<Vec<(std::string::String, std::string::String)>>(),
),
_ => req_builder.query(&[(
"marketplaceIds",
¶m_value
.into_iter()
.map(|p| p.to_string())
.collect::<Vec<String>>()
.join(",")
.to_string(),
)]),
};
}
if let Some(ref param_value) = p_page_size {
req_builder = req_builder.query(&[("pageSize", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_processing_statuses {
req_builder = match "csv" {
"multi" => req_builder.query(
¶m_value
.into_iter()
.map(|p| ("processingStatuses".to_owned(), p.to_string()))
.collect::<Vec<(std::string::String, std::string::String)>>(),
),
_ => req_builder.query(&[(
"processingStatuses",
¶m_value
.into_iter()
.map(|p| p.to_string())
.collect::<Vec<String>>()
.join(",")
.to_string(),
)]),
};
}
if let Some(ref param_value) = p_created_since {
req_builder = req_builder.query(&[("createdSince", ¶m_value.to_string())]);
}
if let Some(ref param_value) = p_created_until {
req_builder = req_builder.query(&[("createdUntil", ¶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 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::feeds_2021_06_30::GetFeedsResponse`"))),
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::feeds_2021_06_30::GetFeedsResponse`")))),
}
} else {
let content = resp.text().await?;
let entity: Option<GetFeedsError> = serde_json::from_str(&content).ok();
Err(Error::ResponseError(ResponseContent {
status,
content,
entity,
}))
}
}