use crate::api::merchant::MerchantApi;
use crate::entity::{
MerchantApiGoogleProductInfo, MerchantApiGoogleProducts, MerchantApiGoogleReviews,
MerchantApiGoogleSellers, MerchantApiLocation, MerchantApiTaskReady, SerpApiLanguage,
};
use crate::{DataForSeoApiResponse, DataForSeoClient};
use serde::{Deserialize, Serialize};
use serde_json::Value;
impl MerchantApi<'_> {
pub fn google(&self) -> MerchantApiGoogle<'_> {
MerchantApiGoogle {
client: self.client,
}
}
}
pub struct MerchantApiGoogle<'a> {
client: &'a DataForSeoClient,
}
impl MerchantApiGoogle<'_> {
pub async fn locations(&self) -> DataForSeoApiResponse<MerchantApiLocation> {
self.client.http_get("/v3/merchant/google/locations").await
}
pub async fn locations_country(
&self,
country: &str,
) -> DataForSeoApiResponse<MerchantApiLocation> {
self.client
.http_get(format!("/v3/merchant/google/locations/{country}").as_str())
.await
}
pub async fn languages(&self) -> DataForSeoApiResponse<SerpApiLanguage> {
self.client.http_get("/v3/merchant/google/languages").await
}
pub async fn products_task_post(
&self,
data: Vec<MerchantApiGoogleProductsPost>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/merchant/google/products/task_post", &data)
.await
}
pub async fn products_tasks_ready(&self) -> DataForSeoApiResponse<MerchantApiTaskReady> {
self.client
.http_get("/v3/merchant/google/products/tasks_ready")
.await
}
pub async fn products_task_get_advanced(
&self,
id: &str,
) -> DataForSeoApiResponse<MerchantApiGoogleProducts> {
self.client
.http_get(format!("/v3/merchant/google/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/google/products/task_get/html/{id}").as_str())
.await
}
pub async fn sellers_task_post(
&self,
data: Vec<MerchantApiGoogleSellersPost>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/merchant/google/sellers/task_post", &data)
.await
}
pub async fn sellers_tasks_ready(&self) -> DataForSeoApiResponse<MerchantApiTaskReady> {
self.client
.http_get("/v3/merchant/google/sellers/tasks_ready")
.await
}
pub async fn sellers_task_get_advanced(
&self,
id: &str,
) -> DataForSeoApiResponse<MerchantApiGoogleSellers> {
self.client
.http_get(format!("/v3/merchant/google/sellers/task_get/advanced/{id}").as_str())
.await
}
pub async fn sellers_ad_url(&self, id: &str) -> DataForSeoApiResponse<Value> {
self.client
.http_get(format!("/v3/merchant/google/sellers/ad_url/{id}").as_str())
.await
}
pub async fn product_info_task_post(
&self,
data: Vec<MerchantApiGoogleProductInfoPost>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/merchant/google/product_info/task_post", &data)
.await
}
pub async fn product_info_tasks_ready(&self) -> DataForSeoApiResponse<MerchantApiTaskReady> {
self.client
.http_get("/v3/merchant/google/product_info/tasks_ready")
.await
}
pub async fn product_info_task_get_advanced(
&self,
id: &str,
) -> DataForSeoApiResponse<MerchantApiGoogleProductInfo> {
self.client
.http_get(format!("/v3/merchant/google/product_info/task_get/advanced/{id}").as_str())
.await
}
pub async fn reviews_task_post(
&self,
data: Vec<MerchantApiGoogleReviewsPost>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/merchant/google/reviews/task_post", &data)
.await
}
pub async fn reviews_tasks_ready(&self) -> DataForSeoApiResponse<MerchantApiTaskReady> {
self.client
.http_get("/v3/merchant/google/reviews/tasks_ready")
.await
}
pub async fn reviews_task_get_advanced(
&self,
id: &str,
) -> DataForSeoApiResponse<MerchantApiGoogleReviews> {
self.client
.http_get(format!("/v3/merchant/google/reviews/task_get/advanced/{id}").as_str())
.await
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct MerchantApiGoogleProductsPost {
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 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 MerchantApiGoogleProductsPost {
pub fn new(keyword: &str) -> MerchantApiGoogleProductsPost {
MerchantApiGoogleProductsPost {
keyword: keyword.to_string(),
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct MerchantApiGoogleSellersPost {
#[serde(skip_serializing_if = "Option::is_none")]
pub product_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_docid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pvf: 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 get_shops_on_google: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_specifications: Option<Value>,
#[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 MerchantApiGoogleSellersPost {
pub fn new(product_id: &str) -> MerchantApiGoogleSellersPost {
MerchantApiGoogleSellersPost {
product_id: Some(product_id.to_string()),
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct MerchantApiGoogleProductInfoPost {
#[serde(skip_serializing_if = "Option::is_none")]
pub product_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_docid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gid: 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 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 MerchantApiGoogleProductInfoPost {
pub fn new(product_id: &str) -> MerchantApiGoogleProductInfoPost {
MerchantApiGoogleProductInfoPost {
product_id: Some(product_id.to_string()),
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct MerchantApiGoogleReviewsPost {
#[serde(skip_serializing_if = "Option::is_none")]
pub gid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub product_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_docid: 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 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 MerchantApiGoogleReviewsPost {
pub fn new(gid: &str) -> MerchantApiGoogleReviewsPost {
MerchantApiGoogleReviewsPost {
gid: Some(gid.to_string()),
..Default::default()
}
}
}