Skip to main content

data_for_seo/api/domain_analytics/
whois.rs

1use crate::api::domain_analytics::DomainAnalyticsApi;
2use crate::entity::DomainAnalyticsApiWhoisOverview;
3use crate::{DataForSeoApiResponse, DataForSeoClient};
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
6
7impl DomainAnalyticsApi<'_> {
8    /// Returns the Whois sub-API builder.
9    pub fn whois(&self) -> DomainAnalyticsApiWhois<'_> {
10        DomainAnalyticsApiWhois {
11            client: self.client,
12        }
13    }
14}
15
16/// Builder for the [Domain Analytics Whois](https://docs.dataforseo.com/v3/domain_analytics/whois/overview/live/) endpoints.
17pub struct DomainAnalyticsApiWhois<'a> {
18    client: &'a DataForSeoClient,
19}
20
21impl DomainAnalyticsApiWhois<'_> {
22    /// Returns Whois records enriched with ranking, traffic, and backlink stats.
23    /// See <https://docs.dataforseo.com/v3/domain_analytics/whois/overview/live/>.
24    pub async fn overview(
25        &self,
26        data: Vec<DomainAnalyticsApiWhoisOverviewPost>,
27    ) -> DataForSeoApiResponse<DomainAnalyticsApiWhoisOverview> {
28        self.client
29            .http_post("/v3/domain_analytics/whois/overview/live", &data)
30            .await
31    }
32}
33
34/// Request body for the Whois `overview` endpoint.
35#[derive(Debug, Default, Serialize, Deserialize, Clone)]
36pub struct DomainAnalyticsApiWhoisOverviewPost {
37    /// Maximum number of returned domains (default 100, max 1000).
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub limit: Option<i32>,
40    /// Offset in the results array (default 0).
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub offset: Option<i32>,
43    /// Pagination token for fetching large result sets.
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub offset_token: Option<String>,
46    /// Result filters, each a `[field, operator, value]` array (max 8).
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub filters: Option<Vec<Value>>,
49    /// Sorting rules such as `["domain,asc"]` (max 3).
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub order_by: Option<Vec<String>>,
52    /// User-defined task identifier (max 255 characters).
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub tag: Option<String>,
55}
56
57impl DomainAnalyticsApiWhoisOverviewPost {
58    /// Creates an empty request (all parameters optional).
59    pub fn new() -> DomainAnalyticsApiWhoisOverviewPost {
60        DomainAnalyticsApiWhoisOverviewPost::default()
61    }
62}