data_for_seo/api/content_generation/
mod.rs1use crate::entity::{
2 ContentGenerationApiCheckGrammar, ContentGenerationApiCheckGrammarLanguage,
3 ContentGenerationApiGenerate, ContentGenerationApiGenerateMetaTags,
4 ContentGenerationApiGenerateSubTopics, ContentGenerationApiGenerateText,
5 ContentGenerationApiGrammarRules, ContentGenerationApiParaphrase,
6 ContentGenerationApiTextSummary, ContentGenerationApiTextSummaryLanguage,
7};
8use crate::{DataForSeoApiResponse, DataForSeoClient};
9use serde::{Deserialize, Serialize};
10use serde_json::Value;
11
12pub struct ContentGenerationApi<'a> {
15 client: &'a DataForSeoClient,
16}
17
18impl DataForSeoClient {
19 pub fn content_generation(&self) -> ContentGenerationApi<'_> {
21 ContentGenerationApi { client: self }
22 }
23}
24
25impl ContentGenerationApi<'_> {
26 pub async fn generate(
29 &self,
30 data: Vec<ContentGenerationApiGeneratePost>,
31 ) -> DataForSeoApiResponse<ContentGenerationApiGenerate> {
32 self.client
33 .http_post("/v3/content_generation/generate/live", &data)
34 .await
35 }
36
37 pub async fn generate_text(
40 &self,
41 data: Vec<ContentGenerationApiGenerateTextPost>,
42 ) -> DataForSeoApiResponse<ContentGenerationApiGenerateText> {
43 self.client
44 .http_post("/v3/content_generation/generate_text/live", &data)
45 .await
46 }
47
48 pub async fn generate_meta_tags(
51 &self,
52 data: Vec<ContentGenerationApiGenerateMetaTagsPost>,
53 ) -> DataForSeoApiResponse<ContentGenerationApiGenerateMetaTags> {
54 self.client
55 .http_post("/v3/content_generation/generate_meta_tags/live", &data)
56 .await
57 }
58
59 pub async fn generate_sub_topics(
62 &self,
63 data: Vec<ContentGenerationApiGenerateSubTopicsPost>,
64 ) -> DataForSeoApiResponse<ContentGenerationApiGenerateSubTopics> {
65 self.client
66 .http_post("/v3/content_generation/generate_sub_topics/live", &data)
67 .await
68 }
69
70 pub async fn paraphrase(
73 &self,
74 data: Vec<ContentGenerationApiParaphrasePost>,
75 ) -> DataForSeoApiResponse<ContentGenerationApiParaphrase> {
76 self.client
77 .http_post("/v3/content_generation/paraphrase/live", &data)
78 .await
79 }
80
81 pub async fn check_grammar(
84 &self,
85 data: Vec<ContentGenerationApiCheckGrammarPost>,
86 ) -> DataForSeoApiResponse<ContentGenerationApiCheckGrammar> {
87 self.client
88 .http_post("/v3/content_generation/check_grammar/live", &data)
89 .await
90 }
91
92 pub async fn check_grammar_languages(
95 &self,
96 ) -> DataForSeoApiResponse<ContentGenerationApiCheckGrammarLanguage> {
97 self.client
98 .http_get("/v3/content_generation/check_grammar/languages")
99 .await
100 }
101
102 pub async fn grammar_rules(&self) -> DataForSeoApiResponse<ContentGenerationApiGrammarRules> {
105 self.client
106 .http_post("/v3/content_generation/grammar_rules", &Vec::<Value>::new())
107 .await
108 }
109
110 pub async fn text_summary(
113 &self,
114 data: Vec<ContentGenerationApiTextSummaryPost>,
115 ) -> DataForSeoApiResponse<ContentGenerationApiTextSummary> {
116 self.client
117 .http_post("/v3/content_generation/text_summary/live", &data)
118 .await
119 }
120
121 pub async fn text_summary_languages(
124 &self,
125 ) -> DataForSeoApiResponse<ContentGenerationApiTextSummaryLanguage> {
126 self.client
127 .http_get("/v3/content_generation/text_summary/languages")
128 .await
129 }
130}
131
132#[derive(Debug, Default, Serialize, Deserialize, Clone)]
134pub struct ContentGenerationApiGeneratePost {
135 pub text: String,
137 #[serde(skip_serializing_if = "Option::is_none")]
140 pub max_new_tokens: Option<i64>,
141 #[serde(skip_serializing_if = "Option::is_none")]
144 pub max_tokens: Option<i64>,
145 #[serde(skip_serializing_if = "Option::is_none")]
148 pub creativity_index: Option<f64>,
149 #[serde(skip_serializing_if = "Option::is_none")]
151 pub token_repetition_penalty: Option<f64>,
152 #[serde(skip_serializing_if = "Option::is_none")]
155 pub top_k: Option<i64>,
156 #[serde(skip_serializing_if = "Option::is_none")]
159 pub top_p: Option<f64>,
160 #[serde(skip_serializing_if = "Option::is_none")]
163 pub temperature: Option<f64>,
164 #[serde(skip_serializing_if = "Option::is_none")]
166 pub avoid_words: Option<Vec<String>>,
167 #[serde(skip_serializing_if = "Option::is_none")]
169 pub avoid_starting_words: Option<Vec<String>>,
170 #[serde(skip_serializing_if = "Option::is_none")]
172 pub stop_words: Option<Vec<String>>,
173 #[serde(skip_serializing_if = "Option::is_none")]
175 pub supplement_token: Option<String>,
176 #[serde(skip_serializing_if = "Option::is_none")]
178 pub tag: Option<String>,
179}
180
181impl ContentGenerationApiGeneratePost {
182 pub fn new(text: &str) -> ContentGenerationApiGeneratePost {
184 ContentGenerationApiGeneratePost {
185 text: text.to_string(),
186 ..Default::default()
187 }
188 }
189}
190
191#[derive(Debug, Default, Serialize, Deserialize, Clone)]
193pub struct ContentGenerationApiGenerateTextPost {
194 pub topic: String,
196 pub word_count: i64,
198 #[serde(skip_serializing_if = "Option::is_none")]
200 pub sub_topics: Option<Vec<String>>,
201 #[serde(skip_serializing_if = "Option::is_none")]
203 pub description: Option<String>,
204 #[serde(skip_serializing_if = "Option::is_none")]
206 pub meta_keywords: Option<Vec<String>>,
207 #[serde(skip_serializing_if = "Option::is_none")]
209 pub creativity_index: Option<f64>,
210 #[serde(skip_serializing_if = "Option::is_none")]
212 pub include_conclusion: Option<bool>,
213 #[serde(skip_serializing_if = "Option::is_none")]
215 pub supplement_token: Option<String>,
216 #[serde(skip_serializing_if = "Option::is_none")]
218 pub tag: Option<String>,
219}
220
221impl ContentGenerationApiGenerateTextPost {
222 pub fn new(topic: &str, word_count: i64) -> ContentGenerationApiGenerateTextPost {
224 ContentGenerationApiGenerateTextPost {
225 topic: topic.to_string(),
226 word_count,
227 ..Default::default()
228 }
229 }
230}
231
232#[derive(Debug, Default, Serialize, Deserialize, Clone)]
234pub struct ContentGenerationApiGenerateMetaTagsPost {
235 pub text: String,
237 #[serde(skip_serializing_if = "Option::is_none")]
239 pub creativity_index: Option<f64>,
240 #[serde(skip_serializing_if = "Option::is_none")]
242 pub tag: Option<String>,
243}
244
245impl ContentGenerationApiGenerateMetaTagsPost {
246 pub fn new(text: &str) -> ContentGenerationApiGenerateMetaTagsPost {
248 ContentGenerationApiGenerateMetaTagsPost {
249 text: text.to_string(),
250 ..Default::default()
251 }
252 }
253}
254
255#[derive(Debug, Default, Serialize, Deserialize, Clone)]
257pub struct ContentGenerationApiGenerateSubTopicsPost {
258 pub topic: String,
260 #[serde(skip_serializing_if = "Option::is_none")]
262 pub creativity_index: Option<f64>,
263 #[serde(skip_serializing_if = "Option::is_none")]
265 pub tag: Option<String>,
266}
267
268impl ContentGenerationApiGenerateSubTopicsPost {
269 pub fn new(topic: &str) -> ContentGenerationApiGenerateSubTopicsPost {
271 ContentGenerationApiGenerateSubTopicsPost {
272 topic: topic.to_string(),
273 ..Default::default()
274 }
275 }
276}
277
278#[derive(Debug, Default, Serialize, Deserialize, Clone)]
280pub struct ContentGenerationApiParaphrasePost {
281 pub text: String,
283 #[serde(skip_serializing_if = "Option::is_none")]
285 pub creativity_index: Option<f64>,
286 #[serde(skip_serializing_if = "Option::is_none")]
288 pub tag: Option<String>,
289}
290
291impl ContentGenerationApiParaphrasePost {
292 pub fn new(text: &str) -> ContentGenerationApiParaphrasePost {
294 ContentGenerationApiParaphrasePost {
295 text: text.to_string(),
296 ..Default::default()
297 }
298 }
299}
300
301#[derive(Debug, Default, Serialize, Deserialize, Clone)]
305pub struct ContentGenerationApiCheckGrammarPost {
306 pub text: String,
308 #[serde(skip_serializing_if = "Option::is_none")]
310 pub language_code: Option<String>,
311 #[serde(skip_serializing_if = "Option::is_none")]
313 pub language_name: Option<String>,
314 #[serde(skip_serializing_if = "Option::is_none")]
316 pub tag: Option<String>,
317}
318
319impl ContentGenerationApiCheckGrammarPost {
320 pub fn new(text: &str) -> ContentGenerationApiCheckGrammarPost {
322 ContentGenerationApiCheckGrammarPost {
323 text: text.to_string(),
324 ..Default::default()
325 }
326 }
327}
328
329#[derive(Debug, Default, Serialize, Deserialize, Clone)]
333pub struct ContentGenerationApiTextSummaryPost {
334 pub text: String,
336 #[serde(skip_serializing_if = "Option::is_none")]
338 pub language_name: Option<String>,
339 #[serde(skip_serializing_if = "Option::is_none")]
341 pub language_code: Option<String>,
342 #[serde(skip_serializing_if = "Option::is_none")]
344 pub internal_list_limit: Option<i32>,
345 #[serde(skip_serializing_if = "Option::is_none")]
347 pub tag: Option<String>,
348}
349
350impl ContentGenerationApiTextSummaryPost {
351 pub fn new(text: &str) -> ContentGenerationApiTextSummaryPost {
353 ContentGenerationApiTextSummaryPost {
354 text: text.to_string(),
355 ..Default::default()
356 }
357 }
358}