1use super::*;
2#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub struct GeoCoordinates {
6 pub r#address: Vec<AddressProperty>,
8 pub r#address_country: Vec<AddressCountryProperty>,
10 pub r#elevation: Vec<ElevationProperty>,
12 pub r#latitude: Vec<LatitudeProperty>,
14 pub r#longitude: Vec<LongitudeProperty>,
16 pub r#postal_code: Vec<PostalCodeProperty>,
18 pub r#additional_type: Vec<AdditionalTypeProperty>,
20 pub r#alternate_name: Vec<AlternateNameProperty>,
22 pub r#description: Vec<DescriptionProperty>,
24 pub r#disambiguating_description: Vec<DisambiguatingDescriptionProperty>,
26 pub r#identifier: Vec<IdentifierProperty>,
28 pub r#image: Vec<ImageProperty>,
30 pub r#main_entity_of_page: Vec<MainEntityOfPageProperty>,
32 pub r#name: Vec<NameProperty>,
34 pub r#potential_action: Vec<PotentialActionProperty>,
36 pub r#same_as: Vec<SameAsProperty>,
38 pub r#subject_of: Vec<SubjectOfProperty>,
40 pub r#url: Vec<UrlProperty>,
42}
43pub trait GeoCoordinatesTrait {
45 fn get_address(&self) -> &[AddressProperty];
47 fn take_address(&mut self) -> Vec<AddressProperty>;
49 fn get_address_country(&self) -> &[AddressCountryProperty];
51 fn take_address_country(&mut self) -> Vec<AddressCountryProperty>;
53 fn get_elevation(&self) -> &[ElevationProperty];
55 fn take_elevation(&mut self) -> Vec<ElevationProperty>;
57 fn get_latitude(&self) -> &[LatitudeProperty];
59 fn take_latitude(&mut self) -> Vec<LatitudeProperty>;
61 fn get_longitude(&self) -> &[LongitudeProperty];
63 fn take_longitude(&mut self) -> Vec<LongitudeProperty>;
65 fn get_postal_code(&self) -> &[PostalCodeProperty];
67 fn take_postal_code(&mut self) -> Vec<PostalCodeProperty>;
69}
70impl GeoCoordinatesTrait for GeoCoordinates {
71 fn get_address(&self) -> &[AddressProperty] {
72 self.r#address.as_slice()
73 }
74 fn take_address(&mut self) -> Vec<AddressProperty> {
75 std::mem::take(&mut self.r#address)
76 }
77 fn get_address_country(&self) -> &[AddressCountryProperty] {
78 self.r#address_country.as_slice()
79 }
80 fn take_address_country(&mut self) -> Vec<AddressCountryProperty> {
81 std::mem::take(&mut self.r#address_country)
82 }
83 fn get_elevation(&self) -> &[ElevationProperty] {
84 self.r#elevation.as_slice()
85 }
86 fn take_elevation(&mut self) -> Vec<ElevationProperty> {
87 std::mem::take(&mut self.r#elevation)
88 }
89 fn get_latitude(&self) -> &[LatitudeProperty] {
90 self.r#latitude.as_slice()
91 }
92 fn take_latitude(&mut self) -> Vec<LatitudeProperty> {
93 std::mem::take(&mut self.r#latitude)
94 }
95 fn get_longitude(&self) -> &[LongitudeProperty] {
96 self.r#longitude.as_slice()
97 }
98 fn take_longitude(&mut self) -> Vec<LongitudeProperty> {
99 std::mem::take(&mut self.r#longitude)
100 }
101 fn get_postal_code(&self) -> &[PostalCodeProperty] {
102 self.r#postal_code.as_slice()
103 }
104 fn take_postal_code(&mut self) -> Vec<PostalCodeProperty> {
105 std::mem::take(&mut self.r#postal_code)
106 }
107}
108impl StructuredValueTrait for GeoCoordinates {}
109impl ThingTrait for GeoCoordinates {
110 fn get_additional_type(&self) -> &[AdditionalTypeProperty] {
111 self.r#additional_type.as_slice()
112 }
113 fn take_additional_type(&mut self) -> Vec<AdditionalTypeProperty> {
114 std::mem::take(&mut self.r#additional_type)
115 }
116 fn get_alternate_name(&self) -> &[AlternateNameProperty] {
117 self.r#alternate_name.as_slice()
118 }
119 fn take_alternate_name(&mut self) -> Vec<AlternateNameProperty> {
120 std::mem::take(&mut self.r#alternate_name)
121 }
122 fn get_description(&self) -> &[DescriptionProperty] {
123 self.r#description.as_slice()
124 }
125 fn take_description(&mut self) -> Vec<DescriptionProperty> {
126 std::mem::take(&mut self.r#description)
127 }
128 fn get_disambiguating_description(&self) -> &[DisambiguatingDescriptionProperty] {
129 self.r#disambiguating_description.as_slice()
130 }
131 fn take_disambiguating_description(&mut self) -> Vec<DisambiguatingDescriptionProperty> {
132 std::mem::take(&mut self.r#disambiguating_description)
133 }
134 fn get_identifier(&self) -> &[IdentifierProperty] {
135 self.r#identifier.as_slice()
136 }
137 fn take_identifier(&mut self) -> Vec<IdentifierProperty> {
138 std::mem::take(&mut self.r#identifier)
139 }
140 fn get_image(&self) -> &[ImageProperty] {
141 self.r#image.as_slice()
142 }
143 fn take_image(&mut self) -> Vec<ImageProperty> {
144 std::mem::take(&mut self.r#image)
145 }
146 fn get_main_entity_of_page(&self) -> &[MainEntityOfPageProperty] {
147 self.r#main_entity_of_page.as_slice()
148 }
149 fn take_main_entity_of_page(&mut self) -> Vec<MainEntityOfPageProperty> {
150 std::mem::take(&mut self.r#main_entity_of_page)
151 }
152 fn get_name(&self) -> &[NameProperty] {
153 self.r#name.as_slice()
154 }
155 fn take_name(&mut self) -> Vec<NameProperty> {
156 std::mem::take(&mut self.r#name)
157 }
158 fn get_potential_action(&self) -> &[PotentialActionProperty] {
159 self.r#potential_action.as_slice()
160 }
161 fn take_potential_action(&mut self) -> Vec<PotentialActionProperty> {
162 std::mem::take(&mut self.r#potential_action)
163 }
164 fn get_same_as(&self) -> &[SameAsProperty] {
165 self.r#same_as.as_slice()
166 }
167 fn take_same_as(&mut self) -> Vec<SameAsProperty> {
168 std::mem::take(&mut self.r#same_as)
169 }
170 fn get_subject_of(&self) -> &[SubjectOfProperty] {
171 self.r#subject_of.as_slice()
172 }
173 fn take_subject_of(&mut self) -> Vec<SubjectOfProperty> {
174 std::mem::take(&mut self.r#subject_of)
175 }
176 fn get_url(&self) -> &[UrlProperty] {
177 self.r#url.as_slice()
178 }
179 fn take_url(&mut self) -> Vec<UrlProperty> {
180 std::mem::take(&mut self.r#url)
181 }
182}
183#[cfg(feature = "serde")]
184mod serde {
185 use std::{fmt, fmt::Formatter};
186
187 use ::serde::{
188 de, de::Visitor, ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer,
189 };
190
191 use super::*;
192 impl Serialize for GeoCoordinates {
193 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
194 where
195 S: Serializer,
196 {
197 let len: usize = [
198 !Vec::is_empty(&self.r#address) as usize,
199 !Vec::is_empty(&self.r#address_country) as usize,
200 !Vec::is_empty(&self.r#elevation) as usize,
201 !Vec::is_empty(&self.r#latitude) as usize,
202 !Vec::is_empty(&self.r#longitude) as usize,
203 !Vec::is_empty(&self.r#postal_code) as usize,
204 !Vec::is_empty(&self.r#additional_type) as usize,
205 !Vec::is_empty(&self.r#alternate_name) as usize,
206 !Vec::is_empty(&self.r#description) as usize,
207 !Vec::is_empty(&self.r#disambiguating_description) as usize,
208 !Vec::is_empty(&self.r#identifier) as usize,
209 !Vec::is_empty(&self.r#image) as usize,
210 !Vec::is_empty(&self.r#main_entity_of_page) as usize,
211 !Vec::is_empty(&self.r#name) as usize,
212 !Vec::is_empty(&self.r#potential_action) as usize,
213 !Vec::is_empty(&self.r#same_as) as usize,
214 !Vec::is_empty(&self.r#subject_of) as usize,
215 !Vec::is_empty(&self.r#url) as usize,
216 ]
217 .iter()
218 .sum();
219 let mut serialize_struct =
220 Serializer::serialize_struct(serializer, "GeoCoordinates", len)?;
221 if !Vec::is_empty(&self.r#address) {
222 serialize_struct.serialize_field("address", {
223 struct SerializeWith<'a>(&'a Vec<AddressProperty>);
224 impl<'a> Serialize for SerializeWith<'a> {
225 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
226 where
227 S: Serializer,
228 {
229 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
230 self.0, serializer,
231 )
232 }
233 }
234 &SerializeWith(&self.r#address)
235 })?;
236 } else {
237 serialize_struct.skip_field("address")?;
238 }
239 if !Vec::is_empty(&self.r#address_country) {
240 serialize_struct.serialize_field("addressCountry", {
241 struct SerializeWith<'a>(&'a Vec<AddressCountryProperty>);
242 impl<'a> Serialize for SerializeWith<'a> {
243 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
244 where
245 S: Serializer,
246 {
247 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
248 self.0, serializer,
249 )
250 }
251 }
252 &SerializeWith(&self.r#address_country)
253 })?;
254 } else {
255 serialize_struct.skip_field("addressCountry")?;
256 }
257 if !Vec::is_empty(&self.r#elevation) {
258 serialize_struct.serialize_field("elevation", {
259 struct SerializeWith<'a>(&'a Vec<ElevationProperty>);
260 impl<'a> Serialize for SerializeWith<'a> {
261 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
262 where
263 S: Serializer,
264 {
265 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
266 self.0, serializer,
267 )
268 }
269 }
270 &SerializeWith(&self.r#elevation)
271 })?;
272 } else {
273 serialize_struct.skip_field("elevation")?;
274 }
275 if !Vec::is_empty(&self.r#latitude) {
276 serialize_struct.serialize_field("latitude", {
277 struct SerializeWith<'a>(&'a Vec<LatitudeProperty>);
278 impl<'a> Serialize for SerializeWith<'a> {
279 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
280 where
281 S: Serializer,
282 {
283 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
284 self.0, serializer,
285 )
286 }
287 }
288 &SerializeWith(&self.r#latitude)
289 })?;
290 } else {
291 serialize_struct.skip_field("latitude")?;
292 }
293 if !Vec::is_empty(&self.r#longitude) {
294 serialize_struct.serialize_field("longitude", {
295 struct SerializeWith<'a>(&'a Vec<LongitudeProperty>);
296 impl<'a> Serialize for SerializeWith<'a> {
297 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
298 where
299 S: Serializer,
300 {
301 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
302 self.0, serializer,
303 )
304 }
305 }
306 &SerializeWith(&self.r#longitude)
307 })?;
308 } else {
309 serialize_struct.skip_field("longitude")?;
310 }
311 if !Vec::is_empty(&self.r#postal_code) {
312 serialize_struct.serialize_field("postalCode", {
313 struct SerializeWith<'a>(&'a Vec<PostalCodeProperty>);
314 impl<'a> Serialize for SerializeWith<'a> {
315 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
316 where
317 S: Serializer,
318 {
319 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
320 self.0, serializer,
321 )
322 }
323 }
324 &SerializeWith(&self.r#postal_code)
325 })?;
326 } else {
327 serialize_struct.skip_field("postalCode")?;
328 }
329 if !Vec::is_empty(&self.r#additional_type) {
330 serialize_struct.serialize_field("additionalType", {
331 struct SerializeWith<'a>(&'a Vec<AdditionalTypeProperty>);
332 impl<'a> Serialize for SerializeWith<'a> {
333 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
334 where
335 S: Serializer,
336 {
337 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
338 self.0, serializer,
339 )
340 }
341 }
342 &SerializeWith(&self.r#additional_type)
343 })?;
344 } else {
345 serialize_struct.skip_field("additionalType")?;
346 }
347 if !Vec::is_empty(&self.r#alternate_name) {
348 serialize_struct.serialize_field("alternateName", {
349 struct SerializeWith<'a>(&'a Vec<AlternateNameProperty>);
350 impl<'a> Serialize for SerializeWith<'a> {
351 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
352 where
353 S: Serializer,
354 {
355 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
356 self.0, serializer,
357 )
358 }
359 }
360 &SerializeWith(&self.r#alternate_name)
361 })?;
362 } else {
363 serialize_struct.skip_field("alternateName")?;
364 }
365 if !Vec::is_empty(&self.r#description) {
366 serialize_struct.serialize_field("description", {
367 struct SerializeWith<'a>(&'a Vec<DescriptionProperty>);
368 impl<'a> Serialize for SerializeWith<'a> {
369 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
370 where
371 S: Serializer,
372 {
373 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
374 self.0, serializer,
375 )
376 }
377 }
378 &SerializeWith(&self.r#description)
379 })?;
380 } else {
381 serialize_struct.skip_field("description")?;
382 }
383 if !Vec::is_empty(&self.r#disambiguating_description) {
384 serialize_struct.serialize_field("disambiguatingDescription", {
385 struct SerializeWith<'a>(&'a Vec<DisambiguatingDescriptionProperty>);
386 impl<'a> Serialize for SerializeWith<'a> {
387 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
388 where
389 S: Serializer,
390 {
391 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
392 self.0, serializer,
393 )
394 }
395 }
396 &SerializeWith(&self.r#disambiguating_description)
397 })?;
398 } else {
399 serialize_struct.skip_field("disambiguatingDescription")?;
400 }
401 if !Vec::is_empty(&self.r#identifier) {
402 serialize_struct.serialize_field("identifier", {
403 struct SerializeWith<'a>(&'a Vec<IdentifierProperty>);
404 impl<'a> Serialize for SerializeWith<'a> {
405 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
406 where
407 S: Serializer,
408 {
409 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
410 self.0, serializer,
411 )
412 }
413 }
414 &SerializeWith(&self.r#identifier)
415 })?;
416 } else {
417 serialize_struct.skip_field("identifier")?;
418 }
419 if !Vec::is_empty(&self.r#image) {
420 serialize_struct.serialize_field("image", {
421 struct SerializeWith<'a>(&'a Vec<ImageProperty>);
422 impl<'a> Serialize for SerializeWith<'a> {
423 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
424 where
425 S: Serializer,
426 {
427 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
428 self.0, serializer,
429 )
430 }
431 }
432 &SerializeWith(&self.r#image)
433 })?;
434 } else {
435 serialize_struct.skip_field("image")?;
436 }
437 if !Vec::is_empty(&self.r#main_entity_of_page) {
438 serialize_struct.serialize_field("mainEntityOfPage", {
439 struct SerializeWith<'a>(&'a Vec<MainEntityOfPageProperty>);
440 impl<'a> Serialize for SerializeWith<'a> {
441 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
442 where
443 S: Serializer,
444 {
445 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
446 self.0, serializer,
447 )
448 }
449 }
450 &SerializeWith(&self.r#main_entity_of_page)
451 })?;
452 } else {
453 serialize_struct.skip_field("mainEntityOfPage")?;
454 }
455 if !Vec::is_empty(&self.r#name) {
456 serialize_struct.serialize_field("name", {
457 struct SerializeWith<'a>(&'a Vec<NameProperty>);
458 impl<'a> Serialize for SerializeWith<'a> {
459 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
460 where
461 S: Serializer,
462 {
463 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
464 self.0, serializer,
465 )
466 }
467 }
468 &SerializeWith(&self.r#name)
469 })?;
470 } else {
471 serialize_struct.skip_field("name")?;
472 }
473 if !Vec::is_empty(&self.r#potential_action) {
474 serialize_struct.serialize_field("potentialAction", {
475 struct SerializeWith<'a>(&'a Vec<PotentialActionProperty>);
476 impl<'a> Serialize for SerializeWith<'a> {
477 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
478 where
479 S: Serializer,
480 {
481 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
482 self.0, serializer,
483 )
484 }
485 }
486 &SerializeWith(&self.r#potential_action)
487 })?;
488 } else {
489 serialize_struct.skip_field("potentialAction")?;
490 }
491 if !Vec::is_empty(&self.r#same_as) {
492 serialize_struct.serialize_field("sameAs", {
493 struct SerializeWith<'a>(&'a Vec<SameAsProperty>);
494 impl<'a> Serialize for SerializeWith<'a> {
495 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
496 where
497 S: Serializer,
498 {
499 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
500 self.0, serializer,
501 )
502 }
503 }
504 &SerializeWith(&self.r#same_as)
505 })?;
506 } else {
507 serialize_struct.skip_field("sameAs")?;
508 }
509 if !Vec::is_empty(&self.r#subject_of) {
510 serialize_struct.serialize_field("subjectOf", {
511 struct SerializeWith<'a>(&'a Vec<SubjectOfProperty>);
512 impl<'a> Serialize for SerializeWith<'a> {
513 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
514 where
515 S: Serializer,
516 {
517 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
518 self.0, serializer,
519 )
520 }
521 }
522 &SerializeWith(&self.r#subject_of)
523 })?;
524 } else {
525 serialize_struct.skip_field("subjectOf")?;
526 }
527 if !Vec::is_empty(&self.r#url) {
528 serialize_struct.serialize_field("url", {
529 struct SerializeWith<'a>(&'a Vec<UrlProperty>);
530 impl<'a> Serialize for SerializeWith<'a> {
531 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
532 where
533 S: Serializer,
534 {
535 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
536 self.0, serializer,
537 )
538 }
539 }
540 &SerializeWith(&self.r#url)
541 })?;
542 } else {
543 serialize_struct.skip_field("url")?;
544 }
545 serialize_struct.end()
546 }
547 }
548 impl<'de> Deserialize<'de> for GeoCoordinates {
549 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
550 where
551 D: Deserializer<'de>,
552 {
553 enum Field {
554 Address,
555 AddressCountry,
556 Elevation,
557 Latitude,
558 Longitude,
559 PostalCode,
560 AdditionalType,
561 AlternateName,
562 Description,
563 DisambiguatingDescription,
564 Identifier,
565 Image,
566 MainEntityOfPage,
567 Name,
568 PotentialAction,
569 SameAs,
570 SubjectOf,
571 Url,
572 Ignore,
573 }
574 struct FieldVisitor;
575 impl<'de> Visitor<'de> for FieldVisitor {
576 type Value = Field;
577 fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
578 formatter.write_str("field identifier")
579 }
580 fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
581 where
582 E: de::Error,
583 {
584 match value {
585 "address" => Ok(Field::Address),
586 "addressCountry" => Ok(Field::AddressCountry),
587 "elevation" => Ok(Field::Elevation),
588 "latitude" => Ok(Field::Latitude),
589 "longitude" => Ok(Field::Longitude),
590 "postalCode" => Ok(Field::PostalCode),
591 "additionalType" => Ok(Field::AdditionalType),
592 "alternateName" => Ok(Field::AlternateName),
593 "description" => Ok(Field::Description),
594 "disambiguatingDescription" => Ok(Field::DisambiguatingDescription),
595 "identifier" => Ok(Field::Identifier),
596 "image" => Ok(Field::Image),
597 "mainEntityOfPage" => Ok(Field::MainEntityOfPage),
598 "name" => Ok(Field::Name),
599 "potentialAction" => Ok(Field::PotentialAction),
600 "sameAs" => Ok(Field::SameAs),
601 "subjectOf" => Ok(Field::SubjectOf),
602 "url" => Ok(Field::Url),
603 "id" | "type" => Ok(Field::Ignore),
604 _ => Err(de::Error::unknown_field(value, FIELDS)),
605 }
606 }
607 fn visit_bytes<E>(self, value: &[u8]) -> Result<Self::Value, E>
608 where
609 E: de::Error,
610 {
611 match value {
612 b"address" => Ok(Field::Address),
613 b"addressCountry" => Ok(Field::AddressCountry),
614 b"elevation" => Ok(Field::Elevation),
615 b"latitude" => Ok(Field::Latitude),
616 b"longitude" => Ok(Field::Longitude),
617 b"postalCode" => Ok(Field::PostalCode),
618 b"additionalType" => Ok(Field::AdditionalType),
619 b"alternateName" => Ok(Field::AlternateName),
620 b"description" => Ok(Field::Description),
621 b"disambiguatingDescription" => Ok(Field::DisambiguatingDescription),
622 b"identifier" => Ok(Field::Identifier),
623 b"image" => Ok(Field::Image),
624 b"mainEntityOfPage" => Ok(Field::MainEntityOfPage),
625 b"name" => Ok(Field::Name),
626 b"potentialAction" => Ok(Field::PotentialAction),
627 b"sameAs" => Ok(Field::SameAs),
628 b"subjectOf" => Ok(Field::SubjectOf),
629 b"url" => Ok(Field::Url),
630 b"id" | b"type" => Ok(Field::Ignore),
631 _ => {
632 let value = &String::from_utf8_lossy(value);
633 Err(de::Error::unknown_field(value, FIELDS))
634 }
635 }
636 }
637 }
638 impl<'de> Deserialize<'de> for Field {
639 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
640 where
641 D: Deserializer<'de>,
642 {
643 deserializer.deserialize_identifier(FieldVisitor)
644 }
645 }
646 struct ClassVisitor;
647 impl<'de> Visitor<'de> for ClassVisitor {
648 type Value = GeoCoordinates;
649 fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
650 formatter.write_str("schema.org schema GeoCoordinates")
651 }
652 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
653 where
654 A: de::MapAccess<'de>,
655 {
656 let mut r#address_property = None;
657 let mut r#address_country_property = None;
658 let mut r#elevation_property = None;
659 let mut r#latitude_property = None;
660 let mut r#longitude_property = None;
661 let mut r#postal_code_property = None;
662 let mut r#additional_type_property = None;
663 let mut r#alternate_name_property = None;
664 let mut r#description_property = None;
665 let mut r#disambiguating_description_property = None;
666 let mut r#identifier_property = None;
667 let mut r#image_property = None;
668 let mut r#main_entity_of_page_property = None;
669 let mut r#name_property = None;
670 let mut r#potential_action_property = None;
671 let mut r#same_as_property = None;
672 let mut r#subject_of_property = None;
673 let mut r#url_property = None;
674 while let Some(key) = map.next_key::<Field>()? {
675 match key {
676 Field::Address => {
677 if r#address_property.is_some() {
678 return Err(<A::Error as de::Error>::duplicate_field(
679 "address",
680 ));
681 }
682 r#address_property = Some({
683 struct DeserializeWith(Vec<AddressProperty>);
684 impl<'de> Deserialize<'de> for DeserializeWith {
685 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
686 where
687 D: Deserializer<'de>,
688 {
689 Ok(DeserializeWith(serde_with::As::<
690 serde_with::OneOrMany<serde_with::Same>,
691 >::deserialize(deserializer)?))
692 }
693 }
694 match map.next_value::<DeserializeWith>() {
695 Ok(deserialize_with) => deserialize_with.0,
696 Err(err) => {
697 return Err(err);
698 }
699 }
700 });
701 }
702 Field::AddressCountry => {
703 if r#address_country_property.is_some() {
704 return Err(<A::Error as de::Error>::duplicate_field(
705 "addressCountry",
706 ));
707 }
708 r#address_country_property = Some({
709 struct DeserializeWith(Vec<AddressCountryProperty>);
710 impl<'de> Deserialize<'de> for DeserializeWith {
711 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
712 where
713 D: Deserializer<'de>,
714 {
715 Ok(DeserializeWith(serde_with::As::<
716 serde_with::OneOrMany<serde_with::Same>,
717 >::deserialize(deserializer)?))
718 }
719 }
720 match map.next_value::<DeserializeWith>() {
721 Ok(deserialize_with) => deserialize_with.0,
722 Err(err) => {
723 return Err(err);
724 }
725 }
726 });
727 }
728 Field::Elevation => {
729 if r#elevation_property.is_some() {
730 return Err(<A::Error as de::Error>::duplicate_field(
731 "elevation",
732 ));
733 }
734 r#elevation_property = Some({
735 struct DeserializeWith(Vec<ElevationProperty>);
736 impl<'de> Deserialize<'de> for DeserializeWith {
737 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
738 where
739 D: Deserializer<'de>,
740 {
741 Ok(DeserializeWith(serde_with::As::<
742 serde_with::OneOrMany<serde_with::Same>,
743 >::deserialize(deserializer)?))
744 }
745 }
746 match map.next_value::<DeserializeWith>() {
747 Ok(deserialize_with) => deserialize_with.0,
748 Err(err) => {
749 return Err(err);
750 }
751 }
752 });
753 }
754 Field::Latitude => {
755 if r#latitude_property.is_some() {
756 return Err(<A::Error as de::Error>::duplicate_field(
757 "latitude",
758 ));
759 }
760 r#latitude_property = Some({
761 struct DeserializeWith(Vec<LatitudeProperty>);
762 impl<'de> Deserialize<'de> for DeserializeWith {
763 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
764 where
765 D: Deserializer<'de>,
766 {
767 Ok(DeserializeWith(serde_with::As::<
768 serde_with::OneOrMany<serde_with::Same>,
769 >::deserialize(deserializer)?))
770 }
771 }
772 match map.next_value::<DeserializeWith>() {
773 Ok(deserialize_with) => deserialize_with.0,
774 Err(err) => {
775 return Err(err);
776 }
777 }
778 });
779 }
780 Field::Longitude => {
781 if r#longitude_property.is_some() {
782 return Err(<A::Error as de::Error>::duplicate_field(
783 "longitude",
784 ));
785 }
786 r#longitude_property = Some({
787 struct DeserializeWith(Vec<LongitudeProperty>);
788 impl<'de> Deserialize<'de> for DeserializeWith {
789 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
790 where
791 D: Deserializer<'de>,
792 {
793 Ok(DeserializeWith(serde_with::As::<
794 serde_with::OneOrMany<serde_with::Same>,
795 >::deserialize(deserializer)?))
796 }
797 }
798 match map.next_value::<DeserializeWith>() {
799 Ok(deserialize_with) => deserialize_with.0,
800 Err(err) => {
801 return Err(err);
802 }
803 }
804 });
805 }
806 Field::PostalCode => {
807 if r#postal_code_property.is_some() {
808 return Err(<A::Error as de::Error>::duplicate_field(
809 "postalCode",
810 ));
811 }
812 r#postal_code_property = Some({
813 struct DeserializeWith(Vec<PostalCodeProperty>);
814 impl<'de> Deserialize<'de> for DeserializeWith {
815 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
816 where
817 D: Deserializer<'de>,
818 {
819 Ok(DeserializeWith(serde_with::As::<
820 serde_with::OneOrMany<serde_with::Same>,
821 >::deserialize(deserializer)?))
822 }
823 }
824 match map.next_value::<DeserializeWith>() {
825 Ok(deserialize_with) => deserialize_with.0,
826 Err(err) => {
827 return Err(err);
828 }
829 }
830 });
831 }
832 Field::AdditionalType => {
833 if r#additional_type_property.is_some() {
834 return Err(<A::Error as de::Error>::duplicate_field(
835 "additionalType",
836 ));
837 }
838 r#additional_type_property = Some({
839 struct DeserializeWith(Vec<AdditionalTypeProperty>);
840 impl<'de> Deserialize<'de> for DeserializeWith {
841 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
842 where
843 D: Deserializer<'de>,
844 {
845 Ok(DeserializeWith(serde_with::As::<
846 serde_with::OneOrMany<serde_with::Same>,
847 >::deserialize(deserializer)?))
848 }
849 }
850 match map.next_value::<DeserializeWith>() {
851 Ok(deserialize_with) => deserialize_with.0,
852 Err(err) => {
853 return Err(err);
854 }
855 }
856 });
857 }
858 Field::AlternateName => {
859 if r#alternate_name_property.is_some() {
860 return Err(<A::Error as de::Error>::duplicate_field(
861 "alternateName",
862 ));
863 }
864 r#alternate_name_property = Some({
865 struct DeserializeWith(Vec<AlternateNameProperty>);
866 impl<'de> Deserialize<'de> for DeserializeWith {
867 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
868 where
869 D: Deserializer<'de>,
870 {
871 Ok(DeserializeWith(serde_with::As::<
872 serde_with::OneOrMany<serde_with::Same>,
873 >::deserialize(deserializer)?))
874 }
875 }
876 match map.next_value::<DeserializeWith>() {
877 Ok(deserialize_with) => deserialize_with.0,
878 Err(err) => {
879 return Err(err);
880 }
881 }
882 });
883 }
884 Field::Description => {
885 if r#description_property.is_some() {
886 return Err(<A::Error as de::Error>::duplicate_field(
887 "description",
888 ));
889 }
890 r#description_property = Some({
891 struct DeserializeWith(Vec<DescriptionProperty>);
892 impl<'de> Deserialize<'de> for DeserializeWith {
893 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
894 where
895 D: Deserializer<'de>,
896 {
897 Ok(DeserializeWith(serde_with::As::<
898 serde_with::OneOrMany<serde_with::Same>,
899 >::deserialize(deserializer)?))
900 }
901 }
902 match map.next_value::<DeserializeWith>() {
903 Ok(deserialize_with) => deserialize_with.0,
904 Err(err) => {
905 return Err(err);
906 }
907 }
908 });
909 }
910 Field::DisambiguatingDescription => {
911 if r#disambiguating_description_property.is_some() {
912 return Err(<A::Error as de::Error>::duplicate_field(
913 "disambiguatingDescription",
914 ));
915 }
916 r#disambiguating_description_property = Some({
917 struct DeserializeWith(Vec<DisambiguatingDescriptionProperty>);
918 impl<'de> Deserialize<'de> for DeserializeWith {
919 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
920 where
921 D: Deserializer<'de>,
922 {
923 Ok(DeserializeWith(serde_with::As::<
924 serde_with::OneOrMany<serde_with::Same>,
925 >::deserialize(deserializer)?))
926 }
927 }
928 match map.next_value::<DeserializeWith>() {
929 Ok(deserialize_with) => deserialize_with.0,
930 Err(err) => {
931 return Err(err);
932 }
933 }
934 });
935 }
936 Field::Identifier => {
937 if r#identifier_property.is_some() {
938 return Err(<A::Error as de::Error>::duplicate_field(
939 "identifier",
940 ));
941 }
942 r#identifier_property = Some({
943 struct DeserializeWith(Vec<IdentifierProperty>);
944 impl<'de> Deserialize<'de> for DeserializeWith {
945 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
946 where
947 D: Deserializer<'de>,
948 {
949 Ok(DeserializeWith(serde_with::As::<
950 serde_with::OneOrMany<serde_with::Same>,
951 >::deserialize(deserializer)?))
952 }
953 }
954 match map.next_value::<DeserializeWith>() {
955 Ok(deserialize_with) => deserialize_with.0,
956 Err(err) => {
957 return Err(err);
958 }
959 }
960 });
961 }
962 Field::Image => {
963 if r#image_property.is_some() {
964 return Err(<A::Error as de::Error>::duplicate_field("image"));
965 }
966 r#image_property = Some({
967 struct DeserializeWith(Vec<ImageProperty>);
968 impl<'de> Deserialize<'de> for DeserializeWith {
969 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
970 where
971 D: Deserializer<'de>,
972 {
973 Ok(DeserializeWith(serde_with::As::<
974 serde_with::OneOrMany<serde_with::Same>,
975 >::deserialize(deserializer)?))
976 }
977 }
978 match map.next_value::<DeserializeWith>() {
979 Ok(deserialize_with) => deserialize_with.0,
980 Err(err) => {
981 return Err(err);
982 }
983 }
984 });
985 }
986 Field::MainEntityOfPage => {
987 if r#main_entity_of_page_property.is_some() {
988 return Err(<A::Error as de::Error>::duplicate_field(
989 "mainEntityOfPage",
990 ));
991 }
992 r#main_entity_of_page_property = Some({
993 struct DeserializeWith(Vec<MainEntityOfPageProperty>);
994 impl<'de> Deserialize<'de> for DeserializeWith {
995 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
996 where
997 D: Deserializer<'de>,
998 {
999 Ok(DeserializeWith(serde_with::As::<
1000 serde_with::OneOrMany<serde_with::Same>,
1001 >::deserialize(deserializer)?))
1002 }
1003 }
1004 match map.next_value::<DeserializeWith>() {
1005 Ok(deserialize_with) => deserialize_with.0,
1006 Err(err) => {
1007 return Err(err);
1008 }
1009 }
1010 });
1011 }
1012 Field::Name => {
1013 if r#name_property.is_some() {
1014 return Err(<A::Error as de::Error>::duplicate_field("name"));
1015 }
1016 r#name_property = Some({
1017 struct DeserializeWith(Vec<NameProperty>);
1018 impl<'de> Deserialize<'de> for DeserializeWith {
1019 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1020 where
1021 D: Deserializer<'de>,
1022 {
1023 Ok(DeserializeWith(serde_with::As::<
1024 serde_with::OneOrMany<serde_with::Same>,
1025 >::deserialize(deserializer)?))
1026 }
1027 }
1028 match map.next_value::<DeserializeWith>() {
1029 Ok(deserialize_with) => deserialize_with.0,
1030 Err(err) => {
1031 return Err(err);
1032 }
1033 }
1034 });
1035 }
1036 Field::PotentialAction => {
1037 if r#potential_action_property.is_some() {
1038 return Err(<A::Error as de::Error>::duplicate_field(
1039 "potentialAction",
1040 ));
1041 }
1042 r#potential_action_property = Some({
1043 struct DeserializeWith(Vec<PotentialActionProperty>);
1044 impl<'de> Deserialize<'de> for DeserializeWith {
1045 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1046 where
1047 D: Deserializer<'de>,
1048 {
1049 Ok(DeserializeWith(serde_with::As::<
1050 serde_with::OneOrMany<serde_with::Same>,
1051 >::deserialize(deserializer)?))
1052 }
1053 }
1054 match map.next_value::<DeserializeWith>() {
1055 Ok(deserialize_with) => deserialize_with.0,
1056 Err(err) => {
1057 return Err(err);
1058 }
1059 }
1060 });
1061 }
1062 Field::SameAs => {
1063 if r#same_as_property.is_some() {
1064 return Err(<A::Error as de::Error>::duplicate_field("sameAs"));
1065 }
1066 r#same_as_property = Some({
1067 struct DeserializeWith(Vec<SameAsProperty>);
1068 impl<'de> Deserialize<'de> for DeserializeWith {
1069 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1070 where
1071 D: Deserializer<'de>,
1072 {
1073 Ok(DeserializeWith(serde_with::As::<
1074 serde_with::OneOrMany<serde_with::Same>,
1075 >::deserialize(deserializer)?))
1076 }
1077 }
1078 match map.next_value::<DeserializeWith>() {
1079 Ok(deserialize_with) => deserialize_with.0,
1080 Err(err) => {
1081 return Err(err);
1082 }
1083 }
1084 });
1085 }
1086 Field::SubjectOf => {
1087 if r#subject_of_property.is_some() {
1088 return Err(<A::Error as de::Error>::duplicate_field(
1089 "subjectOf",
1090 ));
1091 }
1092 r#subject_of_property = Some({
1093 struct DeserializeWith(Vec<SubjectOfProperty>);
1094 impl<'de> Deserialize<'de> for DeserializeWith {
1095 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1096 where
1097 D: Deserializer<'de>,
1098 {
1099 Ok(DeserializeWith(serde_with::As::<
1100 serde_with::OneOrMany<serde_with::Same>,
1101 >::deserialize(deserializer)?))
1102 }
1103 }
1104 match map.next_value::<DeserializeWith>() {
1105 Ok(deserialize_with) => deserialize_with.0,
1106 Err(err) => {
1107 return Err(err);
1108 }
1109 }
1110 });
1111 }
1112 Field::Url => {
1113 if r#url_property.is_some() {
1114 return Err(<A::Error as de::Error>::duplicate_field("url"));
1115 }
1116 r#url_property = Some({
1117 struct DeserializeWith(Vec<UrlProperty>);
1118 impl<'de> Deserialize<'de> for DeserializeWith {
1119 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1120 where
1121 D: Deserializer<'de>,
1122 {
1123 Ok(DeserializeWith(serde_with::As::<
1124 serde_with::OneOrMany<serde_with::Same>,
1125 >::deserialize(deserializer)?))
1126 }
1127 }
1128 match map.next_value::<DeserializeWith>() {
1129 Ok(deserialize_with) => deserialize_with.0,
1130 Err(err) => {
1131 return Err(err);
1132 }
1133 }
1134 });
1135 }
1136 Field::Ignore => {
1137 let _ = map.next_value::<de::IgnoredAny>()?;
1138 }
1139 }
1140 }
1141 Ok(GeoCoordinates {
1142 r#address: r#address_property.unwrap_or_default(),
1143 r#address_country: r#address_country_property.unwrap_or_default(),
1144 r#elevation: r#elevation_property.unwrap_or_default(),
1145 r#latitude: r#latitude_property.unwrap_or_default(),
1146 r#longitude: r#longitude_property.unwrap_or_default(),
1147 r#postal_code: r#postal_code_property.unwrap_or_default(),
1148 r#additional_type: r#additional_type_property.unwrap_or_default(),
1149 r#alternate_name: r#alternate_name_property.unwrap_or_default(),
1150 r#description: r#description_property.unwrap_or_default(),
1151 r#disambiguating_description: r#disambiguating_description_property
1152 .unwrap_or_default(),
1153 r#identifier: r#identifier_property.unwrap_or_default(),
1154 r#image: r#image_property.unwrap_or_default(),
1155 r#main_entity_of_page: r#main_entity_of_page_property.unwrap_or_default(),
1156 r#name: r#name_property.unwrap_or_default(),
1157 r#potential_action: r#potential_action_property.unwrap_or_default(),
1158 r#same_as: r#same_as_property.unwrap_or_default(),
1159 r#subject_of: r#subject_of_property.unwrap_or_default(),
1160 r#url: r#url_property.unwrap_or_default(),
1161 })
1162 }
1163 }
1164 const FIELDS: &[&str] = &[
1165 "address",
1166 "addressCountry",
1167 "elevation",
1168 "latitude",
1169 "longitude",
1170 "postalCode",
1171 "additionalType",
1172 "alternateName",
1173 "description",
1174 "disambiguatingDescription",
1175 "identifier",
1176 "image",
1177 "mainEntityOfPage",
1178 "name",
1179 "potentialAction",
1180 "sameAs",
1181 "subjectOf",
1182 "url",
1183 ];
1184 deserializer.deserialize_struct("GeoCoordinates", FIELDS, ClassVisitor)
1185 }
1186 }
1187}