use crate::entity::{
DataForSeoLabsAmazonProductCompetitorItem, DataForSeoLabsAmazonProductKeywordIntersectionItem,
DataForSeoLabsAmazonProductRankOverviewItem, DataForSeoLabsAmazonRankedKeywordItem,
DataForSeoLabsAmazonRelatedKeywordItem, DataForSeoLabsAmazonSearchVolumeItem,
DataForSeoLabsResult,
};
use crate::{DataForSeoApiResponse, DataForSeoClient};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
pub struct DataForSeoLabsApiAmazon<'a> {
pub(crate) client: &'a DataForSeoClient,
}
impl DataForSeoLabsApiAmazon<'_> {
pub async fn bulk_search_volume(
&self,
data: Vec<DataForSeoLabsAmazonBulkSearchVolumeRequest>,
) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsAmazonSearchVolumeItem>> {
self.client
.http_post("/v3/dataforseo_labs/amazon/bulk_search_volume/live", &data)
.await
}
pub async fn related_keywords(
&self,
data: Vec<DataForSeoLabsAmazonRelatedKeywordsRequest>,
) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsAmazonRelatedKeywordItem>> {
self.client
.http_post("/v3/dataforseo_labs/amazon/related_keywords/live", &data)
.await
}
pub async fn ranked_keywords(
&self,
data: Vec<DataForSeoLabsAmazonRankedKeywordsRequest>,
) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsAmazonRankedKeywordItem>> {
self.client
.http_post("/v3/dataforseo_labs/amazon/ranked_keywords/live", &data)
.await
}
pub async fn product_rank_overview(
&self,
data: Vec<DataForSeoLabsAmazonProductRankOverviewRequest>,
) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsAmazonProductRankOverviewItem>>
{
self.client
.http_post(
"/v3/dataforseo_labs/amazon/product_rank_overview/live",
&data,
)
.await
}
pub async fn product_competitors(
&self,
data: Vec<DataForSeoLabsAmazonProductCompetitorsRequest>,
) -> DataForSeoApiResponse<DataForSeoLabsResult<DataForSeoLabsAmazonProductCompetitorItem>>
{
self.client
.http_post("/v3/dataforseo_labs/amazon/product_competitors/live", &data)
.await
}
pub async fn product_keyword_intersections(
&self,
data: Vec<DataForSeoLabsAmazonProductKeywordIntersectionsRequest>,
) -> DataForSeoApiResponse<
DataForSeoLabsResult<DataForSeoLabsAmazonProductKeywordIntersectionItem>,
> {
self.client
.http_post(
"/v3/dataforseo_labs/amazon/product_keyword_intersections/live",
&data,
)
.await
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsAmazonBulkSearchVolumeRequest {
pub keywords: Vec<String>,
#[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 language_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DataForSeoLabsAmazonBulkSearchVolumeRequest {
pub fn new(keywords: Vec<String>) -> DataForSeoLabsAmazonBulkSearchVolumeRequest {
DataForSeoLabsAmazonBulkSearchVolumeRequest {
keywords,
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsAmazonRelatedKeywordsRequest {
pub keyword: String,
#[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 language_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub depth: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_seed_keyword: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ignore_synonyms: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DataForSeoLabsAmazonRelatedKeywordsRequest {
pub fn new(keyword: &str) -> DataForSeoLabsAmazonRelatedKeywordsRequest {
DataForSeoLabsAmazonRelatedKeywordsRequest {
keyword: keyword.to_string(),
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsAmazonRankedKeywordsRequest {
pub asin: String,
#[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 language_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ignore_synonyms: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<Vec<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_by: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DataForSeoLabsAmazonRankedKeywordsRequest {
pub fn new(asin: &str) -> DataForSeoLabsAmazonRankedKeywordsRequest {
DataForSeoLabsAmazonRankedKeywordsRequest {
asin: asin.to_string(),
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsAmazonProductRankOverviewRequest {
pub asin: String,
#[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 language_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DataForSeoLabsAmazonProductRankOverviewRequest {
pub fn new(asin: &str) -> DataForSeoLabsAmazonProductRankOverviewRequest {
DataForSeoLabsAmazonProductRankOverviewRequest {
asin: asin.to_string(),
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsAmazonProductCompetitorsRequest {
pub asin: String,
#[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 language_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<Vec<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_by: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DataForSeoLabsAmazonProductCompetitorsRequest {
pub fn new(asin: &str) -> DataForSeoLabsAmazonProductCompetitorsRequest {
DataForSeoLabsAmazonProductCompetitorsRequest {
asin: asin.to_string(),
..Default::default()
}
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct DataForSeoLabsAmazonProductKeywordIntersectionsRequest {
pub asins: HashMap<String, String>,
#[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 language_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub intersection_mode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filters: Option<Vec<Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_by: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl DataForSeoLabsAmazonProductKeywordIntersectionsRequest {
pub fn new(
asins: HashMap<String, String>,
) -> DataForSeoLabsAmazonProductKeywordIntersectionsRequest {
DataForSeoLabsAmazonProductKeywordIntersectionsRequest {
asins,
..Default::default()
}
}
}