1use chrono::{DateTime, NaiveDate, Utc};
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4use typed_builder::TypedBuilder;
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
12pub struct UserResponse {
13 pub user_id: i64,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
23pub struct HostsResponse {
24 pub hosts: Vec<HostInfo>,
26}
27
28#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
30#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
31pub enum HostDataStatus {
32 NotIndexed,
34 NotLoaded,
36 Ok,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
42pub struct HostInfo {
43 pub host_id: String,
45 pub ascii_host_url: String,
47 pub unicode_host_url: String,
49 pub verified: bool,
51 #[serde(skip_serializing_if = "Option::is_none")]
53 pub main_mirror: Option<Box<HostInfo>>,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
58pub struct FullHostInfo {
59 pub host_id: String,
61 pub ascii_host_url: String,
63 pub unicode_host_url: String,
65 pub verified: bool,
67 #[serde(skip_serializing_if = "Option::is_none")]
69 pub main_mirror: Option<Box<HostInfo>>,
70 pub host_data_status: Option<HostDataStatus>,
72 pub host_display_name: Option<String>,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
78pub struct AddHostResponse {
79 pub host_id: String,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
89pub struct FailInfo {
90 pub message: String,
92 pub reason: VerificationFailReason,
94}
95#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
97pub struct HostVerificationStatusResponse {
98 pub verification_state: VerificationState,
100 pub verification_type: VerificationType,
102 pub verification_uin: String,
104 pub applicable_verifiers: Vec<ExplicitVerificationType>,
106 pub latest_verification_time: Option<DateTime<Utc>>,
108 pub fail_info: Option<FailInfo>,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
114pub struct HostVerificationResponse {
115 pub verification_state: VerificationState,
117 pub verification_type: VerificationType,
119 pub verification_uin: String,
121 pub applicable_verifiers: Vec<ExplicitVerificationType>,
123}
124
125#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
127#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
128pub enum VerificationState {
129 None,
131 Verified,
133 InProgress,
135 VerificationFailed,
137 InternalError,
139}
140
141#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
143#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
144pub enum ExplicitVerificationType {
145 Dns,
147 MetaTag,
149 HtmlFile,
151}
152
153#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
155#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
156pub enum VerificationType {
157 Auto,
159 Delegated,
161 Pdd,
163 TxtFile,
165 Dns,
167 MetaTag,
169 HtmlFile,
171}
172
173#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
175#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
176pub enum VerificationFailReason {
177 DelegationCancelled,
179 DnsRecordNotFound,
181 MetaTagNotFound,
183 WrongHtmlPageContent,
185 PddVerificationCancelled,
187}
188
189#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
191pub struct OwnersResponse {
192 pub users: Vec<Owner>,
194}
195
196#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
198pub struct Owner {
199 pub user_login: String,
201 pub verification_uin: String,
203 pub verification_type: VerificationType,
205 #[serde(skip_serializing_if = "Option::is_none")]
207 pub verification_date: Option<DateTime<Utc>>,
208}
209
210#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
216pub struct HostSummaryResponse {
217 #[serde(skip_serializing_if = "Option::is_none")]
219 pub sqi: Option<f64>,
220 #[serde(default)]
222 pub searchable_pages_count: i64,
223 #[serde(default)]
225 pub excluded_pages_count: i64,
226 #[serde(default)]
228 pub site_problems: HashMap<SiteProblemSeverityEnum, i32>,
229}
230
231#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
233pub struct ExcludedPagesStatistics {
234 pub statuses: HashMap<ApiExcludedUrlStatus, i64>,
236}
237
238#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, TypedBuilder)]
240#[builder(field_defaults(default, setter(into)))]
241pub struct SqiHistoryRequest {
242 pub date_from: Option<DateTime<Utc>>,
243 pub date_to: Option<DateTime<Utc>>,
244}
245
246#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
248pub struct SqiHistoryResponse {
249 pub points: Vec<SqiPoint>,
251}
252
253#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
255pub struct SqiPoint {
256 pub date: DateTime<Utc>,
258 pub value: f64,
260}
261
262#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
268#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
269pub enum ApiQueryOrderField {
270 TotalShows,
272 TotalClicks,
274}
275
276#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
278#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
279pub enum ApiQueryIndicator {
280 TotalShows,
282 TotalClicks,
284 AvgShowPosition,
286 AvgClickPosition,
288}
289
290#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default)]
292#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
293pub enum ApiDeviceTypeIndicator {
294 #[default]
296 All,
297 Desktop,
299 MobileAndTablet,
301 Mobile,
303 Tablet,
305}
306
307#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, TypedBuilder)]
309pub struct PopularQueriesRequest {
310 pub order_by: ApiQueryOrderField,
312 #[serde(skip_serializing_if = "Option::is_none")]
314 #[builder(default, setter(into, strip_option))]
315 pub query_indicator: Option<ApiQueryIndicator>,
316 #[serde(skip_serializing_if = "Option::is_none")]
318 #[builder(default, setter(into, strip_option))]
319 pub device_type_indicator: Option<ApiDeviceTypeIndicator>,
320 #[serde(skip_serializing_if = "Option::is_none")]
322 #[builder(default, setter(into, strip_option))]
323 pub date_from: Option<NaiveDate>,
324 #[serde(skip_serializing_if = "Option::is_none")]
326 #[builder(default, setter(into, strip_option))]
327 pub date_to: Option<NaiveDate>,
328 #[serde(skip_serializing_if = "Option::is_none")]
330 #[builder(default, setter(into, strip_option))]
331 pub offset: Option<i32>,
332 #[serde(skip_serializing_if = "Option::is_none")]
334 #[builder(default, setter(into, strip_option))]
335 pub limit: Option<i32>,
336}
337
338#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
340pub struct PopularQueriesResponse {
341 pub queries: Vec<PopularQuery>,
343 pub date_from: NaiveDate,
345 pub date_to: NaiveDate,
347 pub count: i32,
349}
350
351#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
353pub struct PopularQuery {
354 pub query_id: String,
356 pub query_text: String,
358 pub indicators: std::collections::HashMap<ApiQueryIndicator, f64>,
360}
361
362#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, TypedBuilder)]
364pub struct QueryAnalyticsRequest {
365 pub query_indicator: Vec<ApiQueryIndicator>,
367 #[serde(skip_serializing_if = "Option::is_none")]
369 #[builder(default, setter(into, strip_option))]
370 pub device_type_indicator: Option<ApiDeviceTypeIndicator>,
371 #[serde(skip_serializing_if = "Option::is_none")]
373 #[builder(default, setter(into, strip_option))]
374 pub date_from: Option<DateTime<Utc>>,
375 #[serde(skip_serializing_if = "Option::is_none")]
377 #[builder(default, setter(into, strip_option))]
378 pub date_to: Option<DateTime<Utc>>,
379}
380
381#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
383pub struct QueryAnalyticsResponse {
384 pub indicators: std::collections::HashMap<ApiQueryIndicator, Vec<IndicatorPoint>>,
386}
387
388#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
390pub struct IndicatorPoint {
391 pub date: DateTime<Utc>,
393 pub value: f64,
395}
396
397#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, TypedBuilder)]
399pub struct QueryHistoryRequest {
400 pub query_indicator: Vec<ApiQueryIndicator>,
402 #[serde(skip_serializing_if = "Option::is_none")]
404 #[builder(default, setter(into, strip_option))]
405 pub device_type_indicator: Option<ApiDeviceTypeIndicator>,
406 #[serde(skip_serializing_if = "Option::is_none")]
408 #[builder(default, setter(into, strip_option))]
409 pub date_from: Option<NaiveDate>,
410 #[serde(skip_serializing_if = "Option::is_none")]
412 #[builder(default, setter(into, strip_option))]
413 pub date_to: Option<NaiveDate>,
414}
415
416#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
418pub struct QueryHistoryResponse {
419 pub query_id: String,
421 pub query_text: String,
423 pub indicators: std::collections::HashMap<ApiQueryIndicator, Vec<IndicatorPoint>>,
425}
426
427#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
433#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
434pub enum ApiSitemapSource {
435 RobotsTxt,
437 Webmaster,
439 IndexSitemap,
441}
442
443#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
445#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
446pub enum ApiSitemapType {
447 Sitemap,
449 IndexSitemap,
451}
452
453#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default, TypedBuilder)]
455#[builder(field_defaults(default, setter(into)))]
456pub struct GetSitemapsRequest {
457 #[serde(skip_serializing_if = "Option::is_none")]
459 pub parent_id: Option<String>,
460 #[serde(skip_serializing_if = "Option::is_none")]
462 pub limit: Option<i32>,
463 #[serde(skip_serializing_if = "Option::is_none")]
465 pub from: Option<String>,
466}
467
468#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
470pub struct SitemapsResponse {
471 pub sitemaps: Vec<SitemapInfo>,
473}
474
475#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
477pub struct SitemapInfo {
478 pub sitemap_id: String,
480 pub sitemap_url: String,
482 #[serde(skip_serializing_if = "Option::is_none")]
484 pub last_access_date: Option<DateTime<Utc>>,
485 pub errors_count: i32,
487 pub urls_count: i64,
489 pub children_count: i32,
491 pub sources: Vec<ApiSitemapSource>,
493 pub sitemap_type: ApiSitemapType,
495}
496
497#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default, TypedBuilder)]
499#[builder(field_defaults(default, setter(into)))]
500pub struct GetUserSitemapsRequest {
501 #[serde(skip_serializing_if = "Option::is_none")]
503 pub offset: Option<i32>,
504 #[serde(skip_serializing_if = "Option::is_none")]
506 pub limit: Option<i32>,
507}
508
509#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
511pub struct UserSitemapsResponse {
512 pub sitemaps: Vec<UserSitemapInfo>,
514 pub count: i32,
516}
517
518#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
520pub struct UserSitemapInfo {
521 pub sitemap_id: String,
523 pub sitemap_url: String,
525 pub added_date: DateTime<Utc>,
527}
528
529#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
531pub struct AddSitemapResponse {
532 pub sitemap_id: String,
534}
535
536#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
542#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
543pub enum IndexingStatusEnum {
544 #[serde(rename = "HTTP_2XX")]
546 Http2xx,
547 #[serde(rename = "HTTP_3XX")]
549 Http3xx,
550 #[serde(rename = "HTTP_4XX")]
552 Http4xx,
553 #[serde(rename = "HTTP_5XX")]
555 Http5xx,
556 Other,
558}
559
560#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
562#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
563pub enum SiteProblemSeverityEnum {
564 Fatal,
566 Critical,
568 PossibleProblem,
570 Recommendation,
572}
573
574#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
576#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
577pub enum ApiExcludedUrlStatus {
578 NothingFound,
580 HostError,
582 RedirectNotsearchable,
584 HttpError,
586 NotCanonical,
588 NotMainMirror,
590 ParserError,
592 RobotsHostError,
594 RobotsUrlError,
596 Duplicate,
598 CleanParams,
600 NoIndex,
602 ForbiddenByRobotsTxt,
604 UrlNotAllowed,
606 ContainsNoindexMetaTag,
608 ContainsNoindexXRobotsTagHeader,
610 SitemapForbidden,
612 SitemapNotAllowed,
614 LowQuality,
616 AlternativeDuplicate,
618 UserDuplicate,
620 CanonicalDuplicate,
622 RedirectDuplicate,
624 MovedPermanently,
626 MovedTemporarily,
628 MalwareDetected,
630 PhishingDetected,
632 AdultContent,
634 Other,
636}
637
638#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
640#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
641pub enum ApiImportantUrlChangeIndicator {
642 IndexingHttpCode,
644 SearchStatus,
646 Title,
648 Description,
650}
651
652#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, TypedBuilder)]
654#[builder(field_defaults(default, setter(into)))]
655pub struct IndexingHistoryRequest {
656 #[serde(skip_serializing_if = "Option::is_none")]
658 pub date_from: Option<DateTime<Utc>>,
659 #[serde(skip_serializing_if = "Option::is_none")]
661 pub date_to: Option<DateTime<Utc>>,
662}
663
664#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
666pub struct IndexingHistoryResponse {
667 pub indicators: HashMap<IndexingStatusEnum, Vec<IndexingHistoryPoint>>,
669}
670
671#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
673pub struct IndexingHistoryPoint {
674 pub date: DateTime<Utc>,
676 pub value: f64,
678}
679
680#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default, TypedBuilder)]
682#[builder(field_defaults(default, setter(into)))]
683pub struct GetIndexingSamplesRequest {
684 #[serde(skip_serializing_if = "Option::is_none")]
686 pub offset: Option<i32>,
687 #[serde(skip_serializing_if = "Option::is_none")]
689 pub limit: Option<i32>,
690}
691
692#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
694pub struct IndexingSamplesResponse {
695 pub samples: Vec<IndexingSample>,
697 pub count: i32,
699}
700
701#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
703pub struct IndexingSample {
704 pub url: String,
706 pub http_code: i32,
708 pub access_date: DateTime<Utc>,
710}
711
712#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
718#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
719pub enum ApiSearchEventEnum {
720 AppearedInSearch,
722 RemovedFromSearch,
724}
725
726#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
728pub struct SearchUrlsHistoryResponse {
729 pub history: Vec<SearchUrlsHistoryPoint>,
731}
732
733#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
735pub struct SearchUrlsHistoryPoint {
736 pub date: DateTime<Utc>,
738 pub value: i64,
740}
741
742#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default, TypedBuilder)]
744#[builder(field_defaults(default, setter(into)))]
745pub struct GetSearchUrlsSamplesRequest {
746 #[serde(skip_serializing_if = "Option::is_none")]
748 pub offset: Option<i32>,
749 #[serde(skip_serializing_if = "Option::is_none")]
751 pub limit: Option<i32>,
752}
753
754#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
756pub struct SearchUrlsSamplesResponse {
757 pub count: i32,
759 pub samples: Vec<SearchUrlsSample>,
761}
762
763#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
765pub struct SearchUrlsSample {
766 pub url: String,
768 pub last_access: DateTime<Utc>,
770 pub title: String,
772}
773
774#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
776pub struct SearchEventsHistoryResponse {
777 pub indicators: HashMap<ApiSearchEventEnum, Vec<SearchUrlsHistoryPoint>>,
779}
780
781#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default, TypedBuilder)]
783#[builder(field_defaults(default, setter(into)))]
784pub struct GetSearchEventsSamplesRequest {
785 #[serde(skip_serializing_if = "Option::is_none")]
787 pub offset: Option<i32>,
788 #[serde(skip_serializing_if = "Option::is_none")]
790 pub limit: Option<i32>,
791}
792
793#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
795pub struct SearchEventsSamplesResponse {
796 pub count: i32,
798 pub samples: Vec<SearchEventsSample>,
800}
801
802#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
804pub struct SearchEventsSample {
805 pub url: String,
807 pub title: String,
809 pub event_date: DateTime<Utc>,
811 pub last_access: DateTime<Utc>,
813 pub event: ApiSearchEventEnum,
815 #[serde(skip_serializing_if = "Option::is_none")]
817 pub excluded_url_status: Option<ApiExcludedUrlStatus>,
818 #[serde(skip_serializing_if = "Option::is_none")]
820 pub bad_http_status: Option<i32>,
821 #[serde(skip_serializing_if = "Option::is_none")]
823 pub target_url: Option<String>,
824}
825
826#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
832pub struct RecrawlResponse {
833 pub task_id: String,
835}
836
837#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, TypedBuilder)]
839#[builder(field_defaults(default, setter(into)))]
840pub struct GetRecrawlTasksRequest {
841 #[serde(skip_serializing_if = "Option::is_none")]
843 pub offset: Option<i32>,
844 #[serde(skip_serializing_if = "Option::is_none")]
846 pub limit: Option<i32>,
847 #[serde(skip_serializing_if = "Option::is_none")]
849 pub date_from: Option<DateTime<Utc>>,
850 #[serde(skip_serializing_if = "Option::is_none")]
852 pub date_to: Option<DateTime<Utc>>,
853}
854
855#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
857pub struct RecrawlTasksResponse {
858 pub tasks: Vec<RecrawlTask>,
860}
861
862#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
864pub struct RecrawlTask {
865 pub task_id: String,
867 pub url: String,
869 #[serde(skip_serializing_if = "Option::is_none")]
871 pub added_time: Option<DateTime<Utc>>,
872 pub state: RecrawlTaskState,
874}
875
876#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
878#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
879pub enum RecrawlTaskState {
880 InProgress,
882 Done,
884 Failed,
886}
887
888#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
890pub struct RecrawlQuotaResponse {
891 pub daily_quota: i32,
893 pub quota_remainder: i32,
895}
896
897#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
903#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
904pub enum ApiInternalLinksBrokenIndicator {
905 SiteError,
907 DisallowedByUser,
909 UnsupportedByRobot,
911}
912
913#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default, TypedBuilder)]
915#[builder(field_defaults(default, setter(into)))]
916pub struct BrokenLinksRequest {
917 #[serde(skip_serializing_if = "Option::is_none")]
919 pub indicator: Option<Vec<ApiInternalLinksBrokenIndicator>>,
920 #[serde(skip_serializing_if = "Option::is_none")]
922 pub offset: Option<i32>,
923 #[serde(skip_serializing_if = "Option::is_none")]
925 pub limit: Option<i32>,
926}
927
928#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
930pub struct BrokenLinksResponse {
931 pub count: i32,
933 pub links: Vec<BrokenLink>,
935}
936
937#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
939pub struct BrokenLink {
940 pub source_url: String,
942 pub destination_url: String,
944 pub discovery_date: NaiveDate,
946 pub source_last_access_date: NaiveDate,
948}
949
950#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, TypedBuilder)]
952#[builder(field_defaults(default, setter(into)))]
953pub struct BrokenLinkHistoryRequest {
954 #[serde(skip_serializing_if = "Option::is_none")]
956 pub date_from: Option<DateTime<Utc>>,
957 #[serde(skip_serializing_if = "Option::is_none")]
959 pub date_to: Option<DateTime<Utc>>,
960}
961
962#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
964pub struct BrokenLinkHistoryPoint {
965 pub date: DateTime<Utc>,
967 pub value: f64,
969}
970
971#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
973pub struct BrokenLinkHistoryResponse {
974 pub indicators: HashMap<ApiInternalLinksBrokenIndicator, Vec<BrokenLinkHistoryPoint>>,
976}
977
978#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default, TypedBuilder)]
980#[builder(field_defaults(default, setter(into)))]
981pub struct ExternalLinksRequest {
982 #[serde(skip_serializing_if = "Option::is_none")]
984 pub offset: Option<i32>,
985 #[serde(skip_serializing_if = "Option::is_none")]
987 pub limit: Option<i32>,
988}
989
990#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
992pub struct ExternalLinksResponse {
993 pub count: i32,
995 pub links: Vec<ExternalLink>,
997}
998
999#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
1001pub struct ExternalLink {
1002 pub source_url: String,
1004 pub destination_url: String,
1006 pub discovery_date: NaiveDate,
1008 pub source_last_access_date: NaiveDate,
1010}
1011
1012#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
1014#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1015pub enum ApiExternalLinksIndicator {
1016 LinksTotalCount,
1018}
1019
1020#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
1022pub struct ExternalLinksHistoryResponse {
1023 pub indicators: HashMap<ApiExternalLinksIndicator, Vec<ExternalLinksHistoryPoint>>,
1025}
1026
1027#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
1029pub struct ExternalLinksHistoryPoint {
1030 pub date: DateTime<Utc>,
1032 pub value: f64,
1034}
1035
1036#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
1042#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1043pub enum ApiSiteProblemTypeEnum {
1044 ConnectFailed,
1047 DisallowedInRobots,
1049 DnsError,
1051 MainPageError,
1053 Threats,
1055
1056 InsignificantCgiParameter,
1059 SlowAvgResponseTime,
1061 SslCertificateError,
1063 #[serde(rename = "URL_ALERT_4XX")]
1065 UrlAlert4xx,
1066 #[serde(rename = "URL_ALERT_5XX")]
1068 UrlAlert5xx,
1069
1070 DisallowedUrlsAlert,
1073 DocumentsMissingDescription,
1075 DocumentsMissingTitle,
1077 DuplicateContentAttrs,
1079 DuplicatePages,
1081 ErrorInRobotsTxt,
1083 ErrorsInSitemaps,
1085 FaviconError,
1087 MainMirrorIsNotHttps,
1089 MainPageRedirects,
1091 NoMetrikaCounterBinding,
1093 NoMetrikaCounterCrawlEnabled,
1095 NoRobotsTxt,
1097 NoSitemaps,
1099 NoSitemapModifications,
1101 NonWorkingVideo,
1103 #[serde(rename = "SOFT_404")]
1105 Soft404,
1106 TooManyDomainsOnSearch,
1108 VideohostOfferFailed,
1110 VideohostOfferIsNeeded,
1112 VideohostOfferNeedPaper,
1114
1115 BigFaviconAbsent,
1118 FaviconProblem,
1120 NoMetrikaCounter,
1122 NoRegions,
1124 NotInSprav,
1126 NotMobileFriendly,
1128 VygodaPossibleActivation,
1130}
1131
1132#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
1134#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
1135pub enum ApiSiteProblemState {
1136 Present,
1138 Absent,
1140 Undefined,
1142}
1143
1144#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
1146pub struct DiagnosticsResponse {
1147 pub problems: HashMap<ApiSiteProblemTypeEnum, SiteProblemInfo>,
1149}
1150
1151#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
1153pub struct SiteProblemInfo {
1154 pub severity: SiteProblemSeverityEnum,
1156 pub state: ApiSiteProblemState,
1158 pub last_state_update: Option<DateTime<Utc>>,
1160}
1161
1162#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
1168pub struct ImportantUrlsResponse {
1169 pub urls: Vec<ImportantUrl>,
1171}
1172
1173#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
1175pub struct ImportantUrl {
1176 pub url: String,
1178 #[serde(skip_serializing_if = "Option::is_none")]
1180 pub update_date: Option<DateTime<Utc>>,
1181 #[serde(default)]
1183 pub change_indicators: Vec<ApiImportantUrlChangeIndicator>,
1184 #[serde(skip_serializing_if = "Option::is_none")]
1186 pub indexing_status: Option<IndexingStatus>,
1187 #[serde(skip_serializing_if = "Option::is_none")]
1189 pub search_status: Option<SearchStatus>,
1190}
1191
1192#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
1194pub struct IndexingStatus {
1195 pub status: IndexingStatusEnum,
1197 #[serde(skip_serializing_if = "Option::is_none")]
1199 pub http_code: Option<i32>,
1200 pub access_date: DateTime<Utc>,
1202}
1203
1204#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
1206pub struct SearchStatus {
1207 pub title: String,
1209 #[serde(skip_serializing_if = "Option::is_none")]
1211 pub description: Option<String>,
1212 pub last_access: DateTime<Utc>,
1214 #[serde(skip_serializing_if = "Option::is_none")]
1216 pub excluded_url_status: Option<ApiExcludedUrlStatus>,
1217 #[serde(skip_serializing_if = "Option::is_none")]
1219 pub bad_http_status: Option<i32>,
1220 pub searchable: bool,
1222 #[serde(skip_serializing_if = "Option::is_none")]
1224 pub target_url: Option<String>,
1225}
1226
1227#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
1229pub struct ImportantUrlHistoryResponse {
1230 pub history: Vec<ImportantUrl>,
1232}