use crate::entity::{AiOptimizationKeywordDataSearchVolume, AiOptimizationLocationLanguage};
use crate::{DataForSeoApiResponse, DataForSeoClient};
use serde::{Deserialize, Serialize};
pub struct AiOptimizationApiKeywordData<'a> {
pub(crate) client: &'a DataForSeoClient,
}
impl AiOptimizationApiKeywordData<'_> {
pub async fn locations_and_languages(
&self,
) -> DataForSeoApiResponse<AiOptimizationLocationLanguage> {
self.client
.http_get("/v3/ai_optimization/ai_keyword_data/locations_and_languages")
.await
}
pub async fn keywords_search_volume(
&self,
data: Vec<AiOptimizationKeywordDataSearchVolumePost>,
) -> DataForSeoApiResponse<AiOptimizationKeywordDataSearchVolume> {
self.client
.http_post(
"/v3/ai_optimization/ai_keyword_data/keywords_search_volume/live",
&data,
)
.await
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationKeywordDataSearchVolumePost {
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 AiOptimizationKeywordDataSearchVolumePost {
pub fn new(keywords: Vec<String>) -> AiOptimizationKeywordDataSearchVolumePost {
AiOptimizationKeywordDataSearchVolumePost {
keywords,
..Default::default()
}
}
}