Skip to main content

data_for_seo/entity/business_data/
request.rs

1//! Request bodies shared by Business Data `task_post` / `live` endpoints.
2
3use serde::{Deserialize, Serialize};
4
5/// Task request shared by the simple Google Business Data `task_post` endpoints
6/// (My Business Info, My Business Updates, Questions & Answers).
7/// See <https://docs.dataforseo.com/v3/business_data/google/my_business_info/task_post/>.
8#[derive(Debug, Default, Serialize, Deserialize, Clone)]
9pub struct BusinessDataApiGoogleTaskPost {
10    /// Business name, or a `cid:` / `place_id:` identifier to look up.
11    pub keyword: String,
12    /// Full location name, e.g. `"London,England,United Kingdom"`.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub location_name: Option<String>,
15    /// Location code from the `locations` endpoint.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub location_code: Option<i32>,
18    /// GPS coordinates as `"latitude,longitude"` or `"latitude,longitude,radius"`.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub location_coordinate: Option<String>,
21    /// Full language name, e.g. `"English"`.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub language_name: Option<String>,
24    /// Language code, e.g. `"en"`.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub language_code: Option<String>,
27    /// Task priority: `1` (normal, default) or `2` (high, extra cost).
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub priority: Option<i32>,
30    /// User-defined task identifier (max 255 characters).
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub tag: Option<String>,
33    /// URL that receives the finished results via POST.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub postback_url: Option<String>,
36    /// URL notified via GET when the task completes.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub pingback_url: Option<String>,
39}
40
41impl BusinessDataApiGoogleTaskPost {
42    /// Builds a task request for the given business name, `cid:`, or `place_id:`.
43    pub fn new<T: Into<String>>(keyword: T) -> Self {
44        BusinessDataApiGoogleTaskPost {
45            keyword: keyword.into(),
46            ..BusinessDataApiGoogleTaskPost::default()
47        }
48    }
49}
50
51/// Task request for the Google Reviews and Extended Reviews `task_post` endpoints.
52/// See <https://docs.dataforseo.com/v3/business_data/google/reviews/task_post/>.
53#[derive(Debug, Default, Serialize, Deserialize, Clone)]
54pub struct BusinessDataApiReviewsTaskPost {
55    /// Business name, or a `cid:` / `place_id:` identifier to look up.
56    pub keyword: String,
57    /// Full location name, e.g. `"London,England,United Kingdom"`.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub location_name: Option<String>,
60    /// Location code from the `locations` endpoint.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub location_code: Option<i32>,
63    /// GPS coordinates as `"latitude,longitude"` or `"latitude,longitude,radius"`.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub location_coordinate: Option<String>,
66    /// Full language name, e.g. `"English"`.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub language_name: Option<String>,
69    /// Language code, e.g. `"en"`.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub language_code: Option<String>,
72    /// Number of reviews to parse (default `10`, in multiples of 10).
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub depth: Option<i32>,
75    /// Review ordering, e.g. `"relevant"`, `"newest"`, `"highest_rating"`.
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub sort_by: Option<String>,
78    /// Task priority: `1` (normal, default) or `2` (high, extra cost).
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub priority: Option<i32>,
81    /// User-defined task identifier (max 255 characters).
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub tag: Option<String>,
84    /// URL that receives the finished results via POST.
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub postback_url: Option<String>,
87    /// URL notified via GET when the task completes.
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub pingback_url: Option<String>,
90}
91
92impl BusinessDataApiReviewsTaskPost {
93    /// Builds a reviews task request for the given business name, `cid:`, or `place_id:`.
94    pub fn new<T: Into<String>>(keyword: T) -> Self {
95        BusinessDataApiReviewsTaskPost {
96            keyword: keyword.into(),
97            ..BusinessDataApiReviewsTaskPost::default()
98        }
99    }
100}
101
102/// Task request for the Google Hotel Searches `task_post` / `live` endpoints.
103/// See <https://docs.dataforseo.com/v3/business_data/google/hotel_searches/task_post/>.
104#[derive(Debug, Default, Serialize, Deserialize, Clone)]
105pub struct BusinessDataApiHotelSearchesTaskPost {
106    /// Search query, typically a destination or hotel name.
107    pub keyword: String,
108    /// Full location name, e.g. `"London,England,United Kingdom"`.
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub location_name: Option<String>,
111    /// Location code from the `locations` endpoint.
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub location_code: Option<i32>,
114    /// GPS coordinates as `"latitude,longitude"` or `"latitude,longitude,radius"`.
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub location_coordinate: Option<String>,
117    /// Full language name, e.g. `"English"`.
118    #[serde(skip_serializing_if = "Option::is_none")]
119    pub language_name: Option<String>,
120    /// Language code, e.g. `"en"`.
121    #[serde(skip_serializing_if = "Option::is_none")]
122    pub language_code: Option<String>,
123    /// Check-in date in `yyyy-mm-dd` format.
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub check_in: Option<String>,
126    /// Check-out date in `yyyy-mm-dd` format.
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub check_out: Option<String>,
129    /// Three-letter currency code prices are returned in (e.g. `"USD"`).
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub currency: Option<String>,
132    /// Number of adult guests to price the stay for.
133    #[serde(skip_serializing_if = "Option::is_none")]
134    pub adults: Option<i32>,
135    /// Number of child guests to price the stay for.
136    #[serde(skip_serializing_if = "Option::is_none")]
137    pub children: Option<i32>,
138    /// Task priority: `1` (normal, default) or `2` (high, extra cost).
139    #[serde(skip_serializing_if = "Option::is_none")]
140    pub priority: Option<i32>,
141    /// User-defined task identifier (max 255 characters).
142    #[serde(skip_serializing_if = "Option::is_none")]
143    pub tag: Option<String>,
144    /// URL that receives the finished results via POST.
145    #[serde(skip_serializing_if = "Option::is_none")]
146    pub postback_url: Option<String>,
147    /// URL notified via GET when the task completes.
148    #[serde(skip_serializing_if = "Option::is_none")]
149    pub pingback_url: Option<String>,
150}
151
152impl BusinessDataApiHotelSearchesTaskPost {
153    /// Builds a hotel searches task request for the given keyword.
154    pub fn new<T: Into<String>>(keyword: T) -> Self {
155        BusinessDataApiHotelSearchesTaskPost {
156            keyword: keyword.into(),
157            ..BusinessDataApiHotelSearchesTaskPost::default()
158        }
159    }
160}
161
162/// Task request for the Google Hotel Info `task_post` / `live` endpoints.
163/// See <https://docs.dataforseo.com/v3/business_data/google/hotel_info/task_post/>.
164#[derive(Debug, Default, Serialize, Deserialize, Clone)]
165pub struct BusinessDataApiHotelInfoTaskPost {
166    /// Hotel name or `hotel_identifier:` value identifying the property.
167    pub keyword: String,
168    /// Full location name, e.g. `"London,England,United Kingdom"`.
169    #[serde(skip_serializing_if = "Option::is_none")]
170    pub location_name: Option<String>,
171    /// Location code from the `locations` endpoint.
172    #[serde(skip_serializing_if = "Option::is_none")]
173    pub location_code: Option<i32>,
174    /// Full language name, e.g. `"English"`.
175    #[serde(skip_serializing_if = "Option::is_none")]
176    pub language_name: Option<String>,
177    /// Language code, e.g. `"en"`.
178    #[serde(skip_serializing_if = "Option::is_none")]
179    pub language_code: Option<String>,
180    /// Check-in date in `yyyy-mm-dd` format.
181    #[serde(skip_serializing_if = "Option::is_none")]
182    pub check_in: Option<String>,
183    /// Check-out date in `yyyy-mm-dd` format.
184    #[serde(skip_serializing_if = "Option::is_none")]
185    pub check_out: Option<String>,
186    /// Three-letter currency code prices are returned in (e.g. `"USD"`).
187    #[serde(skip_serializing_if = "Option::is_none")]
188    pub currency: Option<String>,
189    /// Task priority: `1` (normal, default) or `2` (high, extra cost).
190    #[serde(skip_serializing_if = "Option::is_none")]
191    pub priority: Option<i32>,
192    /// User-defined task identifier (max 255 characters).
193    #[serde(skip_serializing_if = "Option::is_none")]
194    pub tag: Option<String>,
195    /// URL that receives the finished results via POST.
196    #[serde(skip_serializing_if = "Option::is_none")]
197    pub postback_url: Option<String>,
198    /// URL notified via GET when the task completes.
199    #[serde(skip_serializing_if = "Option::is_none")]
200    pub pingback_url: Option<String>,
201}
202
203impl BusinessDataApiHotelInfoTaskPost {
204    /// Builds a hotel info task request for the given keyword.
205    pub fn new<T: Into<String>>(keyword: T) -> Self {
206        BusinessDataApiHotelInfoTaskPost {
207            keyword: keyword.into(),
208            ..BusinessDataApiHotelInfoTaskPost::default()
209        }
210    }
211}