use crate::api::merchant::MerchantApi;
use crate::entity::{
MerchantApiAmazonAsin, MerchantApiAmazonProducts, MerchantApiAmazonSellers,
MerchantApiLocation, MerchantApiTaskReady, SerpApiLanguage,
};
use crate::{DataForSeoApiResponse, DataForSeoClient};
use serde::{Deserialize, Serialize};
use serde_json::Value;
impl MerchantApi<'_> {
pub fn amazon(&self) -> MerchantApiAmazon<'_> {
MerchantApiAmazon {
client: self.client,
}
}
}
pub struct MerchantApiAmazon<'a> {
client: &'a DataForSeoClient,
}
impl MerchantApiAmazon<'_> {
pub async fn locations(&self) -> DataForSeoApiResponse<MerchantApiLocation> {
self.client.http_get("/v3/merchant/amazon/locations").await
}
pub async fn locations_country(
&self,
country: &str,
) -> DataForSeoApiResponse<MerchantApiLocation> {
self.client
.http_get(format!("/v3/merchant/amazon/locations/{country}").as_str())
.await
}
pub async fn languages(&self) -> DataForSeoApiResponse<SerpApiLanguage> {
self.client.http_get("/v3/merchant/amazon/languages").await
}
pub async fn products_task_post(
&self,
data: Vec<MerchantApiAmazonProductsPost>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/merchant/amazon/products/task_post", &data)
.await
}
pub async fn products_tasks_ready(&self) -> DataForSeoApiResponse<MerchantApiTaskReady> {
self.client
.http_get("/v3/merchant/amazon/products/tasks_ready")
.await
}
pub async fn products_task_get_advanced(
&self,
id: &str,
) -> DataForSeoApiResponse<MerchantApiAmazonProducts> {
self.client
.http_get(format!("/v3/merchant/amazon/products/task_get/advanced/{id}").as_str())
.await
}
pub async fn products_task_get_html(&self, id: &str) -> DataForSeoApiResponse<Value> {
self.client
.http_get(format!("/v3/merchant/amazon/products/task_get/html/{id}").as_str())
.await
}
pub async fn products_live_advanced(
&self,
data: Vec<MerchantApiAmazonProductsPost>,
) -> DataForSeoApiResponse<MerchantApiAmazonProducts> {
self.client
.http_post("/v3/merchant/amazon/products/live/advanced", &data)
.await
}
pub async fn products_live_html(
&self,
data: Vec<MerchantApiAmazonProductsPost>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/merchant/amazon/products/live/html", &data)
.await
}
pub async fn asin_task_post(
&self,
data: Vec<MerchantApiAmazonAsinPost>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/merchant/amazon/asin/task_post", &data)
.await
}
pub async fn asin_tasks_ready(&self) -> DataForSeoApiResponse<MerchantApiTaskReady> {
self.client
.http_get("/v3/merchant/amazon/asin/tasks_ready")
.await
}
pub async fn asin_task_get_advanced(
&self,
id: &str,
) -> DataForSeoApiResponse<MerchantApiAmazonAsin> {
self.client
.http_get(format!("/v3/merchant/amazon/asin/task_get/advanced/{id}").as_str())
.await
}
pub async fn asin_task_get_html(&self, id: &str) -> DataForSeoApiResponse<Value> {
self.client
.http_get(format!("/v3/merchant/amazon/asin/task_get/html/{id}").as_str())
.await
}
pub async fn asin_live_advanced(
&self,
data: Vec<MerchantApiAmazonAsinPost>,
) -> DataForSeoApiResponse<MerchantApiAmazonAsin> {
self.client
.http_post("/v3/merchant/amazon/asin/live/advanced", &data)
.await
}
pub async fn asin_live_html(
&self,
data: Vec<MerchantApiAmazonAsinPost>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/merchant/amazon/asin/live/html", &data)
.await
}
pub async fn sellers_task_post(
&self,
data: Vec<MerchantApiAmazonSellersPost>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/merchant/amazon/sellers/task_post", &data)
.await
}
pub async fn sellers_tasks_ready(&self) -> DataForSeoApiResponse<MerchantApiTaskReady> {
self.client
.http_get("/v3/merchant/amazon/sellers/tasks_ready")
.await
}
pub async fn sellers_task_get_advanced(
&self,
id: &str,
) -> DataForSeoApiResponse<MerchantApiAmazonSellers> {
self.client
.http_get(format!("/v3/merchant/amazon/sellers/task_get/advanced/{id}").as_str())
.await
}
pub async fn sellers_task_get_html(&self, id: &str) -> DataForSeoApiResponse<Value> {
self.client
.http_get(format!("/v3/merchant/amazon/sellers/task_get/html/{id}").as_str())
.await
}
pub async fn sellers_live_advanced(
&self,
data: Vec<MerchantApiAmazonSellersPost>,
) -> DataForSeoApiResponse<MerchantApiAmazonSellers> {
self.client
.http_post("/v3/merchant/amazon/sellers/live/advanced", &data)
.await
}
pub async fn sellers_live_html(
&self,
data: Vec<MerchantApiAmazonSellersPost>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/merchant/amazon/sellers/live/html", &data)
.await
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct MerchantApiAmazonProductsPost {
pub keyword: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_code: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_coordinate: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub se_domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub depth: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_crawl_pages: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub search_param: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub price_min: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub price_max: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sort_by: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postback_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postback_data: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pingback_url: Option<String>,
}
impl MerchantApiAmazonProductsPost {
pub fn new(keyword: &str) -> MerchantApiAmazonProductsPost {
MerchantApiAmazonProductsPost {
keyword: keyword.to_string(),
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct MerchantApiAmazonAsinPost {
pub asin: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_code: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_coordinate: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub se_domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postback_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postback_data: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pingback_url: Option<String>,
}
impl MerchantApiAmazonAsinPost {
pub fn new(asin: &str) -> MerchantApiAmazonAsinPost {
MerchantApiAmazonAsinPost {
asin: asin.to_string(),
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct MerchantApiAmazonSellersPost {
pub asin: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_code: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_coordinate: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub se_domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postback_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postback_data: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pingback_url: Option<String>,
}
impl MerchantApiAmazonSellersPost {
pub fn new(asin: &str) -> MerchantApiAmazonSellersPost {
MerchantApiAmazonSellersPost {
asin: asin.to_string(),
..Default::default()
}
}
}