google_search_console_api/
types.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Default, Debug, Serialize, Deserialize, Clone)]
9pub struct DimensionFilterGroup {
10 #[serde(rename = "groupType")]
12 pub group_type: Option<String>,
13 pub filters: Vec<DimensionFilterGroupFilter>,
15}
16
17#[derive(Default, Debug, Serialize, Deserialize, Clone)]
19pub struct DimensionFilterGroupFilter {
20 pub dimension: Option<String>,
22 pub operator: Option<String>,
24 pub expression: Option<String>,
26}
27
28#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
40#[serde(rename_all = "camelCase")]
41pub enum Dimension {
42 Country,
44 Device,
46 Page,
48 Query,
50 SearchAppearance,
52 Date,
54}
55
56#[doc(hidden)]
57#[deprecated(since = "0.2.0", note = "Use `Dimension` instead")]
58pub type DIMENSION = Dimension;
59
60#[derive(Default, Debug, Serialize, Deserialize)]
64pub struct Sitemap {
65 pub path: Option<String>,
67 #[serde(rename = "lastSubmitted")]
69 pub last_submitted: Option<String>,
70 #[serde(rename = "isPending")]
72 pub is_pending: Option<bool>,
73 #[serde(rename = "isSitemapsIndex")]
75 pub is_sitemaps_index: Option<bool>,
76 #[serde(rename = "type")]
78 pub sitemap_type: Option<String>,
79 #[serde(rename = "lastDownloaded")]
81 pub last_downloaded: Option<String>,
82 pub warnings: Option<String>,
84 pub errors: Option<String>,
86 pub contents: Option<Vec<SitemapContent>>,
88}
89
90#[derive(Default, Debug, Serialize, Deserialize)]
92pub struct SitemapContent {
93 #[serde(rename = "type")]
95 pub content_type: Option<String>,
96 pub submitted: Option<String>,
98 pub indexed: Option<String>,
100}
101
102#[cfg(test)]
103mod tests {
104 use super::*;
105
106 #[test]
107 fn test_dimension_serialize() {
108 assert_eq!(
109 serde_json::to_string(&Dimension::Country).unwrap(),
110 "\"country\""
111 );
112 assert_eq!(
113 serde_json::to_string(&Dimension::Device).unwrap(),
114 "\"device\""
115 );
116 assert_eq!(
117 serde_json::to_string(&Dimension::Page).unwrap(),
118 "\"page\""
119 );
120 assert_eq!(
121 serde_json::to_string(&Dimension::Query).unwrap(),
122 "\"query\""
123 );
124 assert_eq!(
125 serde_json::to_string(&Dimension::SearchAppearance).unwrap(),
126 "\"searchAppearance\""
127 );
128 assert_eq!(
129 serde_json::to_string(&Dimension::Date).unwrap(),
130 "\"date\""
131 );
132 }
133
134 #[test]
135 fn test_dimension_deserialize() {
136 assert_eq!(
137 serde_json::from_str::<Dimension>("\"country\"").unwrap(),
138 Dimension::Country
139 );
140 assert_eq!(
141 serde_json::from_str::<Dimension>("\"query\"").unwrap(),
142 Dimension::Query
143 );
144 assert_eq!(
145 serde_json::from_str::<Dimension>("\"date\"").unwrap(),
146 Dimension::Date
147 );
148 }
149
150 #[test]
151 fn test_dimension_equality() {
152 assert_eq!(Dimension::Query, Dimension::Query);
153 assert_ne!(Dimension::Query, Dimension::Page);
154 }
155
156 #[test]
157 fn test_sitemap_deserialize() {
158 let json = r#"{
159 "path": "https://example.com/sitemap.xml",
160 "lastSubmitted": "2024-01-01T00:00:00Z",
161 "isPending": false,
162 "isSitemapsIndex": false,
163 "type": "sitemap"
164 }"#;
165
166 let sitemap: Sitemap = serde_json::from_str(json).unwrap();
167 assert_eq!(
168 sitemap.path,
169 Some("https://example.com/sitemap.xml".to_string())
170 );
171 assert_eq!(sitemap.is_pending, Some(false));
172 assert_eq!(sitemap.sitemap_type, Some("sitemap".to_string()));
173 }
174
175 #[test]
176 fn test_sitemap_default() {
177 let sitemap = Sitemap::default();
178 assert!(sitemap.path.is_none());
179 assert!(sitemap.is_pending.is_none());
180 }
181
182 #[test]
183 fn test_dimension_filter_group_serialize() {
184 let filter = DimensionFilterGroupFilter {
185 dimension: Some("query".to_string()),
186 operator: Some("contains".to_string()),
187 expression: Some("test".to_string()),
188 };
189
190 let group = DimensionFilterGroup {
191 group_type: Some("and".to_string()),
192 filters: vec![filter],
193 };
194
195 let json = serde_json::to_string(&group).unwrap();
196 assert!(json.contains("\"groupType\":\"and\""));
197 assert!(json.contains("\"dimension\":\"query\""));
198 assert!(json.contains("\"operator\":\"contains\""));
199 assert!(json.contains("\"expression\":\"test\""));
200 }
201}