1use super::*;
2#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub struct ContactPoint {
6 pub r#area_served: Vec<AreaServedProperty>,
8 pub r#available_language: Vec<AvailableLanguageProperty>,
10 pub r#contact_option: Vec<ContactOptionProperty>,
12 pub r#contact_type: Vec<ContactTypeProperty>,
14 pub r#email: Vec<EmailProperty>,
16 pub r#fax_number: Vec<FaxNumberProperty>,
18 pub r#hours_available: Vec<HoursAvailableProperty>,
20 pub r#product_supported: Vec<ProductSupportedProperty>,
22 #[deprecated = "This schema is superseded by <https://schema.org/areaServed>."]
24 pub r#service_area: Vec<ServiceAreaProperty>,
25 pub r#telephone: Vec<TelephoneProperty>,
27 pub r#additional_type: Vec<AdditionalTypeProperty>,
29 pub r#alternate_name: Vec<AlternateNameProperty>,
31 pub r#description: Vec<DescriptionProperty>,
33 pub r#disambiguating_description: Vec<DisambiguatingDescriptionProperty>,
35 pub r#identifier: Vec<IdentifierProperty>,
37 pub r#image: Vec<ImageProperty>,
39 pub r#main_entity_of_page: Vec<MainEntityOfPageProperty>,
41 pub r#name: Vec<NameProperty>,
43 pub r#potential_action: Vec<PotentialActionProperty>,
45 pub r#same_as: Vec<SameAsProperty>,
47 pub r#subject_of: Vec<SubjectOfProperty>,
49 pub r#url: Vec<UrlProperty>,
51}
52pub trait ContactPointTrait {
54 fn get_area_served(&self) -> &[AreaServedProperty];
56 fn take_area_served(&mut self) -> Vec<AreaServedProperty>;
58 fn get_available_language(&self) -> &[AvailableLanguageProperty];
60 fn take_available_language(&mut self) -> Vec<AvailableLanguageProperty>;
62 fn get_contact_option(&self) -> &[ContactOptionProperty];
64 fn take_contact_option(&mut self) -> Vec<ContactOptionProperty>;
66 fn get_contact_type(&self) -> &[ContactTypeProperty];
68 fn take_contact_type(&mut self) -> Vec<ContactTypeProperty>;
70 fn get_email(&self) -> &[EmailProperty];
72 fn take_email(&mut self) -> Vec<EmailProperty>;
74 fn get_fax_number(&self) -> &[FaxNumberProperty];
76 fn take_fax_number(&mut self) -> Vec<FaxNumberProperty>;
78 fn get_hours_available(&self) -> &[HoursAvailableProperty];
80 fn take_hours_available(&mut self) -> Vec<HoursAvailableProperty>;
82 fn get_product_supported(&self) -> &[ProductSupportedProperty];
84 fn take_product_supported(&mut self) -> Vec<ProductSupportedProperty>;
86 #[deprecated = "This schema is superseded by <https://schema.org/areaServed>."]
88 fn get_service_area(&self) -> &[ServiceAreaProperty];
89 #[deprecated = "This schema is superseded by <https://schema.org/areaServed>."]
91 fn take_service_area(&mut self) -> Vec<ServiceAreaProperty>;
92 fn get_telephone(&self) -> &[TelephoneProperty];
94 fn take_telephone(&mut self) -> Vec<TelephoneProperty>;
96}
97impl ContactPointTrait for ContactPoint {
98 fn get_area_served(&self) -> &[AreaServedProperty] {
99 self.r#area_served.as_slice()
100 }
101 fn take_area_served(&mut self) -> Vec<AreaServedProperty> {
102 std::mem::take(&mut self.r#area_served)
103 }
104 fn get_available_language(&self) -> &[AvailableLanguageProperty] {
105 self.r#available_language.as_slice()
106 }
107 fn take_available_language(&mut self) -> Vec<AvailableLanguageProperty> {
108 std::mem::take(&mut self.r#available_language)
109 }
110 fn get_contact_option(&self) -> &[ContactOptionProperty] {
111 self.r#contact_option.as_slice()
112 }
113 fn take_contact_option(&mut self) -> Vec<ContactOptionProperty> {
114 std::mem::take(&mut self.r#contact_option)
115 }
116 fn get_contact_type(&self) -> &[ContactTypeProperty] {
117 self.r#contact_type.as_slice()
118 }
119 fn take_contact_type(&mut self) -> Vec<ContactTypeProperty> {
120 std::mem::take(&mut self.r#contact_type)
121 }
122 fn get_email(&self) -> &[EmailProperty] {
123 self.r#email.as_slice()
124 }
125 fn take_email(&mut self) -> Vec<EmailProperty> {
126 std::mem::take(&mut self.r#email)
127 }
128 fn get_fax_number(&self) -> &[FaxNumberProperty] {
129 self.r#fax_number.as_slice()
130 }
131 fn take_fax_number(&mut self) -> Vec<FaxNumberProperty> {
132 std::mem::take(&mut self.r#fax_number)
133 }
134 fn get_hours_available(&self) -> &[HoursAvailableProperty] {
135 self.r#hours_available.as_slice()
136 }
137 fn take_hours_available(&mut self) -> Vec<HoursAvailableProperty> {
138 std::mem::take(&mut self.r#hours_available)
139 }
140 fn get_product_supported(&self) -> &[ProductSupportedProperty] {
141 self.r#product_supported.as_slice()
142 }
143 fn take_product_supported(&mut self) -> Vec<ProductSupportedProperty> {
144 std::mem::take(&mut self.r#product_supported)
145 }
146 fn get_service_area(&self) -> &[ServiceAreaProperty] {
147 self.r#service_area.as_slice()
148 }
149 fn take_service_area(&mut self) -> Vec<ServiceAreaProperty> {
150 std::mem::take(&mut self.r#service_area)
151 }
152 fn get_telephone(&self) -> &[TelephoneProperty] {
153 self.r#telephone.as_slice()
154 }
155 fn take_telephone(&mut self) -> Vec<TelephoneProperty> {
156 std::mem::take(&mut self.r#telephone)
157 }
158}
159impl StructuredValueTrait for ContactPoint {}
160impl ThingTrait for ContactPoint {
161 fn get_additional_type(&self) -> &[AdditionalTypeProperty] {
162 self.r#additional_type.as_slice()
163 }
164 fn take_additional_type(&mut self) -> Vec<AdditionalTypeProperty> {
165 std::mem::take(&mut self.r#additional_type)
166 }
167 fn get_alternate_name(&self) -> &[AlternateNameProperty] {
168 self.r#alternate_name.as_slice()
169 }
170 fn take_alternate_name(&mut self) -> Vec<AlternateNameProperty> {
171 std::mem::take(&mut self.r#alternate_name)
172 }
173 fn get_description(&self) -> &[DescriptionProperty] {
174 self.r#description.as_slice()
175 }
176 fn take_description(&mut self) -> Vec<DescriptionProperty> {
177 std::mem::take(&mut self.r#description)
178 }
179 fn get_disambiguating_description(&self) -> &[DisambiguatingDescriptionProperty] {
180 self.r#disambiguating_description.as_slice()
181 }
182 fn take_disambiguating_description(&mut self) -> Vec<DisambiguatingDescriptionProperty> {
183 std::mem::take(&mut self.r#disambiguating_description)
184 }
185 fn get_identifier(&self) -> &[IdentifierProperty] {
186 self.r#identifier.as_slice()
187 }
188 fn take_identifier(&mut self) -> Vec<IdentifierProperty> {
189 std::mem::take(&mut self.r#identifier)
190 }
191 fn get_image(&self) -> &[ImageProperty] {
192 self.r#image.as_slice()
193 }
194 fn take_image(&mut self) -> Vec<ImageProperty> {
195 std::mem::take(&mut self.r#image)
196 }
197 fn get_main_entity_of_page(&self) -> &[MainEntityOfPageProperty] {
198 self.r#main_entity_of_page.as_slice()
199 }
200 fn take_main_entity_of_page(&mut self) -> Vec<MainEntityOfPageProperty> {
201 std::mem::take(&mut self.r#main_entity_of_page)
202 }
203 fn get_name(&self) -> &[NameProperty] {
204 self.r#name.as_slice()
205 }
206 fn take_name(&mut self) -> Vec<NameProperty> {
207 std::mem::take(&mut self.r#name)
208 }
209 fn get_potential_action(&self) -> &[PotentialActionProperty] {
210 self.r#potential_action.as_slice()
211 }
212 fn take_potential_action(&mut self) -> Vec<PotentialActionProperty> {
213 std::mem::take(&mut self.r#potential_action)
214 }
215 fn get_same_as(&self) -> &[SameAsProperty] {
216 self.r#same_as.as_slice()
217 }
218 fn take_same_as(&mut self) -> Vec<SameAsProperty> {
219 std::mem::take(&mut self.r#same_as)
220 }
221 fn get_subject_of(&self) -> &[SubjectOfProperty] {
222 self.r#subject_of.as_slice()
223 }
224 fn take_subject_of(&mut self) -> Vec<SubjectOfProperty> {
225 std::mem::take(&mut self.r#subject_of)
226 }
227 fn get_url(&self) -> &[UrlProperty] {
228 self.r#url.as_slice()
229 }
230 fn take_url(&mut self) -> Vec<UrlProperty> {
231 std::mem::take(&mut self.r#url)
232 }
233}
234#[cfg(feature = "serde")]
235mod serde {
236 use std::{fmt, fmt::Formatter};
237
238 use ::serde::{
239 de, de::Visitor, ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer,
240 };
241
242 use super::*;
243 impl Serialize for ContactPoint {
244 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
245 where
246 S: Serializer,
247 {
248 let len: usize = [
249 !Vec::is_empty(&self.r#area_served) as usize,
250 !Vec::is_empty(&self.r#available_language) as usize,
251 !Vec::is_empty(&self.r#contact_option) as usize,
252 !Vec::is_empty(&self.r#contact_type) as usize,
253 !Vec::is_empty(&self.r#email) as usize,
254 !Vec::is_empty(&self.r#fax_number) as usize,
255 !Vec::is_empty(&self.r#hours_available) as usize,
256 !Vec::is_empty(&self.r#product_supported) as usize,
257 !Vec::is_empty(&self.r#service_area) as usize,
258 !Vec::is_empty(&self.r#telephone) as usize,
259 !Vec::is_empty(&self.r#additional_type) as usize,
260 !Vec::is_empty(&self.r#alternate_name) as usize,
261 !Vec::is_empty(&self.r#description) as usize,
262 !Vec::is_empty(&self.r#disambiguating_description) as usize,
263 !Vec::is_empty(&self.r#identifier) as usize,
264 !Vec::is_empty(&self.r#image) as usize,
265 !Vec::is_empty(&self.r#main_entity_of_page) as usize,
266 !Vec::is_empty(&self.r#name) as usize,
267 !Vec::is_empty(&self.r#potential_action) as usize,
268 !Vec::is_empty(&self.r#same_as) as usize,
269 !Vec::is_empty(&self.r#subject_of) as usize,
270 !Vec::is_empty(&self.r#url) as usize,
271 ]
272 .iter()
273 .sum();
274 let mut serialize_struct =
275 Serializer::serialize_struct(serializer, "ContactPoint", len)?;
276 if !Vec::is_empty(&self.r#area_served) {
277 serialize_struct.serialize_field("areaServed", {
278 struct SerializeWith<'a>(&'a Vec<AreaServedProperty>);
279 impl<'a> Serialize for SerializeWith<'a> {
280 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
281 where
282 S: Serializer,
283 {
284 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
285 self.0, serializer,
286 )
287 }
288 }
289 &SerializeWith(&self.r#area_served)
290 })?;
291 } else {
292 serialize_struct.skip_field("areaServed")?;
293 }
294 if !Vec::is_empty(&self.r#available_language) {
295 serialize_struct.serialize_field("availableLanguage", {
296 struct SerializeWith<'a>(&'a Vec<AvailableLanguageProperty>);
297 impl<'a> Serialize for SerializeWith<'a> {
298 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
299 where
300 S: Serializer,
301 {
302 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
303 self.0, serializer,
304 )
305 }
306 }
307 &SerializeWith(&self.r#available_language)
308 })?;
309 } else {
310 serialize_struct.skip_field("availableLanguage")?;
311 }
312 if !Vec::is_empty(&self.r#contact_option) {
313 serialize_struct.serialize_field("contactOption", {
314 struct SerializeWith<'a>(&'a Vec<ContactOptionProperty>);
315 impl<'a> Serialize for SerializeWith<'a> {
316 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
317 where
318 S: Serializer,
319 {
320 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
321 self.0, serializer,
322 )
323 }
324 }
325 &SerializeWith(&self.r#contact_option)
326 })?;
327 } else {
328 serialize_struct.skip_field("contactOption")?;
329 }
330 if !Vec::is_empty(&self.r#contact_type) {
331 serialize_struct.serialize_field("contactType", {
332 struct SerializeWith<'a>(&'a Vec<ContactTypeProperty>);
333 impl<'a> Serialize for SerializeWith<'a> {
334 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
335 where
336 S: Serializer,
337 {
338 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
339 self.0, serializer,
340 )
341 }
342 }
343 &SerializeWith(&self.r#contact_type)
344 })?;
345 } else {
346 serialize_struct.skip_field("contactType")?;
347 }
348 if !Vec::is_empty(&self.r#email) {
349 serialize_struct.serialize_field("email", {
350 struct SerializeWith<'a>(&'a Vec<EmailProperty>);
351 impl<'a> Serialize for SerializeWith<'a> {
352 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
353 where
354 S: Serializer,
355 {
356 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
357 self.0, serializer,
358 )
359 }
360 }
361 &SerializeWith(&self.r#email)
362 })?;
363 } else {
364 serialize_struct.skip_field("email")?;
365 }
366 if !Vec::is_empty(&self.r#fax_number) {
367 serialize_struct.serialize_field("faxNumber", {
368 struct SerializeWith<'a>(&'a Vec<FaxNumberProperty>);
369 impl<'a> Serialize for SerializeWith<'a> {
370 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
371 where
372 S: Serializer,
373 {
374 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
375 self.0, serializer,
376 )
377 }
378 }
379 &SerializeWith(&self.r#fax_number)
380 })?;
381 } else {
382 serialize_struct.skip_field("faxNumber")?;
383 }
384 if !Vec::is_empty(&self.r#hours_available) {
385 serialize_struct.serialize_field("hoursAvailable", {
386 struct SerializeWith<'a>(&'a Vec<HoursAvailableProperty>);
387 impl<'a> Serialize for SerializeWith<'a> {
388 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
389 where
390 S: Serializer,
391 {
392 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
393 self.0, serializer,
394 )
395 }
396 }
397 &SerializeWith(&self.r#hours_available)
398 })?;
399 } else {
400 serialize_struct.skip_field("hoursAvailable")?;
401 }
402 if !Vec::is_empty(&self.r#product_supported) {
403 serialize_struct.serialize_field("productSupported", {
404 struct SerializeWith<'a>(&'a Vec<ProductSupportedProperty>);
405 impl<'a> Serialize for SerializeWith<'a> {
406 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
407 where
408 S: Serializer,
409 {
410 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
411 self.0, serializer,
412 )
413 }
414 }
415 &SerializeWith(&self.r#product_supported)
416 })?;
417 } else {
418 serialize_struct.skip_field("productSupported")?;
419 }
420 if !Vec::is_empty(&self.r#service_area) {
421 serialize_struct.serialize_field("serviceArea", {
422 struct SerializeWith<'a>(&'a Vec<ServiceAreaProperty>);
423 impl<'a> Serialize for SerializeWith<'a> {
424 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
425 where
426 S: Serializer,
427 {
428 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
429 self.0, serializer,
430 )
431 }
432 }
433 &SerializeWith(&self.r#service_area)
434 })?;
435 } else {
436 serialize_struct.skip_field("serviceArea")?;
437 }
438 if !Vec::is_empty(&self.r#telephone) {
439 serialize_struct.serialize_field("telephone", {
440 struct SerializeWith<'a>(&'a Vec<TelephoneProperty>);
441 impl<'a> Serialize for SerializeWith<'a> {
442 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
443 where
444 S: Serializer,
445 {
446 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
447 self.0, serializer,
448 )
449 }
450 }
451 &SerializeWith(&self.r#telephone)
452 })?;
453 } else {
454 serialize_struct.skip_field("telephone")?;
455 }
456 if !Vec::is_empty(&self.r#additional_type) {
457 serialize_struct.serialize_field("additionalType", {
458 struct SerializeWith<'a>(&'a Vec<AdditionalTypeProperty>);
459 impl<'a> Serialize for SerializeWith<'a> {
460 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
461 where
462 S: Serializer,
463 {
464 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
465 self.0, serializer,
466 )
467 }
468 }
469 &SerializeWith(&self.r#additional_type)
470 })?;
471 } else {
472 serialize_struct.skip_field("additionalType")?;
473 }
474 if !Vec::is_empty(&self.r#alternate_name) {
475 serialize_struct.serialize_field("alternateName", {
476 struct SerializeWith<'a>(&'a Vec<AlternateNameProperty>);
477 impl<'a> Serialize for SerializeWith<'a> {
478 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
479 where
480 S: Serializer,
481 {
482 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
483 self.0, serializer,
484 )
485 }
486 }
487 &SerializeWith(&self.r#alternate_name)
488 })?;
489 } else {
490 serialize_struct.skip_field("alternateName")?;
491 }
492 if !Vec::is_empty(&self.r#description) {
493 serialize_struct.serialize_field("description", {
494 struct SerializeWith<'a>(&'a Vec<DescriptionProperty>);
495 impl<'a> Serialize for SerializeWith<'a> {
496 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
497 where
498 S: Serializer,
499 {
500 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
501 self.0, serializer,
502 )
503 }
504 }
505 &SerializeWith(&self.r#description)
506 })?;
507 } else {
508 serialize_struct.skip_field("description")?;
509 }
510 if !Vec::is_empty(&self.r#disambiguating_description) {
511 serialize_struct.serialize_field("disambiguatingDescription", {
512 struct SerializeWith<'a>(&'a Vec<DisambiguatingDescriptionProperty>);
513 impl<'a> Serialize for SerializeWith<'a> {
514 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
515 where
516 S: Serializer,
517 {
518 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
519 self.0, serializer,
520 )
521 }
522 }
523 &SerializeWith(&self.r#disambiguating_description)
524 })?;
525 } else {
526 serialize_struct.skip_field("disambiguatingDescription")?;
527 }
528 if !Vec::is_empty(&self.r#identifier) {
529 serialize_struct.serialize_field("identifier", {
530 struct SerializeWith<'a>(&'a Vec<IdentifierProperty>);
531 impl<'a> Serialize for SerializeWith<'a> {
532 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
533 where
534 S: Serializer,
535 {
536 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
537 self.0, serializer,
538 )
539 }
540 }
541 &SerializeWith(&self.r#identifier)
542 })?;
543 } else {
544 serialize_struct.skip_field("identifier")?;
545 }
546 if !Vec::is_empty(&self.r#image) {
547 serialize_struct.serialize_field("image", {
548 struct SerializeWith<'a>(&'a Vec<ImageProperty>);
549 impl<'a> Serialize for SerializeWith<'a> {
550 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
551 where
552 S: Serializer,
553 {
554 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
555 self.0, serializer,
556 )
557 }
558 }
559 &SerializeWith(&self.r#image)
560 })?;
561 } else {
562 serialize_struct.skip_field("image")?;
563 }
564 if !Vec::is_empty(&self.r#main_entity_of_page) {
565 serialize_struct.serialize_field("mainEntityOfPage", {
566 struct SerializeWith<'a>(&'a Vec<MainEntityOfPageProperty>);
567 impl<'a> Serialize for SerializeWith<'a> {
568 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
569 where
570 S: Serializer,
571 {
572 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
573 self.0, serializer,
574 )
575 }
576 }
577 &SerializeWith(&self.r#main_entity_of_page)
578 })?;
579 } else {
580 serialize_struct.skip_field("mainEntityOfPage")?;
581 }
582 if !Vec::is_empty(&self.r#name) {
583 serialize_struct.serialize_field("name", {
584 struct SerializeWith<'a>(&'a Vec<NameProperty>);
585 impl<'a> Serialize for SerializeWith<'a> {
586 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
587 where
588 S: Serializer,
589 {
590 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
591 self.0, serializer,
592 )
593 }
594 }
595 &SerializeWith(&self.r#name)
596 })?;
597 } else {
598 serialize_struct.skip_field("name")?;
599 }
600 if !Vec::is_empty(&self.r#potential_action) {
601 serialize_struct.serialize_field("potentialAction", {
602 struct SerializeWith<'a>(&'a Vec<PotentialActionProperty>);
603 impl<'a> Serialize for SerializeWith<'a> {
604 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
605 where
606 S: Serializer,
607 {
608 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
609 self.0, serializer,
610 )
611 }
612 }
613 &SerializeWith(&self.r#potential_action)
614 })?;
615 } else {
616 serialize_struct.skip_field("potentialAction")?;
617 }
618 if !Vec::is_empty(&self.r#same_as) {
619 serialize_struct.serialize_field("sameAs", {
620 struct SerializeWith<'a>(&'a Vec<SameAsProperty>);
621 impl<'a> Serialize for SerializeWith<'a> {
622 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
623 where
624 S: Serializer,
625 {
626 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
627 self.0, serializer,
628 )
629 }
630 }
631 &SerializeWith(&self.r#same_as)
632 })?;
633 } else {
634 serialize_struct.skip_field("sameAs")?;
635 }
636 if !Vec::is_empty(&self.r#subject_of) {
637 serialize_struct.serialize_field("subjectOf", {
638 struct SerializeWith<'a>(&'a Vec<SubjectOfProperty>);
639 impl<'a> Serialize for SerializeWith<'a> {
640 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
641 where
642 S: Serializer,
643 {
644 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
645 self.0, serializer,
646 )
647 }
648 }
649 &SerializeWith(&self.r#subject_of)
650 })?;
651 } else {
652 serialize_struct.skip_field("subjectOf")?;
653 }
654 if !Vec::is_empty(&self.r#url) {
655 serialize_struct.serialize_field("url", {
656 struct SerializeWith<'a>(&'a Vec<UrlProperty>);
657 impl<'a> Serialize for SerializeWith<'a> {
658 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
659 where
660 S: Serializer,
661 {
662 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
663 self.0, serializer,
664 )
665 }
666 }
667 &SerializeWith(&self.r#url)
668 })?;
669 } else {
670 serialize_struct.skip_field("url")?;
671 }
672 serialize_struct.end()
673 }
674 }
675 impl<'de> Deserialize<'de> for ContactPoint {
676 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
677 where
678 D: Deserializer<'de>,
679 {
680 enum Field {
681 AreaServed,
682 AvailableLanguage,
683 ContactOption,
684 ContactType,
685 Email,
686 FaxNumber,
687 HoursAvailable,
688 ProductSupported,
689 ServiceArea,
690 Telephone,
691 AdditionalType,
692 AlternateName,
693 Description,
694 DisambiguatingDescription,
695 Identifier,
696 Image,
697 MainEntityOfPage,
698 Name,
699 PotentialAction,
700 SameAs,
701 SubjectOf,
702 Url,
703 Ignore,
704 }
705 struct FieldVisitor;
706 impl<'de> Visitor<'de> for FieldVisitor {
707 type Value = Field;
708 fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
709 formatter.write_str("field identifier")
710 }
711 fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
712 where
713 E: de::Error,
714 {
715 match value {
716 "areaServed" => Ok(Field::AreaServed),
717 "availableLanguage" => Ok(Field::AvailableLanguage),
718 "contactOption" => Ok(Field::ContactOption),
719 "contactType" => Ok(Field::ContactType),
720 "email" => Ok(Field::Email),
721 "faxNumber" => Ok(Field::FaxNumber),
722 "hoursAvailable" => Ok(Field::HoursAvailable),
723 "productSupported" => Ok(Field::ProductSupported),
724 "serviceArea" => Ok(Field::ServiceArea),
725 "telephone" => Ok(Field::Telephone),
726 "additionalType" => Ok(Field::AdditionalType),
727 "alternateName" => Ok(Field::AlternateName),
728 "description" => Ok(Field::Description),
729 "disambiguatingDescription" => Ok(Field::DisambiguatingDescription),
730 "identifier" => Ok(Field::Identifier),
731 "image" => Ok(Field::Image),
732 "mainEntityOfPage" => Ok(Field::MainEntityOfPage),
733 "name" => Ok(Field::Name),
734 "potentialAction" => Ok(Field::PotentialAction),
735 "sameAs" => Ok(Field::SameAs),
736 "subjectOf" => Ok(Field::SubjectOf),
737 "url" => Ok(Field::Url),
738 "id" | "type" => Ok(Field::Ignore),
739 _ => Err(de::Error::unknown_field(value, FIELDS)),
740 }
741 }
742 fn visit_bytes<E>(self, value: &[u8]) -> Result<Self::Value, E>
743 where
744 E: de::Error,
745 {
746 match value {
747 b"areaServed" => Ok(Field::AreaServed),
748 b"availableLanguage" => Ok(Field::AvailableLanguage),
749 b"contactOption" => Ok(Field::ContactOption),
750 b"contactType" => Ok(Field::ContactType),
751 b"email" => Ok(Field::Email),
752 b"faxNumber" => Ok(Field::FaxNumber),
753 b"hoursAvailable" => Ok(Field::HoursAvailable),
754 b"productSupported" => Ok(Field::ProductSupported),
755 b"serviceArea" => Ok(Field::ServiceArea),
756 b"telephone" => Ok(Field::Telephone),
757 b"additionalType" => Ok(Field::AdditionalType),
758 b"alternateName" => Ok(Field::AlternateName),
759 b"description" => Ok(Field::Description),
760 b"disambiguatingDescription" => Ok(Field::DisambiguatingDescription),
761 b"identifier" => Ok(Field::Identifier),
762 b"image" => Ok(Field::Image),
763 b"mainEntityOfPage" => Ok(Field::MainEntityOfPage),
764 b"name" => Ok(Field::Name),
765 b"potentialAction" => Ok(Field::PotentialAction),
766 b"sameAs" => Ok(Field::SameAs),
767 b"subjectOf" => Ok(Field::SubjectOf),
768 b"url" => Ok(Field::Url),
769 b"id" | b"type" => Ok(Field::Ignore),
770 _ => {
771 let value = &String::from_utf8_lossy(value);
772 Err(de::Error::unknown_field(value, FIELDS))
773 }
774 }
775 }
776 }
777 impl<'de> Deserialize<'de> for Field {
778 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
779 where
780 D: Deserializer<'de>,
781 {
782 deserializer.deserialize_identifier(FieldVisitor)
783 }
784 }
785 struct ClassVisitor;
786 impl<'de> Visitor<'de> for ClassVisitor {
787 type Value = ContactPoint;
788 fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
789 formatter.write_str("schema.org schema ContactPoint")
790 }
791 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
792 where
793 A: de::MapAccess<'de>,
794 {
795 let mut r#area_served_property = None;
796 let mut r#available_language_property = None;
797 let mut r#contact_option_property = None;
798 let mut r#contact_type_property = None;
799 let mut r#email_property = None;
800 let mut r#fax_number_property = None;
801 let mut r#hours_available_property = None;
802 let mut r#product_supported_property = None;
803 let mut r#service_area_property = None;
804 let mut r#telephone_property = None;
805 let mut r#additional_type_property = None;
806 let mut r#alternate_name_property = None;
807 let mut r#description_property = None;
808 let mut r#disambiguating_description_property = None;
809 let mut r#identifier_property = None;
810 let mut r#image_property = None;
811 let mut r#main_entity_of_page_property = None;
812 let mut r#name_property = None;
813 let mut r#potential_action_property = None;
814 let mut r#same_as_property = None;
815 let mut r#subject_of_property = None;
816 let mut r#url_property = None;
817 while let Some(key) = map.next_key::<Field>()? {
818 match key {
819 Field::AreaServed => {
820 if r#area_served_property.is_some() {
821 return Err(<A::Error as de::Error>::duplicate_field(
822 "areaServed",
823 ));
824 }
825 r#area_served_property = Some({
826 struct DeserializeWith(Vec<AreaServedProperty>);
827 impl<'de> Deserialize<'de> for DeserializeWith {
828 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
829 where
830 D: Deserializer<'de>,
831 {
832 Ok(DeserializeWith(serde_with::As::<
833 serde_with::OneOrMany<serde_with::Same>,
834 >::deserialize(deserializer)?))
835 }
836 }
837 match map.next_value::<DeserializeWith>() {
838 Ok(deserialize_with) => deserialize_with.0,
839 Err(err) => {
840 return Err(err);
841 }
842 }
843 });
844 }
845 Field::AvailableLanguage => {
846 if r#available_language_property.is_some() {
847 return Err(<A::Error as de::Error>::duplicate_field(
848 "availableLanguage",
849 ));
850 }
851 r#available_language_property = Some({
852 struct DeserializeWith(Vec<AvailableLanguageProperty>);
853 impl<'de> Deserialize<'de> for DeserializeWith {
854 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
855 where
856 D: Deserializer<'de>,
857 {
858 Ok(DeserializeWith(serde_with::As::<
859 serde_with::OneOrMany<serde_with::Same>,
860 >::deserialize(deserializer)?))
861 }
862 }
863 match map.next_value::<DeserializeWith>() {
864 Ok(deserialize_with) => deserialize_with.0,
865 Err(err) => {
866 return Err(err);
867 }
868 }
869 });
870 }
871 Field::ContactOption => {
872 if r#contact_option_property.is_some() {
873 return Err(<A::Error as de::Error>::duplicate_field(
874 "contactOption",
875 ));
876 }
877 r#contact_option_property = Some({
878 struct DeserializeWith(Vec<ContactOptionProperty>);
879 impl<'de> Deserialize<'de> for DeserializeWith {
880 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
881 where
882 D: Deserializer<'de>,
883 {
884 Ok(DeserializeWith(serde_with::As::<
885 serde_with::OneOrMany<serde_with::Same>,
886 >::deserialize(deserializer)?))
887 }
888 }
889 match map.next_value::<DeserializeWith>() {
890 Ok(deserialize_with) => deserialize_with.0,
891 Err(err) => {
892 return Err(err);
893 }
894 }
895 });
896 }
897 Field::ContactType => {
898 if r#contact_type_property.is_some() {
899 return Err(<A::Error as de::Error>::duplicate_field(
900 "contactType",
901 ));
902 }
903 r#contact_type_property = Some({
904 struct DeserializeWith(Vec<ContactTypeProperty>);
905 impl<'de> Deserialize<'de> for DeserializeWith {
906 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
907 where
908 D: Deserializer<'de>,
909 {
910 Ok(DeserializeWith(serde_with::As::<
911 serde_with::OneOrMany<serde_with::Same>,
912 >::deserialize(deserializer)?))
913 }
914 }
915 match map.next_value::<DeserializeWith>() {
916 Ok(deserialize_with) => deserialize_with.0,
917 Err(err) => {
918 return Err(err);
919 }
920 }
921 });
922 }
923 Field::Email => {
924 if r#email_property.is_some() {
925 return Err(<A::Error as de::Error>::duplicate_field("email"));
926 }
927 r#email_property = Some({
928 struct DeserializeWith(Vec<EmailProperty>);
929 impl<'de> Deserialize<'de> for DeserializeWith {
930 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
931 where
932 D: Deserializer<'de>,
933 {
934 Ok(DeserializeWith(serde_with::As::<
935 serde_with::OneOrMany<serde_with::Same>,
936 >::deserialize(deserializer)?))
937 }
938 }
939 match map.next_value::<DeserializeWith>() {
940 Ok(deserialize_with) => deserialize_with.0,
941 Err(err) => {
942 return Err(err);
943 }
944 }
945 });
946 }
947 Field::FaxNumber => {
948 if r#fax_number_property.is_some() {
949 return Err(<A::Error as de::Error>::duplicate_field(
950 "faxNumber",
951 ));
952 }
953 r#fax_number_property = Some({
954 struct DeserializeWith(Vec<FaxNumberProperty>);
955 impl<'de> Deserialize<'de> for DeserializeWith {
956 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
957 where
958 D: Deserializer<'de>,
959 {
960 Ok(DeserializeWith(serde_with::As::<
961 serde_with::OneOrMany<serde_with::Same>,
962 >::deserialize(deserializer)?))
963 }
964 }
965 match map.next_value::<DeserializeWith>() {
966 Ok(deserialize_with) => deserialize_with.0,
967 Err(err) => {
968 return Err(err);
969 }
970 }
971 });
972 }
973 Field::HoursAvailable => {
974 if r#hours_available_property.is_some() {
975 return Err(<A::Error as de::Error>::duplicate_field(
976 "hoursAvailable",
977 ));
978 }
979 r#hours_available_property = Some({
980 struct DeserializeWith(Vec<HoursAvailableProperty>);
981 impl<'de> Deserialize<'de> for DeserializeWith {
982 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
983 where
984 D: Deserializer<'de>,
985 {
986 Ok(DeserializeWith(serde_with::As::<
987 serde_with::OneOrMany<serde_with::Same>,
988 >::deserialize(deserializer)?))
989 }
990 }
991 match map.next_value::<DeserializeWith>() {
992 Ok(deserialize_with) => deserialize_with.0,
993 Err(err) => {
994 return Err(err);
995 }
996 }
997 });
998 }
999 Field::ProductSupported => {
1000 if r#product_supported_property.is_some() {
1001 return Err(<A::Error as de::Error>::duplicate_field(
1002 "productSupported",
1003 ));
1004 }
1005 r#product_supported_property = Some({
1006 struct DeserializeWith(Vec<ProductSupportedProperty>);
1007 impl<'de> Deserialize<'de> for DeserializeWith {
1008 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1009 where
1010 D: Deserializer<'de>,
1011 {
1012 Ok(DeserializeWith(serde_with::As::<
1013 serde_with::OneOrMany<serde_with::Same>,
1014 >::deserialize(deserializer)?))
1015 }
1016 }
1017 match map.next_value::<DeserializeWith>() {
1018 Ok(deserialize_with) => deserialize_with.0,
1019 Err(err) => {
1020 return Err(err);
1021 }
1022 }
1023 });
1024 }
1025 Field::ServiceArea => {
1026 if r#service_area_property.is_some() {
1027 return Err(<A::Error as de::Error>::duplicate_field(
1028 "serviceArea",
1029 ));
1030 }
1031 r#service_area_property = Some({
1032 struct DeserializeWith(Vec<ServiceAreaProperty>);
1033 impl<'de> Deserialize<'de> for DeserializeWith {
1034 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1035 where
1036 D: Deserializer<'de>,
1037 {
1038 Ok(DeserializeWith(serde_with::As::<
1039 serde_with::OneOrMany<serde_with::Same>,
1040 >::deserialize(deserializer)?))
1041 }
1042 }
1043 match map.next_value::<DeserializeWith>() {
1044 Ok(deserialize_with) => deserialize_with.0,
1045 Err(err) => {
1046 return Err(err);
1047 }
1048 }
1049 });
1050 }
1051 Field::Telephone => {
1052 if r#telephone_property.is_some() {
1053 return Err(<A::Error as de::Error>::duplicate_field(
1054 "telephone",
1055 ));
1056 }
1057 r#telephone_property = Some({
1058 struct DeserializeWith(Vec<TelephoneProperty>);
1059 impl<'de> Deserialize<'de> for DeserializeWith {
1060 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1061 where
1062 D: Deserializer<'de>,
1063 {
1064 Ok(DeserializeWith(serde_with::As::<
1065 serde_with::OneOrMany<serde_with::Same>,
1066 >::deserialize(deserializer)?))
1067 }
1068 }
1069 match map.next_value::<DeserializeWith>() {
1070 Ok(deserialize_with) => deserialize_with.0,
1071 Err(err) => {
1072 return Err(err);
1073 }
1074 }
1075 });
1076 }
1077 Field::AdditionalType => {
1078 if r#additional_type_property.is_some() {
1079 return Err(<A::Error as de::Error>::duplicate_field(
1080 "additionalType",
1081 ));
1082 }
1083 r#additional_type_property = Some({
1084 struct DeserializeWith(Vec<AdditionalTypeProperty>);
1085 impl<'de> Deserialize<'de> for DeserializeWith {
1086 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1087 where
1088 D: Deserializer<'de>,
1089 {
1090 Ok(DeserializeWith(serde_with::As::<
1091 serde_with::OneOrMany<serde_with::Same>,
1092 >::deserialize(deserializer)?))
1093 }
1094 }
1095 match map.next_value::<DeserializeWith>() {
1096 Ok(deserialize_with) => deserialize_with.0,
1097 Err(err) => {
1098 return Err(err);
1099 }
1100 }
1101 });
1102 }
1103 Field::AlternateName => {
1104 if r#alternate_name_property.is_some() {
1105 return Err(<A::Error as de::Error>::duplicate_field(
1106 "alternateName",
1107 ));
1108 }
1109 r#alternate_name_property = Some({
1110 struct DeserializeWith(Vec<AlternateNameProperty>);
1111 impl<'de> Deserialize<'de> for DeserializeWith {
1112 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1113 where
1114 D: Deserializer<'de>,
1115 {
1116 Ok(DeserializeWith(serde_with::As::<
1117 serde_with::OneOrMany<serde_with::Same>,
1118 >::deserialize(deserializer)?))
1119 }
1120 }
1121 match map.next_value::<DeserializeWith>() {
1122 Ok(deserialize_with) => deserialize_with.0,
1123 Err(err) => {
1124 return Err(err);
1125 }
1126 }
1127 });
1128 }
1129 Field::Description => {
1130 if r#description_property.is_some() {
1131 return Err(<A::Error as de::Error>::duplicate_field(
1132 "description",
1133 ));
1134 }
1135 r#description_property = Some({
1136 struct DeserializeWith(Vec<DescriptionProperty>);
1137 impl<'de> Deserialize<'de> for DeserializeWith {
1138 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1139 where
1140 D: Deserializer<'de>,
1141 {
1142 Ok(DeserializeWith(serde_with::As::<
1143 serde_with::OneOrMany<serde_with::Same>,
1144 >::deserialize(deserializer)?))
1145 }
1146 }
1147 match map.next_value::<DeserializeWith>() {
1148 Ok(deserialize_with) => deserialize_with.0,
1149 Err(err) => {
1150 return Err(err);
1151 }
1152 }
1153 });
1154 }
1155 Field::DisambiguatingDescription => {
1156 if r#disambiguating_description_property.is_some() {
1157 return Err(<A::Error as de::Error>::duplicate_field(
1158 "disambiguatingDescription",
1159 ));
1160 }
1161 r#disambiguating_description_property = Some({
1162 struct DeserializeWith(Vec<DisambiguatingDescriptionProperty>);
1163 impl<'de> Deserialize<'de> for DeserializeWith {
1164 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1165 where
1166 D: Deserializer<'de>,
1167 {
1168 Ok(DeserializeWith(serde_with::As::<
1169 serde_with::OneOrMany<serde_with::Same>,
1170 >::deserialize(deserializer)?))
1171 }
1172 }
1173 match map.next_value::<DeserializeWith>() {
1174 Ok(deserialize_with) => deserialize_with.0,
1175 Err(err) => {
1176 return Err(err);
1177 }
1178 }
1179 });
1180 }
1181 Field::Identifier => {
1182 if r#identifier_property.is_some() {
1183 return Err(<A::Error as de::Error>::duplicate_field(
1184 "identifier",
1185 ));
1186 }
1187 r#identifier_property = Some({
1188 struct DeserializeWith(Vec<IdentifierProperty>);
1189 impl<'de> Deserialize<'de> for DeserializeWith {
1190 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1191 where
1192 D: Deserializer<'de>,
1193 {
1194 Ok(DeserializeWith(serde_with::As::<
1195 serde_with::OneOrMany<serde_with::Same>,
1196 >::deserialize(deserializer)?))
1197 }
1198 }
1199 match map.next_value::<DeserializeWith>() {
1200 Ok(deserialize_with) => deserialize_with.0,
1201 Err(err) => {
1202 return Err(err);
1203 }
1204 }
1205 });
1206 }
1207 Field::Image => {
1208 if r#image_property.is_some() {
1209 return Err(<A::Error as de::Error>::duplicate_field("image"));
1210 }
1211 r#image_property = Some({
1212 struct DeserializeWith(Vec<ImageProperty>);
1213 impl<'de> Deserialize<'de> for DeserializeWith {
1214 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1215 where
1216 D: Deserializer<'de>,
1217 {
1218 Ok(DeserializeWith(serde_with::As::<
1219 serde_with::OneOrMany<serde_with::Same>,
1220 >::deserialize(deserializer)?))
1221 }
1222 }
1223 match map.next_value::<DeserializeWith>() {
1224 Ok(deserialize_with) => deserialize_with.0,
1225 Err(err) => {
1226 return Err(err);
1227 }
1228 }
1229 });
1230 }
1231 Field::MainEntityOfPage => {
1232 if r#main_entity_of_page_property.is_some() {
1233 return Err(<A::Error as de::Error>::duplicate_field(
1234 "mainEntityOfPage",
1235 ));
1236 }
1237 r#main_entity_of_page_property = Some({
1238 struct DeserializeWith(Vec<MainEntityOfPageProperty>);
1239 impl<'de> Deserialize<'de> for DeserializeWith {
1240 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1241 where
1242 D: Deserializer<'de>,
1243 {
1244 Ok(DeserializeWith(serde_with::As::<
1245 serde_with::OneOrMany<serde_with::Same>,
1246 >::deserialize(deserializer)?))
1247 }
1248 }
1249 match map.next_value::<DeserializeWith>() {
1250 Ok(deserialize_with) => deserialize_with.0,
1251 Err(err) => {
1252 return Err(err);
1253 }
1254 }
1255 });
1256 }
1257 Field::Name => {
1258 if r#name_property.is_some() {
1259 return Err(<A::Error as de::Error>::duplicate_field("name"));
1260 }
1261 r#name_property = Some({
1262 struct DeserializeWith(Vec<NameProperty>);
1263 impl<'de> Deserialize<'de> for DeserializeWith {
1264 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1265 where
1266 D: Deserializer<'de>,
1267 {
1268 Ok(DeserializeWith(serde_with::As::<
1269 serde_with::OneOrMany<serde_with::Same>,
1270 >::deserialize(deserializer)?))
1271 }
1272 }
1273 match map.next_value::<DeserializeWith>() {
1274 Ok(deserialize_with) => deserialize_with.0,
1275 Err(err) => {
1276 return Err(err);
1277 }
1278 }
1279 });
1280 }
1281 Field::PotentialAction => {
1282 if r#potential_action_property.is_some() {
1283 return Err(<A::Error as de::Error>::duplicate_field(
1284 "potentialAction",
1285 ));
1286 }
1287 r#potential_action_property = Some({
1288 struct DeserializeWith(Vec<PotentialActionProperty>);
1289 impl<'de> Deserialize<'de> for DeserializeWith {
1290 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1291 where
1292 D: Deserializer<'de>,
1293 {
1294 Ok(DeserializeWith(serde_with::As::<
1295 serde_with::OneOrMany<serde_with::Same>,
1296 >::deserialize(deserializer)?))
1297 }
1298 }
1299 match map.next_value::<DeserializeWith>() {
1300 Ok(deserialize_with) => deserialize_with.0,
1301 Err(err) => {
1302 return Err(err);
1303 }
1304 }
1305 });
1306 }
1307 Field::SameAs => {
1308 if r#same_as_property.is_some() {
1309 return Err(<A::Error as de::Error>::duplicate_field("sameAs"));
1310 }
1311 r#same_as_property = Some({
1312 struct DeserializeWith(Vec<SameAsProperty>);
1313 impl<'de> Deserialize<'de> for DeserializeWith {
1314 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1315 where
1316 D: Deserializer<'de>,
1317 {
1318 Ok(DeserializeWith(serde_with::As::<
1319 serde_with::OneOrMany<serde_with::Same>,
1320 >::deserialize(deserializer)?))
1321 }
1322 }
1323 match map.next_value::<DeserializeWith>() {
1324 Ok(deserialize_with) => deserialize_with.0,
1325 Err(err) => {
1326 return Err(err);
1327 }
1328 }
1329 });
1330 }
1331 Field::SubjectOf => {
1332 if r#subject_of_property.is_some() {
1333 return Err(<A::Error as de::Error>::duplicate_field(
1334 "subjectOf",
1335 ));
1336 }
1337 r#subject_of_property = Some({
1338 struct DeserializeWith(Vec<SubjectOfProperty>);
1339 impl<'de> Deserialize<'de> for DeserializeWith {
1340 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1341 where
1342 D: Deserializer<'de>,
1343 {
1344 Ok(DeserializeWith(serde_with::As::<
1345 serde_with::OneOrMany<serde_with::Same>,
1346 >::deserialize(deserializer)?))
1347 }
1348 }
1349 match map.next_value::<DeserializeWith>() {
1350 Ok(deserialize_with) => deserialize_with.0,
1351 Err(err) => {
1352 return Err(err);
1353 }
1354 }
1355 });
1356 }
1357 Field::Url => {
1358 if r#url_property.is_some() {
1359 return Err(<A::Error as de::Error>::duplicate_field("url"));
1360 }
1361 r#url_property = Some({
1362 struct DeserializeWith(Vec<UrlProperty>);
1363 impl<'de> Deserialize<'de> for DeserializeWith {
1364 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1365 where
1366 D: Deserializer<'de>,
1367 {
1368 Ok(DeserializeWith(serde_with::As::<
1369 serde_with::OneOrMany<serde_with::Same>,
1370 >::deserialize(deserializer)?))
1371 }
1372 }
1373 match map.next_value::<DeserializeWith>() {
1374 Ok(deserialize_with) => deserialize_with.0,
1375 Err(err) => {
1376 return Err(err);
1377 }
1378 }
1379 });
1380 }
1381 Field::Ignore => {
1382 let _ = map.next_value::<de::IgnoredAny>()?;
1383 }
1384 }
1385 }
1386 Ok(ContactPoint {
1387 r#area_served: r#area_served_property.unwrap_or_default(),
1388 r#available_language: r#available_language_property.unwrap_or_default(),
1389 r#contact_option: r#contact_option_property.unwrap_or_default(),
1390 r#contact_type: r#contact_type_property.unwrap_or_default(),
1391 r#email: r#email_property.unwrap_or_default(),
1392 r#fax_number: r#fax_number_property.unwrap_or_default(),
1393 r#hours_available: r#hours_available_property.unwrap_or_default(),
1394 r#product_supported: r#product_supported_property.unwrap_or_default(),
1395 r#service_area: r#service_area_property.unwrap_or_default(),
1396 r#telephone: r#telephone_property.unwrap_or_default(),
1397 r#additional_type: r#additional_type_property.unwrap_or_default(),
1398 r#alternate_name: r#alternate_name_property.unwrap_or_default(),
1399 r#description: r#description_property.unwrap_or_default(),
1400 r#disambiguating_description: r#disambiguating_description_property
1401 .unwrap_or_default(),
1402 r#identifier: r#identifier_property.unwrap_or_default(),
1403 r#image: r#image_property.unwrap_or_default(),
1404 r#main_entity_of_page: r#main_entity_of_page_property.unwrap_or_default(),
1405 r#name: r#name_property.unwrap_or_default(),
1406 r#potential_action: r#potential_action_property.unwrap_or_default(),
1407 r#same_as: r#same_as_property.unwrap_or_default(),
1408 r#subject_of: r#subject_of_property.unwrap_or_default(),
1409 r#url: r#url_property.unwrap_or_default(),
1410 })
1411 }
1412 }
1413 const FIELDS: &[&str] = &[
1414 "areaServed",
1415 "availableLanguage",
1416 "contactOption",
1417 "contactType",
1418 "email",
1419 "faxNumber",
1420 "hoursAvailable",
1421 "productSupported",
1422 "serviceArea",
1423 "telephone",
1424 "additionalType",
1425 "alternateName",
1426 "description",
1427 "disambiguatingDescription",
1428 "identifier",
1429 "image",
1430 "mainEntityOfPage",
1431 "name",
1432 "potentialAction",
1433 "sameAs",
1434 "subjectOf",
1435 "url",
1436 ];
1437 deserializer.deserialize_struct("ContactPoint", FIELDS, ClassVisitor)
1438 }
1439 }
1440}