Skip to main content

data_for_seo/api/ai_optimization/
provider.rs

1//! Per-provider builders for the LLM Responses and LLM Scraper sub-APIs.
2
3use super::{
4    AiOptimizationApiLlmResponses, AiOptimizationApiLlmScraper,
5    AiOptimizationApiPerplexityLlmResponses,
6};
7use crate::DataForSeoClient;
8
9/// ChatGPT provider — exposes both LLM Responses and LLM Scraper.
10///
11/// See <https://docs.dataforseo.com/v3/ai_optimization/chat_gpt/llm_responses/overview/>.
12pub struct AiOptimizationApiChatGpt<'a> {
13    pub(crate) client: &'a DataForSeoClient,
14}
15
16impl AiOptimizationApiChatGpt<'_> {
17    /// LLM Responses endpoints for ChatGPT.
18    pub fn llm_responses(&self) -> AiOptimizationApiLlmResponses<'_> {
19        AiOptimizationApiLlmResponses {
20            client: self.client,
21            provider: "chat_gpt",
22        }
23    }
24
25    /// LLM Scraper endpoints for ChatGPT.
26    pub fn llm_scraper(&self) -> AiOptimizationApiLlmScraper<'_> {
27        AiOptimizationApiLlmScraper {
28            client: self.client,
29            provider: "chat_gpt",
30        }
31    }
32}
33
34/// Claude provider — exposes LLM Responses only.
35///
36/// See <https://docs.dataforseo.com/v3/ai_optimization/claude/llm_responses/overview/>.
37pub struct AiOptimizationApiClaude<'a> {
38    pub(crate) client: &'a DataForSeoClient,
39}
40
41impl AiOptimizationApiClaude<'_> {
42    /// LLM Responses endpoints for Claude.
43    pub fn llm_responses(&self) -> AiOptimizationApiLlmResponses<'_> {
44        AiOptimizationApiLlmResponses {
45            client: self.client,
46            provider: "claude",
47        }
48    }
49}
50
51/// Gemini provider — exposes both LLM Responses and LLM Scraper.
52///
53/// See <https://docs.dataforseo.com/v3/ai_optimization/gemini/llm_responses/overview/>.
54pub struct AiOptimizationApiGemini<'a> {
55    pub(crate) client: &'a DataForSeoClient,
56}
57
58impl AiOptimizationApiGemini<'_> {
59    /// LLM Responses endpoints for Gemini.
60    pub fn llm_responses(&self) -> AiOptimizationApiLlmResponses<'_> {
61        AiOptimizationApiLlmResponses {
62            client: self.client,
63            provider: "gemini",
64        }
65    }
66
67    /// LLM Scraper endpoints for Gemini.
68    pub fn llm_scraper(&self) -> AiOptimizationApiLlmScraper<'_> {
69        AiOptimizationApiLlmScraper {
70            client: self.client,
71            provider: "gemini",
72        }
73    }
74}
75
76/// Perplexity provider — exposes LLM Responses (Live-only).
77///
78/// See <https://docs.dataforseo.com/v3/ai_optimization/perplexity/llm_responses/overview/>.
79pub struct AiOptimizationApiPerplexity<'a> {
80    pub(crate) client: &'a DataForSeoClient,
81}
82
83impl AiOptimizationApiPerplexity<'_> {
84    /// LLM Responses endpoints for Perplexity.
85    pub fn llm_responses(&self) -> AiOptimizationApiPerplexityLlmResponses<'_> {
86        AiOptimizationApiPerplexityLlmResponses {
87            client: self.client,
88        }
89    }
90}