schema_org_types/schemas/classes/
contact_point.rs

1use super::*;
2/// <https://schema.org/ContactPoint>
3#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub struct ContactPoint {
6	/// <https://schema.org/areaServed>
7	pub r#area_served: Vec<AreaServedProperty>,
8	/// <https://schema.org/availableLanguage>
9	pub r#available_language: Vec<AvailableLanguageProperty>,
10	/// <https://schema.org/contactOption>
11	pub r#contact_option: Vec<ContactOptionProperty>,
12	/// <https://schema.org/contactType>
13	pub r#contact_type: Vec<ContactTypeProperty>,
14	/// <https://schema.org/email>
15	pub r#email: Vec<EmailProperty>,
16	/// <https://schema.org/faxNumber>
17	pub r#fax_number: Vec<FaxNumberProperty>,
18	/// <https://schema.org/hoursAvailable>
19	pub r#hours_available: Vec<HoursAvailableProperty>,
20	/// <https://schema.org/productSupported>
21	pub r#product_supported: Vec<ProductSupportedProperty>,
22	/// <https://schema.org/serviceArea>
23	#[deprecated = "This schema is superseded by <https://schema.org/areaServed>."]
24	pub r#service_area: Vec<ServiceAreaProperty>,
25	/// <https://schema.org/telephone>
26	pub r#telephone: Vec<TelephoneProperty>,
27	/// <https://schema.org/additionalType>
28	pub r#additional_type: Vec<AdditionalTypeProperty>,
29	/// <https://schema.org/alternateName>
30	pub r#alternate_name: Vec<AlternateNameProperty>,
31	/// <https://schema.org/description>
32	pub r#description: Vec<DescriptionProperty>,
33	/// <https://schema.org/disambiguatingDescription>
34	pub r#disambiguating_description: Vec<DisambiguatingDescriptionProperty>,
35	/// <https://schema.org/identifier>
36	pub r#identifier: Vec<IdentifierProperty>,
37	/// <https://schema.org/image>
38	pub r#image: Vec<ImageProperty>,
39	/// <https://schema.org/mainEntityOfPage>
40	pub r#main_entity_of_page: Vec<MainEntityOfPageProperty>,
41	/// <https://schema.org/name>
42	pub r#name: Vec<NameProperty>,
43	/// <https://schema.org/potentialAction>
44	pub r#potential_action: Vec<PotentialActionProperty>,
45	/// <https://schema.org/sameAs>
46	pub r#same_as: Vec<SameAsProperty>,
47	/// <https://schema.org/subjectOf>
48	pub r#subject_of: Vec<SubjectOfProperty>,
49	/// <https://schema.org/url>
50	pub r#url: Vec<UrlProperty>,
51}
52/// This trait is for properties from <https://schema.org/ContactPoint>.
53pub trait ContactPointTrait {
54	/// Get <https://schema.org/areaServed> from [`Self`] as borrowed slice.
55	fn get_area_served(&self) -> &[AreaServedProperty];
56	/// Take <https://schema.org/areaServed> from [`Self`] as owned vector.
57	fn take_area_served(&mut self) -> Vec<AreaServedProperty>;
58	/// Get <https://schema.org/availableLanguage> from [`Self`] as borrowed slice.
59	fn get_available_language(&self) -> &[AvailableLanguageProperty];
60	/// Take <https://schema.org/availableLanguage> from [`Self`] as owned vector.
61	fn take_available_language(&mut self) -> Vec<AvailableLanguageProperty>;
62	/// Get <https://schema.org/contactOption> from [`Self`] as borrowed slice.
63	fn get_contact_option(&self) -> &[ContactOptionProperty];
64	/// Take <https://schema.org/contactOption> from [`Self`] as owned vector.
65	fn take_contact_option(&mut self) -> Vec<ContactOptionProperty>;
66	/// Get <https://schema.org/contactType> from [`Self`] as borrowed slice.
67	fn get_contact_type(&self) -> &[ContactTypeProperty];
68	/// Take <https://schema.org/contactType> from [`Self`] as owned vector.
69	fn take_contact_type(&mut self) -> Vec<ContactTypeProperty>;
70	/// Get <https://schema.org/email> from [`Self`] as borrowed slice.
71	fn get_email(&self) -> &[EmailProperty];
72	/// Take <https://schema.org/email> from [`Self`] as owned vector.
73	fn take_email(&mut self) -> Vec<EmailProperty>;
74	/// Get <https://schema.org/faxNumber> from [`Self`] as borrowed slice.
75	fn get_fax_number(&self) -> &[FaxNumberProperty];
76	/// Take <https://schema.org/faxNumber> from [`Self`] as owned vector.
77	fn take_fax_number(&mut self) -> Vec<FaxNumberProperty>;
78	/// Get <https://schema.org/hoursAvailable> from [`Self`] as borrowed slice.
79	fn get_hours_available(&self) -> &[HoursAvailableProperty];
80	/// Take <https://schema.org/hoursAvailable> from [`Self`] as owned vector.
81	fn take_hours_available(&mut self) -> Vec<HoursAvailableProperty>;
82	/// Get <https://schema.org/productSupported> from [`Self`] as borrowed slice.
83	fn get_product_supported(&self) -> &[ProductSupportedProperty];
84	/// Take <https://schema.org/productSupported> from [`Self`] as owned vector.
85	fn take_product_supported(&mut self) -> Vec<ProductSupportedProperty>;
86	/// Get <https://schema.org/serviceArea> from [`Self`] as borrowed slice.
87	#[deprecated = "This schema is superseded by <https://schema.org/areaServed>."]
88	fn get_service_area(&self) -> &[ServiceAreaProperty];
89	/// Take <https://schema.org/serviceArea> from [`Self`] as owned vector.
90	#[deprecated = "This schema is superseded by <https://schema.org/areaServed>."]
91	fn take_service_area(&mut self) -> Vec<ServiceAreaProperty>;
92	/// Get <https://schema.org/telephone> from [`Self`] as borrowed slice.
93	fn get_telephone(&self) -> &[TelephoneProperty];
94	/// Take <https://schema.org/telephone> from [`Self`] as owned vector.
95	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}